ArchiveSettingActions.cs 4.03 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using DirRX.Container.ArchiveSetting;
using Newtonsoft.Json.Linq;

namespace DirRX.Container.Client
{

  partial class ArchiveSettingActions
  {
    public virtual void SynchronizeEntities(Sungero.Domain.Client.ExecuteActionArgs e)
    {
      var error = string.Empty;
      
      // Получить данные из долговременного архива.
      try
      {
        _obj.SyncMapping = Container.PublicFunctions.Module.Remote.GetSyncSettings();
        Logger.Debug(_obj.SyncMapping);
        var archiveDocumentTypes = DirRX.Container.PublicFunctions.Module.GetArchiveDocsTypes();
        _obj.ContainerSchemes.Clear();
        foreach (var docType in archiveDocumentTypes)
        {
          var scheme = Container.PublicFunctions.Module.Remote.GetValidationScheme(docType);
          Logger.Debug(scheme);
          var row = _obj.ContainerSchemes.AddNew();
          row.ArchiveDocumentType = docType;
          row.Scheme = scheme;
        }
      }
      catch (Exception ex)
      {
        error = ArchiveSettings.Resources.ConnectionError;
        Logger.Debug(ex.ToString());
      }

      // Распарсить соответствие справочников и список синхронизируемых свойств.
      if (error == string.Empty && !string.IsNullOrEmpty(_obj.SyncMapping))
      {
        var json = JObject.Parse(_obj.SyncMapping);
        if (json != null)
        {
          _obj.Name = json.Value<string>("SystemName");
          
          var jsonEntities = json.Value<JArray>("Entities");
          if (jsonEntities != null && jsonEntities.Any())
          {
            _obj.SyncEntities.Clear();
            _obj.Save();
            
            foreach (var jsonEntity in jsonEntities)
            {
              var sourceName = jsonEntity.Value<string>("SourceName");
              var sourceType = jsonEntity.Value<string>("SourceType");
              var archiveName = jsonEntity.Value<string>("ArchiveName");
              var archiveType = jsonEntity.Value<string>("ArchiveType").ToLower();
              var syncMode  = jsonEntity.Value<string>("SyncMode");
              if (syncMode == "Auto")
              {
                var item = _obj.SyncEntities.AddNew();
                item.LTAName = archiveName;
                item.LTAType = archiveType;
                item.Name = sourceName;
                item.Type = sourceType;
                
                var jsonProperties = jsonEntity.Value<JArray>("Properties");
                if (jsonProperties != null && jsonProperties.Any())
                {
                  item.LTAProperties = string.Join(",", jsonProperties.Select(x => x.Value<string>("Name")));
                }
              }
            }
          }
        }
      }
      else
        error = ArchiveSettings.Resources.SynchronizationError;
      
      if (error == string.Empty)
      {
        _obj.Save();
         Dialogs.NotifyMessage(ArchiveSettings.Resources.NotifyDataSynchronized);
      }
      else
      {
        e.AddError(error);
      }
    }

    public virtual bool CanSynchronizeEntities(Sungero.Domain.Client.CanExecuteActionArgs e)
    {
      return !string.IsNullOrEmpty(_obj.SourceUid) && !string.IsNullOrEmpty(_obj.WebApiUrl);
    }

    public virtual bool CanSetConnectionSettings(Sungero.Domain.Client.CanExecuteActionArgs e)
    {
      return !string.IsNullOrEmpty(_obj.WebApiUrl);
    }

    public virtual void SetConnectionSettings(Sungero.Domain.Client.ExecuteActionArgs e)
    {
      // Задать параметры.
      var oldAuth = _obj.WebApiAuthentication;
      Functions.ArchiveSetting.ShowIntegrationServiceParams(_obj);
      
      // Попытаться подключиться.
      if (_obj.WebApiAuthentication != oldAuth)
      {
        // TODO реализовать получение списка типов архивных документов. Сообщение в случае ошибки.
      }
    }

  }

}