public void ValidateReceiveTrans(ReceiveTran receive) { var po = _poRepo.GetById(receive.PoNum); int?totalQty = 0; //check that received qty is between 0 to ordered qty foreach (var receiveTransDetail in receive.ReceiveTransDetails) { totalQty += receiveTransDetail.Quantity; if (receiveTransDetail.Quantity < 0) { throw new Exception("Record not saved, received quantity cannot be negative"); } if (receiveTransDetail.Quantity > po.PurchaseOrderDetails .Where(x => x.ItemNum == receiveTransDetail.ItemNum) .Select(x => x.OrderQty - x.ReceiveQty).First()) { throw new Exception("Record not saved, received quantity cannot exceed ordered qty"); } } //check that at least one line item is received if (totalQty == 0) { throw new Exception("Record not saved, not receipt of goods found"); } }
public ReceiveTran ConvertToReceiveTran() { ReceiveTran receive = new ReceiveTran(); receive.ReceiveId = this.ReceiveId; receive.PoNum = this.PoNum; receive.ReceiveDate = this.ReceiveDate; receive.InvoiceNum = this.InvoiceNum; receive.DeliveryOrderNum = this.DeliveryOrderNum; receive.ReceiveTransDetails = this.ReceiveTransDetails; return(receive); }
public void CreateReceiveTrans(ReceiveTran receive) { var po = _poRepo.GetById(Convert.ToInt32(receive.PoNum)); var fulfilled = true; for (var i = po.PurchaseOrderDetails.Count - 1; i >= 0; i--) { var receiveQty = Convert.ToInt32(receive.ReceiveTransDetails.ElementAt(i).Quantity); if (receiveQty > 0) { //update po received qty po.PurchaseOrderDetails.ElementAt(i).ReceiveQty += receiveQty; if (po.PurchaseOrderDetails.ElementAt(i).ReceiveQty < po.PurchaseOrderDetails.ElementAt(i).OrderQty) { fulfilled = false; } //get GST rate var gstRate = po.GST / po.PurchaseOrderDetails.Sum(x => x.OrderQty * x.UnitPrice); //update stationery var stationery = _stationeryRepo.GetById(po.PurchaseOrderDetails.ElementAt(i).Stationery.ItemNum); stationery.AverageCost = ((stationery.AverageCost * stationery.CurrentQty) + (receiveQty * po.PurchaseOrderDetails.ElementAt(i).UnitPrice) * (1 + gstRate)) / (stationery.CurrentQty + receiveQty); stationery.CurrentQty += receiveQty; stationery.AvailableQty += receiveQty; _stationeryRepo.Update(stationery); //persist stationery data here } else if (receiveQty == 0) { //keep only the receive transactions details with non-zero quantity receive.ReceiveTransDetails.Remove(receive.ReceiveTransDetails.ElementAt(i)); } } //update purchase order and create receive trans if (fulfilled) { po.Status = Fulfilled; } po.ReceiveTrans.Add(receive); _poRepo.Update(po); }