Exemple #1
0
        public override void Import(Dictionary <string, object> content)
        {
            var entityItem   = content["Card"] as JObject;
            var categoryName = entityItem.Property("Name").Value.ToString();

            var activeContractCategory = Session.Current.GetEntities(this.EntityTypeName).Cast <Sungero.Contracts.IContractCategory>()
                                         .Where(c => c.Name == categoryName && c.Status == Sungero.Contracts.ContractCategory.Status.Active).FirstOrDefault();

            if (activeContractCategory != null)
            {
                throw new System.IO.InvalidDataException(string.Format("Категория договора {0} уже существует", categoryName));
            }

            var сontractCategory = Session.Current.CreateEntity(this.EntityTypeName) as Sungero.Contracts.IContractCategory;

            Log.Console.Info(string.Format("ИД = {0}. Создание категории договора {1}", сontractCategory.Id, categoryName));
            сontractCategory.Name = categoryName;
            сontractCategory.Note = entityItem.Property("Note").ToObject <string>();

            var documentKinds = SungeroRepository.GetEntities <Sungero.Docflow.IDocumentKind>(content, "DocumentKinds", false, true);

            Log.Console.Info("Заполнение видов документов");
            foreach (var documentKind in documentKinds)
            {
                var documentKindItem = сontractCategory.DocumentKinds.AddNew();
                documentKindItem.DocumentKind = documentKind;
            }

            сontractCategory.Save();
            Session.Current.SubmitChanges();
        }
        public override void Import(Dictionary <string, object> content)
        {
            var entityItem = content["Card"] as JObject;
            var roleName   = entityItem.Property("Name").Value.ToString();
            var sid        = content["Sid"] as string;

            var activeRole = Session.Current.GetEntities(this.EntityTypeName).Cast <Sungero.CoreEntities.IRole>()
                             .Where(r => r.Sid.ToString() == sid || r.Name == roleName).FirstOrDefault();

            if (activeRole != null)
            {
                throw new System.IO.InvalidDataException(string.Format("Роль {0} уже существует", roleName));
            }

            var role = Session.Current.CreateEntity(this.EntityTypeName) as Sungero.CoreEntities.IRole;

            Log.Console.Info(string.Format("ИД = {0}. Создание роли {1}", role.Id, roleName));

            role.Name         = roleName;
            role.Sid          = Guid.Parse(sid);
            role.Description  = entityItem.Property("Description").ToObject <string>();
            role.IsSingleUser = entityItem.Property("IsSingleUser").ToObject <bool?>();

            Log.Console.Info("Заполнение участников роли");
            var recipients = SungeroRepository.GetEntities <Sungero.CoreEntities.IRecipient>(content, "RecipientLinks", true, true);

            foreach (var recipient in recipients)
            {
                var recipientLinkItem = role.RecipientLinks.AddNew();
                recipientLinkItem.Member = recipient;
            }

            if (role.IsSingleUser.GetValueOrDefault() && !recipients.Any())
            {
                var serviceUsersRole = Session.Current.GetEntities("Sungero.CoreEntities.IRole").Cast <Sungero.CoreEntities.IRole>()
                                       .Where(x => x.Sid == Sungero.Domain.Shared.SystemRoleSid.ServiceUsers).FirstOrDefault();
                var serviceUser = serviceUsersRole.RecipientLinks.Where(x => x.Member.Name == "Service User").FirstOrDefault().Member;

                var recipientLinkItem = role.RecipientLinks.AddNew();
                recipientLinkItem.Member = serviceUser;

                Log.Console.Info(string.Format("Роль {0} заполнена системным пользователем", roleName));
            }

            role.Save();
            Session.Current.SubmitChanges();
        }
