CaseInventoryClientFunctions.cs 4.93 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using DirRX.CaseArchiving.CaseInventory;

namespace DirRX.CaseArchiving.Client
{
  partial class CaseInventoryFunctions
  {
    /// <summary>
    /// Отобразить диалог для включения выбранных дел в опись.
    /// </summary>
    /// <returns>Сообщение об ошибке, либо пустая строка.</returns>
    [Public]
    public virtual string AddCaseFilesDialog()
    {
      // Получить список завершенных дел, не включенных в описи.
      var query = PublicFunctions.Module.Remote.GetCaseFiles(DirRX.LongTermArchive.CaseFile.LTAStageDirRX.CompletedDirRX);
      
      // Наложить фильтры по значениями обязательных свойств.
      if (_obj.EndOfYear.HasValue)
      {
        var year = _obj.EndOfYear.Value.Year;
        query = query.Where(x => x.StartDate.Value.Year <= year && (x.EndDate.HasValue ? x.EndDate.Value.Year : 5000) >= year);
      }

      if (_obj.Responsible != null)
        query = query.Where(x => x.LTAResponsibleDirRX != null && x.LTAResponsibleDirRX.Equals(_obj.Responsible));

      if (_obj.Department != null && Functions.Module.Remote.IsCreateCaseInventoryByDepartments())
        query = query.Where(x => x.Department != null && x.Department.Equals(_obj.Department));
      
      if (_obj.DocumentKind.Name == DirRX.CaseArchiving.Resources.InitPaperCaseInvenoryDocumentKindName)
        query = query.Where(x => x.LTAIsPaperDirRX.HasValue && x.LTAIsPaperDirRX.Value);
      else
        query = query.Where(x => !x.LTAIsPaperDirRX.HasValue || !x.LTAIsPaperDirRX.Value);
      
      if (query.Any())
      {
        // Отобразить диалог выбора дел. Включить выбранные дела в опись.
        var dialog = Dialogs.CreateInputDialog(Resources.AddCaseFilesDialogTitle);
        var caseFileSelector = dialog.AddSelectMany(Resources.CaseFilesLabel, true, DirRX.LongTermArchive.CaseFiles.Null)
          .From(query.ToArray());
        
        if (dialog.Show() == DialogButtons.Ok)
        {
          foreach (var caseFile in caseFileSelector.Value)
            if (!DirRX.LongTermArchive.PublicFunctions.CaseFile.UpdateInventory(caseFile, _obj))
              return CaseInventories.Resources.WarningCanNotUpdateCaseFileFormat(caseFile.DisplayValue);
        }
      }
      else
        return CaseInventories.Resources.WarningCaseFilesNotFound;

      return string.Empty;
    }

    /// <summary>
    /// Отобразить диалог для исключения выбранных дел из описи.
    /// </summary>
    /// <param name="caseFileList">Список дел для исключения. Если не пуст, диалог не будет отображен.</param>
    /// <returns>Сообщение об ошибке, либо пустая строка.</returns>
    [Public]
    public virtual string RemoveCaseFilesDialog(List<DirRX.LongTermArchive.ICaseFile> caseFileList)
    {
      // Получить список дел текущей описи.
      var query = CaseArchiving.PublicFunctions.CaseInventory.Remote.GetCaseFiles(_obj);
      
      // Вызвать диалог для изменения списка.
      if (query.Any())
      {
        if (caseFileList == null || caseFileList.Count == 0)
        {
          // Отобразить диалог выбора дел.
          var dialog = Dialogs.CreateInputDialog(Resources.RemoveCaseFileDialogTitle);
          var caseFileSelector = dialog.AddSelectMany(Resources.CaseFilesLabel, true, DirRX.LongTermArchive.CaseFiles.Null)
            .From(query.ToArray());
          
          if (dialog.Show() == DialogButtons.Ok)
          {
            caseFileList = caseFileSelector.Value.ToList();
          }
        }
        
        // Исключить выбранные дела из описи.
        if (caseFileList.Count > 0)
        {
          foreach (var caseFile in caseFileList)
          {
            if (!DirRX.LongTermArchive.PublicFunctions.CaseFile.UpdateInventory(caseFile, null))
              return CaseArchiving.CaseInventories.Resources.WarningCanNotUpdateCaseFileFormat(caseFile.DisplayValue);
          }
        }
      }
      else
        return CaseArchiving.CaseInventories.Resources.WarningCaseListIsEmpty;
      
      return string.Empty;
    }

    /// <summary>
    /// Изменение доступности /обязательности свойств.
    /// </summary>
    public void SetStateProperties()
    {
      _obj.State.Properties.BusinessUnit.IsRequired = false;
      _obj.State.Properties.Department.IsRequired = false;
      _obj.State.Properties.BusinessUnit.IsEnabled = false;
      _obj.State.Properties.Department.IsEnabled = false;
      _obj.State.Properties.DocumentKind.IsEnabled = false;
    }
    
  }
}