public ActionResult ReturnTo(WorkFlowFormViewModel formData)
        {
            if (formData.Description == null)
            {
                string errorMessage = "Please enter your cancellation reason.";
                ModelState.AddModelError("ProcessForm.Description", errorMessage);
                UserProcessViewModel kullaniciIslemVM = _workFlowProcessService.GetUserProcessVM(formData.Id);
                var workFlowBase = _workFlowProcessService.WorkFlowBaseInfo(kullaniciIslemVM);
                _workFlowProcessService.SetWorkFlowTraceForm(formData, workFlowBase);

                return(View(formData.ProcessTaskSpecialFormTemplateView, formData).WithMessage(this, "Error occured!", MessageType.Warning));
            }

            WorkFlowTrace islem = Mapper.Map <WorkFlowFormViewModel, WorkFlowTrace>(formData);

            _workFlowProcessService.AddOrUpdate(islem);

            var workFlowTraceId = formData.Id;

            _workFlowProcessService.CancelWorkFlowTrace(workFlowTraceId, formData.TargetProcessId);

            var surecKontrolSonuc = _workFlowProcessService.SetNextProcessForWorkFlow(workFlowTraceId);

            return(RedirectToAction("Index", surecKontrolSonuc).WithMessage(this, "Previous step started.", MessageType.Success));
        }
Exemplo n.º 2
0
        public override void WorkFlowFormSave <TClass, TVM>(WorkFlowFormViewModel workFlowFormViewModel)
        {
            base.WorkFlowFormSave <TClass, TVM>(workFlowFormViewModel);
            WorkFlowTrace torSatinAlmaIslem = Mapper.Map <WorkFlowFormViewModel, WorkFlowTrace>(workFlowFormViewModel);

            AddOrUpdate(torSatinAlmaIslem);
        }
Exemplo n.º 3
0
        public virtual WorkFlowTrace WorkFlowTraceDetail(int workFlowTraceId)
        {
            WorkFlowTrace WorkFlowTrace = _unitOfWork.Repository <WorkFlowTrace>()
                                          .Get(
                x => x.Id == workFlowTraceId,
                x => x.Process,
                x => x.Process.DocumentList,
                x => x.Process.FormView,
                x => x.DocumentList,
                x => x.Process.Task
                );

            if (WorkFlowTrace.Process.GetType() == typeof(Condition))
            {
                ((Condition)WorkFlowTrace.Process).OptionList = _unitOfWork.Repository <ConditionOption>().GetList(x => x.ConditionId == WorkFlowTrace.ProcessId).ToList();
            }

            if (WorkFlowTrace.Process.GetType() == typeof(SubProcess))
            {
                WorkFlowTrace.SubProcessList = _unitOfWork.Repository <BusinessProcess>().GetList(x => x.OwnerSubProcessTraceId == workFlowTraceId).ToList();
            }


            return(WorkFlowTrace);
        }
        public ActionResult Index(int workFlowTraceId)
        {
            UserProcessViewModel userProcessVM = _workFlowProcessService.GetUserProcessVM(workFlowTraceId);

            if (_workFlowProcessService.WorkFlowPermissionCheck(userProcessVM) == false)
            {
                return(RedirectToAction("Index", new { controller = "Home" }).WithMessage(this, "Access denied!", MessageType.Danger));
            }

            WorkFlowTrace workFlowTrace = _workFlowProcessService.WorkFlowTraceDetail(workFlowTraceId);

            WorkFlowFormViewModel workFlowTraceForm = Mapper.Map <WorkFlowTrace, WorkFlowFormViewModel>(workFlowTrace);
            int          ownerId    = workFlowTraceForm.OwnerId;
            ActionResult viewResult = null;

            WorkFlowFormViewModel workFlowForm = null;

            var workFlowBase = _workFlowProcessService.WorkFlowBaseInfo(userProcessVM);

            _workFlowProcessService.SetWorkFlowTraceForm(workFlowTraceForm, workFlowBase);

            workFlowForm = _workFlowProcessService.WorkFlowFormLoad(workFlowTraceForm);

            viewResult = View(workFlowForm.ProcessTaskSpecialFormTemplateView, workFlowForm);
            return(viewResult);
        }
        public ActionResult SaveAsDraft(WorkFlowFormViewModel formData)
        {
            if (ModelState.IsValid)
            {
                if (formData.ProcessFormViewCompleted && formData.GetType() != typeof(WorkFlowFormViewModel))
                {
                    _workFlowProcessService.CustomFormSave(formData);
                }
                else
                {
                    WorkFlowTrace torSatinAlmaIslem = Mapper.Map <WorkFlowFormViewModel, WorkFlowTrace>(formData);
                    _workFlowProcessService.AddOrUpdate(torSatinAlmaIslem);
                }

                UserProcessViewModel kullaniciIslemVM = _workFlowProcessService.GetUserProcessVM(formData.Id);
                var workFlowBase = _workFlowProcessService.WorkFlowBaseInfo(kullaniciIslemVM);
                _workFlowProcessService.SetWorkFlowTraceForm(formData, workFlowBase);


                return(View(formData.ProcessTaskSpecialFormTemplateView, formData).WithMessage(this, string.Format("{0} saved successfully.", formData.ProcessName), MessageType.Success));
            }
            else
            {
                UserProcessViewModel kullaniciIslemVM = _workFlowProcessService.GetUserProcessVM(formData.Id);
                var workFlowBase = _workFlowProcessService.WorkFlowBaseInfo(kullaniciIslemVM);
                _workFlowProcessService.SetWorkFlowTraceForm(formData, workFlowBase);

                return(View(formData.ProcessTaskSpecialFormTemplateView, formData).WithMessage(this, string.Format("Validation error!"), MessageType.Danger));
            }
        }
