internal void ProvideRequest(FArticleProvider fArticleProvider) { // TODO: Might be problematic due to inconsistent _fArticle != Storage._fArticle Agent.DebugMessage(msg: $"Request for {_fArticle.Article.Name} {_fArticle.Key} provided from " + Agent.Sender); _fArticle = _fArticle.SetProvided.UpdateFinishedAt(f: Agent.CurrentTime); Agent.Send(instruction: BasicInstruction.ProvideArticle .Create(message: fArticleProvider , target: Agent.VirtualParent , logThis: false)); }
/// <summary> /// /// </summary> /// <param name="agent"></param> /// <param name="fArticle"></param> public void TryFinishOrder(FArticleProvider fArticleProvider) { Agent.DebugMessage(msg: "Ready to Deliver"); //var localItem = Agent.Get<FRequestItem>(REQUEST_ITEM); _fArticle = _fArticle.UpdateFinishedAt(f: Agent.CurrentTime); // try to Finish if time has come if (Agent.CurrentTime >= _fArticle.DueTime) { _fArticle = _fArticle.SetProvided; Agent.DebugMessage(msg: $"Article delivered in time {_fArticle.DueTime == Agent.CurrentTime} {fArticleProvider.ArticleName} {fArticleProvider.ArticleKey} due: {_fArticle.DueTime} current: {Agent.CurrentTime}! "); Agent.Send(instruction: Dispo.Instruction.WithdrawArticleFromStock.Create(message: fArticleProvider.ArticleKey, target: Agent.Sender)); Agent.Send(instruction: Supervisor.Instruction.OrderProvided.Create(message: _fArticle, target: Agent.ActorPaths.SystemAgent.Ref)); Agent.VirtualChildren.Remove(item: Agent.Sender); Agent.TryToFinish(); } }
public DispoArticleDictionary SetArticleProvided(FArticleProvider fArticleProvider, IActorRef providedBy, long currentTime) { foreach (var provider in _articleProvider) { var providedArticle = provider.GetByKey(fArticleProvider.ArticleKey); if (providedArticle == null) { continue; } providedArticle.Article = providedArticle.Article.SetProvided.UpdateFinishedAt(currentTime); providedArticle.Provider = providedBy; return(provider); } throw new Exception("Article was not found from Operation Manager. We are sorry for any Inconvenience!"); }
/// <summary> /// set each material to provided and set the start condition true if all materials are provided /// </summary> /// <param name="fArticleProvider"></param> private void ArticleProvided(FArticleProvider fArticleProvider) { var articleDictionary = OperationManager.SetArticleProvided(fArticleProvider: fArticleProvider, providedBy: Agent.Sender, currentTime: Agent.CurrentTime); Agent.DebugMessage(msg: $"Article {fArticleProvider.ArticleName} {fArticleProvider.ArticleKey} for {_articleToProduce.Article.Name} {_articleToProduce.Key} has been provided"); _articleToProduce.ProviderList.AddRange(fArticleProvider.Provider); if (articleDictionary.AllProvided()) { Agent.DebugMessage(msg: $"All Article for {_articleToProduce.Article.Name} {_articleToProduce.Key} have been provided"); articleDictionary.Operation.StartConditions.ArticlesProvided = true; Agent.Send(BasicInstruction.UpdateStartConditions .Create(message: articleDictionary.Operation.GetStartCondition() , target: articleDictionary.Operation.HubAgent)); } }
internal void ProvideRequest(FArticleProvider fArticleProvider) { // TODO: Might be problematic due to inconsistent _fArticle != Storage._fArticle Agent.DebugMessage(msg: $"Request for {_fArticle.Quantity} {_fArticle.Article.Name} {_fArticle.Key} provided from {Agent.Sender.Path.Name} to {Agent.VirtualParent.Path.Name}", CustomLogger.STOCK, LogLevel.Warn); _fArticle = _fArticle.UpdateFinishedAt(f: Agent.CurrentTime); var providedArticles = fArticleProvider.Provider.Select(x => x.ProvidesArticleKey); foreach (var articlesInProduction in fArticlesToProvide) { if (IsFalse(providedArticles.Contains(articlesInProduction.Value)) && // is not original provider Agent.VirtualChildren.Contains(articlesInProduction.Key)) // and ist not already finished to produce { Agent.Send(BasicInstruction.UpdateCustomerDueTimes .Create(fArticleProvider.CustomerDue, articlesInProduction.Key)); } } Agent.Send(instruction: BasicInstruction.ProvideArticle .Create(message: fArticleProvider , target: Agent.VirtualParent , logThis: false)); }