Exemplo n.º 1
0
        public async Task <IActionResult> CreateGRN(GRNHeaderForDetailDto gRNHeaderForDetailDto)
        {
            if (gRNHeaderForDetailDto == null)
            {
                return(BadRequest(new ErrorModel(1, 400, "Empty Body")));
            }
            if (gRNHeaderForDetailDto.GRNDetails == null)
            {
                return(BadRequest(new ErrorModel(2, 400, "received items needed")));
            }

            var purchaseOrder = await _context.PurchaseOrderHeaders.Include(a => a.Supplier).Include(a => a.BusinessPlace).FirstOrDefaultAsync(a => a.Id == gRNHeaderForDetailDto.PurchaseOrderHeaderId);

            if (purchaseOrder == null)
            {
                return(BadRequest(new ErrorModel(3, 400, "Invalid purchase order")));
            }

            GRNHeader grnToCreate = new GRNHeader
            {
                PurchaseOrderHeaderId = gRNHeaderForDetailDto.PurchaseOrderHeaderId,
                ReceivedDate          = DateTime.Parse(gRNHeaderForDetailDto.ReceivedDate),
                PaymentMode           = gRNHeaderForDetailDto.PaymentMode
            };

            IList <GRNDetail>   grnDetailList = new List <GRNDetail>();
            IList <CompanyItem> compItemList  = new List <CompanyItem>();
            IList <RawItems>    rawItemList   = new List <RawItems>();

            var items = await _context.Items.Where(a => a.IsDeleted == false).ToListAsync();

            decimal total = 0;

            foreach (var detail in gRNHeaderForDetailDto.GRNDetails)
            {
                decimal lineTotal = 0;
                if (detail.Quantity > 0)
                {
                    lineTotal = detail.Quantity * detail.UnitPrice;
                    grnDetailList.Add(new GRNDetail
                    {
                        ItemId       = detail.ItemId,
                        Quantity     = detail.Quantity,
                        UnitPrice    = detail.UnitPrice,
                        SellingPrice = detail.SellingPrice,
                        LineTotal    = lineTotal
                    });

                    total = total + lineTotal;

                    if (items.Find(a => a.Id == detail.ItemId).Type == 1)//company
                    {
                        compItemList.Add(CreatCompanyItem(detail, purchaseOrder.BusinessPlace, gRNHeaderForDetailDto.PurchaseOrderHeaderId));
                    }
                    if (items.Find(a => a.Id == detail.ItemId).Type == 2)//raw
                    {
                        rawItemList.Add(CreatRawItem(detail, purchaseOrder.BusinessPlace, gRNHeaderForDetailDto.PurchaseOrderHeaderId));
                    }
                }
            }

            grnToCreate.TotalAmount = total;
            if (grnToCreate.PaymentMode == 0)
            {
                grnToCreate.PaidAmount = total;
            }
            else
            {
                grnToCreate.PaidAmount = gRNHeaderForDetailDto.PaidAmount;
            }

            grnToCreate.GRNDetails = grnDetailList;

            await _context.AddRangeAsync(grnToCreate);

            await _context.AddRangeAsync(new Transaction
            {
                Description   = "GRN" + purchaseOrder.PONumber,
                Reference     = "GRN",
                BusinessPlace = purchaseOrder.BusinessPlace,
                Credit        = grnToCreate.PaidAmount,
                Date          = DateTime.Today,
                Time          = DateTime.Now.TimeOfDay,
                Debit         = 0,
                UserId        = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier))
            });

            await _context.AddRangeAsync(rawItemList);

            await _context.AddRangeAsync(compItemList);

            purchaseOrder.Status = 2;

            if (await _context.SaveChangesAsync() > 0)
            {
                return(Ok());
            }


            return(BadRequest(new ErrorModel(3, 400, "Failed to Save GRN")));
        }
Exemplo n.º 2
0
 public async Task CreateGRN(GRNHeader gRNHeader)
 {
     await _context.AddRangeAsync(gRNHeader);
 }