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"))); }
public async Task CreateGRN(GRNHeader gRNHeader) { await _context.AddRangeAsync(gRNHeader); }