Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
            }
        }
Esempio n. 3
0
        /// <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();
            }
        }
Esempio n. 4
0
 public static ProvideOrderAtDue Create(FCentralProvideOrder message, IActorRef target)
 {
     return(new ProvideOrderAtDue(message: message, target: target));
 }
Esempio n. 5
0
 public static ISimulationMessage Create(FCentralProvideOrder message, IActorRef target, bool logThis = false)
 {
     return(new TryFinishOrder(message: message, target: target, logThis: logThis));
 }
Esempio n. 6
0
        private void ForwardProvideOrder(FCentralProvideOrder order)
        {
            var actorRef = StorageManager.GetHubActorRefBy(order.MaterialId);

            Agent.Send(Storage.Instruction.Central.ProvideOrderAtDue.Create(order, actorRef));
        }