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));
        }
Пример #3
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);
        }
        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));
            }
        }
Пример #5
0
        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
            }));
        }
Пример #7
0
 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),
     });
 }
Пример #8
0
        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);
        }
Пример #9
0
        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));
            }
        }
Пример #11
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);
                    }
                }
            }
        }
Пример #12
0
        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);
        }
Пример #13
0
        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()));
        }