Exemplo n.º 6
0
        public object SetNextProcessForWorkFlow(int WorkFlowTraceId)
        {
            WorkFlowTrace WorkFlowTrace          = WorkFlowTraceDetail(WorkFlowTraceId);
            int           workFlowTraceProcessId = WorkFlowTrace.ProcessId;

            Process process = _unitOfWork.Repository <Process>().Get(workFlowTraceProcessId);

            var workFlowProcessList = WorkFlowTraceList(WorkFlowTrace.OwnerId);
            UserProcessViewModel lastWorkFlowTrace = workFlowProcessList.OrderByDescending(x => x.Id).First();
            int lastWorkFlowTraceProcessId         = lastWorkFlowTrace.ProcessId;

            bool nextProcessIsSuitable = false;

            if (process.Id != lastWorkFlowTraceProcessId)
            {
                nextProcessIsSuitable = true;
            }

            object routeObject = null;

            if (nextProcessIsSuitable)
            {
                routeObject = new { workFlowTraceId = lastWorkFlowTrace.Id };
            }
            else
            {
                routeObject = new { controller = "Home" };
            }
            return(routeObject);
        }
Exemplo n.º 7
0
        public string DecisionPointJobCallBase(string id, string jobId, string hourInterval)
        {
            WorkFlowTrace torSatinAlmaWorkFlowTrace = _unitOfWork.Repository <WorkFlowTrace>().Get(int.Parse(id));

            torSatinAlmaWorkFlowTrace.JobId = jobId;
            _unitOfWork.Repository <WorkFlowTrace>().Update(torSatinAlmaWorkFlowTrace);
            _unitOfWork.Complete();
            return("OK");
        }
Exemplo n.º 8
0
        public virtual void CancelWorkFlowTrace(int workFlowTraceId, int targetProcessId)
        {
            WorkFlowTrace WorkFlowTrace = _unitOfWork.Repository <WorkFlowTrace>().Get(workFlowTraceId);

            WorkFlowTrace.ProcessStatus = ProcessStatus.Cancelled;

            AddOrUpdate(WorkFlowTrace);

            CreateWorkFlowTrace(targetProcessId, WorkFlowTrace.OwnerId);
        }
