Example #1
0
        public void Ordering()
        {
            CurOrder = 0;
            Transactions.Clear();

            if (Inventory <= minStock)
            {
                CurOrder = (maxStock - Inventory) + (BacklogCalculation()) - Expected;
            }

            if (Name == "Factory")
            {
                if (Expected > 0 || CurOrder > 0)
                {
                    // manufacture more goods
                    double orders = (CurOrder >= factOrdersPerDay) ? Math.Ceiling(Convert.ToDouble(CurOrder) / Convert.ToDouble(factOrdersPerDay)) : 1D;

                    int totalOrderSent = 0;
                    for (int i = 0; i < orders; i++)
                    {
                        totalOrderSent += factOrdersPerDay.Value;
                        int orderAmt = 0;
                        if (totalOrderSent > CurOrder)
                        {
                            totalOrderSent -= factOrdersPerDay.Value;
                            orderAmt        = CurOrder - totalOrderSent;
                        }
                        else
                        {
                            orderAmt = factOrdersPerDay.Value;
                        }

                        var lastShipment = Shipments.LastOrDefault();
                        var processOn    = (lastShipment == null) ? simulator.CurrentDay + 1 : lastShipment.ProcessOn + 1;

                        if (orderAmt > 0)
                        {
                            Order manufacture = new Order("more beer", orderAmt)
                            {
                                ProcessOn = processOn
                            };
                            Shipments.Enqueue(manufacture);
                        }
                    }

                    if (CurOrder > 0)
                    {
                        Expected = Expected + CurOrder;
                    }
                }
            }
            else
            {
                if (CurOrder > 0)
                {
                    var ord = new Order("Order", CurOrder);
                    Expected = Expected + CurOrder;

                    PlaceOrder(ord);
                }
            }

            StorageCalculation();
        }