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); }
public async Task <MtdApprovalStage> GetNextStageAsync() { MtdApprovalStage current = await GetCurrentStageAsync(); IList <MtdApprovalStage> stages = await GetStagesAsync(); return(stages.Where(x => x.Stage > current.Stage).FirstOrDefault()); }
public async Task <bool> IsFirstStageAsync() { MtdApprovalStage first = await GetCurrentStageAsync(); MtdApprovalStage current = await GetFirstStageAsync(); if (current == null) { return(false); } return(first.Id.Equals(current.Id)); }
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); }
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>()); }
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); }
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); }
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()); }
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()); }
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()); }
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()); }
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); }
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); }
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); }