Exemplo n.º 9
0
        public int StartWorkFlow(int ownerId, Task task)
        {
            WorkFlowTrace workFlowTrace = null;

            workFlowTrace = new WorkFlowTrace()
            {
                ProcessId     = (int)task.StartingProcessId,
                OwnerId       = ownerId,
                ProcessStatus = Common.Enums.ProcessStatus.Draft
            };
            AddOrUpdate(workFlowTrace);
            return(workFlowTrace.Id);
        }
        public ActionResult SaveAndSend(WorkFlowFormViewModel formData)
        {
            if (ModelState.IsValid)
            {
                bool fullFormValidate = _workFlowProcessService.FullFormValidate(formData, ModelState);

                if (!fullFormValidate)
                {
                    UserProcessViewModel userProcessVM = _workFlowProcessService.GetUserProcessVM(formData.Id);
                    var workFlowBase = _workFlowProcessService.WorkFlowBaseInfo(userProcessVM);
                    _workFlowProcessService.SetWorkFlowTraceForm(formData, workFlowBase);

                    return(View(formData.ProcessTaskSpecialFormTemplateView, formData).WithMessage(this, "Validation error!", MessageType.Warning));
                }

                WorkFlowTrace workFlowTrace = Mapper.Map <WorkFlowFormViewModel, WorkFlowTrace>(formData);

                if (formData.ProcessFormViewCompleted)
                {
                    if (formData.GetType() != typeof(WorkFlowFormViewModel))
                    {
                        _workFlowProcessService.CustomFormSave(formData);
                    }
                    else
                    {
                        _workFlowProcessService.AddOrUpdate(workFlowTrace);
                    }
                }
                else
                {
                    _workFlowProcessService.AddOrUpdate(workFlowTrace);
                }


                _workFlowProcessService.GoToWorkFlowNextProcess(workFlowTrace.OwnerId);
                var targetProcess = _workFlowProcessService.SetNextProcessForWorkFlow(workFlowTrace.Id);

                return(RedirectToAction("Index", targetProcess).WithMessage(this, "Saved Successfully.", MessageType.Success));
            }
            else
            {
                UserProcessViewModel userProcessVM = _workFlowProcessService.GetUserProcessVM(formData.Id);
                var workFlowBase = _workFlowProcessService.WorkFlowBaseInfo(userProcessVM);
                _workFlowProcessService.SetWorkFlowTraceForm(formData, workFlowBase);

                return(View(formData.ProcessTaskSpecialFormTemplateView, formData).WithMessage(this, string.Format("Validation error!"), MessageType.Danger));
            }
        }
Exemplo n.º 11
0
        private void CreateNewWorkFlowTrace(Process targetProcess, int ownerId)
        {
            WorkFlowTrace workFlowTrace = new WorkFlowTrace()
            {
                ProcessId     = targetProcess.Id,
                OwnerId       = ownerId,
                ProcessStatus = ProcessStatus.Draft
            };

            AddOrUpdate(workFlowTrace);

            if (targetProcess is DecisionPoint)
            {
                DecisionPointTakeTheNextStep(workFlowTrace.Id);
            }
            else if (targetProcess is SubProcess)
            {
                //Sub process will be start
                var taskVariableList = JsonConvert.DeserializeObject <List <TaskVariable> >(((SubProcess)targetProcess).TaskVariableList);
                foreach (var taskVariable in taskVariableList)
                {
                    var numberOfSubProcessCount       = 0;
                    var numberOfSubProcessCountString = GetVariable(taskVariable.VariableName, ownerId);
                    if (numberOfSubProcessCountString == null)
                    {
                        numberOfSubProcessCount = 1;
                    }
                    else
                    {
                        numberOfSubProcessCount = int.Parse(numberOfSubProcessCountString);
                    }

                    var task = _unitOfWork.Repository <Task>().Get(taskVariable.TaskId);

                    var subBusinessProcess = new BusinessProcess()
                    {
                        OwnerId = ownerId, Name = task.Name, OwnerSubProcessTraceId = workFlowTrace.Id
                    };
                    _unitOfWork.Repository <BusinessProcess>().Add(subBusinessProcess);
                    _unitOfWork.Complete();

                    StartWorkFlow(subBusinessProcess.Id, task);
                }
            }
        }
