コード例 #1
0
        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");
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }