DestructionActClientFunctions.cs 4.23 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using DirRX.Storage.DestructionAct;

namespace DirRX.Storage.Client
{
  partial class DestructionActFunctions
  {

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

    /// <summary>
    /// Отобразить диалог для исключения выбранных дел из акта.
    /// </summary>
    /// <param name="caseFileList">Список дел для исключения.</param>
    /// <returns>Сообщение об ошибке, либо пустая строка при успешном удалении дел.</returns>
    [Public]
    public virtual string RemoveCaseFilesDialog(List<DirRX.LongTermArchive.ICaseFile> caseFileList)
    {
      // Получить список дел текущего акта.
      var query = PublicFunctions.DestructionAct.Remote.GetCaseFiles(_obj);
      
      // Вызвать диалог для изменения списка.
      if (query.Any())
      {
        if (caseFileList == null || caseFileList.Count == 0)
        {
          // Отобразить диалог выбора дел.
          var dialog = Dialogs.CreateInputDialog(Resources.RemoveCaseFileFromActDialogTitle);
          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.UpdateDestructionAct(caseFile, null, null))
              return Storage.DestructionActs.Resources.WarningCanNotUpdateCaseFileFormat(caseFile.DisplayValue);
          }
        }
      }
      else
        return DestructionActs.Resources.WarningCaseListIsEmpty;
      
      return string.Empty;
    }

    /// <summary>
    /// Отобразить диалог для включения выбранных дел в акт.
    /// </summary>
    /// <returns>Сообщение об ошибке, либо пустая строка при успешном добавлении дел.</returns>
    [Public]
    public virtual string AddCaseFilesDialog()
    {
      // Получить список дел, не включенных в акт.
      var query = PublicFunctions.Module.Remote.GetCaseFilesToDestroy();
      
      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.UpdateDestructionAct(caseFile, _obj, null))
              return DestructionActs.Resources.WarningCanNotUpdateCaseFileFormat(caseFile.DisplayValue);
        }
        else
          return DestructionActs.Resources.Cancel;

      }
      else
        return DestructionActs.Resources.WarningCaseFilesNotFound;

      return string.Empty;
    }

  }
}