private void ProvideOrderAtDue(FCentralProvideOrder provideOrder) { var requestArticle = _requestedArticles.Single(x => x.CustomerOrderId.ToString().Equals(provideOrder.SalesOrderId)); if (Agent.CurrentTime >= requestArticle.DueTime) { Agent.Send(ContractAgent.Contract.Instruction.TryFinishOrder.Create(provideOrder, requestArticle.OriginRequester)); _requestedArticles.Remove(requestArticle); return; } Agent.Send(Storage.Instruction.Central.ProvideOrderAtDue.Create(provideOrder, Agent.Context.Self), requestArticle.DueTime - Agent.CurrentTime); }
private void ProductionOrderFinishCheck(GptblProductionorderOperationActivity activity) { var productionOrder = activity.Productionorder; foreach (var activityOfProductionOrder in productionOrder.ProductionorderOperationActivities) { var prodactivity = _activityManager.Activities.SingleOrDefault(x => x.Activity.Equals(activityOfProductionOrder)); if (prodactivity == null || !prodactivity.ActivityIsFinishedDebug()) { return; } } Agent.DebugMessage($"Productionorder {productionOrder.ProductionorderId} with MaterialId {productionOrder.MaterialId} finished!"); // Insert Material var storagePosting = new FCentralStockPosting(productionOrder.MaterialId, (double)productionOrder.QuantityNet); Agent.Send(DirectoryAgent.Directory.Instruction.Central.ForwardInsertMaterial.Create(storagePosting, Agent.ActorPaths.StorageDirectory.Ref)); var product = _products.SingleOrDefault(x => x.MaterialId.Equals(productionOrder.MaterialId)); if (product != null) { //_stockPostingManager.AddInsertStockPosting(product.MaterialId,productionOrder.QuantityNet.Value,productionOrder.QuantityUnitId,GanttStockPostingType.Relatively,Agent.CurrentTime); var salesorderId = _SalesorderMaterialrelations.Single(x => x.ChildId.Equals(productionOrder.ProductionorderId)).SalesorderId; var salesorder = _salesOrder.Single(x => x.SalesorderId.Equals(salesorderId)); CreateLeadTime(product, long.Parse(salesorder.Info1)); salesorder.Status = 8; salesorder.QuantityDelivered = 1; var provideOrder = new FCentralProvideOrder(productionOrderId: productionOrder.ProductionorderId , materialId: product.MaterialId , materialName: product.Name , salesOrderId: salesorderId , materialFinishedAt: Agent.CurrentTime); Agent.Send(DirectoryAgent.Directory.Instruction.Central.ForwardProvideOrder.Create(provideOrder, Agent.ActorPaths.StorageDirectory.Ref)); } }
/// <summary> /// /// </summary> /// <param name="agent"></param> /// <param name="fArticle"></param> public void TryFinishOrder(FCentralProvideOrder order) { Agent.DebugMessage(msg: "Ready to Deliver"); //var localItem = Agent.Get<FRequestItem>(REQUEST_ITEM); // try to Finish if time has come if (Agent.CurrentTime >= _fArticle.DueTime) { _fArticle = _fArticle.SetProvided .UpdateFinishedAt(Agent.CurrentTime) .UpdateProvidedAt(order.MaterialFinishedAt); Agent.DebugMessage(msg: $"Article delivered in time {_fArticle.DueTime == Agent.CurrentTime} {order.MaterialName} {order.MaterialId} due: {_fArticle.DueTime} current: {Agent.CurrentTime}!"); Agent.Send(instruction: DirectoryAgent.Directory.Instruction.Central.ForwardWithdrawMaterial.Create(new FCentralStockPostings.FCentralStockPosting(order.MaterialId, 1), target: Agent.ActorPaths.StorageDirectory.Ref)); Agent.Send(instruction: Supervisor.Instruction.OrderProvided.Create(message: _fArticle, target: Agent.ActorPaths.SystemAgent.Ref)); Agent.VirtualChildren.Remove(item: Agent.Sender); Agent.TryToFinish(); } }
public static ProvideOrderAtDue Create(FCentralProvideOrder message, IActorRef target) { return(new ProvideOrderAtDue(message: message, target: target)); }
public static ISimulationMessage Create(FCentralProvideOrder message, IActorRef target, bool logThis = false) { return(new TryFinishOrder(message: message, target: target, logThis: logThis)); }
private void ForwardProvideOrder(FCentralProvideOrder order) { var actorRef = StorageManager.GetHubActorRefBy(order.MaterialId); Agent.Send(Storage.Instruction.Central.ProvideOrderAtDue.Create(order, actorRef)); }