示例#1
0
        public async Task <bool> IsApproverAsync(WebAppUser user)
        {
            bool isComplete = await IsComplete();

            bool isApprovalForm = await IsApprovalFormAsync();

            if (!isApprovalForm || isComplete)
            {
                return(false);
            }

            MtdApprovalStage mtdApprovalStage = await GetCurrentStageAsync();

            MtdStore store = await GetStoreAsync();

            bool forOwner = false;

            if (store.MtdStoreOwner != null)
            {
                MtdApprovalStage firstStage = await GetFirstStageAsync();

                if (firstStage != null)
                {
                    forOwner = (store.MtdStoreOwner.UserId.Equals(user.Id) && mtdApprovalStage.Id.Equals(firstStage.Id));
                }
            }

            if (mtdApprovalStage != null && (mtdApprovalStage.UserId.Equals(user.Id) || forOwner))
            {
                return(true);
            }

            return(false);
        }
示例#2
0
        public async Task <MtdApprovalStage> GetNextStageAsync()
        {
            MtdApprovalStage current = await GetCurrentStageAsync();

            IList <MtdApprovalStage> stages = await GetStagesAsync();

            return(stages.Where(x => x.Stage > current.Stage).FirstOrDefault());
        }
示例#3
0
        public async Task <bool> IsFirstStageAsync()
        {
            MtdApprovalStage first = await GetCurrentStageAsync();

            MtdApprovalStage current = await GetFirstStageAsync();

            if (current == null)
            {
                return(false);
            }
            return(first.Id.Equals(current.Id));
        }
示例#4
0
        private async Task <bool> SendEmailApprove(ApprovalHandler approvalHandler)
        {
            string ownerId = await approvalHandler.GetOwnerID();

            WebAppUser userCurrent = await _userHandler.GetUserAsync(HttpContext.User);

            WebAppUser userOwner = _userHandler.Users.Where(x => x.Id == ownerId).FirstOrDefault();
            string     storeId   = await approvalHandler.GetStoreID();

            MtdForm mtdForm = await approvalHandler.GetFormAsync();

            MtdApprovalStage stageNext = await approvalHandler.GetNextStageAsync();

            if (stageNext != null)
            {
                WebAppUser userNext   = _userHandler.Users.Where(x => x.Id == stageNext.UserId).FirstOrDefault();
                BlankEmail blankEmail = new BlankEmail
                {
                    Subject = _localizer["Approval event"],
                    Email   = userNext.Email,
                    Header  = _localizer["Approval required"],
                    Content = new List <string> {
                        $"<strong>{_localizer["Document"]} - {mtdForm.Name}</strong>",
                        $"{_localizer["User"]} {userCurrent.Title} {_localizer["approved the document at"]} {DateTime.Now}",
                        $"{_localizer["Click on the link to view the document that required to approve."]}",
                        $"<a href='http://{HttpContext.Request.Host}/workplace/store/details?id={storeId}'>{_localizer["Document link"]}</a>"
                    }
                };

                await _emailSender.SendEmailBlankAsync(blankEmail);
            }

            bool IsFirstStage = await approvalHandler.IsFirstStageAsync();

            if (!IsFirstStage)
            {
                BlankEmail blankEmail = new BlankEmail
                {
                    Subject = _localizer["Approval event"],
                    Email   = userOwner.Email,
                    Header  = _localizer["Approval process event"],
                    Content = new List <string> {
                        $"<strong>{_localizer["Document"]} - {mtdForm.Name}</strong>",
                        $"{_localizer["User"]} {userCurrent.Title} {_localizer["approved the document at"]} {DateTime.Now}",
                        $"{_localizer["Click on the link to view the document."]}",
                        $"<a href='http://{HttpContext.Request.Host}/workplace/store/details?id={storeId}'>{_localizer["Document link"]}</a>"
                    }
                };
                await _emailSender.SendEmailBlankAsync(blankEmail);
            }

            return(true);
        }
示例#5
0
        public async Task <List <MtdApprovalStage> > GetStagesDownAsync()
        {
            MtdApproval mtdApproval = await GetApproval();

            if (mtdApproval != null)
            {
                MtdApprovalStage currentStage = await GetCurrentStageAsync();

                return(mtdApproval.MtdApprovalStage.Where(x => x.Stage < currentStage.Stage).OrderBy(x => x.Stage).ToList());
            }

            return(new List <MtdApprovalStage>());
        }
