Ejemplo n.º 1
0
        public bool ReceiveOrder(PurchaseOrderProcessed order)
        {
            using (var context = new eBikesContext())
            {
                bool fulfilled = false;
                //  Create and populate Receive Order
                var receiveOrder = context.ReceiveOrders.Add(new ReceiveOrder());
                receiveOrder.PurchaseOrderID = order.POid;
                receiveOrder.ReceiveDate     = DateTime.Now;

                foreach (var item in order.receivedDetails)
                {
                    fulfilled = true;
                    // Update Part QOH and QOO
                    var part = context.Parts.Find(item.PartID);
                    part.QuantityOnHand      += item.QtyReceiving;
                    part.QuantityOnOrder     -= item.QtyReceiving;
                    context.Entry(part).State = EntityState.Modified; // FLAG for UPDATE
                    // Create ReceiveOrderDetail and populate
                    if (item.QtyReceiving > 0)
                    {
                        var newReceiveDetail = new ReceiveOrderDetail
                        {
                            PurchaseOrderDetailID = item.PODetailID,
                            QuantityReceived      = item.QtyReceiving
                        };
                        receiveOrder.ReceiveOrderDetails.Add(newReceiveDetail); // FLAG new ReceiveOrderDetail
                    }
                    // Create ReturnOrderDetail and populate
                    if (item.QtyReturning > 0)
                    {
                        var newReturnDetail = new ReturnedOrderDetail
                        {
                            PurchaseOrderDetailID = item.PODetailID,
                            Quantity = item.QtyReturning,
                            Reason   = item.ReturnReason
                        };
                        receiveOrder.ReturnedOrderDetails.Add(newReturnDetail); // FLAG new ReturnOrderDetail
                    }
                    var pOrderDetail  = context.PurchaseOrderDetails.Find(item.PODetailID);
                    var qtyOutstaning = pOrderDetail.Quantity - (pOrderDetail.ReceiveOrderDetails.FirstOrDefault() == null ? 0 : pOrderDetail.ReceiveOrderDetails.Sum(x => x.QuantityReceived));
                    if (qtyOutstaning != 0)
                    {
                        fulfilled = false;
                    }
                }
                // close order if fulfilled comes back true
                var pOrder = context.PurchaseOrders.Find(order.POid);
                if (fulfilled)
                {
                    pOrder.Closed = fulfilled;
                    context.Entry(pOrder).State = EntityState.Modified; // FLAG updated PurchaseOrder
                }
                // Move data from Unordered Cart into returned items
                List <UnorderedPart> partList = GetUnorderedPart(pOrder.PurchaseOrderNumber.Value);
                foreach (var item in partList)
                {
                    var newReturnDetail = new ReturnedOrderDetail
                    {
                        Quantity         = item.Quantity,
                        Reason           = "Not Part of Order",
                        ItemDescription  = item.Description,
                        VendorPartNumber = item.VendorPartNumber
                    };
                    receiveOrder.ReturnedOrderDetails.Add(newReturnDetail);
                }

                // Empty the Unordered Purchase Cart
                var unorderedParts = from u in context.UnorderedPurchaseItemCarts
                                     where u.PurchaseOrderNumber == pOrder.PurchaseOrderNumber
                                     select u;
                var unorderedPartsList = unorderedParts.ToList();

                foreach (var item in unorderedPartsList)
                {
                    context.UnorderedPurchaseItemCarts.Remove(item); // FLAG delete Cart items
                }
                context.SaveChanges();                               // PROCCESS ALL CHANGES
                return(fulfilled);
            }
        }
Ejemplo n.º 2
0
        protected void ReceiveOrder_Click(object sender, EventArgs e)
        {
            string sccssDetail = "Order Received.";

            MessageUserControl.TryRun(() =>
            {
                try
                {
                    PurchaseOrderProcessed order = new PurchaseOrderProcessed();
                    order.POid = Convert.ToInt32((PurchaseOrderDetailsGridView.Rows[0].FindControl("POid") as HiddenField).Value);
                    List <ReceivedPODetail> detailList = new List <ReceivedPODetail>();
                    foreach (GridViewRow row in PurchaseOrderDetailsGridView.Rows)
                    {
                        // Unpack GridViewRow:
                        var receivingAmount = Convert.ToInt32((row.Cells[4].Controls[1] as TextBox).Text);
                        var qtyOutstanding  = Convert.ToInt32((row.Cells[3].Controls[1] as Label).Text);
                        if (receivingAmount > qtyOutstanding)
                        {
                            throw new Exception("Quantity receiving cannot be be greater then quantity outstanding.");
                        }
                        var returnAmount = Convert.ToInt32((row.Cells[5].Controls[1] as TextBox).Text);
                        var returnReason = (row.Cells[6].Controls[1] as TextBox).Text;
                        if (returnAmount > 0 && returnReason == "")
                        {
                            throw new Exception("Must provide reason for each item returned.");
                        }
                        var partID     = Convert.ToInt32((row.Cells[0].Controls[1] as Label).Text);
                        var poDetailID = Convert.ToInt32((row.FindControl("PODetailID") as HiddenField).Value);
                        var POid       = Convert.ToInt32((row.FindControl("POid") as HiddenField).Value);

                        if (receivingAmount > 0 || returnAmount > 0)
                        {
                            // collect the data to be sent to BLL
                            ReceivedPODetail data = new ReceivedPODetail
                            {
                                POid         = POid,
                                PODetailID   = poDetailID,
                                PartID       = partID,
                                QtyReceiving = receivingAmount,
                                QtyReturning = returnAmount,
                                ReturnReason = returnReason
                            };
                            detailList.Add(data);
                        }
                    }
                    // Check what button sent the request and check for item count for processing
                    var button = ((LinkButton)sender).ID;
                    if (detailList.Count == 0 && button == "ReceiveOrder" && UnorderedCart.Items.Count == 0)
                    {
                        throw new Exception("No items received in the order.");
                    }
                    order.receivedDetails = detailList;
                    var controller        = new ReceivingController();
                    bool closed           = controller.ReceiveOrder(order);
                    // Refresh GridView and ListView update after receive.
                    var orderDetails = controller.GetPurchaseOrderDetails(order.POid);
                    PurchaseOrderDetailsGridView.DataSource = orderDetails;
                    PurchaseOrderDetailsGridView.DataBind();
                    UnorderedCart.DataBind();
                    // If order is closed refresh hide Order Details and refresh Order Panel.
                    if (closed)
                    {
                        OrderPanel.Visible = false;
                        OrderPanel.Enabled = false;
                        OutstandingOrderGridView.DataBind();
                        sccssDetail = "Order Fulfilled and closed.";
                    }
                }
                catch (FormatException)
                {
                    throw new Exception("Returning and Receiving must be digits. If non returned / received enter 0.");
                }
            }, "Success", sccssDetail);
        }