public async Task <IActionResult> OnPostGetIDAsync() { IFormCollection requestForm = await Request.ReadFormAsync(); string result = ""; string idFormPart = requestForm["idFromParent"]; string parentNumber = requestForm["store-parent-number"]; if (parentNumber.Length == 0) { return(Ok(result)); } parentNumber = parentNumber.TrimStart(new char[] { '0' }); bool isOk = int.TryParse(parentNumber, out int num); if (!isOk) { return(Ok(result)); } MtdStore mtdStore = await _context.MtdStore.FirstOrDefaultAsync(x => x.MtdForm == idFormPart& x.Sequence == num); if (mtdStore != null) { result = mtdStore.Id; } return(Ok(result)); }
public async Task <IActionResult> OnPostDeleteAsync() { IFormCollection requestForm = await Request.ReadFormAsync(); string idStore = requestForm["store-delete-id"]; MtdStore mtdStore = await _context.MtdStore.FindAsync(idStore); if (mtdStore == null) { return(NotFound()); } WebAppUser webAppUser = await _userHandler.GetUserAsync(HttpContext.User); bool isEraser = await _userHandler.IsEraser(webAppUser, mtdStore.MtdForm, mtdStore.Id); if (!isEraser) { return(Ok(403)); } _context.MtdStore.Remove(mtdStore); await _context.SaveChangesAsync(); return(Ok()); }
public ApprovalHandler(OrderMakerContext context, string idstore) { _context = context; idStore = idstore; storeCache = null; approvalCache = null; }
public async Task <IActionResult> OnGet(string idForm, string idStoreParent) { if (idForm == null) { return(NotFound()); } var user = await _userHandler.GetUserAsync(HttpContext.User); bool isCreator = await _userHandler.IsCreator(user, idForm); if (!isCreator) { return(Forbid()); } MtdForm = await _context.MtdForm.FindAsync(idForm); MtdStore mtdStoreParent = await _context.MtdStore.FirstOrDefaultAsync(x => x.Id == idStoreParent); MtdStore = new MtdStore { MtdForm = MtdForm.Id, MtdFormNavigation = MtdForm, Parent = idStoreParent, ParentNavigation = mtdStoreParent }; return(Page()); }
public async Task <IActionResult> OnGetAsync(string id) { if (id == null) { return(NotFound()); } MtdStore = await _context.MtdStore.FirstOrDefaultAsync(m => m.Id == id); if (MtdStore == null) { return(NotFound()); } var user = await _userHandler.GetUserAsync(HttpContext.User); bool isViewer = await _userHandler.IsViewer(user, MtdStore.MtdForm, MtdStore.Id); if (!isViewer) { return(Forbid()); } return(Page()); }
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 <string> GetOwnerID() { MtdStore mtdStore = await GetStoreAsync(); if (mtdStore.MtdStoreOwner == null) { return(string.Empty); } return(mtdStore.MtdStoreOwner.UserId); }
public async Task <bool> IsComplete() { bool result = false; MtdStore mtdStore = await GetStoreAsync(); if (mtdStore.MtdStoreApproval != null && mtdStore.MtdStoreApproval.Complete == 1) { result = true; } return(result); }
public async Task <string> GetStoreID() { string result = string.Empty; MtdStore mtdStore = await GetStoreAsync(); if (mtdStore != null) { result = mtdStore.Id; } return(result); }
public async Task <int> GetResultAsync() { MtdStore mtdStore = await GetStoreAsync(); if (mtdStore.MtdStoreApproval != null) { return(mtdStore.MtdStoreApproval.Result); } return(0); }
public async Task <OutFlow> GetDataForNumberAsync(Incomer incomer) { MtdStore mtdStore = await queryMtdStore.Where(x => x.MtdForm == incomer.IdForm& x.Sequence.ToString().Equals(incomer.SearchNumber)).FirstOrDefaultAsync(); return(new OutFlow { Count = mtdStore != null ? 1 : 0, MtdStores = mtdStore != null ? new List <MtdStore> { mtdStore } : new List <MtdStore>() }); }
private async Task <MtdApproval> GetApproval() { if (approvalCache != null) { return(approvalCache); } MtdStore mtdStore = await GetStoreAsync(); return(await _context.MtdApproval.AsNoTracking() .Include(x => x.MtdApprovalStage) .Where(x => x.MtdForm == mtdStore.MtdForm) .FirstOrDefaultAsync()); }
public async Task <IViewComponentResult> InvokeAsync(MtdStore store, FormType type = FormType.Details) { if (store == null) { return(View()); } WebAppUser webAppUser = await _userHandler.GetUserAsync(HttpContext.User); if (type == FormType.Create) { store.MtdFormNavigation.MtdFormHeader = await _context.MtdFormHeader.FindAsync(store.MtdForm); store.MtdFormNavigation.ParentNavigation = await _context.MtdForm.FindAsync(store.MtdFormNavigation.Parent); List <MtdFormPart> mtdFormParts = new List <MtdFormPart>(); IList <MtdFormPart> parts = await GetPartsAsync(store.MtdForm); foreach (MtdFormPart formPart in parts) { bool isCreator = await _userHandler.IsCreatorPartAsync(webAppUser, formPart.Id); if (isCreator) { mtdFormParts.Add(formPart); } } IList <MtdFormPartField> mtdFormPartFields = await GetFieldsAsync(mtdFormParts); DataSet dataSetForCreate = new DataSet() { Store = store, Parts = mtdFormParts, Fields = mtdFormPartFields, Stack = new List <MtdStoreStack>() }; return(View("Create", dataSetForCreate)); } DataContainer dataContainer = new DataContainer { Owner = await CreateDataSetAsync(store, type), Parent = await CreateDataSetAsync(store.ParentNavigation) }; return(View(type.ToString(), dataContainer)); }
private async Task <MtdStore> GetStoreAsync() { if (storeCache != null) { return(storeCache); } storeCache = await _context.MtdStore.AsNoTracking() .Include(x => x.MtdFormNavigation) .Include(x => x.MtdStoreApproval) .Include(x => x.MtdStoreOwner) .Where(x => x.Id == idStore) .FirstOrDefaultAsync(); return(storeCache); }
public async Task <MtdApprovalStage> GetCurrentStageAsync() { MtdApproval approval = await GetApproval(); if (approval == null) { return(null); } MtdStore mtdStore = await GetStoreAsync(); if (mtdStore.MtdStoreApproval == null) { return(await GetFirstStageAsync()); } return(approval.MtdApprovalStage.Where(x => x.Id == mtdStore.MtdStoreApproval.MtdApproveStage).FirstOrDefault()); }
public async Task <List <string> > GetBlockedPartsIds() { MtdStore mtdStore = await GetStoreAsync(); List <string> ids = new List <string>(); if (mtdStore.MtdStoreApproval != null) { ids = mtdStore.MtdStoreApproval.PartsApproved.Split("&").ToList(); if (ids.Any()) { ids.RemoveAt(ids.Count - 1); } } return(ids); }
public async Task <IActionResult> OnPostSaveAsync() { IFormCollection requestForm = await Request.ReadFormAsync(); string Id = requestForm["idStore"]; MtdStore mtdStore = await _context.MtdStore.FirstOrDefaultAsync(x => x.Id == Id); if (mtdStore == null) { return(NotFound()); } WebAppUser webAppUser = await _userHandler.GetUserAsync(HttpContext.User); bool isEditor = await _userHandler.IsEditor(webAppUser, mtdStore.MtdForm, mtdStore.Id); ApprovalHandler approvalHandler = new ApprovalHandler(_context, mtdStore.Id); ApprovalStatus approvalStatus = await approvalHandler.GetStatusAsync(webAppUser); if (!isEditor || approvalStatus == ApprovalStatus.Rejected || approvalStatus == ApprovalStatus.Waiting) { return(Ok(403)); } MtdLogDocument mtdLog = new MtdLogDocument { MtdStore = mtdStore.Id, TimeCh = DateTime.Now, UserId = webAppUser.Id, UserName = webAppUser.Title }; OutData outData = await CreateDataAsync(Id, webAppUser, TypeAction.Edit, requestForm); List <MtdStoreStack> stackNew = outData.MtdStoreStacks; IList <MtdStoreStack> stackOld = await _context.MtdStoreStack .Include(m => m.MtdStoreStackText) .Include(m => m.MtdStoreStackDecimal) .Include(m => m.MtdStoreStackFile) .Include(m => m.MtdStoreStackDate) .Include(m => m.MtdStoreStackInt) .Include(m => m.MtdStoreLink) .Where(x => x.MtdStore == Id).ToListAsync(); foreach (MtdStoreStack stack in stackOld) { MtdStoreStack stackForField = stackNew.SingleOrDefault(x => x.MtdFormPartField == stack.MtdFormPartField); if (stackForField != null) { stack.MtdStoreStackText = stackForField.MtdStoreStackText; stack.MtdStoreLink = stackForField.MtdStoreLink; stack.MtdStoreStackDate = stackForField.MtdStoreStackDate; stack.MtdStoreStackDecimal = stackForField.MtdStoreStackDecimal; stack.MtdStoreStackFile = stackForField.MtdStoreStackFile; stack.MtdStoreStackInt = stackForField.MtdStoreStackInt; } } try { if (stackNew.Count > 0) { int count = await _context.MtdStoreLink.Where(x => x.MtdStore == Id).CountAsync(); if (count > 0) { string titleText = outData.MtdStoreStacks.FirstOrDefault(x => x.MtdFormPartField == outData.MtdFormPartField.Id).MtdStoreStackText.Register; IList <MtdStoreLink> linkIds = await _context.MtdStoreLink.Where(x => x.MtdStore == Id).Select(x => new MtdStoreLink { Id = x.Id, MtdStore = x.MtdStore, Register = titleText }).ToListAsync(); _context.MtdStoreLink.UpdateRange(linkIds); } _context.MtdStoreStack.UpdateRange(stackOld); List <MtdStoreStack> stackNewOnly = stackNew.Where(x => !stackOld.Select(f => f.MtdFormPartField).Contains(x.MtdFormPartField)).ToList(); if (stackNewOnly.Any()) { await _context.MtdStoreStack.AddRangeAsync(stackNewOnly); } _context.MtdLogDocument.Add(mtdLog); await _context.SaveChangesAsync(); } } catch (DbUpdateConcurrencyException) { if (!MtdStoreExists(Id)) { return(NotFound()); } else { throw; } } return(Ok()); }
private async Task <DataSet> CreateDataSetAsync(MtdStore store, FormType type = FormType.Details) { if (store == null) { return(null); } WebAppUser webAppUser = await _userHandler.GetUserAsync(HttpContext.User); List <MtdFormPart> mtdFormParts = new List <MtdFormPart>(); IList <MtdFormPart> parts = await GetPartsAsync(store.MtdForm); bool isReviewer = await _userHandler.IsReviewer(webAppUser, store.MtdForm); ApprovalHandler approvalHandler = new ApprovalHandler(_context, store.Id); List <string> blockedParts = new List <string>(); if (!isReviewer) { blockedParts = await approvalHandler.GetBlockedPartsIds(); } foreach (MtdFormPart formPart in parts) { if (type == FormType.Edit) { bool isEditor = await _userHandler.IsEditorPartAsync(webAppUser, formPart.Id); if (isEditor && !blockedParts.Contains(formPart.Id)) { mtdFormParts.Add(formPart); } } else { bool isViewer = await _userHandler.IsViewerPartAsync(webAppUser, formPart.Id); if (isViewer) { mtdFormParts.Add(formPart); } } } IList <MtdFormPartField> mtdFormPartFields = await GetFieldsAsync(mtdFormParts); var mtdStore = await _context.MtdStore .Include(m => m.ParentNavigation) .Include(m => m.MtdFormNavigation) .ThenInclude(m => m.MtdFormHeader) .Include(m => m.MtdFormNavigation) .ThenInclude(m => m.ParentNavigation) .FirstOrDefaultAsync(m => m.Id == store.Id); IList <long> ids = await _context.MtdStoreStack.Where(x => x.MtdStore == mtdStore.Id).Select(x => x.Id).ToListAsync(); IList <MtdStoreStack> stack = await _context.MtdStoreStack .Include(m => m.MtdStoreStackText) .Include(m => m.MtdStoreStackDecimal) .Include(m => m.MtdStoreStackFile) .Include(m => m.MtdStoreStackDate) .Include(m => m.MtdStoreStackInt) .Include(m => m.MtdStoreLink) .Where(x => ids.Contains(x.Id)) .ToListAsync(); DataSet result = new DataSet() { Store = mtdStore, Parts = mtdFormParts, Fields = mtdFormPartFields, Stack = stack, }; return(result); }
public async Task <IViewComponentResult> InvokeAsync(string idForm) { List <DisplayData> displayDatas = new List <DisplayData>(); var user = await _userHandler.GetUserAsync(HttpContext.User); List <string> partIds = await _userHandler.GetAllowPartsForView(user, idForm); MtdFilter filter = await _context.MtdFilter.FirstOrDefaultAsync(x => x.IdUser == user.Id && x.MtdForm == idForm); if (filter != null) { List <MtdFilterField> mtdFilterFields = await _context.MtdFilterField .Include(x => x.MtdTermNavigation) .Include(m => m.MtdFormPartFieldNavigation) .Where(x => x.MtdFilter == filter.Id) .ToListAsync(); foreach (var field in mtdFilterFields) { DisplayData displayData = new DisplayData { Id = field.Id, Header = $"{field.MtdFormPartFieldNavigation.Name} ({field.MtdTermNavigation.Sign})", Value = "", Type = "-field" }; if (field.MtdFormPartFieldNavigation.MtdSysType != 11) { displayData.Value = field.Value; } else { MtdStore mtdStore = await _context.MtdStore.FirstOrDefaultAsync(x => x.Id == field.Value); if (mtdStore != null) { var fieldForList = await _context.MtdFormPartField.Include(m => m.MtdFormPartNavigation) .Where(x => x.MtdFormPartNavigation.MtdForm == mtdStore.MtdForm & x.MtdSysType == 1) .OrderBy(o => o.MtdFormPartNavigation.Sequence).ThenBy(o => o.Sequence).FirstOrDefaultAsync(); if (fieldForList != null) { IList <long> ids = await _context.MtdStoreStack.Where(x => x.MtdStore == mtdStore.Id& x.MtdFormPartField == fieldForList.Id).Select(x => x.Id).ToListAsync(); MtdStoreStackText data = await _context.MtdStoreStackText.FirstOrDefaultAsync(x => ids.Contains(x.Id)); displayData.Value = data.Register; } } } displayDatas.Add(displayData); } MtdFilterDate mtdFilterDate = await _context.MtdFilterDate.FindAsync(filter.Id); if (mtdFilterDate != null) { DisplayData displayDate = new DisplayData() { Id = filter.Id, Header = "Period", Value = $"{mtdFilterDate.DateStart.ToShortDateString()} {mtdFilterDate.DateEnd.ToShortDateString()}", Type = "-date" }; displayDatas.Add(displayDate); } IList <MtdFilterScript> scripts = await _context.MtdFilterScript.Where(x => x.MtdFilter == filter.Id& x.Apply == 1).ToListAsync(); if (scripts != null && scripts.Count > 0) { foreach (var fs in scripts) { DisplayData displayDate = new DisplayData() { Id = fs.Id, Header = "Custom filter", Value = fs.Name, Type = "-script" }; displayDatas.Add(displayDate); } } } DisplayModelView displayModelView = new DisplayModelView { IdForm = idForm, IdFilter = filter == null ? -1 : filter.Id, DisplayDatas = displayDatas }; return(View("Default", displayModelView)); }
public async Task <IActionResult> OnPostCreateAsync() { IFormCollection requestForm = await Request.ReadFormAsync(); string idForm = requestForm["idForm"]; string idFormParent = requestForm["store-parent-id"]; WebAppUser webAppUser = await _userHandler.GetUserAsync(HttpContext.User); bool isCreator = await _userHandler.IsCreator(webAppUser, idForm); if (!isCreator) { return(Ok(403)); } await _context.Database.BeginTransactionAsync(); int sequence; var forms = await _context.MtdStore.Where(x => x.MtdForm == idForm).ToListAsync(); if (forms != null && forms.Count > 0) { sequence = forms.Max(x => x.Sequence); } else { sequence = 0; } sequence++; MtdStore mtdStore = new MtdStore { Id = Guid.NewGuid().ToString(), MtdForm = idForm, Sequence = sequence, Parent = idFormParent.Length > 0 ? idFormParent : null }; await _context.MtdStore.AddAsync(mtdStore); await _context.SaveChangesAsync(); MtdLogDocument mtdLog = new MtdLogDocument { MtdStore = mtdStore.Id, TimeCh = mtdStore.Timecr, UserId = webAppUser.Id, UserName = webAppUser.Title }; mtdStore.MtdStoreOwner = new MtdStoreOwner { UserId = webAppUser.Id, UserName = webAppUser.Title, }; await _context.MtdLogDocument.AddAsync(mtdLog); OutData outParam = await CreateDataAsync(mtdStore.Id, webAppUser, TypeAction.Create, requestForm); List <MtdStoreStack> stackNew = outParam.MtdStoreStacks; await _context.MtdStoreStack.AddRangeAsync(stackNew); await _context.SaveChangesAsync(); _context.Database.CommitTransaction(); return(Ok()); }
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); }
public async Task <MtdForm> GetFormAsync() { MtdStore mtdStore = await GetStoreAsync(); return(mtdStore.MtdFormNavigation); }
public void ClearCache() { approvalCache = null; storeCache = null; }
private async void CloneStore(string idStore) { var q = from n in _context.MtdStoreStack.Where(x => x.MtdStore == idStore) group n by n.MtdFormPartField into g select new { idField = g.Key, idStack = g.FirstOrDefault(x => x.Id == g.Max(m => m.Id)).Id }; List <long> ids = await q.Select(x => x.idStack).ToListAsync(); IList <MtdStoreStack> stack = await _context.MtdStoreStack .Include(x => x.MtdStoreStackDate) .Include(x => x.MtdStoreStackText) .Include(x => x.MtdStoreStackInt) .Include(x => x.MtdStoreStackDecimal) .Include(x => x.MtdStoreStackFile) .Include(x => x.MtdStoreLink) .Where(x => ids.Contains(x.Id)) .ToListAsync(); string idForm = await _context.MtdStore.Where(s => s.Id == idStore).Select(x => x.MtdForm).FirstOrDefaultAsync(); int maxSeq = await _context.MtdStore.Where(x => x.MtdForm == idForm).MaxAsync(s => s.Sequence); maxSeq++; MtdStore mtdStore = new MtdStore() { Sequence = maxSeq, MtdForm = idForm }; foreach (MtdStoreStack storeStack in stack) { MtdStoreStack newStack = new MtdStoreStack() { MtdStore = storeStack.MtdStore, MtdFormPartField = storeStack.MtdFormPartField, MtdStoreStackDate = storeStack.MtdStoreStackDate != null ? new MtdStoreStackDate { Register = storeStack.MtdStoreStackDate.Register } : null, MtdStoreStackText = storeStack.MtdStoreStackText != null ? new MtdStoreStackText { Register = storeStack.MtdStoreStackText.Register } : null, MtdStoreStackInt = storeStack.MtdStoreStackInt != null ? new MtdStoreStackInt { Register = storeStack.MtdStoreStackInt.Register } : null, MtdStoreStackDecimal = storeStack.MtdStoreStackDecimal != null ? new MtdStoreStackDecimal { Register = storeStack.MtdStoreStackDecimal.Register } : null, MtdStoreStackFile = storeStack.MtdStoreStackFile != null ? new MtdStoreStackFile { Register = storeStack.MtdStoreStackFile.Register, FileName = storeStack.MtdStoreStackFile.FileName, FileSize = storeStack.MtdStoreStackFile.FileSize, FileType = storeStack.MtdStoreStackFile.FileType } : null, MtdStoreLink = storeStack.MtdStoreLink, }; mtdStore.MtdStoreStack.Add(newStack); } _context.MtdStore.Add(mtdStore); await _context.SaveChangesAsync(); }