示例#6
0
        public async Task <MtdApprovalStage> GetPrevStage()
        {
            MtdApprovalStage prevStage = await GetCurrentStageAsync();

            IList <MtdApprovalStage> stages = await GetStagesAsync();

            var stage = stages.Where(x => x.Stage < prevStage.Stage).FirstOrDefault();

            if (stage != null)
            {
                prevStage = stage;
            }
            return(prevStage);
        }
示例#7
0
        public async Task <List <string> > GetWilBeBlockedPartsIds()
        {
            List <string>    ids = new List <string>();
            MtdApprovalStage mtdApprovalStage = await GetCurrentStageAsync();

            if (mtdApprovalStage != null)
            {
                ids = mtdApprovalStage.BlockParts.Split("&").ToList();
                if (ids.Any())
                {
                    ids.RemoveAt(ids.Count - 1);
                }
            }

            return(ids);
        }
示例#8
0
        public async Task <IActionResult> OnPostStageCreateAsync()
        {
            IFormCollection requestForm = await Request.ReadFormAsync();

            string approvalId    = requestForm["IdApproval"];
            string fieldName     = requestForm["fieldName"];
            string fieldNote     = requestForm["fieldNote"];
            string fieldUser     = requestForm["fieldUser"];
            string fieldStageStr = requestForm["fieldStage"];

            int.TryParse(fieldStageStr, out int fieldStage);
            string blockParts = string.Empty;

            if (approvalId == null)
            {
                return(NotFound());
            }

            MtdApproval mtdApproval = await _context.MtdApproval.FindAsync(approvalId);

            IList <string> partIds = await _context.MtdFormPart.Where(x => x.MtdForm == mtdApproval.MtdForm).Select(x => x.Id).ToListAsync();

            foreach (string id in partIds)
            {
                bool result = bool.TryParse(Request.Form[id], out bool check);
                if (result && check)
                {
                    blockParts += $"{id}&";
                }
            }

            MtdApprovalStage stage = new MtdApprovalStage
            {
                MtdApproval = approvalId,
                BlockParts  = blockParts,
                Description = fieldNote,
                Name        = fieldName,
                UserId      = fieldUser,
                Stage       = fieldStage,
            };

            await _context.MtdApprovalStage.AddAsync(stage);

            await _context.SaveChangesAsync();

            return(Ok());
        }
示例#9
0
        public async Task <IActionResult> OnPostStageEditAsync()
        {
            IFormCollection requestForm = await Request.ReadFormAsync();

            string stageId       = requestForm["IdStage"];
            string fieldName     = requestForm["fieldName"];
            string fieldNote     = requestForm["fieldNote"];
            string fieldUser     = requestForm["fieldUser"];
            string fieldStageStr = requestForm["fieldStage"];

            int.TryParse(fieldStageStr, out int fieldStage);
            string blockParts = string.Empty;

            if (stageId == null || !int.TryParse(stageId, out int id))
            {
                return(NotFound());
            }


            MtdApprovalStage mtdApprovalStage = await _context.MtdApprovalStage.Include(x => x.MtdApprovalNavigation).Where(x => x.Id == id).FirstOrDefaultAsync();

            if (mtdApprovalStage == null)
            {
                return(NotFound());
            }
            IList <string> partIds = await _context.MtdFormPart.Where(x => x.MtdForm == mtdApprovalStage.MtdApprovalNavigation.MtdForm).Select(x => x.Id).ToListAsync();

            foreach (string idPart in partIds)
            {
                bool result = bool.TryParse(Request.Form[idPart], out bool check);
                if (result && check)
                {
                    blockParts += $"{idPart}&";
                }
            }

            mtdApprovalStage.BlockParts  = blockParts;
            mtdApprovalStage.Description = fieldNote;
            mtdApprovalStage.Name        = fieldName;
            mtdApprovalStage.UserId      = fieldUser;
            mtdApprovalStage.Stage       = fieldStage;

            _context.MtdApprovalStage.Update(mtdApprovalStage);
            await _context.SaveChangesAsync();

            return(Ok());
        }
示例#10
0
        public async Task <IActionResult> OnPostStageDeleteAsync()
        {
            string stageId = Request.Form["id-stage-delete"];
            bool   ok      = int.TryParse(stageId, out int id);

            if (stageId == null && !ok)
            {
                return(NotFound());
            }

            MtdApprovalStage stage = new MtdApprovalStage {
                Id = id
            };

            _context.MtdApprovalStage.Remove(stage);
            await _context.SaveChangesAsync();

            return(Ok());
        }
