ExternalEntityActions.cs 3.46 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Domain.Shared;
using DirRX.Storage.ExternalEntity;

namespace DirRX.Storage.Client
{
  partial class ExternalEntityActions
  {
    public virtual void ShowMapping(Sungero.Domain.Client.ExecuteActionArgs e)
    {
      var title = ExternalEntities.Resources.SyncEntityFormat(_obj.Name);
      var records = Functions.ExternalEntity.Remote.GetEntityMapping(_obj);
      if (records.Any())
      {
        records.Show(title);
      }
      else
        e.AddWarning("Сопоставленные записи не найдены.");
    }

    public virtual bool CanShowMapping(Sungero.Domain.Client.CanExecuteActionArgs e)
    {
      // Показывать сопоставленные только для автоматического режима.
      return _obj.MappingMode.Value == Storage.ExternalEntity.MappingMode.Auto &&
        _obj.ExternalSystem != null &&
        !string.IsNullOrEmpty(_obj.Uid);
    }

    public virtual void ChangeSyncProperies(Sungero.Domain.Client.ExecuteActionArgs e)
    {
      var entityMetadata = Sungero.Domain.Shared.TypeExtension.GetTypeByGuid(Guid.Parse(_obj.EntityType)).GetFinalType().GetEntityMetadata();
      
      var dialog = Dialogs.CreateInputDialog(ExternalEntities.Resources.SyncPropertiesTitle);
      var selectorList = new List<CommonLibrary.IBooleanDialogValue>();
      
      var allProperties = entityMetadata.Properties.Where(x => x.Name != "Id").ToList();
      var addedNames = _obj.SyncProperties.Where(x => x.Name != "_sourceId").Select(x => x.Name).ToList();
      
      foreach (var property in allProperties)
        selectorList.Add(dialog.AddBoolean(property.GetLocalizedName(), addedNames.Contains(property.Name)));

      if (dialog.Show() == DialogButtons.Ok)
      {
        _obj.SyncProperties.Clear();
        foreach (var selector in selectorList.Where(x => x.Value == true))
        {
          var property = allProperties[selectorList.IndexOf(selector)];
          var item = _obj.SyncProperties.AddNew();
          item.Name = property.Name;
          item.Description = property.GetLocalizedName();
        }
        if (_obj.SyncProperties.Any())
        {
          var item = _obj.SyncProperties.AddNew();
          item.Name = "_sourceId";
          item.Description = ExternalEntities.Resources.SourceIdDescription.ToString();
        }          
      }
    }

    public virtual bool CanChangeSyncProperies(Sungero.Domain.Client.CanExecuteActionArgs e)
    {
      return _obj.MappingMode != Storage.ExternalEntity.MappingMode.Manual;
    }

    public virtual void SetMapping(Sungero.Domain.Client.ExecuteActionArgs e)
    {
      if (_obj.ExternalSystem == null)
        e.AddWarning(ExternalEntities.Resources.SpecifyExternalSystem);
      else if (string.IsNullOrEmpty(_obj.Uid))
        e.AddWarning(ExternalEntities.Resources.SpecifyExternalEntity);
      else if (string.IsNullOrEmpty(_obj.EntityType))
        e.AddWarning(ExternalEntities.Resources.SpecifyDirectumEntity);
      else
      {
        if (_obj.State.IsChanged)
          _obj.Save();
        
        var title = ExternalEntities.Resources.SyncEntityFormat(_obj.Name);

        Functions.ExternalEntity.Remote.GetEntityMapping(_obj).Show(title);
      }
    }

    public virtual bool CanSetMapping(Sungero.Domain.Client.CanExecuteActionArgs e)
    {
      return _obj.MappingMode == Storage.ExternalEntity.MappingMode.Manual;
    }

  }

}