public async Task DenyAsync(FlowMasterAdapterModel flowMasterAdapterModel,
                                    ApproveOpinionModel approveOpinionModel)
        {
            CleanTrackingHelper.Clean <FlowMaster>(context);
            CleanTrackingHelper.Clean <FlowUser>(context);
            CleanTrackingHelper.Clean <FlowHistory>(context);
            CleanTrackingHelper.Clean <MyUser>(context);

            (var flowUsers, var user) = await GetUsersDataAsync(flowMasterAdapterModel);

            if (CheckCurrentActionUser(flowUsers, user, flowMasterAdapterModel) == false)
            {
                return;
            }

            RecoveryCompletion(flowUsers, flowMasterAdapterModel.ProcessLevel);

            flowMasterAdapterModel.ProcessLevel--;
            RecoveryCompletion(flowUsers, flowMasterAdapterModel.ProcessLevel);
            CopyUserAutoCompletion(flowUsers, flowMasterAdapterModel.ProcessLevel);

            if (flowMasterAdapterModel.ProcessLevel > 0)
            {
            }
            else
            {
                flowMasterAdapterModel.Status = 0;
            }

            FindNextActionUser(flowUsers, flowMasterAdapterModel);

            await context.BulkUpdateAsync(flowUsers);

            await UpdateAsync(flowMasterAdapterModel);

            await AddHistoryRecord(user, flowMasterAdapterModel,
                                   $"{approveOpinionModel.Summary}", $"{approveOpinionModel.Comment}", false);

            #region 產生收件匣紀錄
            await NotifyInboxUsers(flowUsers, flowMasterAdapterModel, flowMasterAdapterModel.ProcessLevel);

            #endregion

            CleanTrackingHelper.Clean <FlowMaster>(context);
            CleanTrackingHelper.Clean <FlowUser>(context);
            CleanTrackingHelper.Clean <FlowHistory>(context);
            CleanTrackingHelper.Clean <MyUser>(context);
        }
        public async Task BackToSendAsync(FlowMasterAdapterModel flowMasterAdapterModel,
                                          ApproveOpinionModel approveOpinionModel)
        {
            CleanTrackingHelper.Clean <FlowMaster>(context);
            CleanTrackingHelper.Clean <FlowUser>(context);
            CleanTrackingHelper.Clean <FlowHistory>(context);
            CleanTrackingHelper.Clean <MyUser>(context);

            (var flowUsers, var user) = await GetUsersDataAsync(flowMasterAdapterModel);

            if (CheckCurrentActionUser(flowUsers, user, flowMasterAdapterModel) == false)
            {
                return;
            }

            foreach (var item in flowUsers)
            {
                item.Completion = false;
            }
            flowMasterAdapterModel.ProcessLevel = 0;
            flowMasterAdapterModel.Status       = 0;

            FindNextActionUser(flowUsers, flowMasterAdapterModel);

            await context.BulkUpdateAsync(flowUsers);

            await UpdateAsync(flowMasterAdapterModel);

            await AddHistoryRecord(user, flowMasterAdapterModel,
                                   $"{approveOpinionModel.Summary}", $"{approveOpinionModel.Comment}", false);

            #region 產生收件匣紀錄
            await NotifyInboxUsers(flowUsers, flowMasterAdapterModel, flowMasterAdapterModel.ProcessLevel);

            #endregion

            CleanTrackingHelper.Clean <FlowMaster>(context);
            CleanTrackingHelper.Clean <FlowUser>(context);
            CleanTrackingHelper.Clean <FlowHistory>(context);
            CleanTrackingHelper.Clean <MyUser>(context);
        }
        public async Task SendAsync(FlowMasterAdapterModel flowMasterAdapterModel,
                                    ApproveOpinionModel approveOpinionModel)
        {
            CleanTrackingHelper.Clean <FlowMaster>(context);
            CleanTrackingHelper.Clean <FlowUser>(context);
            CleanTrackingHelper.Clean <FlowHistory>(context);
            CleanTrackingHelper.Clean <MyUser>(context);
            (var flowUsers, var user) = await GetUsersDataAsync(flowMasterAdapterModel);

            if (user.Id != flowMasterAdapterModel.MyUserId)
            {
                return;
            }

            var flowUser = flowUsers.FirstOrDefault(x => x.Level == 0);

            flowUser.Completion = true;
            flowMasterAdapterModel.ProcessLevel = 1;
            flowMasterAdapterModel.Status       = 1;

            CopyUserAutoCompletion(flowUsers, flowMasterAdapterModel.ProcessLevel);

            FindNextActionUser(flowUsers, flowMasterAdapterModel);

            await context.BulkUpdateAsync(flowUsers);

            await UpdateAsync(flowMasterAdapterModel);

            await AddHistoryRecord(user, flowMasterAdapterModel,
                                   $"{approveOpinionModel.Summary}", $"{approveOpinionModel.Comment}", true);

            #region 產生收件匣紀錄
            await NotifyInboxUsers(flowUsers, flowMasterAdapterModel, flowMasterAdapterModel.ProcessLevel);

            #endregion

            CleanTrackingHelper.Clean <FlowMaster>(context);
            CleanTrackingHelper.Clean <FlowUser>(context);
            CleanTrackingHelper.Clean <FlowHistory>(context);
            CleanTrackingHelper.Clean <MyUser>(context);
        }
        public async Task OnWorkOrderSendingDialogCompletion(ApproveOpinionModel e)
        {
            if (e != null)
            {
                #region 產生一筆稽核送審記錄
                var user = await CurrentUserHelper.GetCurrentUserAsync();

                var code = UniqueStringHelper.GetCode();
                FlowMasterAdapterModel flowMasterAdapterModel = new FlowMasterAdapterModel()
                {
                    Code           = code,
                    MyUserId       = user.Id,
                    PolicyHeaderId = e.PolicyHeaderAdapterModel.Id,
                    CreateDate     = DateTime.Now,
                    ProcessLevel   = 0,
                    Title          = $"工單完工 - {CurrentRecord.Description}",
                    Content        = "",
                    Status         = 0,
                    SourceType     = FlowSourceTypeEnum.WorkOrder,
                    SourceJson     = JsonConvert.SerializeObject(CurrentRecord),
                    SourceCode     = CurrentRecord.Code,
                };

                flowMasterAdapterModel.UpdateAt = DateTime.Now;
                await FlowMasterService.AddAsync(flowMasterAdapterModel);

                flowMasterAdapterModel = await FlowMasterService.GetAsync(code);

                await FlowMasterService.SendAsync(flowMasterAdapterModel, e);

                CurrentRecord.Status = MagicHelper.WorkOrderStatus送審;
                await CurrentService.UpdateAsync(CurrentRecord);

                this.dataGrid.RefreshGrid();
                #endregion
            }
            ShowWorkOrderSendingDialog = false;
        }
