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(); }