예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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));
        }
예제 #4
0
        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));
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
            }