Exemplo n.º 12
0
        public virtual void AddOrUpdate(WorkFlowTrace workFlowTrace)
        {
            WorkFlowTrace workFlowTraceDB = null;

            if (workFlowTrace.Id == 0)
            {
                workFlowTraceDB = Mapper.Map <WorkFlowTrace, WorkFlowTrace>(workFlowTrace);
                _unitOfWork.Repository <WorkFlowTrace>().Add(workFlowTraceDB);
            }
            else
            {
                workFlowTraceDB = _unitOfWork.Repository <WorkFlowTrace>().Get(workFlowTrace.Id);
                Mapper.Map(workFlowTrace, workFlowTraceDB);
                _unitOfWork.Repository <WorkFlowTrace>().Update(workFlowTraceDB);
            }
            _unitOfWork.Complete();
            workFlowTrace.Id = workFlowTraceDB.Id;
        }
Exemplo n.º 13
0
        public virtual void WorkFlowProcessCancel(int workFlowTraceId)
        {
            WorkFlowTrace workFlowTrace = WorkFlowTraceDetail(workFlowTraceId);

            if (workFlowTrace.Process.GetType() == typeof(DecisionPoint))
            {
                DecisionPoint decisionPoint = (DecisionPoint)workFlowTrace.Process;

                if (decisionPoint.CancelProcessId != null)
                {
                    int cancelProcessId = (int)decisionPoint.CancelProcessId;

                    if (workFlowTrace.JobId != null)
                    {
                        RecurringJob.RemoveIfExists(workFlowTrace.JobId);
                    }
                    _unitOfWork.Repository <WorkFlowTrace>().Remove(workFlowTraceId);
                    CreateWorkFlowTrace(cancelProcessId, workFlowTrace.OwnerId);
                }
            }
        }
Exemplo n.º 14
0
        public void DecisionPointTakeTheNextStep(int workFlowTraceId)
        {
            WorkFlowTrace workFlowTraceDecisionPoint = _unitOfWork.Repository <WorkFlowTrace>().Get(workFlowTraceId);

            DecisionPoint decisionPoint = _unitOfWork.Repository <DecisionPoint>().Get(x => x.Id == workFlowTraceDecisionPoint.ProcessId, x => x.DecisionMethod, x => x.Task);

            if (!string.IsNullOrEmpty(decisionPoint.DecisionMethod.MethodFunction))
            {
                string serviceName = decisionPoint.Task.MethodServiceName;
                string methodName  = string.Format("{0}.{1}", serviceName, decisionPoint.DecisionMethod.MethodFunction.Substring(0, decisionPoint.DecisionMethod.MethodFunction.LastIndexOf("(")));

                var parameters = decisionPoint.DecisionMethod.MethodFunction.Substring(
                    decisionPoint.DecisionMethod.MethodFunction.LastIndexOf("(") + 1,
                    (decisionPoint.DecisionMethod.MethodFunction.LastIndexOf(")") - decisionPoint.DecisionMethod.MethodFunction.LastIndexOf("(") - 1))
                                 .Split(',')
                                 .Select(p => p.Trim())
                                 .ToList();


                List <object> parametersValue = new List <object>();

                foreach (var parameter in parameters)
                {
                    if (!string.IsNullOrWhiteSpace(parameter))
                    {
                        var property = workFlowTraceDecisionPoint.GetType().GetProperties().Where(x => x.Name == parameter).FirstOrDefault();
                        if (property != null)
                        {
                            var value = property.GetValue(workFlowTraceDecisionPoint, null);
                            parametersValue.Add(value);
                        }
                        else
                        {
                            parametersValue.Add(parameter);
                        }
                    }
                }

                var parametersArray = parametersValue.ToArray();

                var methodCallString = string.Format("{0}({1})", methodName, string.Join(",", parametersArray));

                var decisionMethodResult =
                    DynamicMethodCallService.Caller(
                        _unitOfWork,
                        methodCallString,
                        _workFlowDataService);

                Process conditionOption = _unitOfWork.Repository <ConditionOption>().Get(x => x.ConditionId == decisionPoint.Id && x.Value == decisionMethodResult);
                if (conditionOption.NextProcessId == decisionPoint.Id)
                {
                    if (workFlowTraceDecisionPoint.JobId == null)
                    {
                        List <object> decisionPointJobCallParameterList = new List <object>();

                        string jobId = Guid.NewGuid().ToString();
                        decisionPointJobCallParameterList.Add(workFlowTraceId);
                        decisionPointJobCallParameterList.Add(jobId);
                        decisionPointJobCallParameterList.Add(decisionPoint.RepetitionFrequenceByHour);

                        var methodJobCallString = string.Format("{0}.DecisionPointJobCall({1})", serviceName, string.Join(",", decisionPointJobCallParameterList.ToArray()));

                        DynamicMethodCallService.Caller(
                            _unitOfWork,
                            methodJobCallString,
                            _workFlowDataService);
                    }
                }
                else
                {
                    workFlowTraceDecisionPoint.ConditionOptionId = conditionOption.Id;
                    AddOrUpdate(workFlowTraceDecisionPoint);
                    if (workFlowTraceDecisionPoint.JobId != null)
                    {
                        RecurringJob.RemoveIfExists(workFlowTraceDecisionPoint.JobId);
                    }
                    GoToWorkFlowNextProcess(workFlowTraceDecisionPoint.OwnerId);
                }
            }
        }
