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(); }
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(); }
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(); }