private void FinishOrder(int orderId, int simulationId) { var order = _context.Orders.Single(a => a.Id == orderId); var simConfig = _context.SimulationConfigurations.Single(a => a.Id == simulationId); if (order.State == State.Finished) { return; } order.State = State.Finished; order.FinishingTime = simConfig.Time; _context.Update(order); _context.SaveChanges(); _messageHub.ProcessingUpdate(simulationId, ++itemcount, SimulationType.Central, simConfig.OrderQuantity); _messageHub.SendToAllClients("Order with Id " + order.Id + " finished!"); foreach (var singleOrderPart in order.OrderParts) { var stock = _context.Stocks.Single(a => a.ArticleForeignKey == singleOrderPart.ArticleId); stock.Current -= singleOrderPart.Quantity; _context.StockExchanges.Add(new StockExchange() { ExchangeType = ExchangeType.Withdrawal, Quantity = singleOrderPart.Quantity, StockId = stock.Id, RequiredOnTime = order.DueTime, Time = _context.SimulationConfigurations.Single(a => a.Id == simulationId).Time }); _context.Update(stock); } _context.SaveChanges(); }
private void OrderProvided(InstructionSet instructionSet) { if (!(instructionSet.ObjectToProcess is RequestItem requestItem)) { throw new InvalidCastException(this.Name + " Cast to RequestItem Failed"); } var order = _productionDomainContext.Orders .Include(x => x.OrderParts) .Single(x => x.Id == _productionDomainContext.OrderParts.Single(s => s.Id == requestItem.OrderId).OrderId); order.FinishingTime = (int)Context.TimePeriod; order.State = State.Finished; _productionDomainContext.SaveChanges(); _messageHub.SendToAllClients("Oder No:" + order.Id + " finished at " + Context.TimePeriod); _messageHub.ProcessingUpdate(_simConfig.Id, orderCount++, SimulationType.Decentral, _simConfig.OrderQuantity); }