Example #5
0
        public async Task OnShowApproveOpinionDialogCompletion(ApproveOpinionModel e)
        {
            if (e != null)
            {
                switch (FlowActionEnum)
                {
                case FlowActionEnum.Send:
                    await CurrentService.SendAsync(FlowMasterAdapterModel, e);

                    break;

                case FlowActionEnum.BackToSend:
                    await CurrentService.BackToSendAsync(FlowMasterAdapterModel, e);

                    break;

                case FlowActionEnum.Agree:
                    await CurrentService.AgreeAsync(FlowMasterAdapterModel, e);

                    break;

                case FlowActionEnum.Deny:
                    await CurrentService.DenyAsync(FlowMasterAdapterModel, e);

                    break;

                default:
                    break;
                }
                dataGrid.RefreshGrid();
            }
            else
            {
            }
            ShowApproveOpinionDialog = false;
        }
        public async Task AgreeAsync(FlowMasterAdapterModel flowMasterAdapterModel,
                                     ApproveOpinionModel approveOpinionModel)
        {
            CleanTrackingHelper.Clean <FlowMaster>(context);
            CleanTrackingHelper.Clean <FlowUser>(context);
            CleanTrackingHelper.Clean <FlowHistory>(context);
            CleanTrackingHelper.Clean <WorkOrder>(context);
            CleanTrackingHelper.Clean <MyUser>(context);

            var thisLevel = flowMasterAdapterModel.ProcessLevel;

            (var flowUsers, var user) = await GetUsersDataAsync(flowMasterAdapterModel);

            if (CheckCurrentActionUser(flowUsers, user, flowMasterAdapterModel) == false)
            {
                return;
            }

            var flowUserCurrentLevel = flowUsers.Where(x => x.Level == flowMasterAdapterModel.ProcessLevel).ToList();
            var currentUser          = flowUserCurrentLevel.FirstOrDefault(x => x.MyUserId == user.Id);

            if (currentUser != null)
            {
                currentUser.Completion = true;
            }
            var remindUsers = flowUsers
                              .Where(x => x.Level == flowMasterAdapterModel.ProcessLevel &&
                                     x.Completion == false).ToList();
            bool allProcessing = (remindUsers.Count() > 0) ? false : true;

            if (allProcessing)
            {
                #region 是否是最後一關關卡
                var lastLevel = flowUsers.OrderByDescending(x => x.Level)
                                .FirstOrDefault();
                if (flowMasterAdapterModel.ProcessLevel == lastLevel.Level)
                {
                    flowMasterAdapterModel.Status = 99;
                    flowMasterAdapterModel.ProcessLevel++;
                    #region 若不是直接申請,則需要同步更新來源紀錄的狀態碼
                    if (flowMasterAdapterModel.SourceType == FlowSourceTypeEnum.WorkOrder)
                    {
                        if (string.IsNullOrEmpty(flowMasterAdapterModel.SourceCode) == false)
                        {
                            var workOrder = await context.WorkOrder
                                            .AsNoTracking()
                                            .FirstOrDefaultAsync(x => x.Code == flowMasterAdapterModel.SourceCode);

                            if (workOrder != null)
                            {
                                workOrder.Status = MagicHelper.WorkOrderStatus結案;
                                context.Update(workOrder);
                                await context.SaveChangesAsync();
                            }
                        }
                    }
                    #endregion
                }
                else
                {
                    #region 還有關卡要繼續審核
                    flowMasterAdapterModel.Status = 1;
                    flowMasterAdapterModel.ProcessLevel++;

                    CopyUserAutoCompletion(flowUsers, flowMasterAdapterModel.ProcessLevel);
                    #endregion
                }
                #endregion
            }

            FindNextActionUser(flowUsers, flowMasterAdapterModel);

            await context.BulkUpdateAsync(flowUsers);
            await UpdateAsync(flowMasterAdapterModel);

            await AddHistoryRecord(user, flowMasterAdapterModel,
                                   $"{approveOpinionModel.Summary}", $"{approveOpinionModel.Comment}", true);

            if (thisLevel != flowMasterAdapterModel.ProcessLevel &&
                flowMasterAdapterModel.Status != 99)
            {
                #region 產生收件匣紀錄
                await NotifyInboxUsers(flowUsers, flowMasterAdapterModel, flowMasterAdapterModel.ProcessLevel);

                #endregion
            }

            CleanTrackingHelper.Clean <FlowMaster>(context);
            CleanTrackingHelper.Clean <FlowUser>(context);
            CleanTrackingHelper.Clean <WorkOrder>(context);
            CleanTrackingHelper.Clean <FlowHistory>(context);
            CleanTrackingHelper.Clean <MyUser>(context);
        }