Exemplo n.º 15
0
        public virtual void GoToWorkFlowNextProcess(int ownerId)
        {
            var WorkFlowTraceList = this.WorkFlowTraceList(ownerId);

            UserProcessViewModel userProcessVMCurrent = WorkFlowTraceList.OrderByDescending(x => x.Id).First();
            int currentUserProcessVMProcessId         = userProcessVMCurrent.ProcessId;

            if (userProcessVMCurrent.ConditionOptionId != null)
            {
                currentUserProcessVMProcessId = (int)userProcessVMCurrent.ConditionOptionId;
            }

            WorkFlowTrace workFlowTraceCurrentDB = _unitOfWork.Repository <WorkFlowTrace>().Get(userProcessVMCurrent.Id);

            workFlowTraceCurrentDB.ProcessStatus = Common.Enums.ProcessStatus.Completed;

            AddOrUpdate(workFlowTraceCurrentDB);

            Process currentProcess = _unitOfWork.Repository <Process>().Get(x => x.Id == currentUserProcessVMProcessId, x => x.NextProcess);

            if (currentProcess.GetType() == typeof(ConditionOption))
            {
                var key = userProcessVMCurrent.ProcessVariableName;
                if (key != null)
                {
                    var value = ((ConditionOption)currentProcess).Value;
                    SetVariable(key, value, ownerId);
                }
            }

            if (currentProcess.NextProcessId != null)
            {
                CreateNewWorkFlowTrace(currentProcess.NextProcess, ownerId);
            }
            else
            {
                //If process is last node of the work flow
                //And business process is a sub flow
                //We will check all sub flows (except current)
                var businessProcess = _unitOfWork.Repository <BusinessProcess>().Get(ownerId);
                if (businessProcess.OwnerSubProcessTraceId != null)
                {
                    var  allSubFlowsExceptCurrent = _unitOfWork.Repository <BusinessProcess>().GetAll().Where(x => x.OwnerSubProcessTraceId == businessProcess.OwnerSubProcessTraceId && x.Id != ownerId);
                    bool allSubProcessCompleted   = true;
                    foreach (var subFlow in allSubFlowsExceptCurrent)
                    {
                        var draftProcess = _unitOfWork.Repository <WorkFlowTrace>().GetAll().FirstOrDefault(x => x.OwnerId == subFlow.Id && x.ProcessStatus == ProcessStatus.Draft);
                        allSubProcessCompleted = draftProcess == null;
                        if (!allSubProcessCompleted)
                        {
                            break;
                        }
                    }


                    if (allSubProcessCompleted)
                    {
                        GoToWorkFlowNextProcess((int)businessProcess.OwnerId);
                    }
                }
            }
        }