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));
        }
Esempio n. 2
0
        /// <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();
            }
        }
Esempio n. 3
0
        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!");
        }
Esempio n. 4
0
        /// <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));
            }
        }
Esempio n. 5
0
        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));
        }