Exemple #3
0
        public override void Import(Dictionary <string, object> content)
        {
            var entityItem   = content["Card"] as JObject;
            var documentFlow = entityItem.Property("DocumentFlow").Value.ToString();
            var kindName     = entityItem.Property("Name").Value.ToString();

            var activeDocumendKind = Session.Current.GetEntities(this.EntityTypeName).Cast <Sungero.Docflow.IDocumentKind>()
                                     .Where(k => k.DocumentFlow.Value.ToString() == documentFlow && k.Name == kindName && k.Status == Sungero.Docflow.DocumentKind.Status.Active).FirstOrDefault();

            if (activeDocumendKind != null)
            {
                throw new System.IO.InvalidDataException(string.Format("Вид документа {0} уже существует", kindName));
            }

            var documentKind = Session.Current.CreateEntity(this.EntityTypeName) as Sungero.Docflow.IDocumentKind;

            Log.Console.Info(string.Format("ИД = {0}. Создание вида документа {1}", documentKind.Id, kindName));

            documentKind.Name            = kindName;
            documentKind.DocumentFlow    = Sungero.Core.Enumeration.GetItems(typeof(Sungero.Docflow.DocumentKind.DocumentFlow)).FirstOrDefault(e => e.Value == documentFlow);
            documentKind.Note            = entityItem.Property("Note").ToObject <string>();
            documentKind.DeadlineInDays  = entityItem.Property("DeadlineInDays").ToObject <int?>();
            documentKind.ShortName       = entityItem.Property("ShortName").ToObject <string>();
            documentKind.DeadlineInHours = entityItem.Property("DeadlineInHours").ToObject <int?>();

            var numberingType = entityItem.Property("NumberingType").Value.ToString();

            documentKind.NumberingType = Sungero.Core.Enumeration.GetItems(typeof(Sungero.Docflow.DocumentKind.NumberingType)).FirstOrDefault(e => e.Value == numberingType);

            documentKind.GenerateDocumentName = entityItem.Property("GenerateDocumentName").ToObject <bool?>();
            documentKind.AutoNumbering        = entityItem.Property("AutoNumbering").ToObject <bool?>();
            documentKind.ProjectsAccounting   = entityItem.Property("ProjectsAccounting").ToObject <bool?>();
            documentKind.GrantRightsToProject = entityItem.Property("GrantRightsToProject").ToObject <bool?>();
            documentKind.IsDefault            = entityItem.Property("IsDefault").ToObject <bool?>();

            documentKind.Code = entityItem.Property("Code").ToObject <string>();

            documentKind.AvailableActions.Clear();
            Log.Console.Info("Заполнение действий по отправке");
            var availableActions = SungeroRepository.GetEntities <Sungero.Docflow.IDocumentSendAction>(content, "AvailableActions", true, true);

            foreach (var availableAction in availableActions)
            {
                var availableActionItem = documentKind.AvailableActions.AddNew();
                availableActionItem.Action = availableAction;
            }

            var documentTypeItem = content["DocumentType"] as JObject;
            var documentTypeName = documentTypeItem.Property("Name").Value.ToString();
            var documentType     = Session.Current.GetEntities("Sungero.Docflow.IDocumentType").Cast <Sungero.Docflow.IDocumentType>()
                                   .FirstOrDefault(t => t.DocumentFlow.Value.ToString() == documentFlow && t.Name == documentTypeName);

            if (documentType != null)
            {
                documentKind.DocumentType = documentType;
            }
            else
            {
                throw new System.IO.InvalidDataException(string.Format("Тип документа {0} не найден", documentTypeName));
            }

            documentKind.Save();
            Session.Current.SubmitChanges();
        }
        public override void Import(Dictionary <string, object> content)
        {
            var entityItem   = content["Card"] as JObject;
            var settingName  = entityItem.Property("Name").Value.ToString();
            var documentFlow = entityItem.Property("DocumentFlow").Value.ToString();
            var settingType  = entityItem.Property("SettingType").Value.ToString();

            var activeRegistrationSetting = Session.Current.GetEntities(this.EntityTypeName).Cast <Sungero.Docflow.IRegistrationSetting>()
                                            .Where(k => k.DocumentFlow.Value.ToString() == documentFlow &&
                                                   k.SettingType.Value.ToString() == settingType &&
                                                   k.Name == settingName &&
                                                   k.Status == Sungero.Docflow.RegistrationSetting.Status.Active).FirstOrDefault();

            if (activeRegistrationSetting != null)
            {
                throw new System.IO.InvalidDataException(string.Format("Настройки регистрации {0} уже существует", settingName));
            }

            var registrationSetting = Session.Current.CreateEntity(this.EntityTypeName) as Sungero.Docflow.IRegistrationSetting;

            Log.Console.Info(string.Format("ИД = {0}. Создание настройки регистрации {1}", registrationSetting.Id, settingName));
            registrationSetting.Name         = settingName;
            registrationSetting.DocumentFlow = Sungero.Core.Enumeration.GetItems(typeof(Sungero.Docflow.DocumentRegister.DocumentFlow)).FirstOrDefault(e => e.Value == documentFlow);
            registrationSetting.SettingType  = Sungero.Core.Enumeration.GetItems(typeof(Sungero.Docflow.RegistrationSetting.SettingType)).FirstOrDefault(e => e.Value == settingType);

            Log.Console.Info("Заполнение видов документов");
            var documentKinds = SungeroRepository.GetEntities <Sungero.Docflow.IDocumentKind>(content, "DocumentKinds", false, true);

            foreach (var documentKind in documentKinds)
            {
                var documentKindItem = registrationSetting.DocumentKinds.AddNew();
                documentKindItem.DocumentKind = documentKind;
            }

            Log.Console.Info("Заполнение НОР");
            var businessUnits = SungeroRepository.GetEntities <Sungero.Company.IBusinessUnit>(content, "BusinessUnits", false, true);

            foreach (var businessUnit in businessUnits)
            {
                var businessUnitItem = registrationSetting.BusinessUnits.AddNew();
                businessUnitItem.BusinessUnit = businessUnit;
            }

            Log.Console.Info("Заполнение подразделений");
            var departments = SungeroRepository.GetEntities <Sungero.Company.IDepartment>(content, "Departments", true, true);

            foreach (var department in departments)
            {
                var departmentItem = registrationSetting.Departments.AddNew();
                departmentItem.Department = department;
            }

            var documentRegisterItem = content["DocumentRegister"] as JObject;
            var documentRegisterName = documentRegisterItem.Property("Name").Value.ToString();
            var documentRegister     = Session.Current.GetEntities("Sungero.Docflow.IDocumentRegister").Cast <Sungero.Docflow.IDocumentRegister>()
                                       .FirstOrDefault(g => g.Name == documentRegisterName && g.Status == Sungero.Docflow.DocumentRegister.Status.Active);

            if (documentRegister != null)
            {
                registrationSetting.DocumentRegister = documentRegister;
            }
            else
            {
                throw new System.IO.InvalidDataException(string.Format("Журнал регистрации {0} не найден", documentRegisterName));
            }

            registrationSetting.Save();
            Session.Current.SubmitChanges();
        }
        public override void Import(Dictionary <string, object> content)
        {
            var entityItem      = content["Card"] as JObject;
            var documentFlow    = entityItem.Property("DocumentFlow").Value.ToString();
            var isContractsRule = documentFlow == "Contracts";
            var ruleName        = entityItem.Property("Name").Value.ToString();

            Sungero.Docflow.IApprovalRuleBase rule = null;

            // Получение параметров правила.
            Log.Console.Info("Поиск видов документов");
            var documentKinds = SungeroRepository.GetEntities <Sungero.Docflow.IDocumentKind>(content, "DocumentKinds", false, true);

            Log.Console.Info("Поиск НОР");
            var businessUnits = SungeroRepository.GetEntities <Sungero.Company.IBusinessUnit>(content, "BusinessUnit", false, true);

            Log.Console.Info("Поиск подразделений");
            var departments = SungeroRepository.GetEntities <Sungero.Company.IDepartment>(content, "Departments", false, true);

            Log.Console.Info("Поиск категорий договоров");
            var documentGroups = SungeroRepository.GetEntities <Sungero.Docflow.IDocumentGroupBase>(content, "DocumentGroup", false, true);

            #region Поиск существующих правил.

            var allRules = Session.Current.GetEntities(this.EntityTypeName).Cast <Sungero.Docflow.IApprovalRuleBase>()
                           .Where(r => r.DocumentFlow.Value.ToString() == documentFlow && r.Status == Sungero.Docflow.ApprovalRuleBase.Status.Active).ToList();

            // TODO: Сделать возможность создания версии правила через ключ командной строки.
            var activeRule = allRules.FirstOrDefault(r => r.Name == ruleName);
            if (activeRule != null)
            {
                throw new System.IO.InvalidDataException(string.Format("Новая версия правила {0} уже существует", ruleName));
            }

            #endregion

            #region Создание нового правила.

            if (rule == null)
            {
                if (isContractsRule)
                {
                    rule = Session.Current.CreateEntity("Sungero.Contracts.IContractsApprovalRule") as Sungero.Contracts.IContractsApprovalRule;
                }
                else
                {
                    rule = Session.Current.CreateEntity("Sungero.Docflow.IApprovalRule") as Sungero.Docflow.IApprovalRule;
                }

                Log.Console.Info(string.Format("ИД = {0}. Создание правила согласования {1}", rule.Id, ruleName));
            }

            #endregion

            #region Заполнение карточки.

            rule.Name         = ruleName;
            rule.DocumentFlow = Sungero.Core.Enumeration.GetItems(typeof(Sungero.Docflow.ApprovalRule.DocumentFlow)).FirstOrDefault(e => e.Value == documentFlow);

            rule.IsSmallApprovalAllowed = entityItem.Property("IsSmallApprovalAllowed").ToObject <bool>();
            rule.Priority = entityItem.Property("Priority").ToObject <int>();
            rule.NeedRestrictInitiatorRights = entityItem.Property("NeedRestrictInitiatorRights").ToObject <bool>();
            rule.ReworkDeadline = entityItem.Property("ReworkDeadline").ToObject <int?>();
            var reworkPerformerType = entityItem.Property("ReworkPerformerType").Value.ToString();
            if (!string.IsNullOrEmpty(reworkPerformerType))
            {
                rule.ReworkPerformerType = Sungero.Core.Enumeration.GetItems(typeof(Sungero.Docflow.ApprovalRule.ReworkPerformerType)).FirstOrDefault(e => e.Value == reworkPerformerType);
            }
            #endregion

            #region Заполнение параметров.
            var reworkPerformerItem = content["ReworkPerformer"] as JObject;
            if (reworkPerformerItem != null)
            {
                var reworkPerformerItemName = reworkPerformerItem.Property("Name").Value.ToString();
                var reworkPerformer         = Session.Current.GetEntities("Sungero.CoreEntities.IRecipient").Cast <Sungero.CoreEntities.IRecipient>()
                                              .FirstOrDefault(e => e.Name == reworkPerformerItemName && e.Status == Sungero.CoreEntities.Recipient.Status.Active);
                if (reworkPerformer != null)
                {
                    rule.ReworkPerformer = reworkPerformer;
                }
                else
                {
                    throw new System.IO.InvalidDataException(string.Format("Роль/сотрудник {0} не найден", reworkPerformerItemName));
                }
            }

            var reworkApprovalRoleItem = content["ReworkApprovalRole"] as JObject;
            if (reworkApprovalRoleItem != null)
            {
                var reworkApprovalRoleItemName = reworkApprovalRoleItem.Property("Name").Value.ToString();
                var reworkApprovalRole         = Session.Current.GetEntities("Sungero.Docflow.IApprovalRoleBase").Cast <Sungero.Docflow.IApprovalRoleBase>()
                                                 .FirstOrDefault(e => e.Name == reworkApprovalRoleItemName && e.Status == Sungero.CoreEntities.Recipient.Status.Active);
                if (reworkApprovalRole != null)
                {
                    rule.ReworkApprovalRole = reworkApprovalRole;
                }
                else
                {
                    throw new System.IO.InvalidDataException(string.Format("Роль согласования {0} не найдена", reworkApprovalRoleItemName));
                }
            }

            foreach (var documentKind in documentKinds)
            {
                var documentKindItem = rule.DocumentKinds.AddNew();
                documentKindItem.DocumentKind = documentKind;
            }

            foreach (var businessUnit in businessUnits)
            {
                var businessUnitItem = rule.BusinessUnits.AddNew();
                businessUnitItem.BusinessUnit = businessUnit;
            }

            foreach (var department in departments)
            {
                var departmentItem = rule.Departments.AddNew();
                departmentItem.Department = department;
            }

            if (isContractsRule)
            {
                foreach (var documentGroup in documentGroups)
                {
                    var documentGroupItem = rule.DocumentGroups.AddNew();
                    documentGroupItem.DocumentGroup = documentGroup;
                }
            }

            #endregion

            #region Создание схемы.

            #region Создание условий.

            var conditionsArray = content["Conditions"] as JArray;
            var conditions      = conditionsArray.ToObject <List <Condition> >();

            foreach (var condition in conditions)
            {
                var conditionEntity = Sungero.Docflow.ConditionBases.Null;

                if (isContractsRule)
                {
                    conditionEntity = Session.Current.CreateEntity("Sungero.Contracts.IContractCondition") as Sungero.Contracts.IContractCondition;
                }
                else
                {
                    conditionEntity = Session.Current.CreateEntity("Sungero.Docflow.ICondition") as Sungero.Docflow.ICondition;
                }

                var conditionObject = (condition.ConditionObject as JObject).ToObject <Dictionary <string, object> >();
                var contitionItem   = conditionObject["Card"] as JObject;

                var conditionName = contitionItem.Property("Name").Value.ToString();
                Log.Console.Info(string.Format("Создание условия согласования {0}", conditionName));

                var conditionType = contitionItem.Property("ConditionType").Value.ToString();
                if (isContractsRule)
                {
                    conditionEntity.ConditionType = Sungero.Core.Enumeration.GetItems(typeof(Sungero.Contracts.ContractCondition.ConditionType)).FirstOrDefault(e => e.Value == conditionType);
                }
                else
                {
                    conditionEntity.ConditionType = Sungero.Core.Enumeration.GetItems(typeof(Sungero.Docflow.Condition.ConditionType)).FirstOrDefault(e => e.Value == conditionType);
                }

                conditionEntity.Amount = contitionItem.Property("Amount").ToObject <double?>();

                var amountOperator = contitionItem.Property("AmountOperator").Value.ToString();
                if (!string.IsNullOrEmpty(amountOperator))
                {
                    conditionEntity.AmountOperator = Sungero.Core.Enumeration.GetItems(typeof(Sungero.Docflow.ConditionBase.AmountOperator)).FirstOrDefault(e => e.Value == amountOperator);
                }

                Log.Console.Info("Проверка наличия валют");
                var currencies = SungeroRepository.GetEntities <Sungero.Commons.ICurrency>(conditionObject, "Currencies", false, true);
                if (currencies.Any())
                {
                    foreach (var currency in currencies)
                    {
                        var currencyItem = conditionEntity.Currencies.AddNew();
                        currencyItem.Currency = currency;
                    }
                }

                var documentKindsEntity = SungeroRepository.GetEntities <Sungero.Docflow.IDocumentKind>(conditionObject, "DocumentKinds", false, true);
                foreach (var documentKind in documentKindsEntity)
                {
                    var documentKindItem = conditionEntity.DocumentKinds.AddNew();
                    documentKindItem.DocumentKind = documentKind;
                }

                conditionEntity.Note = contitionItem.Property("Note").ToObject <string>();

                Log.Console.Info("Проверка наличия Видов документов");
                var сonditionDocumentKinds = SungeroRepository.GetEntities <Sungero.Docflow.IDocumentKind>(conditionObject, "ConditionDocumentKinds", false, true);
                foreach (var documentKind in сonditionDocumentKinds)
                {
                    var documentKindItem = conditionEntity.ConditionDocumentKinds.AddNew();
                    documentKindItem.DocumentKind = documentKind;
                }

                var approvalRoleItem = conditionObject["ApprovalRole"] as JObject;
                if (approvalRoleItem != null)
                {
                    var approvalRoleName = approvalRoleItem.Property("Name").Value.ToString();
                    var approvalRole     = Session.Current.GetEntities("Sungero.Docflow.IApprovalRoleBase").Cast <Sungero.Docflow.IApprovalRoleBase>().FirstOrDefault(r => r.Name == approvalRoleName);
                    if (approvalRole != null)
                    {
                        conditionEntity.ApprovalRole = approvalRole;
                    }
                    else
                    {
                        throw new System.IO.InvalidDataException(string.Format("Роль согласования {0} не найдена", approvalRoleName));
                    }
                }

                var approvalRoleForComparisonItem = conditionObject["ApprovalRoleForComparison"] as JObject;
                if (approvalRoleForComparisonItem != null)
                {
                    var approvalRoleForComparisonName = approvalRoleForComparisonItem.Property("Name").Value.ToString();
                    var approvalRoleForComparison     = Session.Current.GetEntities("Sungero.Docflow.IApprovalRoleBase").Cast <Sungero.Docflow.IApprovalRoleBase>()
                                                        .FirstOrDefault(r => r.Name == approvalRoleForComparisonName);
                    if (approvalRoleForComparison != null)
                    {
                        conditionEntity.ApprovalRoleForComparison = approvalRoleForComparison;
                    }
                    else
                    {
                        throw new System.IO.InvalidDataException(string.Format("Роль согласования {0} не найдена", approvalRoleForComparisonName));
                    }
                }

                var recipientForComparisonItem = conditionObject["RecipientForComparison"] as JObject;
                if (recipientForComparisonItem != null)
                {
                    var recipientForComparisonName = recipientForComparisonItem.Property("Name").Value.ToString();
                    var recipientForComparison     = Session.Current.GetEntities("Sungero.CoreEntities.IRecipient").Cast <Sungero.CoreEntities.IRecipient>()
                                                     .FirstOrDefault(r => r.Name == recipientForComparisonName && r.Status == Sungero.CoreEntities.Recipient.Status.Active);
                    if (recipientForComparison != null)
                    {
                        conditionEntity.RecipientForComparison = recipientForComparison;
                    }
                    else
                    {
                        throw new System.IO.InvalidDataException(string.Format("Сотрудник/Роль {0} отсутствует", recipientForComparisonName));
                    }
                }

                Log.Console.Info("Проверка наличия способов доставки");
                var deliveryMethods = SungeroRepository.GetEntities <Sungero.Docflow.IMailDeliveryMethod>(conditionObject, "DeliveryMethods", false, true);
                foreach (var deliveryMethod in deliveryMethods)
                {
                    var deliveryMethodItem = conditionEntity.DeliveryMethods.AddNew();
                    deliveryMethodItem.DeliveryMethod = deliveryMethod;
                }

                var addendaDocumentKindItem = conditionObject["AddendaDocumentKind"] as JObject;
                if (addendaDocumentKindItem != null)
                {
                    var addendaDocumentKindName = addendaDocumentKindItem.Property("Name").Value.ToString();
                    var addendaDocumentKind     = Session.Current.GetEntities("Sungero.Docflow.IDocumentKind").Cast <Sungero.Docflow.IDocumentKind>()
                                                  .FirstOrDefault(k => k.Name == addendaDocumentKindName && k.Status == Sungero.Docflow.DocumentKind.Status.Active);
                    if (addendaDocumentKind != null)
                    {
                        conditionEntity.AddendaDocumentKind = addendaDocumentKind;
                    }
                    else
                    {
                        throw new System.IO.InvalidDataException(string.Format("Вид документа {0} не найден", addendaDocumentKindName));
                    }
                }

                if (!isContractsRule)
                {
                    Log.Console.Info("Проверка наличия адресатов");
                    var addressees = SungeroRepository.GetEntities <Sungero.Company.IEmployee>(conditionObject, "Addressees", false, true);
                    foreach (var addressee in addressees)
                    {
                        var addresseeItem = Sungero.Docflow.Conditions.As(conditionEntity).Addressees.AddNew();
                        addresseeItem.Addressee = addressee;
                    }
                }

                var conditionItem = rule.Conditions.AddNew();
                conditionItem.Condition = conditionEntity;
                conditionItem.Number    = condition.Number;

                conditionEntity.Save();
            }

            #endregion

            #region Создание этапов.
            var functionsArray         = content["Stages"] as JArray;
            var functions              = functionsArray.ToObject <List <Stage> >().Where(s => s.FunctionsType != null).ToList();
            var currentStagesFunctions = new List <Sungero.Docflow.IApprovalStageBase>();
            foreach (var function in functions)
            {
                var functionObject = function.StageObject as JObject;
                var functionName   = functionObject.Property("Name").Value.ToString();
                var functionType   = function.StageTypeRule;
                var functionEntity = Sungero.Docflow.ApprovalStageBases.Null;
                functionEntity = Session.Current.GetEntities("Sungero.Docflow.IApprovalStageBase").Cast <Sungero.Docflow.IApprovalStageBase>().FirstOrDefault(c => c.Name == functionName) ??
                                 currentStagesFunctions.FirstOrDefault(s => s.Name == functionName);
                if (functionEntity == null && function.FunctionsType.FullName == "Sungero.Docflow.IApprovalConvertPdfStage")
                {
                    var newFunctionEntity = Sungero.Docflow.ApprovalConvertPdfStages.As(Session.Current.CreateEntity(function.FunctionsType.ToString()));
                    newFunctionEntity.ConvertWithAddenda = functionObject.Property("ConvertWithAddenda").ToObject <bool?>();
                    functionEntity = Sungero.Docflow.ApprovalStageBases.As(newFunctionEntity);
                    functionEntity = FillFunction(functionEntity, functionObject);
                }
                if (functionEntity == null && function.FunctionsType.FullName == "Sungero.Docflow.IApprovalReviewTaskStage")
                {
                    var newFunctionEntity = Sungero.Docflow.ApprovalReviewTaskStages.As(Session.Current.CreateEntity(function.FunctionsType.ToString()));
                    newFunctionEntity.WaitReviewTaskCompletion = functionObject.Property("WaitReviewTaskCompletion").ToObject <bool?>();
                    functionEntity = Sungero.Docflow.ApprovalStageBases.As(newFunctionEntity);
                    functionEntity = FillFunction(functionEntity, functionObject);
                }
                if (functionEntity == null && function.FunctionsType.FullName == "Sungero.Contracts.IApprovalIncInvoicePaidStage")
                {
                    var newFunctionEntity = Sungero.Contracts.ApprovalIncInvoicePaidStages.As(Session.Current.CreateEntity(function.FunctionsType.ToString()));
                    functionEntity = Sungero.Docflow.ApprovalStageBases.As(newFunctionEntity);
                    functionEntity = FillFunction(functionEntity, functionObject);
                }
                currentStagesFunctions.Add(functionEntity);
                var functionItem = rule.Stages.AddNew();
                functionItem.StageBase = functionEntity;
                functionItem.Number    = function.Number;
                functionItem.StageType = functionType;
            }
            var stagesArray   = content["Stages"] as JArray;
            var stages        = stagesArray.ToObject <List <Stage> >().Where(s => s.FunctionsType == null).ToList();
            var currentStages = new List <Sungero.Docflow.IApprovalStage>();
            foreach (var stage in stages)
            {
                var stageObject = stage.StageObject as JObject;
                var stageName   = stageObject.Property("Name").Value.ToString();
                var stageType   = stage.StageTypeRule;

                var stageEntity = Sungero.Docflow.ApprovalStages.Null;
                stageEntity = Session.Current.GetEntities("Sungero.Docflow.IApprovalStage").Cast <Sungero.Docflow.IApprovalStage>().FirstOrDefault(c => c.Name == stageName) ??
                              currentStages.FirstOrDefault(s => s.Name == stageName);

                if (stageEntity == null)
                {
                    stageEntity                   = Sungero.Docflow.ApprovalStages.As(Session.Current.CreateEntity(typeof(Sungero.Docflow.IApprovalStage)));
                    stageEntity.Name              = stageName;
                    stageEntity.StageType         = stageType;
                    stageEntity.AllowSendToRework = stageObject.Property("AllowSendToRework").ToObject <bool?>();

                    var deadlineInDays = stageObject.Property("DeadlineInDays").ToObject <int?>();
                    if (deadlineInDays != null)
                    {
                        stageEntity.DeadlineInDays = deadlineInDays;
                    }
                    var deadlineInHours = stageObject.Property("DeadlineInHours").ToObject <int?>();
                    if (deadlineInHours != null)
                    {
                        stageEntity.DeadlineInHours = deadlineInHours;
                    }

                    var sequence = stageObject.Property("Sequence").Value.ToString();
                    if (!string.IsNullOrEmpty(sequence))
                    {
                        stageEntity.Sequence = Sungero.Core.Enumeration.GetItems(typeof(Sungero.Docflow.ApprovalStage.Sequence)).FirstOrDefault(e => e.Value == sequence);
                    }

                    var reworkType = stageObject.Property("ReworkType").Value.ToString();
                    if (!string.IsNullOrEmpty(reworkType))
                    {
                        stageEntity.ReworkType = Sungero.Core.Enumeration.GetItems(typeof(Sungero.Docflow.ApprovalStage.ReworkType)).FirstOrDefault(e => e.Value == reworkType);
                    }

                    var reworkPerformerTypeStage = stageObject.Property("ReworkPerformerType").Value.ToString();
                    if (!string.IsNullOrEmpty(reworkPerformerTypeStage))
                    {
                        stageEntity.ReworkPerformerType = Sungero.Core.Enumeration.GetItems(typeof(Sungero.Docflow.ApprovalStage.ReworkPerformerType)).FirstOrDefault(e => e.Value == reworkPerformerTypeStage);
                    }

                    var reworkPerformerItemStage = content["ReworkPerformer"] as JObject;
                    if (reworkPerformerItemStage != null)
                    {
                        var reworkPerformerItemName = reworkPerformerItemStage.Property("Name").Value.ToString();
                        var reworkPerformer         = Session.Current.GetEntities("Sungero.CoreEntities.IRecipient").Cast <Sungero.CoreEntities.IRecipient>()
                                                      .FirstOrDefault(e => e.Name == reworkPerformerItemName && e.Status == Sungero.CoreEntities.Recipient.Status.Active);
                        if (reworkPerformer != null)
                        {
                            stageEntity.ReworkPerformer = reworkPerformer;
                        }
                        else
                        {
                            throw new System.IO.InvalidDataException(string.Format("Роль/сотрудник {0} не найден", reworkPerformerItemName));
                        }
                    }

                    var reworkApprovalRoleItemStage = content["ReworkApprovalRole"] as JObject;
                    if (reworkApprovalRoleItem != null)
                    {
                        var reworkApprovalRoleItemName = reworkApprovalRoleItemStage.Property("Name").Value.ToString();
                        var reworkApprovalRole         = Session.Current.GetEntities("Sungero.Docflow.IApprovalRoleBase").Cast <Sungero.Docflow.IApprovalRoleBase>()
                                                         .FirstOrDefault(e => e.Name == reworkApprovalRoleItemName && e.Status == Sungero.CoreEntities.Recipient.Status.Active);
                        if (reworkApprovalRole != null)
                        {
                            rule.ReworkApprovalRole = reworkApprovalRole;
                        }
                        else
                        {
                            throw new System.IO.InvalidDataException(string.Format("Роль согласования {0} не найдена", reworkApprovalRoleItemName));
                        }
                    }

                    stageEntity.AllowChangeReworkPerformer = stageObject.Property("AllowChangeReworkPerformer").ToObject <bool?>();
                    stageEntity.NeedStrongSign             = stageObject.Property("NeedStrongSign").ToObject <bool?>();
                    stageEntity.StartDelayDays             = stageObject.Property("StartDelayDays").ToObject <int?>();
                    stageEntity.Subject            = stageObject.Property("Subject").ToObject <string>();
                    stageEntity.IsConfirmSigning   = stageObject.Property("IsConfirmSigning").ToObject <bool?>();
                    stageEntity.IsResultSubmission = stageObject.Property("IsResultSubmission").ToObject <bool?>();
                    stageEntity.Note = stageObject.Property("Note").ToObject <string>();
                    stageEntity.NeedRestrictPerformerRights = stageObject.Property("NeedRestrictPerformerRights").ToObject <bool>();
                    var rightType = stageObject.Property("RightType").Value.ToString();
                    if (!string.IsNullOrEmpty(rightType))
                    {
                        stageEntity.RightType = Sungero.Core.Enumeration.GetItems(typeof(Sungero.Docflow.ApprovalStage.RightType)).FirstOrDefault(e => e.Value == rightType);
                    }

                    var assigneeType = stageObject.Property("AssigneeType").Value.ToString();
                    if (!string.IsNullOrEmpty(assigneeType))
                    {
                        stageEntity.AssigneeType = Sungero.Core.Enumeration.GetItems(typeof(Sungero.Docflow.ApprovalStage.AssigneeType)).FirstOrDefault(e => e.Value == assigneeType);
                    }

                    stageEntity.AllowAdditionalApprovers = stageObject.Property("AllowAdditionalApprovers").ToObject <bool?>();

                    if (stage.ApprovalRole != null)
                    {
                        var approvalRuleObject = stage.ApprovalRole as JObject;
                        var approvalRoleName   = approvalRuleObject.Property("Name").Value.ToString();
                        var approvalRole       = Session.Current.GetEntities("Sungero.Docflow.IApprovalRoleBase").Cast <Sungero.Docflow.IApprovalRoleBase>().FirstOrDefault(r => r.Name == approvalRoleName);
                        //TODO: Проверка на количество
                        if (approvalRole != null)
                        {
                            stageEntity.ApprovalRole = approvalRole;
                        }
                        else
                        {
                            throw new System.Data.DataException(string.Format("Роль согласования {0} не найдена", approvalRoleName));
                        }
                    }

                    if (stage.Assignee != null)
                    {
                        var assigneeObject = stage.Assignee as JObject;
                        var assigneeName   = assigneeObject.Property("Name").Value.ToString();
                        var assignee       = Session.Current.GetEntities("Sungero.CoreEntities.IRecipient").Cast <Sungero.CoreEntities.IRecipient>().FirstOrDefault(r => r.Name == assigneeName);
                        //TODO: Проверка по типу.
                        if (assignee != null)
                        {
                            stageEntity.Assignee = assignee;
                        }
                        else
                        {
                            throw new System.Data.DataException(string.Format("Исполнитель {0} не найден", assigneeName));
                        }
                    }

                    if (stage.ApprovalRoles.Any())
                    {
                        foreach (var approvalRole in stage.ApprovalRoles)
                        {
                            var approvalRoleObject = approvalRole as JObject;
                            var approvalRoleName   = approvalRoleObject.Property("Name").Value.ToString();
                            var approvalRoleEntity = Session.Current.GetEntities("Sungero.Docflow.IApprovalRoleBase").Cast <Sungero.Docflow.IApprovalRoleBase>().FirstOrDefault(c => c.Name == approvalRoleName);

                            if (approvalRoleEntity == null)
                            {
                                throw new System.Data.DataException(string.Format("Роль согласования {0} не найдена", approvalRoleName));
                            }

                            var approvalRoleItem = stageEntity.ApprovalRoles.AddNew();
                            approvalRoleItem.ApprovalRole = approvalRoleEntity;
                        }
                    }

                    if (stage.Recipients.Any())
                    {
                        foreach (var recipient in stage.Recipients)
                        {
                            var recipientObject = recipient as JObject;
                            var recipientName   = recipientObject.Property("Name").Value.ToString();
                            var recipientEntity = Session.Current.GetEntities("Sungero.CoreEntities.IRecipient").Cast <Sungero.CoreEntities.IRecipient>().FirstOrDefault(c => c.Name == recipientName);

                            if (recipientEntity == null)
                            {
                                throw new System.Data.DataException(string.Format("Исполнитель {0} не найден", recipientName));
                            }

                            var recipientItem = stageEntity.Recipients.AddNew();
                            recipientItem.Recipient = recipientEntity;
                        }
                    }
                }

                currentStages.Add(stageEntity);

                var stageItem = rule.Stages.AddNew();
                stageItem.Stage     = stageEntity;
                stageItem.Number    = stage.Number;
                stageItem.StageType = stageType;
            }

            #endregion

            var transitionsArray = content["Transitions"] as JArray;
            var transitions      = transitionsArray.ToObject <List <Transitions> >();

            foreach (var transition in transitions)
            {
                var transitionItem = rule.Transitions.AddNew();
                transitionItem.SourceStage    = transition.SourceStage;
                transitionItem.TargetStage    = transition.TargetStage;
                transitionItem.ConditionValue = transition.ConditionValue;
            }

            #endregion

            rule.Status = Sungero.Docflow.ApprovalRuleBase.Status.Active;
            Session.Current.SubmitChanges();
        }
