CaseFileSharedFunctions.cs 3.89 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using DirRX.LongTermArchive.CaseFile;

namespace DirRX.LongTermArchive.Shared
{
  partial class CaseFileFunctions
  {

    /// <summary>
    /// Включить/исключить дело из сводной описи.
    /// </summary>
    /// <param name="inventory">Сводная опись.</param>
    /// <param name="year">Год.</param>
    /// <param name="number">Порядковый номер дела.</param>
    /// <returns>Успех операции (true/false).</returns>
    [Public]
    public virtual bool UpdateConsInventory(Storage.IConsolidatedInventory inventory, int? year, string number)
    {
      if (Locks.GetLockInfo(_obj).IsLocked)
        Locks.Unlock(_obj);
      
      try
      {
        int numInt;
        _obj.LTAConsInventoryDirRX = inventory;
        _obj.LTAConsInventoryYearDirRX = inventory != null ? (year.HasValue ? year : (int?)Calendar.Today.Year) : null;
        _obj.LTANumInConsInventDirRX = inventory != null ? number : string.Empty;
        _obj.LTAIsSymbolNumDirRX = inventory != null ? !int.TryParse(number, out numInt) : false;
        _obj.Save();
        return true;
      }
      catch
      {
        return false;
      }
    }

    /// <summary>
    /// Включить/исключить дело из акта.
    /// </summary>
    /// <param name="act">Акт уничтожения.</param>
    /// <param name="destructionDate">Новая плановая дата уничтожения (в случае исключения из акта).</param>
    /// <returns>Успех операции (true/false).</returns>
    [Public]
    public virtual bool UpdateDestructionAct(Storage.IDestructionAct act, DateTime? destructionDate)
    {
      if (Locks.GetLockInfo(_obj).IsLocked)
        Locks.Unlock(_obj);
      
      try
      {
        // Если акт не передан, исключить дело из акта.
        var updateAct = _obj.LTADestructionActDirRX;
        if (act == null)
        {
          // Состояние дела восстановить из акта. Если там пусто (старые акты), для определения статуса (завершено vs передано) проверить наличие даты передачи в архив.
          _obj.LTAStageDirRX = _obj.LTADestructionActDirRX != null && _obj.LTADestructionActDirRX.CaseFileStage != null ? _obj.LTADestructionActDirRX.CaseFileStage : 
            (_obj.LTAArchiveDateDirRX.HasValue ? LTAStageDirRX.ArchivedDirRX : LTAStageDirRX.CompletedDirRX);
          _obj.LTADestructionActDirRX = null;
          if (destructionDate.HasValue)
            _obj.LTADestructionDateDirRX = destructionDate.Value;
        }
        else
        {
          _obj.LTAStageDirRX = LTAStageDirRX.DestructionActDirRX;
          _obj.LTADestructionActDirRX = act;
          updateAct = act;
        }
        _obj.Save();

        if (updateAct != null)
        {
          Storage.PublicFunctions.DestructionAct.UpdatePeriod(updateAct);
          updateAct.Save();
        }
        return true;
      }
      catch
      {
        return false;
      }
    }
        
    /// <summary>
    /// Включить/исключить дело из описи.
    /// </summary>
    /// <param name="inventory">Опись.</param>
    /// <returns>Успех операции (true/false).</returns>
    [Public]
    public virtual bool UpdateInventory(CaseArchiving.ICaseInventory inventory)
    {
      if (Locks.GetLockInfo(_obj).IsLocked)
        Locks.Unlock(_obj);
      
      try
      {
        _obj.LTACaseInventoryDirRX = inventory;
        _obj.LTAStageDirRX = inventory != null ? LTAStageDirRX.InventoriedDirRX : LTAStageDirRX.CompletedDirRX;
        _obj.Save();
        return true;
      }
      catch
      {
        return false;
      }
    }
    
  }
}