public ResultOperation Active(sysBpmsProcess process)
        {
            ResultOperation resultOperation = null;

            try
            {
                resultOperation = new ResultOperation();
                if (resultOperation.IsSuccess)
                {
                    if (process.StatusLU != (int)sysBpmsProcess.Enum_StatusLU.Inactive)
                    {
                        resultOperation.AddError(LangUtility.Get("ActiveError.Text", nameof(sysBpmsProcess)));
                    }
                    if (resultOperation.IsSuccess)
                    {
                        process.StatusLU = (int)sysBpmsProcess.Enum_StatusLU.Published;
                        this.UnitOfWork.Repository <IProcessRepository>().Update(process);
                        this.UnitOfWork.Save();
                    }
                }
            }
            catch (Exception ex)
            {
                return(base.ExceptionHandler(ex));
            }
            base.FinalizeService(resultOperation);

            return(resultOperation);
        }
        public ResultOperation Update(sysBpmsEntityDef entityDef)
        {
            ResultOperation resultOperation = new ResultOperation();

            try
            {
                List <sysBpmsEntityDef> listEntity = this.GetList(string.Empty, null);
                this.BeginTransaction();
                if (listEntity.Any(c => c.Name == entityDef.Name && c.ID != entityDef.ID))
                {
                    resultOperation.AddError(LangUtility.Get("SameEntity.Text", nameof(sysBpmsEntityDef)));
                }

                if (resultOperation.IsSuccess)
                {
                    this.UpdateTable(entityDef);
                    entityDef.DesignXML = new EntityDesignXmlModel()
                    {
                        EntityPropertyModel = entityDef.Properties,
                    }.BuildXml();
                    this.UnitOfWork.Repository <IEntityDefRepository>().Update(entityDef);
                    this.UnitOfWork.Save();
                }
            }
            catch (Exception ex)
            {
                return(base.ExceptionHandler(ex));
            }
            base.FinalizeService(resultOperation);
            return(resultOperation);
        }
Beispiel #3
0
 public PostFormResponseModel PostForm(string controlId)
 {
     using (ApplicationPageEngine applicationPageEngine = new ApplicationPageEngine(base.EngineSharedModel))
     {
         if (applicationPageEngine.CheckUserAccessByApplicationID(base.EngineSharedModel.CurrentApplicationPageID.Value, ElementBase.e_AccessType.AllowView))
         {
             var result = this.SaveContentHtmlByPage(base.EngineSharedModel.CurrentApplicationPageID.Value, controlId);
             if (!result.ResultOperation.IsSuccess)
             {
                 return(new PostFormResponseModel(result.ListMessageModel, result.ResultOperation.GetErrors(), false, false, result.RedirectUrlModel));
             }
             else
             {
                 if (result.IsSubmit)
                 {
                     return(new PostFormResponseModel(result.ListMessageModel, SharedLang.Get("Success.Text"), true, result.IsSubmit, result.RedirectUrlModel, result.ListDownloadModel));
                 }
                 else
                 {
                     return(new PostFormResponseModel(result.ListMessageModel, SharedLang.Get("Success.Text"), true, result.IsSubmit, result.RedirectUrlModel, result.ListDownloadModel));
                 }
             }
         }
         else
         {
             return(new PostFormResponseModel(new List <MessageModel>()
             {
             }, LangUtility.Get("PostFormNotAccess.Text", "Engine"), false, false, null));
         }
     }
 }
        public ResultOperation IsValid(Guid?EntityDefID, Guid?EntityID, System.IO.Stream InputStream, string FileName, Guid DocumentDefID)
        {
            ResultOperation    resultOperation = new ResultOperation();
            sysBpmsDocumentDef documentDef     = new DocumentDefService(base.UnitOfWork).GetInfo(DocumentDefID);

            if (InputStream != null && InputStream.Length > 0)
            {
                string fe = System.IO.Path.GetExtension(FileName).Trim('.').ToLower();
                if (!string.IsNullOrWhiteSpace(documentDef.ValidExtentions) &&
                    !documentDef.ValidExtentions.ToStringObj().Trim().ToLower().Split(',').Any(c => c.Trim('.') == fe))
                {
                    resultOperation.AddError(string.Format(LangUtility.Get("FileNotValid.Text", "Engine"), documentDef.DisplayName));
                    return(resultOperation);
                }
                if (documentDef.MaxSize > 0 && documentDef.MaxSize * 1024 < InputStream.Length)
                {
                    resultOperation.AddError(string.Format(LangUtility.Get("FileSizeError.Text", "Engine"), documentDef.DisplayName));
                    return(resultOperation);
                }
            }

            if (InputStream == null && documentDef.IsMandatory &&
                ((EntityDefID.HasValue && !EntityID.HasValue) || !this.DocumentService.GetList(documentDef.ID, EntityDefID, EntityID, "", false, null, (EntityDefID.HasValue ? (Guid?)null : base.EngineSharedModel.CurrentThreadID)).Any()))
            {
                resultOperation.AddError(string.Format(LangUtility.Get("RequiredFile.Text", "Engine"), documentDef.DisplayName));
            }
            return(resultOperation);
        }