示例#11
0
        public async Task <IActionResult> OnGetAsync(string idApproval)
        {
            MtdApproval = await _context.MtdApproval.FindAsync(idApproval);

            if (MtdApproval == null)
            {
                return(NotFound());
            }

            MtdApprovalStage = new MtdApprovalStage
            {
                MtdApproval = MtdApproval.Id,
            };

            MtdFormParts = await _context.MtdFormPart.Where(x => x.MtdForm == MtdApproval.MtdForm).OrderBy(x => x.Sequence).ToListAsync();

            IList <WebAppUser> webAppUsers = await _userHandler.Users.ToListAsync();

            ViewData["Users"] = new SelectList(webAppUsers, "Id", "Title");
            return(Page());
        }
示例#12
0
        public async Task <ApprovalStatus> GetStatusAsync(WebAppUser appUser)
        {
            ApprovalStatus   status = ApprovalStatus.Start;
            MtdApprovalStage stage  = await GetCurrentStageAsync();

            if (stage == null)
            {
                return(status);
            }

            bool isComplete = await IsComplete();

            int result = await GetResultAsync();

            bool isFirst = await IsFirstStageAsync();

            bool isApprover = await IsApproverAsync(appUser);

            status = DefineStatus(isComplete, result, isFirst, isApprover);

            return(status);
        }
示例#13
0
        public async Task <bool> ActionReject(bool complete, int idStage, WebAppUser webAppUser)
        {
            MtdStore mtdStore = await GetStoreAsync();

            if (mtdStore.MtdStoreApproval != null && mtdStore.MtdStoreApproval.Complete == 1)
            {
                return(false);
            }

            MtdApproval mtdApproval = await GetApproval();

            MtdApprovalStage currentStage = await GetCurrentStageAsync();

            MtdApprovalStage prevStage;

            if (!complete)
            {
                prevStage = mtdApproval.MtdApprovalStage.Where(x => x.Id == idStage).FirstOrDefault();
            }
            else
            {
                prevStage = await GetCurrentStageAsync();
            }

            if (prevStage == null)
            {
                return(false);
            }

            var allStages = await GetStagesAsync();

            var blockPartsStage = allStages.Where(x => x.Stage < prevStage.Stage).FirstOrDefault();

            MtdStoreApproval storeApproval = new MtdStoreApproval
            {
                Id = mtdStore.Id,
                MtdApproveStage = prevStage.Id,
                PartsApproved   = blockPartsStage == null ? "&" : blockPartsStage.BlockParts,
                Complete        = complete ? (sbyte)1 : (sbyte)0,
                Result          = -1,
            };

            if (mtdStore.MtdStoreApproval == null)
            {
                await _context.MtdStoreApproval.AddAsync(storeApproval);
            }
            else
            {
                try
                {
                    _context.MtdStoreApproval.Update(storeApproval);
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            MtdLogApproval mtdLogApproval = new MtdLogApproval()
            {
                MtdStore = mtdStore.Id,
                Result   = -1,
                Stage    = currentStage.Stage,
                Timecr   = DateTime.Now,
                UserId   = webAppUser.Id
            };

            await _context.MtdLogApproval.AddAsync(mtdLogApproval);



            try
            {
                await _context.SaveChangesAsync();
            }
            catch
            {
                return(false);
            }

            return(true);
        }
示例#14
0
        public async Task <bool> ActionApprove(WebAppUser webAppUser)
        {
            MtdStore mtdStore = await GetStoreAsync();

            if (mtdStore.MtdStoreApproval != null && mtdStore.MtdStoreApproval.Complete == 1)
            {
                return(false);
            }

            MtdApprovalStage currentStage = await GetCurrentStageAsync();

            MtdApprovalStage nextStage = await GetNextStageAsync();

            sbyte complete = 0;

            if (nextStage == null)
            {
                complete = 1; nextStage = await GetLastStageAsync();
            }
            ;

            MtdStoreApproval storeApproval = new MtdStoreApproval
            {
                Id = mtdStore.Id,
                MtdApproveStage = nextStage.Id,
                PartsApproved   = currentStage.BlockParts,
                Complete        = complete,
                Result          = 1,
            };

            if (mtdStore.MtdStoreApproval == null)
            {
                await _context.MtdStoreApproval.AddAsync(storeApproval);
            }
            else
            {
                _context.MtdStoreApproval.Update(storeApproval);
            }

            MtdLogApproval mtdLogApproval = new MtdLogApproval()
            {
                MtdStore = mtdStore.Id,
                Result   = 1,
                Stage    = currentStage.Id,
                Timecr   = DateTime.Now,
                UserId   = webAppUser.Id
            };

            await _context.MtdLogApproval.AddAsync(mtdLogApproval);

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                throw ex.InnerException;
            }

            return(true);
        }