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 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)); }
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); }
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)); } }
public bool WorkFlowPermissionCheck(UserProcessViewModel userProcessVM) { bool rslt = true; if ( !( ( userProcessVM.AssignedRole != ProjectRole.System && true //TODO ) || ( userProcessVM.AssignedRole == ProjectRole.System && true //TODO ) ) ) { var errorMessage = "Access denied!"; NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); logger.Error(errorMessage); rslt = false; } return(rslt); }
public ActionResult ShowWorkFlow(int workFlowTraceId) { UserProcessViewModel userProcessVM = _workFlowProcessService.GetUserProcessVM(workFlowTraceId); string workFlowDiagram = _workFlowService.GetWorkFlowDiagram(userProcessVM.TaskId); var workFlow = _workFlowProcessService.GetWorkFlow(workFlowDiagram, workFlowTraceId); return(PartialView("_MAkisGoster", new WorkFlowView { Flag = true, WorkFlowText = workFlow })); }
public WorkFlowDTO WorkFlowBaseInfo(UserProcessViewModel kullaniciWorkFlowTraceVM) { return (new WorkFlowDTO { TargetProcessListForCancel = kullaniciWorkFlowTraceVM.ProcessStatus != ProcessStatus.Completed ? TargetProcessListForCancel(kullaniciWorkFlowTraceVM.Id) : new List <UserProcessViewModel>(), AuthorizedProcessList = WorkFlowTraceList(kullaniciWorkFlowTraceVM.OwnerId).Where(x => x.ProcessStatus != ProcessStatus.Draft), ProgressProcessList = ProgressProcessList(kullaniciWorkFlowTraceVM.Id), }); }
public UserProcessViewModel GetWorkFlowTrace(int workFlowTraceId) { var workFlowTrace = _unitOfWork.Repository <WorkFlowTrace>() .Get(x => x.Id == workFlowTraceId, x => x.Process, x => x.ConditionOption, x => x.Process.Task, x => x.ConditionOption.MonitoringRoleList, x => x.Process.MonitoringRoleList); UserProcessViewModel userProcess = null; if (workFlowTrace != null) { userProcess = new UserProcessViewModel { Id = workFlowTrace.Id, ProcessStatus = workFlowTrace.ProcessStatus, OwnerId = workFlowTrace.OwnerId, ProcessId = workFlowTrace.ProcessId, ProcessVariableName = (workFlowTrace.Process.GetType() == typeof(Condition) || workFlowTrace.Process.GetType() == typeof(DecisionPoint) ? ((Condition)workFlowTrace.Process).VariableName : null), AssignedRole = workFlowTrace.Process.AssignedRole, Description = workFlowTrace.Description, ProcessName = workFlowTrace.Process.Name, Controller = workFlowTrace.Process.Task.Controller, SpecialFormTemplateView = workFlowTrace.Process.Task.SpecialFormTemplateView, ProcessUniqueCode = workFlowTrace.Process.ProcessUniqueCode, TaskId = workFlowTrace.Process.TaskId, TaskName = workFlowTrace.Process.Task.Name, NextProcessId = workFlowTrace.Process.NextProcessId, IsCondition = (workFlowTrace.Process.GetType() == typeof(Condition)), ProcessDescription = (workFlowTrace.ConditionOption == null ? workFlowTrace.Process.Description : string.Format("{0}({1})", workFlowTrace.Process.Description, workFlowTrace.ConditionOption.Description)), ProcessNotificationMessage = (workFlowTrace.ConditionOption == null ? workFlowTrace.Process.NotificationMessage : string.Format("{0}({1})", workFlowTrace.Process.NotificationMessage, workFlowTrace.ConditionOption.NotificationMessage)), ConditionOptionId = workFlowTrace.ConditionOptionId, UpdatedTime = workFlowTrace.UpdatedTime, CreatedTime = workFlowTrace.CreatedTime, ProcessMonitoringRolList = (workFlowTrace.ConditionOption ?? workFlowTrace.Process) .MonitoringRoleList .Select(t => new ProcessMonitoringRole { ProcessId = t.ProcessId, ProjectRole = t.ProjectRole }) .ToList(), IslemBelgeListesi = (workFlowTrace.DocumentList != null ? workFlowTrace.DocumentList.ToList() : null) }; } return(userProcess); }
public List <UserProcessViewModel> TargetProcessListForCancel(int WorkFlowTraceId) { var birimdekiTumWorkFlowTraceler = _workFlowDataService.GetWorkFlowTraceList(); UserProcessViewModel kullaniciWorkFlowTrace = birimdekiTumWorkFlowTraceler .Where(x => x.Id == WorkFlowTraceId) .FirstOrDefault(); var tumIslemler = birimdekiTumWorkFlowTraceler .Where(x => x.OwnerId == kullaniciWorkFlowTrace.OwnerId && x.ProcessStatus == Common.Enums.ProcessStatus.Completed && x.Id < WorkFlowTraceId) .OrderByDescending(x => x.Id); List <UserProcessViewModel> oncekiWorkFlowTraceListesi = new List <UserProcessViewModel>(); var taskId = kullaniciWorkFlowTrace.TaskId;//WorkFlowTrace.GorevWorkFlowTrace.GorevId; var WorkFlowTraceiYapanRol = kullaniciWorkFlowTrace.AssignedRole; var gorevWorkFlowTraceId = kullaniciWorkFlowTrace.ProcessId; var gorevWorkFlowTraceListesi = _workFlowDataService.GetWorkFlowProcessList(taskId); foreach (var oncekiIslem in tumIslemler) { ProcessVM gorevWorkFlowTrace = gorevWorkFlowTraceListesi.SingleOrDefault(x => x.Id == oncekiIslem.ProcessId); if (gorevWorkFlowTrace.AssignedRole == ProjectRole.System) { continue; } if (gorevWorkFlowTrace.AssignedRole != WorkFlowTraceiYapanRol) { break; } if (gorevWorkFlowTrace.IsCondition) { gorevWorkFlowTrace = gorevWorkFlowTraceListesi.SingleOrDefault(x => x.Id == oncekiIslem.ConditionOptionId); } if (oncekiIslem.ProcessId != gorevWorkFlowTraceId && !oncekiWorkFlowTraceListesi.Any(x => oncekiIslem.ProcessId == x.ProcessId)) { List <int> elementOfTree = new List <int>(); if (!SearchProcessInsideNextPath(elementOfTree, gorevWorkFlowTraceListesi, gorevWorkFlowTraceId, oncekiIslem.ProcessId)) { oncekiWorkFlowTraceListesi.Add(oncekiIslem); } } } return(oncekiWorkFlowTraceListesi.OrderBy(x => x.Id).ToList()); }
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)); } }
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); } } } }
public List <WorkFlowTraceVM> ProgressProcessList(int workFlowTraceId) { UserProcessViewModel kullaniciWorkFlowTrace = _workFlowDataService .GetWorkFlowTraceList() .Single(x => x.Id == workFlowTraceId); ProcessVM sonrakiGorev = null; var processList = _workFlowDataService.GetWorkFlowProcessList(kullaniciWorkFlowTrace.TaskId); if (kullaniciWorkFlowTrace.NextProcessId != null) { sonrakiGorev = processList .Where(x => x.Id == (int)kullaniciWorkFlowTrace.NextProcessId) .FirstOrDefault(); } var workFlowTraceListesi = WorkFlowTraceList(kullaniciWorkFlowTrace.OwnerId); List <WorkFlowTraceVM> tumWorkFlowTraceler = workFlowTraceListesi .OrderBy(x => x.LastlyModifiedTime) .Select(x => new WorkFlowTraceVM { Description = x.ProcessDescription, ProcessName = x.ProcessName, ProcessId = x.ProcessId, ProcessStatus = x.ProcessStatus, ConditionOptionId = x.ConditionOptionId, OwnerId = x.OwnerId, AssignedRole = x.AssignedRole, Id = x.Id }) .ToList(); List <WorkFlowTraceVM> progressGosterilecekWorkFlowTraceler = new List <WorkFlowTraceVM>(); if (tumWorkFlowTraceler.Count() > 1) { for (int i = 0; i < tumWorkFlowTraceler.Count(); i++) { if ((i + 1) < tumWorkFlowTraceler.Count() && tumWorkFlowTraceler[i + 1].Id == workFlowTraceId) { progressGosterilecekWorkFlowTraceler.Add(tumWorkFlowTraceler[i]); progressGosterilecekWorkFlowTraceler.Add(tumWorkFlowTraceler[i + 1]); break; } } } else { progressGosterilecekWorkFlowTraceler.Add(tumWorkFlowTraceler[0]); } if (sonrakiGorev != null) { progressGosterilecekWorkFlowTraceler.Add(new WorkFlowTraceVM { ProcessStatus = null, AssignedRole = sonrakiGorev.AssignedRole, Description = sonrakiGorev.Description, ProcessName = sonrakiGorev.Name }); } return(progressGosterilecekWorkFlowTraceler); }
public string GetWorkFlow(string gorevAkis, int WorkFlowTraceId) { var workFlowTraceListesi = _workFlowDataService .GetWorkFlowTraceList(); UserProcessViewModel kullaniciIslem = workFlowTraceListesi .Single(x => x.Id == WorkFlowTraceId); IEnumerable <UserProcessViewModel> workFlowTraceListesiForOwner = workFlowTraceListesi .Where(x => x.OwnerId == kullaniciIslem.OwnerId); Dictionary <string, int> workFlowTraceTekrarSayisi = new Dictionary <string, int>(); Dictionary <string, string> workFlowTraceDurumClassi = new Dictionary <string, string>(); foreach (var workFlowTrace in workFlowTraceListesiForOwner) { int tekrarSayisi; string durumClassi = ""; string dummy = ""; if (workFlowTraceTekrarSayisi.TryGetValue(workFlowTrace.ProcessUniqueCode, out tekrarSayisi)) { tekrarSayisi++; workFlowTraceTekrarSayisi[workFlowTrace.ProcessUniqueCode] = tekrarSayisi; } else { tekrarSayisi++; workFlowTraceTekrarSayisi.Add(workFlowTrace.ProcessUniqueCode, tekrarSayisi); } if (workFlowTrace.ProcessStatus == Common.Enums.ProcessStatus.Draft) { durumClassi = "current"; } else if (workFlowTrace.ProcessStatus == Common.Enums.ProcessStatus.Cancelled) { durumClassi = "cancelled"; } else //Tamamlanmışsa ikinci kez tekrar edilip edilmediği kontrol edilecek { if (tekrarSayisi > 1) { durumClassi = "revized"; } else { durumClassi = "completed"; } } if (workFlowTraceDurumClassi.TryGetValue(workFlowTrace.ProcessUniqueCode, out dummy)) { workFlowTraceDurumClassi[workFlowTrace.ProcessUniqueCode] = durumClassi; } else { workFlowTraceDurumClassi.Add(workFlowTrace.ProcessUniqueCode, durumClassi); } } StringBuilder statusString = new StringBuilder( @"classDef completed fill:#9f6,stroke:#333,stroke-width:2px;" + "classDef current fill: yellow,stroke:#333,stroke-width:2px;" + "classDef cancelled fill: #e55c59,stroke:#333,stroke-width:2px;" + "classDef revized fill:#196,stroke:#333,stroke-width:2px;"); statusString.Append("\\n"); foreach (var WorkFlowTraceDurum in workFlowTraceDurumClassi) { statusString.Append(string.Format("class {0} {1};\\n", WorkFlowTraceDurum.Key, WorkFlowTraceDurum.Value)); } return(string.Format("{0}\\n{1}", gorevAkis, statusString.ToString())); }