Beispiel #5
0
        public CodeResultModel SaveButtonCode(ButtonHtml buttonHtml, ResultOperation resultOperation,
                                              FormModel formModel, CodeBaseSharedModel codeBaseShared)
        {
            DesignCodeModel designCodeModel = null;

            if (!string.IsNullOrWhiteSpace(buttonHtml.BackendCoding))
            {
                designCodeModel = DesignCodeUtility.GetDesignCodeFromXml(buttonHtml.BackendCoding);
            }

            if (designCodeModel != null && (designCodeModel.CodeObjects?.Any() ?? false))
            {
                var result = this.ExecuteOnExitFormCode(designCodeModel, formModel, codeBaseShared);
                if (!result.Result)
                {
                    resultOperation.SetHasError();
                    if (!(result?.CodeBaseShared.MessageList?.Any() ?? false))
                    {
                        resultOperation.AddError(LangUtility.Get("Failed.Text", "Engine"));
                    }
                }

                return(result);
            }
            return(null);
        }
        public ResultOperation Add(sysBpmsVariable variable, List <sysBpmsVariableDependency> listVariables)
        {
            ResultOperation resultOperation = new ResultOperation();

            try
            {
                this.BeginTransaction();
                if (resultOperation.IsSuccess)
                {
                    if (variable.RelationTypeLU != (int)sysBpmsVariable.e_RelationTypeLU.Entity)
                    {
                        variable.FilterTypeLU = variable.ApplicationPageID.HasValue ? (int)sysBpmsVariable.e_FilterTypeLU.AllEntities : variable.FilterTypeLU;
                        variable.EntityDefID  = null;
                        variable.FieldName    = string.Empty;
                    }

                    if (variable.RelationTypeLU != (int)sysBpmsVariable.e_RelationTypeLU.SqlQuery)
                    {
                        variable.Query          = string.Empty;
                        variable.DBConnectionID = null;
                    }
                    sysBpmsVariable preVariable = this.GetInfo(variable.ProcessID, variable.ApplicationPageID, variable.Name);
                    if (preVariable != null)
                    {
                        resultOperation.AddError(LangUtility.Get("SameName.Error", nameof(sysBpmsVariable)));
                    }

                    if (resultOperation.IsSuccess)
                    {
                        this.UnitOfWork.Repository <IVariableRepository>().Add(variable);
                        this.UnitOfWork.Save();

                        if (variable.RelationTypeLU == (int)sysBpmsVariable.e_RelationTypeLU.Entity)
                        {
                            listVariables = listVariables ?? new List <sysBpmsVariableDependency>();
                            foreach (var item in listVariables)
                            {
                                item.DependentVariableID = variable.ID;
                                if (resultOperation.IsSuccess)
                                {
                                    resultOperation = new VariableDependencyService(base.UnitOfWork).Add(item);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                return(base.ExceptionHandler(ex));
            }
            base.FinalizeService(resultOperation);

            return(resultOperation);
        }
Beispiel #7
0
        static void Main(string[] args)
        {
            var lang = LangUtility.EnumAllLanguages();

            var poData = POReader.ParseFile(@"..\..\..\TestFiles\en.po");

            poData = POReader.ParseFile(@"..\..\..\TestFiles\zh.po");
            poData = POReader.ParseFile(@"..\..\..\TestFiles\zh-CN.po");

            POWriter.WriteToFile(poData, "zh-CN.po");
        }
 public object PostAddEdit(PostAddEditGatewayDTO model)
 {
     using (ProcessService processService = new ProcessService())
     {
         if (!processService.GetInfo(model.ProcessId).AllowEdit())
         {
             return(new PostMethodMessage(LangUtility.Get("NotAllowEdit.Text", nameof(sysBpmsProcess)), DisplayMessageType.error));
         }
     }
     using (ConditionService conditionService = new ConditionService())
     {
         model.ListConditions = model.ListConditions ?? new List <ConditionDTO>();
         ResultOperation         resultOperation   = null;
         List <sysBpmsCondition> CurrentConditions = conditionService.GetList(model.GatewayID, null, null);
         foreach (sysBpmsCondition item in CurrentConditions.Where(c => !model.ListConditions.Any(d => d.ID == c.ID)))
         {
             resultOperation = conditionService.Delete(item.ID);
             if (!resultOperation.IsSuccess)
             {
                 return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
             }
         }
         foreach (ConditionDTO item in model.ListConditions)
         {
             sysBpmsCondition condition = item.ID != Guid.Empty ? conditionService.GetInfo(item.ID) : new sysBpmsCondition();
             resultOperation = condition.Update(model.GatewayID, item.SequenceFlowID, item.Code);
             if (!resultOperation.IsSuccess)
             {
                 break;
             }
             if (item.ID != Guid.Empty)
             {
                 resultOperation = conditionService.Update(condition);
             }
             else
             {
                 resultOperation = conditionService.Add(condition);
             }
             if (!resultOperation.IsSuccess)
             {
                 break;
             }
         }
         if (resultOperation.IsSuccess)
         {
             return(new PostMethodMessage(SharedLang.Get("Success.Text"), DisplayMessageType.success));
         }
         else
         {
             return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
         }
     }
 }
Beispiel #9
0
        public ResultOperation Delete(Guid DBConnectionId)
        {
            ResultOperation resultOperation = new ResultOperation();

            if (this.UnitOfWork.Repository <IVariableRepository>().GetList(DBConnectionId).Any())
            {
                resultOperation.AddError(LangUtility.Get("ConnectionUsed.Text", nameof(sysBpmsDBConnection)));
            }
            if (resultOperation.IsSuccess)
            {
                this.UnitOfWork.Repository <IDBConnectionRepository>().Delete(DBConnectionId);
                this.UnitOfWork.Save();
            }
            return(resultOperation);
        }
Beispiel #10
0
        public ResultOperation Update(sysBpmsDBConnection dBConnection)
        {
            ResultOperation resultOperation = new ResultOperation();

            if (this.GetList(dBConnection.Name).Any(c => c.ID != dBConnection.ID))
            {
                resultOperation.AddError(LangUtility.Get("RepetitiveNameError.Text", nameof(sysBpmsDBConnection)));
            }
            if (resultOperation.IsSuccess)
            {
                this.UnitOfWork.Repository <IDBConnectionRepository>().Update(dBConnection);
                this.UnitOfWork.Save();
            }
            return(resultOperation);
        }
Beispiel #11
0
        private void AddToTree(TreeNodeCollection tnc, int parentLanguage, bool recursive = true)
        {
            foreach (var language in LangUtility.EnumSubLanguages(parentLanguage))
            {
                TreeNode tn = new TreeNode(language.DisplayName);
                tn.Tag = language.LCID;

                if (recursive)
                {
                    AddToTree(tn.Nodes, language.LCID, recursive);
                }

                tnc.Add(tn);
            }
        }
        public ResultOperation Delete(Guid EntityDefId)
        {
            ResultOperation resultOperation = new ResultOperation();

            try
            {
                List <sysBpmsDocument> listDoc      = new DocumentService().GetList(null, EntityDefId, null, "", null, null, null);
                List <sysBpmsVariable> listVariable = new VariableService().GetList(null, null, null, "", EntityDefId, null);
                this.BeginTransaction();

                List <string> relatedEntity = this.GetList(EntityDefId);
                if (relatedEntity.Any())
                {
                    resultOperation.AddError($"This entity is related to {string.Join(",", relatedEntity)}");
                }

                if (listVariable.Count > 0)
                {
                    resultOperation.AddError(string.Format(LangUtility.Get("DeleteError.Text", nameof(sysBpmsEntityDef)), string.Join(" ,", listVariable.Select(d => d.Name))));
                }

                if (resultOperation.IsSuccess)
                {
                    DocumentService documentService = new DocumentService(base.UnitOfWork);
                    foreach (var item in listDoc)
                    {
                        if (resultOperation.IsSuccess)
                        {
                            resultOperation = documentService.Delete(item.GUID);
                        }
                    }

                    if (resultOperation.IsSuccess)
                    {
                        this.DropTable(this.GetInfo(EntityDefId));
                        this.UnitOfWork.Repository <IEntityDefRepository>().Delete(EntityDefId);
                        this.UnitOfWork.Save();
                    }
                    listDoc = null;
                }
            }
            catch (Exception ex)
            {
                return(base.ExceptionHandler(ex));
            }
            base.FinalizeService(resultOperation);
            return(resultOperation);
        }
        public ResultOperation Update(sysBpmsDepartmentMember departmentMember)
        {
            ResultOperation resultOperation = new ResultOperation();

            if (this.GetList(departmentMember.DepartmentID, departmentMember.RoleLU, departmentMember.UserID).Any(c => c.ID != departmentMember.ID))
            {
                resultOperation.AddError(LangUtility.Get("SameUser.Error", nameof(sysBpmsDepartmentMember)));
            }

            if (resultOperation.IsSuccess)
            {
                this.UnitOfWork.Repository <IDepartmentMemberRepository>().Update(departmentMember);
                this.UnitOfWork.Save();
            }
            return(resultOperation);
        }
Beispiel #14
0
 public static void SetToErrorMessage(CodeResultModel result, ResultOperation resultOperation)
 {
     if (result != null)
     {
         if (!result.Result)
         {
             if (resultOperation != null)
             {
                 resultOperation.SetHasError();
                 if (!(result?.CodeBaseShared.MessageList?.Any() ?? false))
                 {
                     resultOperation.AddError(LangUtility.Get("Failed.Text", "Engine"));
                 }
             }
         }
     }
 }
        /// <summary>
        /// this method check whether current user has access to this task or not.
        /// </summary>
        /// <param name="userId">set to currnet User ID if user has logined otherwise set to null</param>
        /// <returns></returns>
        public (bool, string) CheckAccess(Guid threadTaskID, Guid?userId, Guid processId, bool isPost, bool accessByTracking = false)
        {
            sysBpmsThreadTask threadTask = this.GetInfo(threadTaskID);

            if (isPost && !new ProcessService(base.UnitOfWork).GetInfo(processId).AllowNextFlow())
            {
                return(false, LangUtility.Get("NotAllowNextFlow.Text", nameof(sysBpmsThreadTask)));
            }

            if (threadTask.StatusLU == (int)sysBpmsThreadTask.e_StatusLU.New ||
                threadTask.StatusLU == (int)sysBpmsThreadTask.e_StatusLU.Ongoing)
            {
                if (threadTask.OwnerUserID.HasValue && threadTask.OwnerUserID == userId)
                {
                    return(true, "");
                }

                if (userId.HasValue)
                {
                    List <sysBpmsDepartmentMember> listDepartmentMember = new DepartmentMemberService(base.UnitOfWork).GetList(null, null, userId.Value);
                    if (listDepartmentMember.Any(c => threadTask.GetDepartmentRoles.Any(d => (!d.Item1.HasValue || d.Item1 == c.DepartmentID) && d.Item2.ToIntObj() == c.RoleLU)))
                    {
                        return(true, "");
                    }
                }
                else
                {
                    if (!threadTask.Thread.UserID.HasValue && !threadTask.OwnerUserID.HasValue && string.IsNullOrWhiteSpace(threadTask.OwnerRole))
                    {
                        return(true, "");
                    }
                }
                if (threadTask.Task.UserTaskRuleModel?.AccessType != (int)UserTaskRuleModel.e_UserAccessType.Static &&
                    threadTask.Task.UserTaskRuleModel?.AccessType != (int)UserTaskRuleModel.e_UserAccessType.Variable)
                {
                    return(true, "");
                }

                if (accessByTracking && threadTask.Task.IsInRole(null, (int)sysBpmsDepartmentMember.e_RoleLU.Requester))
                {
                    return(true, "");
                }
            }
            return(false, LangUtility.Get("AccessError.Text", nameof(sysBpmsThreadTask)));
        }
Beispiel #16
0
        public ResultOperation Delete(Guid ProcessGroupId)
        {
            ResultOperation resultOperation = new ResultOperation();

            if (resultOperation.IsSuccess)
            {
                if (new ProcessService(base.UnitOfWork).GetList(null, null, ProcessGroupId, null).Any())
                {
                    resultOperation.AddError(LangUtility.Get("DeleteError.Text", nameof(sysBpmsProcessGroup)));
                }
                if (resultOperation.IsSuccess)
                {
                    this.UnitOfWork.Repository <IProcessGroupRepository>().Delete(ProcessGroupId);
                    this.UnitOfWork.Save();
                }
            }
            return(resultOperation);
        }
Beispiel #17
0
        public ResultOperation Update(sysBpmsDynamicForm dynamicForm, string userName)
        {
            ResultOperation resultOperation = new ResultOperation();

            if (dynamicForm.ProcessId.HasValue && !new ProcessService(base.UnitOfWork).GetInfo(dynamicForm.ProcessId.Value).AllowEdit())
            {
                resultOperation.AddError(LangUtility.Get("NotAllowEdit.Text", nameof(sysBpmsProcess)));
            }

            if (resultOperation.IsSuccess)
            {
                dynamicForm.UpdatedBy   = userName;
                dynamicForm.UpdatedDate = DateTime.Now;
                this.UnitOfWork.Repository <IDynamicFormRepository>().Update(dynamicForm);
                this.UnitOfWork.Save();
            }
            return(resultOperation);
        }
        public ResultOperation Delete(Guid taskId)
        {
            ResultOperation resultOperation = null;

            try
            {
                resultOperation = new ResultOperation();
                if (resultOperation.IsSuccess)
                {
                    sysBpmsTask sysBpmsTask = this.GetInfo(taskId);
                    this.BeginTransaction();

                    if (new ThreadTaskService(base.UnitOfWork).HasAny(sysBpmsTask.ProcessID, sysBpmsTask.ID))
                    {
                        resultOperation.AddError(LangUtility.Get("CannotDelete.Text", nameof(sysBpmsTask)));
                        return(resultOperation);
                    }

                    foreach (sysBpmsStep item in new StepService(base.UnitOfWork).GetList(taskId, null))
                    {
                        resultOperation = new StepService(base.UnitOfWork).Delete(item.ID);
                        if (!resultOperation.IsSuccess)
                        {
                            break;
                        }
                    }
                    if (resultOperation.IsSuccess)
                    {
                        this.UnitOfWork.Repository <ITaskRepository>().Delete(taskId);
                        this.UnitOfWork.Save();
                        resultOperation = new ElementService(base.UnitOfWork).Delete(sysBpmsTask.ElementID, sysBpmsTask.ProcessID);
                    }
                }
            }
            catch (Exception ex)
            {
                return(base.ExceptionHandler(ex));
            }
            base.FinalizeService(resultOperation);

            return(resultOperation);
        }
Beispiel #19
0
        public ResultOperation Add(sysBpmsDynamicForm dynamicForm, sysBpmsApplicationPage appPage, string userName)
        {
            ResultOperation resultOperation = new ResultOperation();

            try
            {
                if (dynamicForm.ProcessId.HasValue && !new ProcessService(base.UnitOfWork).GetInfo(dynamicForm.ProcessId.Value).AllowEdit())
                {
                    resultOperation.AddError(LangUtility.Get("NotAllowEdit.Text", nameof(sysBpmsProcess)));
                }

                if (resultOperation.IsSuccess)
                {
                    base.BeginTransaction();
                    if (!dynamicForm.ProcessId.HasValue && !dynamicForm.ApplicationPageID.HasValue)
                    {
                        appPage         = appPage ?? new sysBpmsApplicationPage().Update(0, String.Empty, false);
                        appPage.ID      = Guid.Empty;
                        resultOperation = new ApplicationPageService(base.UnitOfWork).Add(appPage);
                        dynamicForm.ApplicationPageID = appPage.ID;
                    }
                    if (resultOperation.IsSuccess)
                    {
                        dynamicForm.CreatedBy   = userName.ToStringObj();
                        dynamicForm.CreatedDate = DateTime.Now;
                        dynamicForm.UpdatedBy   = userName.ToStringObj();
                        dynamicForm.UpdatedDate = DateTime.Now;

                        this.UnitOfWork.Repository <IDynamicFormRepository>().Add(dynamicForm);
                        this.UnitOfWork.Save();
                    }
                }
            }
            catch (Exception ex)
            {
                return(base.ExceptionHandler(ex));
            }
            base.FinalizeService(resultOperation);

            return(resultOperation);
        }
        public object PostAddEditServiceTask(PostAddEditServiceTaskDTO model)
        {
            using (ProcessService processService = new ProcessService())
            {
                if (!processService.GetInfo(base.ProcessId.Value).AllowEdit())
                {
                    return(new PostMethodMessage(LangUtility.Get("NotAllowEdit.Text", nameof(sysBpmsProcess)), DisplayMessageType.error));
                }
            }
            using (TaskService taskService = new TaskService())
            {
                sysBpmsTask task = taskService.GetInfo(model.ElementId, base.ProcessId.Value);
                task.UpdateCode(model.DesignCode);
                ResultOperation resultOperation = taskService.Update(task);

                if (!resultOperation.IsSuccess)
                {
                    return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
                }
            }
            return(new PostMethodMessage(SharedLang.Get("Success.Text"), DisplayMessageType.success));
        }
        public ResultOperation Delete(Guid userId)
        {
            ResultOperation resultOperation = new ResultOperation();

            if (resultOperation.IsSuccess)
            {
                try
                {
                    this.BeginTransaction();
                    //delete email accounts
                    EmailAccountService emailAccountService = new EmailAccountService(base.UnitOfWork);
                    var emailList = emailAccountService.GetList((int)sysBpmsEmailAccount.e_ObjectTypeLU.User, userId, null);
                    foreach (var item in emailList)
                    {
                        emailAccountService.Delete(item.ID);
                    }

                    //delete department member.
                    DepartmentMemberService departmentMemberService = new DepartmentMemberService(base.UnitOfWork);
                    var members = departmentMemberService.GetList(null, null, userId);
                    foreach (var item in members)
                    {
                        departmentMemberService.Delete(item.ID);
                    }

                    this.UnitOfWork.Repository <IUserRepository>().Delete(userId);
                    this.UnitOfWork.Save();
                }
                catch (Exception ex)
                {
                    resultOperation.AddError(LangUtility.Get("UserUsedError.Text", nameof(sysBpmsUser)));
                    return(base.ExceptionHandler(new Exception(LangUtility.Get("UserUsedError.Text", nameof(sysBpmsUser)))));
                }
            }
            base.FinalizeService(resultOperation);
            return(resultOperation);
        }
        public ResultOperation Update(sysBpmsProcess process)
        {
            ResultOperation resultOperation;

            try
            {
                resultOperation = new ResultOperation();
                if (!process.AllowEdit() &&
                    process.WorkflowXML.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n", "").Replace("\r\n", "").Replace(" ", "") != this.GetInfo(process.ID).WorkflowXML.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n", "").Replace("\r\n", "").Replace(" ", ""))
                {
                    resultOperation.AddError(LangUtility.Get("NotAllowEdit.Text", nameof(sysBpmsProcess)));
                }
                if (resultOperation.IsSuccess)
                {
                    this.BeginTransaction();
                    if (process.StatusLU == (int)sysBpmsProcess.Enum_StatusLU.Published)
                    {
                        process.BeginTasks = string.Join(",", this.GetListBeginTaskElementID(process.ID));
                    }
                    process.UpdateDate = DateTime.Now;
                    this.UnitOfWork.Repository <IProcessRepository>().Update(process);
                    resultOperation = this.UpdateProcessDataBase(process);
                    if (resultOperation.IsSuccess)
                    {
                        this.UnitOfWork.Save();
                    }
                }
            }
            catch (Exception ex)
            {
                return(base.ExceptionHandler(ex));
            }
            base.FinalizeService(resultOperation);

            return(resultOperation);
        }
        public object PostAddEditUserTask(PostAddEditUserTaskDTO userTaskDTO)
        {
            using (ProcessService processService = new ProcessService())
            {
                if (!processService.GetInfo(userTaskDTO.ProcessID).AllowEdit())
                {
                    return(new PostMethodMessage(LangUtility.Get("NotAllowEdit.Text", nameof(sysBpmsProcess)), DisplayMessageType.error));
                }
            }
            ResultOperation resultOperation = new ResultOperation();

            using (TaskService taskService = new TaskService())
            {
                //save access
                sysBpmsTask       task = taskService.GetInfo(userTaskDTO.ID);
                UserTaskRuleModel userTaskRuleModel = new UserTaskRuleModel();
                if (userTaskDTO.OwnerTypeLU.HasValue)
                {
                    switch ((sysBpmsTask.e_OwnerTypeLU)userTaskDTO.OwnerTypeLU)
                    {
                    case sysBpmsTask.e_OwnerTypeLU.User:
                        userTaskRuleModel.AccessType = userTaskDTO.UserAccessType.ToIntObj();
                        switch ((UserTaskRuleModel.e_UserAccessType)userTaskDTO.UserAccessType)
                        {
                        case UserTaskRuleModel.e_UserAccessType.Static:
                            //userTaskDTO.UserID is filled automativally
                            break;

                        case UserTaskRuleModel.e_UserAccessType.Variable:
                            userTaskRuleModel.Variable = userTaskDTO.ddlUserVariable;
                            break;
                        }

                        break;

                    case sysBpmsTask.e_OwnerTypeLU.Role:
                        userTaskRuleModel.AccessType = userTaskDTO.RoleAccessType.ToIntObj();
                        switch ((UserTaskRuleModel.e_RoleAccessType)userTaskDTO.RoleAccessType)
                        {
                        case UserTaskRuleModel.e_RoleAccessType.Static:
                            //userTaskRuleModel.RoleCode = Request.Form["RoleName"];
                            userTaskRuleModel.SpecificDepartmentId = userTaskDTO.SpecificDepartmentID;
                            break;

                        case UserTaskRuleModel.e_RoleAccessType.Variable:
                            userTaskRuleModel.Variable             = userTaskDTO.ddlRoleVariable;
                            userTaskRuleModel.SpecificDepartmentId = userTaskDTO.SpecificDepartmentID;
                            break;

                        case UserTaskRuleModel.e_RoleAccessType.CorrespondentRole:
                            userTaskRuleModel.RoleCode       = userTaskDTO.ddlRoleRuleRoleName;
                            userTaskRuleModel.UserType       = userTaskDTO.ddlRoleRuleUserType;
                            userTaskRuleModel.GoUpDepartment = userTaskDTO.GoUpDepartment;
                            break;
                        }
                        break;
                    }

                    userTaskDTO.Rule = userTaskRuleModel.BuildXml();
                    resultOperation  = task.Update(userTaskDTO.RoleName, userTaskDTO.SpecificDepartmentID, userTaskDTO.OwnerTypeLU, userTaskDTO.UserID, userTaskDTO.Rule);
                    if (!resultOperation.IsSuccess)
                    {
                        return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
                    }
                }
                resultOperation = taskService.Update(task);

                //save step
                int index = 0;
                userTaskDTO.ListSteps = userTaskDTO.ListSteps ?? new List <StepDTO>();
                userTaskDTO.ListSteps.ForEach(c => { c.Position = ++index; });

                using (StepService stepService = new StepService())
                {
                    List <sysBpmsStep> CurrentSteps = stepService.GetList(userTaskDTO.ID, null);
                    foreach (sysBpmsStep item in CurrentSteps.Where(c => !userTaskDTO.ListSteps.Any(d => d.ID == c.ID)))
                    {
                        resultOperation = stepService.Delete(item.ID);
                        if (!resultOperation.IsSuccess)
                        {
                            return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
                        }
                    }
                    foreach (StepDTO item in userTaskDTO.ListSteps)
                    {
                        resultOperation = null;
                        if (item.ID != Guid.Empty)
                        {
                            resultOperation = stepService.Update(new sysBpmsStep(item.ID, item.TaskID, item.Position, item.DynamicFormID, item.Name));
                        }
                        else
                        {
                            resultOperation = stepService.Add(new sysBpmsStep(item.ID, item.TaskID, item.Position, item.DynamicFormID, item.Name));
                        }

                        if (!resultOperation.IsSuccess)
                        {
                            return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
                        }
                    }

                    if (resultOperation.IsSuccess)
                    {
                        return(new PostMethodMessage(SharedLang.Get("Success.Text"), DisplayMessageType.success));
                    }
                    else
                    {
                        return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
                    }
                }
            }
        }
        public ResultOperation Publish(Guid processID)
        {
            ResultOperation resultOperation = new ResultOperation();

            try
            {
                sysBpmsProcess process = this.GetInfo(processID);
                if (process.StatusLU != (int)sysBpmsProcess.Enum_StatusLU.Draft &&
                    process.StatusLU != (int)sysBpmsProcess.Enum_StatusLU.Inactive)
                {
                    resultOperation.AddError(LangUtility.Get("WorkflowPublishError.Text", nameof(sysBpmsProcess)));
                }

                if (new EventService(base.UnitOfWork).GetList((int)sysBpmsEvent.e_TypeLU.StartEvent, processID, "", null).Count == 0)
                {
                    resultOperation.AddError(LangUtility.Get("WorkflowPublishNoStartError.Text", nameof(sysBpmsProcess)));
                }

                if (new EventService(base.UnitOfWork).GetList((int)sysBpmsEvent.e_TypeLU.EndEvent, processID, "", null).Count == 0)
                {
                    resultOperation.AddError(LangUtility.Get("WorkflowPublishNoEndError.Text", nameof(sysBpmsProcess)));
                }

                foreach (var item in new TaskService(base.UnitOfWork).GetList((int)sysBpmsTask.e_TypeLU.UserTask, processID))
                {
                    if (item.Steps.Count == 0)
                    {
                        resultOperation.AddError(LangUtility.Get("WorkflowPublishNoStepError.Text", nameof(sysBpmsProcess)));
                    }
                }
                if (resultOperation.IsSuccess)
                {
                    process.BeginTasks = string.Join(",", this.GetListBeginTaskElementID(process.ID));

                    this.BeginTransaction();
                    if (process.ParentProcessID.HasValue)
                    {
                        sysBpmsProcess parent = this.GetLastActive(process.ParentProcessID.Value);
                        //Make parent process as old version.
                        if (parent.StatusLU != (int)sysBpmsProcess.Enum_StatusLU.OldVersion)
                        {
                            parent.StatusLU = (int)sysBpmsProcess.Enum_StatusLU.OldVersion;
                            this.UnitOfWork.Repository <IProcessRepository>().Update(parent);
                        }
                    }
                    process.StatusLU    = (int)sysBpmsProcess.Enum_StatusLU.Published;
                    process.PublishDate = DateTime.Now;
                    //Update sourceCode fired and Generate assembly
                    GetSourceCode(process);
                    //Update TraceToStartField of Gateway element.
                    resultOperation = new GatewayEngine(null, base.UnitOfWork).UpdateTraceToStart(process);

                    if (resultOperation.IsSuccess)
                    {
                        this.UnitOfWork.Repository <IProcessRepository>().Update(process);
                        this.UnitOfWork.Save();
                    }
                }
            }
            catch (Exception ex)
            {
                return(base.ExceptionHandler(ex));
            }
            base.FinalizeService(resultOperation);

            return(resultOperation);
        }
        public List <sysBpmsThreadTask> GetMultiInstanceTask(Domain.sysBpmsTask task, EngineSharedModel engineSharedModel)
        {
            sysBpmsThreadTask        threadTask = null;
            List <sysBpmsThreadTask> list       = new List <sysBpmsThreadTask>();

            switch ((sysBpmsTask.e_OwnerTypeLU)task.OwnerTypeLU)
            {
            case sysBpmsTask.e_OwnerTypeLU.User:
                switch ((UserTaskRuleModel.e_UserAccessType)task.UserTaskRuleModel.AccessType)
                {
                case UserTaskRuleModel.e_UserAccessType.Static:
                case UserTaskRuleModel.e_UserAccessType.Variable:
                    string userId = task.UserID;
                    if (task.UserTaskRuleModel.AccessType == (int)UserTaskRuleModel.e_UserAccessType.Variable)
                    {
                        userId = new DataManageEngine(engineSharedModel, base.UnitOfWork).GetValueByBinding(task.UserTaskRuleModel.Variable).ToStringObj();
                    }
                    int i = 0;
                    foreach (string item in userId.Split(','))
                    {
                        threadTask = new sysBpmsThreadTask();
                        threadTask.Update(engineSharedModel.CurrentThreadID.Value, task.ID, DateTime.Now.AddSeconds(i++), null, string.Empty, 0, (int)sysBpmsThreadTask.e_StatusLU.New);
                        threadTask.UpdateAccessInfo(item.ToGuidObj(), null);
                        list.Add(threadTask);
                    }
                    break;
                }
                break;

            case sysBpmsTask.e_OwnerTypeLU.Role:
                switch ((UserTaskRuleModel.e_RoleAccessType)task.UserTaskRuleModel.AccessType)
                {
                case UserTaskRuleModel.e_RoleAccessType.Static:
                case UserTaskRuleModel.e_RoleAccessType.Variable:
                    if (task.UserTaskRuleModel.AccessType == (int)UserTaskRuleModel.e_RoleAccessType.Variable)
                    {
                        task.SetRoleDepartment(new DataManageEngine(engineSharedModel, base.UnitOfWork).GetValueByBinding(task.UserTaskRuleModel.Variable).ToStringObj(), task.UserTaskRuleModel.SpecificDepartmentId);
                    }
                    foreach (var item in task.GetDepartmentRoles)
                    {
                        List <Guid> users = new DepartmentMemberService(base.UnitOfWork).GetList(item.Item1, item.Item2.ToIntObj(), null).Select(c => c.UserID).ToList();
                        //It is used  for sequential task.
                        int i = 0;
                        foreach (Guid uId in users)
                        {
                            threadTask = new sysBpmsThreadTask();
                            threadTask.Update(engineSharedModel.CurrentThreadID.Value, task.ID, DateTime.Now.AddSeconds(i++), null, string.Empty, 0, (int)sysBpmsThreadTask.e_StatusLU.New);
                            threadTask.UpdateAccessInfo(uId, null);
                            list.Add(threadTask);
                        }
                    }
                    break;

                case UserTaskRuleModel.e_RoleAccessType.CorrespondentRole:

                    Guid?userId       = task.UserTaskRuleModel.UserType == (int)UserTaskRuleModel.e_UserType.CurrentUserID ? new UserService(base.UnitOfWork).GetInfo(engineSharedModel.CurrentUserName ?? "")?.ID : engineSharedModel.CurrentThread?.UserID;
                    Guid?departmentId = new AccessCodeHelper(base.UnitOfWork).GetDepartmentHierarchyByUserId(userId.ToGuidObj(), task.UserTaskRuleModel.RoleCode.ToIntObj(), task.UserTaskRuleModel.GoUpDepartment);
                    if (!departmentId.HasValue)
                    {
                        throw new Exception(LangUtility.Get("OrganizationNotFound.Text", nameof(sysBpmsThreadTask)));
                    }
                    {
                        List <Guid> users = new DepartmentMemberService(base.UnitOfWork).GetList(departmentId, task.UserTaskRuleModel.RoleCode.ToIntObj(), null).Select(c => c.UserID).ToList();
                        //It is used  for sequential task.
                        int i = 0;
                        foreach (Guid uId in users)
                        {
                            threadTask = new sysBpmsThreadTask();
                            threadTask.Update(engineSharedModel.CurrentThreadID.Value, task.ID, DateTime.Now.AddSeconds(i++), null, string.Empty, 0, (int)sysBpmsThreadTask.e_StatusLU.New);
                            threadTask.UpdateAccessInfo(uId, null);
                            list.Add(threadTask);
                        }
                    }
                    break;
                }

                break;
            }
            return(list);
        }
        public ResultOperation SaveFile(System.IO.Stream inputStream, string fileName, Guid?entityID, Guid?entityDefID, Guid documentDefID, string captionOF, bool replace)
        {
            ResultOperation resultOperation = new ResultOperation();

            if (inputStream == null || inputStream.Length <= 0)
            {
                return(resultOperation);
            }
            sysBpmsDocument    PostDocument = null;
            sysBpmsDocumentDef documentDef  = new DocumentDefService(base.UnitOfWork).GetInfo(documentDefID);

            try
            {
                Guid   Guid = System.Guid.NewGuid();
                string fe   = System.IO.Path.GetExtension(fileName).Trim('.').ToLower();
                if (!string.IsNullOrWhiteSpace(documentDef.ValidExtentions) &&
                    !documentDef.ValidExtentions.ToStringObj().Trim().ToLower().Split(',').Any(c => c.Trim('.') == fe))
                {
                    resultOperation.AddError(string.Format(LangUtility.Get("FileNotValid.Text", "Engine"), documentDef.DisplayName));
                    return(resultOperation);
                }
                if (documentDef.MaxSize > 0 && documentDef.MaxSize * 1024 < inputStream.Length)
                {
                    resultOperation.AddError(string.Format(LangUtility.Get("FileSizeError.Text", "Engine"), documentDef.DisplayName));
                    return(resultOperation);
                }
                if (!System.IO.Directory.Exists(BPMSResources.FilesRoot.Trim('\\')))
                {
                    System.IO.DirectoryInfo DirectoryInfoObject = System.IO.Directory.CreateDirectory(BPMSResources.FilesRoot.Trim('\\'));
                }

                using (System.IO.FileStream saveStream = System.IO.File.Create(BPMSResources.FilesRoot.Trim('\\') + "\\" + Guid))
                {
                    byte[] bytes  = new byte[1024];
                    int    lenght = 0;
                    while ((lenght = inputStream.Read(bytes, 0, bytes.Length)) > 0)
                    {
                        saveStream.Write(bytes, 0, lenght);
                    }
                }

                PostDocument = new sysBpmsDocument()
                {
                    IsDeleted     = false,
                    AtachDateOf   = DateTime.Now,
                    CaptionOf     = string.IsNullOrWhiteSpace(captionOF) ? documentDef.DisplayName : captionOF,
                    EntityID      = entityID,
                    EntityDefID   = entityDefID,
                    DocumentDefID = documentDefID,
                    FileExtention = fe,
                    GUID          = Guid,
                    ThreadID      = base.EngineSharedModel.CurrentThreadID,
                };

                if (replace)
                {
                    var _Document = this.DocumentService.GetList(documentDefID, entityDefID, entityID, "", false, null, null).FirstOrDefault();
                    if (_Document != null)
                    {
                        _Document.IsDeleted = true;
                        this.DocumentService.Update(_Document);
                    }
                }
                this.DocumentService.Add(PostDocument);
            }
            catch
            {
                resultOperation.AddError(LangUtility.Get("FileSaveError.Text", "Engine"));
            }
            resultOperation.CurrentObject = PostDocument;
            return(resultOperation);
        }
        public ResultOperation NewVersion(sysBpmsProcess current, string userName)
        {
            ResultOperation resultOperation;

            try
            {
                resultOperation = new ResultOperation();
                if (resultOperation.IsSuccess)
                {
                    if (this.GetList((int)sysBpmsProcess.Enum_StatusLU.Draft, current.ParentProcessID ?? current.ID).Any())
                    {
                        resultOperation.AddError(LangUtility.Get("NewVersionError.Text", nameof(sysBpmsProcess)));
                        return(resultOperation);
                    }
                    this.BeginTransaction();

                    //Create new process
                    sysBpmsProcess newProcess = this.GetInfo(current.ID);
                    newProcess.CreateDate      = DateTime.Now;
                    newProcess.UpdateDate      = DateTime.Now;
                    newProcess.StatusLU        = (int)sysBpmsProcess.Enum_StatusLU.Draft;
                    newProcess.ProcessVersion  = newProcess.ProcessVersion + 1;
                    newProcess.ParentProcessID = current.ParentProcessID.HasValue ? current.ParentProcessID.Value : current.ID;
                    newProcess.Number          = this.CalculateSerlialNumber(this.UnitOfWork.Repository <IProcessRepository>().MaxNumber() + 1);
                    newProcess.FormattedNumber = this.CalculateFormatNumber(newProcess.Number.Value, DateTime.Now.Date);

                    this.UnitOfWork.Repository <IProcessRepository>().Add(newProcess);
                    this.UnitOfWork.Save();
                    //Copy Variable
                    Dictionary <Guid, Guid> variableConvertID   = new Dictionary <Guid, Guid>();
                    VariableService         variableService     = new VariableService(base.UnitOfWork);
                    List <sysBpmsVariable>  sysBpmsVariableList = variableService.GetList(current.ID, null, null, "", null, null);
                    if (resultOperation.IsSuccess)
                    {
                        foreach (sysBpmsVariable item in sysBpmsVariableList)
                        {
                            Guid oldGuidID = item.ID;
                            item.ProcessID  = newProcess.ID;
                            resultOperation = variableService.Add(item, null);
                            variableConvertID.Add(oldGuidID, item.ID);
                            if (!resultOperation.IsSuccess)
                            {
                                break;
                            }
                        }
                    }
                    //Copy VariableDependency
                    VariableDependencyService        variableDependencyService     = new VariableDependencyService(base.UnitOfWork);
                    List <sysBpmsVariableDependency> sysBpmsVariableDependencyList = variableDependencyService.GetList(current.ID);
                    if (resultOperation.IsSuccess)
                    {
                        foreach (sysBpmsVariableDependency item in sysBpmsVariableDependencyList)
                        {
                            if (item.ToVariableID.HasValue)
                            {
                                item.ToVariableID = variableConvertID[item.ToVariableID.Value];
                            }
                            item.DependentVariableID = variableConvertID[item.DependentVariableID];
                            resultOperation          = variableDependencyService.Add(item);
                            if (!resultOperation.IsSuccess)
                            {
                                break;
                            }
                        }
                    }
                    //Copy Element
                    ElementService        elementService     = new ElementService(base.UnitOfWork);
                    List <sysBpmsElement> sysBpmsElementList = elementService.GetList(current.ID, null, "");
                    if (resultOperation.IsSuccess)
                    {
                        foreach (sysBpmsElement item in sysBpmsElementList)
                        {
                            item.ProcessID  = newProcess.ID;
                            item.Process    = null;
                            resultOperation = elementService.Add(item);
                            if (!resultOperation.IsSuccess)
                            {
                                break;
                            }
                        }
                    }
                    //Copy Lane
                    LaneService        laneService     = new LaneService(base.UnitOfWork);
                    List <sysBpmsLane> sysBpmsLaneList = laneService.GetList(current.ID);
                    if (resultOperation.IsSuccess)
                    {
                        foreach (sysBpmsLane item in sysBpmsLaneList)
                        {
                            item.ID        = Guid.NewGuid();
                            item.ProcessID = newProcess.ID;
                            item.Element   = null;
                            laneService.Add(item);
                        }
                    }
                    //Copy event
                    EventService        eventService     = new EventService(base.UnitOfWork);
                    List <sysBpmsEvent> sysBpmsEventList = eventService.GetList(null, current.ID, "", null, null);
                    if (resultOperation.IsSuccess)
                    {
                        foreach (sysBpmsEvent item in sysBpmsEventList)
                        {
                            item.ID         = Guid.NewGuid();
                            item.ProcessID  = newProcess.ID;
                            item.Element    = null;
                            resultOperation = eventService.Add(item);
                            if (!resultOperation.IsSuccess)
                            {
                                break;
                            }
                        }
                    }
                    //Copy SequenceFlow
                    Dictionary <Guid, Guid>    flowConvertID           = new Dictionary <Guid, Guid>();
                    SequenceFlowService        sequenceFlowService     = new SequenceFlowService(base.UnitOfWork);
                    List <sysBpmsSequenceFlow> sysBpmsSequenceFlowList = sequenceFlowService.GetList(current.ID);
                    if (resultOperation.IsSuccess)
                    {
                        foreach (sysBpmsSequenceFlow item in sysBpmsSequenceFlowList)
                        {
                            Guid flowNewId = Guid.NewGuid();
                            flowConvertID.Add(item.ID, flowNewId);
                            item.ID         = flowNewId;
                            item.ProcessID  = newProcess.ID;
                            item.Process    = null;
                            item.Element    = null;
                            resultOperation = sequenceFlowService.Add(item);
                            if (!resultOperation.IsSuccess)
                            {
                                break;
                            }
                        }
                    }
                    //Copy gateway
                    GatewayService        gatewayService     = new GatewayService(base.UnitOfWork);
                    ConditionService      conditionService   = new ConditionService(base.UnitOfWork);
                    List <sysBpmsGateway> sysBpmsGatewayList = gatewayService.GetList(current.ID);
                    if (resultOperation.IsSuccess)
                    {
                        foreach (sysBpmsGateway item in sysBpmsGatewayList)
                        {
                            List <sysBpmsCondition> sysBpmsConditionList = conditionService.GetList(item.ID, null, null);
                            item.ID        = Guid.NewGuid();
                            item.ProcessID = newProcess.ID;
                            item.Element   = null;
                            if (item.DefaultSequenceFlowID.HasValue)
                            {
                                item.DefaultSequenceFlowID = flowConvertID[item.DefaultSequenceFlowID.Value];
                            }
                            resultOperation = gatewayService.Add(item);
                            if (!resultOperation.IsSuccess)
                            {
                                break;
                            }
                            foreach (sysBpmsCondition condition in sysBpmsConditionList)
                            {
                                condition.GatewayID = item.ID;
                                if (condition.SequenceFlowID.HasValue)
                                {
                                    condition.SequenceFlowID = flowConvertID[condition.SequenceFlowID.Value];
                                }
                                condition.Gateway      = null;
                                condition.SequenceFlow = null;
                                resultOperation        = conditionService.Add(condition);
                                if (!resultOperation.IsSuccess)
                                {
                                    break;
                                }
                            }
                        }
                    }
                    //Copy dynamicForm
                    Dictionary <Guid, Guid>   formConvertID          = new Dictionary <Guid, Guid>();
                    DynamicFormService        dynamicFormService     = new DynamicFormService(base.UnitOfWork);
                    ApplicationPageService    applicationPageService = new ApplicationPageService(base.UnitOfWork);
                    List <sysBpmsDynamicForm> sysBpmsDynamicFormList = dynamicFormService.GetList(current.ID, null, null, "", null, null);
                    if (resultOperation.IsSuccess)
                    {
                        foreach (sysBpmsDynamicForm item in sysBpmsDynamicFormList)
                        {
                            Guid oldID = item.ID;
                            item.ProcessId = newProcess.ID;
                            //First change code id.
                            dynamicFormService.UpdateBackendCodeID(item);
                            //Then update sourceCode value.
                            dynamicFormService.GetSourceCode(item);
                            item.Process    = null;
                            resultOperation = dynamicFormService.Add(item,
                                                                     item.ApplicationPageID.HasValue ? applicationPageService.GetInfo(item.ApplicationPageID.Value) : null, userName);
                            formConvertID.Add(oldID, item.ID);
                            if (!resultOperation.IsSuccess)
                            {
                                break;
                            }
                        }
                    }
                    //Update formHtml control formid property
                    if (resultOperation.IsSuccess)
                    {
                        foreach (sysBpmsDynamicForm item in sysBpmsDynamicFormList)
                        {
                            if (item.DesignJson.Contains("formId"))
                            {
                                formConvertID.ToList().ForEach(c =>
                                {
                                    item.DesignJson = item.DesignJson.Replace(c.Key.ToString(), c.Value.ToString());
                                });
                                resultOperation = dynamicFormService.Update(item, userName);
                                if (!resultOperation.IsSuccess)
                                {
                                    break;
                                }
                            }
                        }
                    }
                    //Copy task
                    TaskService        taskService     = new TaskService(base.UnitOfWork);
                    StepService        stepService     = new StepService(base.UnitOfWork);
                    List <sysBpmsTask> sysBpmsTaskList = taskService.GetList(null, current.ID);
                    if (resultOperation.IsSuccess)
                    {
                        foreach (sysBpmsTask item in sysBpmsTaskList)
                        {
                            List <sysBpmsStep> sysBpmsStepList = stepService.GetList(item.ID, null);
                            item.ID         = Guid.NewGuid();
                            item.ProcessID  = newProcess.ID;
                            item.Process    = null;
                            item.Element    = null;
                            resultOperation = taskService.Add(item);
                            if (!resultOperation.IsSuccess)
                            {
                                break;
                            }
                            foreach (sysBpmsStep step in sysBpmsStepList)
                            {
                                step.TaskID = item.ID;
                                if (step.DynamicFormID.HasValue)
                                {
                                    step.DynamicFormID = formConvertID[step.DynamicFormID.Value];
                                }
                                step.DynamicForm = null;
                                step.Task        = null;
                                resultOperation  = stepService.Add(step);
                                if (!resultOperation.IsSuccess)
                                {
                                    break;
                                }
                            }
                        }
                    }

                    this.UnitOfWork.Save();
                }
            }
            catch (Exception ex)
            {
                return(base.ExceptionHandler(ex));
            }
            base.FinalizeService(resultOperation);

            return(resultOperation);
        }
        public ResultOperation Delete(Guid processId)
        {
            ResultOperation resultOperation = new ResultOperation();

            try
            {
                this.BeginTransaction();
                sysBpmsProcess process = this.GetInfo(processId);
                if (this.GetList(null, process.ID).Any())
                {
                    resultOperation.AddError(LangUtility.Get("OldVersionDeleteError.Text", nameof(sysBpmsProcess)));
                }
                int countThread = new ThreadService().GetCount(process.ID);
                if (countThread > 0)
                {
                    resultOperation.AddError(string.Format(LangUtility.Get("DeleteProcessThreadError.Text", nameof(sysBpmsProcess)), countThread));
                }
                if (resultOperation.IsSuccess)
                {
                    //Delete Gateway
                    foreach (sysBpmsGateway gateway in new GatewayService(base.UnitOfWork).GetList(processId))
                    {
                        if (resultOperation.IsSuccess)
                        {
                            resultOperation = new GatewayService(base.UnitOfWork).Delete(gateway.ID);
                        }
                    }

                    //Delete Task
                    foreach (sysBpmsTask task in new TaskService(base.UnitOfWork).GetList(null, processId))
                    {
                        if (resultOperation.IsSuccess)
                        {
                            resultOperation = new TaskService(base.UnitOfWork).Delete(task.ID);
                        }
                    }

                    //Delete Event
                    foreach (sysBpmsEvent @event in new EventService(base.UnitOfWork).GetList(null, processId, "", null))
                    {
                        if (resultOperation.IsSuccess)
                        {
                            resultOperation = new EventService(base.UnitOfWork).Delete(@event.ID);
                        }
                    }

                    //Delete DynamicForm
                    foreach (sysBpmsDynamicForm dynamicForm in new DynamicFormService(base.UnitOfWork).GetList(processId, null, null, "", null, null))
                    {
                        if (resultOperation.IsSuccess)
                        {
                            resultOperation = new DynamicFormService(base.UnitOfWork).Delete(dynamicForm.ID);
                        }
                    }

                    //Delete Variable
                    foreach (sysBpmsVariable variable in new VariableService(base.UnitOfWork).GetList(processId, null, null, "", null, null))
                    {
                        if (resultOperation.IsSuccess)
                        {
                            resultOperation = new VariableService(base.UnitOfWork).Delete(variable.ID);
                        }
                    }

                    //Delete Process
                    if (resultOperation.IsSuccess)
                    {
                        this.UnitOfWork.Repository <IProcessRepository>().Delete(processId);
                        this.UnitOfWork.Save();
                    }
                }
            }
            catch (Exception ex)
            {
                return(base.ExceptionHandler(ex));
            }
            base.FinalizeService(resultOperation);
            return(resultOperation);
        }
        public object PostAddEdit(VariableDTO variableDTO)
        {
            int RelationTypeLU = base.MyRequest.Form["RelationTypeLU"].ToIntObj();

            variableDTO.ListDependencies = variableDTO.ListDependencies ?? new List <VariableDependencyDTO>();
            if (variableDTO.ProcessID.HasValue || variableDTO.ApplicationPageID.HasValue)
            {
                if (RelationTypeLU == (int)sysBpmsVariable.e_RelationTypeLU.Local && variableDTO.VarTypeLU == (int)sysBpmsVariable.e_VarTypeLU.List)
                {
                    variableDTO.Collection = variableDTO.ListItems.BuildXml();
                }
                //set ViewBags
                using (VariableService variableService = new VariableService())
                {
                    using (ProcessService processService = new ProcessService())
                    {
                        sysBpmsVariable variable = variableDTO.ID != Guid.Empty ? variableService.GetInfo(variableDTO.ID) : new sysBpmsVariable();

                        if (!base.ProcessId.HasValue || processService.GetInfo(base.ProcessId.Value).AllowEdit())
                        {
                            ResultOperation resultOperation = variable.Update(variableDTO.ProcessID, variableDTO.ApplicationPageID, variableDTO.Name, variableDTO.VarTypeLU, variableDTO.EntityDefID, variableDTO.FieldName, variableDTO.Query, variableDTO.FilterTypeLU, variableDTO.Collection, variableDTO.DBConnectionID, variableDTO.DefaultValue, variableDTO.WhereClause, variableDTO.OrderByClause);
                            if (!resultOperation.IsSuccess)
                            {
                                return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
                            }

                            List <sysBpmsVariableDependency> VariableDependencies = new List <sysBpmsVariableDependency>();
                            if (variableDTO.ID != Guid.Empty)
                            {
                                foreach (var item in variableDTO.ListDependencies)
                                {
                                    sysBpmsVariableDependency variableDependency = new sysBpmsVariableDependency();
                                    resultOperation = variableDependency.Update(item.ID, variableDTO.ID, item.DependentPropertyName, item.ToVariableID, item.ToPropertyName, item.Description);
                                    if (!resultOperation.IsSuccess)
                                    {
                                        return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
                                    }
                                    VariableDependencies.Add(variableDependency);
                                }
                                resultOperation = variableService.Update(variable, VariableDependencies);
                            }
                            else
                            {
                                foreach (var item in variableDTO.ListDependencies)
                                {
                                    sysBpmsVariableDependency variableDependency = new sysBpmsVariableDependency();
                                    resultOperation = variableDependency.Update(item.ID, item.DependentVariableID, item.DependentPropertyName, item.ToVariableID, item.ToPropertyName, item.Description);
                                    if (!resultOperation.IsSuccess)
                                    {
                                        return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
                                    }
                                    VariableDependencies.Add(variableDependency);
                                }
                                resultOperation = variableService.Add(variable, VariableDependencies);
                            }
                            if (resultOperation.IsSuccess)
                            {
                                return(new PostMethodMessage(SharedLang.Get("Success.Text"), DisplayMessageType.success, new
                                {
                                    name = variable.Name,
                                    id = variable.ID,
                                    comboTree = variableService.GetVariableAsComboTree(base.ProcessId, base.ApplicationPageId, null).AsJson(),
                                    entityVariables = variableService.GetList(base.ProcessId, base.ApplicationPageId, (int)sysBpmsVariable.e_VarTypeLU.Object, "", null, true).Select(c => new { text = c.Name, value = c.ID }).ToList(),
                                    listVariables = variableService.GetList(base.ProcessId, base.ApplicationPageId, (int)sysBpmsVariable.e_VarTypeLU.List, "", null, true).Select(c => new { text = c.Name, value = c.Name }).ToList()
                                }));
                            }
                            else
                            {
                                return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
                            }
                        }
                        else
                        {
                            return(new PostMethodMessage(LangUtility.Get("NotAllowEdit.Text", nameof(sysBpmsProcess)), DisplayMessageType.error));
                        }
                    }
                }
            }
            return(new PostMethodMessage(SharedLang.Get("NotFound.Text"), DisplayMessageType.error));
        }
        public void SetAccessInfoTo(sysBpmsThreadTask threadTask, Domain.sysBpmsTask task, EngineSharedModel engineSharedModel)
        {
            if (task.OwnerTypeLU.HasValue)
            {
                switch ((sysBpmsTask.e_OwnerTypeLU)task.OwnerTypeLU)
                {
                case sysBpmsTask.e_OwnerTypeLU.User:
                    switch ((UserTaskRuleModel.e_UserAccessType)task.UserTaskRuleModel.AccessType)
                    {
                    case UserTaskRuleModel.e_UserAccessType.Static:
                        threadTask.UpdateAccessInfo(task.UserID.ToGuidObj(), null);
                        break;

                    case UserTaskRuleModel.e_UserAccessType.Variable:
                        Guid?variableUserID = new DataManageEngine(engineSharedModel, base.UnitOfWork).GetValueByBinding(task.UserTaskRuleModel.Variable).ToGuidObjNull();
                        if (!variableUserID.HasValue)
                        {
                            throw new Exception(LangUtility.Get("UserNotFound.Text", nameof(sysBpmsThreadTask)));
                        }

                        threadTask.UpdateAccessInfo(variableUserID, null);
                        break;
                    }
                    break;

                case sysBpmsTask.e_OwnerTypeLU.Role:
                    switch ((UserTaskRuleModel.e_RoleAccessType)task.UserTaskRuleModel.AccessType)
                    {
                    case UserTaskRuleModel.e_RoleAccessType.Static:
                        //if this userTask must be seen by requester user, this add thread userId to new threadTask
                        if (task.IsInRole(null, (int)sysBpmsDepartmentMember.e_RoleLU.Requester))
                        {
                            threadTask.UpdateAccessInfo(engineSharedModel.CurrentThread?.UserID, null);
                        }
                        else
                        {
                            threadTask.UpdateAccessInfo(null, task.GetDepartmentRoles);
                        }
                        break;

                    case UserTaskRuleModel.e_RoleAccessType.Variable:
                        string roleName = new DataManageEngine(engineSharedModel, base.UnitOfWork).GetValueByBinding(task.UserTaskRuleModel.Variable).ToStringObj();
                        if (string.IsNullOrWhiteSpace(roleName))
                        {
                            throw new Exception(LangUtility.Get("RoleNotFound.Text", nameof(sysBpmsThreadTask)));
                        }

                        task.SetRoleDepartment(roleName, task.UserTaskRuleModel.SpecificDepartmentId);
                        //if this userTask must be seen by requester user, this add thread userId to new threadTask
                        if (task.IsInRole(null, (int)sysBpmsDepartmentMember.e_RoleLU.Requester))
                        {
                            threadTask.UpdateAccessInfo(engineSharedModel.CurrentThread?.UserID, null);
                        }
                        else
                        {
                            threadTask.UpdateAccessInfo(null, task.GetDepartmentRoles);
                        }
                        break;

                    case UserTaskRuleModel.e_RoleAccessType.CorrespondentRole:
                        Guid?userId       = task.UserTaskRuleModel.UserType == (int)UserTaskRuleModel.e_UserType.CurrentUserID ? new UserService(base.UnitOfWork).GetInfo(engineSharedModel.CurrentUserName ?? "")?.ID : engineSharedModel.CurrentThread?.UserID;
                        Guid?departmentId = new AccessCodeHelper(base.UnitOfWork).GetDepartmentHierarchyByUserId(userId.ToGuidObj(), task.UserTaskRuleModel.RoleCode.ToIntObj(), task.UserTaskRuleModel.GoUpDepartment);
                        if (!departmentId.HasValue)
                        {
                            throw new Exception(LangUtility.Get("OrganizationNotFound.Text", nameof(sysBpmsThreadTask)));
                        }

                        threadTask.UpdateAccessInfo(null, new List <Tuple <Guid?, string> >()
                        {
                            new Tuple <Guid?, string>(departmentId, task.UserTaskRuleModel.RoleCode)
                        });
                        break;
                    }
                    break;
                }
            }
            else
            {
                throw new Exception(LangUtility.Get("NextNoAccessSetting.Text", nameof(sysBpmsThreadTask)));
            }
        }