public async Task <IReadOnlyList <PurchaseOrder> > ListAsync( ISpecification <PurchaseOrder> spec, List <SortingInformation <PurchaseOrder> > sorting, bool withChilds = false, CancellationToken cancellationToken = default) { var purchaseOrders = await _unitOfWork.PurchaseOrderRepository.ListAsync(spec, sorting, cancellationToken); if (withChilds && purchaseOrders?.Count > 0) { var results = new List <PurchaseOrder>(purchaseOrders); var purchaseOrderIds = purchaseOrders.Select(e => e.Id).ToList(); var purchaseOrderDetailsFilter = new PurchaseOrderDetailFilterSpecification() { PurchaseOrderIds = purchaseOrderIds, ShowDraftList = BaseEntity.DraftStatus.All }.BuildSpecification(); var purchaseOrderDetailss = await _unitOfWork.PurchaseOrderDetailRepository.ListAsync(purchaseOrderDetailsFilter, null, cancellationToken); results.ForEach(c => c.AddRangePurchaseOrderDetails( purchaseOrderDetailss .Where(e => e.PurchaseOrderId == c.Id).ToList() )); return(results); } return(purchaseOrders); }
private async Task <PurchaseOrder> GetByIdAsync(int id, bool includeChilds = false, CancellationToken cancellationToken = default) { var specFilter = new PurchaseOrderFilterSpecification(id, true); var purchaseOrder = await _unitOfWork.PurchaseOrderRepository.FirstOrDefaultAsync(specFilter, cancellationToken); if (purchaseOrder == null || includeChilds == false) { return(purchaseOrder); } var purchaseOrderDetailsFilter = new PurchaseOrderDetailFilterSpecification() { PurchaseOrderIds = new List <int>() { id }, ShowDraftList = BaseEntity.DraftStatus.All }.BuildSpecification(); var purchaseOrderDetailss = await _unitOfWork.PurchaseOrderDetailRepository.ListAsync(purchaseOrderDetailsFilter, null, cancellationToken); purchaseOrder.AddRangePurchaseOrderDetails(purchaseOrderDetailss.ToList()); return(purchaseOrder); }
public async Task <ActionResult> UpdateDraftAsync(int id, [FromBody] PurchaseOrderDetailDTO purchaseOrderDetailDto, CancellationToken cancellationToken = default) { InitUserInfo(); if (!AllowCreate && !AllowUpdate) { return(ValidationProblem()); } var specFilter = new PurchaseOrderDetailFilterSpecification(int.Parse(purchaseOrderDetailDto.Id), true); var rowCount = await _purchaseOrderDetailService.CountAsync(specFilter, cancellationToken); if (rowCount == 0) { throw new EntityNotFoundException(nameof(PurchaseOrderDetail), purchaseOrderDetailDto.Id); } var purchaseOrderDetail = _mapper.Map <PurchaseOrderDetail>(purchaseOrderDetailDto); var result = await _purchaseOrderDetailService.PatchDraft(purchaseOrderDetail, cancellationToken); if (!result) { AssignToModelState(_purchaseOrderDetailService.Errors); return(ValidationProblem()); } return(CreatedAtAction(nameof(GetIdAsync), new { id = id }, null)); }
public async Task <ActionResult> UpdateAsync([FromBody] PurchaseOrderDetailDTO purchaseOrderDetail, CancellationToken cancellationToken) { InitUserInfo(); if (!AllowUpdate) { return(ValidationProblem()); } var specFilter = new PurchaseOrderDetailFilterSpecification(int.Parse(purchaseOrderDetail.Id), true); var rowCount = await _purchaseOrderDetailService.CountAsync(specFilter, cancellationToken); if (rowCount == 0) { throw new EntityNotFoundException(nameof(PurchaseOrderDetail), purchaseOrderDetail.Id); } // bind to old item var objItem = _mapper.Map <PurchaseOrderDetail>(purchaseOrderDetail); // untuk data yang mereference object, perlu di set null agar tidak insert sebagai data baru CleanReferenceObject(objItem); var result = await _purchaseOrderDetailService.PatchDraft(objItem, cancellationToken); if (!result) { AssignToModelState(_purchaseOrderDetailService.Errors); return(ValidationProblem()); } return(CreatedAtAction(nameof(GetIdAsync), new { id = objItem.Id }, null)); }
private async Task <PurchaseOrderDetail> GetByIdAsync(int id, bool includeChilds = false, CancellationToken cancellationToken = default) { var specFilter = new PurchaseOrderDetailFilterSpecification(id, true); var purchaseOrderDetail = await _unitOfWork.PurchaseOrderDetailRepository.FirstOrDefaultAsync(specFilter, cancellationToken); if (purchaseOrderDetail == null || includeChilds == false) { return(purchaseOrderDetail); } return(purchaseOrderDetail); }
public async Task <string> GenerateExcel(string excelFilename, int?refId = null, int?id = null, List <int> purchaseOrders = null, List <string> parts = null, List <double> partPrices = null, List <int> qtys = null, List <double> totalPrices = null, Dictionary <string, int> exact = null, CancellationToken cancellationToken = default) { try { PurchaseOrderDetailFilterSpecification filterSpec = null; if (id.HasValue) { filterSpec = new PurchaseOrderDetailFilterSpecification(id.Value); } else { filterSpec = new PurchaseOrderDetailFilterSpecification(exact) { Id = id, PurchaseOrderIds = purchaseOrders, PartIds = parts, PartPrices = partPrices, Qtys = qtys, TotalPrices = totalPrices } }.BuildSpecification(); var results = await this.ListAsync(filterSpec, null, true, cancellationToken); cancellationToken.ThrowIfCancellationRequested(); if (ExcelMapper.WriteToExcel <PurchaseOrderDetail>(excelFilename, "purchaseOrderDetail.json", results) == false) { if (refId.HasValue) { await _downloadProcessService.FailedToGenerate(refId.Value, "Failed to generate excel file"); } return(""); } // update database information (if needed) if (refId.HasValue) { excelFilename = Path.GetFileName(excelFilename); await _downloadProcessService.SuccessfullyGenerated(refId.Value, excelFilename); } return(excelFilename); }