Exemple #6
0
        public override void Import(Dictionary <string, object> content)
        {
            var entityItem = content["Card"] as JObject;
            var groupName  = entityItem.Property("Name").Value.ToString();
            var index      = entityItem.Property("Index").Value.ToString();

            var activeRegistrationGroup = Session.Current.GetEntities(this.EntityTypeName).Cast <Sungero.Docflow.IRegistrationGroup>()
                                          .Where(g => g.Index == index && g.Name == groupName && g.Status == Sungero.Docflow.RegistrationGroup.Status.Active).FirstOrDefault();

            if (activeRegistrationGroup != null)
            {
                throw new System.IO.InvalidDataException(string.Format("Группа регистрации {0} уже существует", groupName));
            }

            var registrationGroup = Session.Current.CreateEntity(this.EntityTypeName) as Sungero.Docflow.IRegistrationGroup;

            Log.Console.Info(string.Format("ИД = {0}. Создание группы регистрации {1}", registrationGroup.Id, groupName));

            registrationGroup.Name        = groupName;
            registrationGroup.Index       = index;
            registrationGroup.Description = entityItem.Property("Description").Value.ToString();

            Log.Console.Info("Заполнение участников");
            var recipientLinks = SungeroRepository.GetEntities <Sungero.CoreEntities.IRecipient>(content, "RecipientLinks", true, true);

            foreach (var recipient in recipientLinks)
            {
                var recipientLinkItem = registrationGroup.RecipientLinks.AddNew();
                recipientLinkItem.Member = recipient;
            }

            var responsibleEmployeeItem = content["ResponsibleEmployee"] as JObject;
            var responsibleEmployeeName = responsibleEmployeeItem.Property("Name").Value.ToString();
            var responsibleEmployee     = Session.Current.GetEntities("Sungero.Company.IEmployee").Cast <Sungero.Company.IEmployee>()
                                          .FirstOrDefault(e => e.Name == responsibleEmployeeName && e.Status == Sungero.Company.Employee.Status.Active);

            if (responsibleEmployee != null)
            {
                registrationGroup.ResponsibleEmployee = responsibleEmployee;
            }
            else
            {
                throw new System.IO.InvalidDataException(string.Format("Ответственный {0} не найден", responsibleEmployeeName));
            }

            Log.Console.Info("Заполнение подразделений");
            var departments = SungeroRepository.GetEntities <Sungero.Company.IDepartment>(content, "Departments", true, true);

            foreach (var department in departments)
            {
                var departmentItem = registrationGroup.Departments.AddNew();
                departmentItem.Department = department;
            }

            registrationGroup.CanRegisterIncoming    = entityItem.Property("CanRegisterIncoming").ToObject <bool?>();
            registrationGroup.CanRegisterOutgoing    = entityItem.Property("CanRegisterOutgoing").ToObject <bool?>();
            registrationGroup.CanRegisterInternal    = entityItem.Property("CanRegisterInternal").ToObject <bool?>();
            registrationGroup.CanRegisterContractual = entityItem.Property("CanRegisterContractual").ToObject <bool?>();

            registrationGroup.Save();
            Session.Current.SubmitChanges();
        }