public void AddConfirmation(GptblProductionorderOperationActivity activity, GanttConfirmationState confirmationType, string confirmationId, long currentTime, long activityStart)
        {
            var confirmation = new GptblConfirmation();

            confirmation.ClientId                     = string.Empty;
            confirmation.ConfirmationId               = confirmationId;
            confirmation.Info1                        = string.Empty;
            confirmation.Info2                        = string.Empty;
            confirmation.Info3                        = string.Empty;
            confirmation.Name                         = activity.Name;
            confirmation.ActivityEnd                  = confirmationType == GanttConfirmationState.Finished ? currentTime.ToNullableDateTime() : null;
            confirmation.ActivityStart                = confirmationType == GanttConfirmationState.Finished ? activityStart.ToNullableDateTime() : currentTime.ToNullableDateTime();
            confirmation.ConfirmationType             = (int)confirmationType;
            confirmation.ConfirmationDate             = currentTime.ToNullableDateTime();
            confirmation.ProductionorderActivityId    = activity.ActivityId;
            confirmation.ProductionorderId            = activity.ProductionorderId;
            confirmation.ProductionorderOperationId   = activity.OperationId;
            confirmation.ProductionorderSplitId       = 0;
            confirmation.ProductionorderAlternativeId = string.Empty;
            confirmation.QuantityFinished             = confirmationType == GanttConfirmationState.Finished ? 100 : 0;
            confirmation.QuantityFinishedUnitId       = "%";
            confirmation.LastModified                 = currentTime.ToNullableDateTime();

            _confirmations.Add(confirmation);
        }
        public ActivityState(GptblProductionorderOperationActivity activity, ResourceDefinition resourceDefinition)
        {
            var confirmation = new Confirmation(resourceDefinition);

            Confirmations.Add(confirmation);
            Activity = activity;
        }
Exemple #3
0
        /// <summary>
        /// Provide Material
        /// </summary>
        private void WithdrawalMaterial(GptblProductionorderOperationActivity activity)
        {
            var materialId = string.Empty;

            foreach (var material in activity.ProductionorderOperationActivityMaterialrelation)
            {
                switch (material.MaterialrelationType)
                {
                case 2:
                    //search for the materialId of the productionorder
                    var materialActivity = _activityManager.GetActivity(material.GetChildKey);
                    materialId = materialActivity.Productionorder.MaterialId;
                    break;

                case 8:
                    materialId = material.ChildId;
                    break;

                default:
                    throw new Exception("materialrelationtype does not exits");
                }
                var stockPosting = new FCentralStockPosting(materialId: materialId, (double)material.Quantity);
                Agent.Send(DirectoryAgent.Directory.Instruction.Central.ForwardWithdrawMaterial.Create(stockPosting, Agent.ActorPaths.StorageDirectory.Ref));
            }
        }
Exemple #4
0
        internal bool HasPreconditionsFullfilled(GptblProductionorderOperationActivity activity, List <ResourceState> resourceStates)
        {
            if (Int32.Parse(activity.OperationId) > 10)
            {
                var predecessor = Activities.SingleOrDefault(x =>
                                                             x.Activity.GetKey.Equals(activity.ProductionorderId + "|" + (Int32.Parse(activity.OperationId) - 10) + "|" + "3"));

                if (predecessor == null || !predecessor.ActivityIsFinished())
                {
                    return(false);
                }
            }

            // check if Production Precondition is fulfilled to start setup.
            if (activity.ActivityType.Equals(2))
            {
                var activityQueue = resourceStates.Single(x => x.ResourceDefinition.ResourceType == ResourceType.Workcenter).ActivityQueue;
                activity = activityQueue.Single(x => x.GetKey.Equals(activity.ProductionorderId + "|" + activity.OperationId + "|" + "3"))
                           .ProductionorderOperationActivityResource
                           .ProductionorderOperationActivity;
            }

            foreach (var requiredPrecondition in activity.ProductionorderOperationActivityMaterialrelation)
            {
                switch (requiredPrecondition.MaterialrelationType)
                {
                //ProductionOrder
                case 2:

                    System.Diagnostics.Debug.WriteLine(
                        $"{activity.ProductionorderId}|{activity.OperationId}|{activity.ActivityId} require {requiredPrecondition.ChildId}|{requiredPrecondition.ChildOperationId}|{requiredPrecondition.ChildActivityId} ");


                    if (!Activities.Exists(x => x.Activity.GetKey == requiredPrecondition.GetChildKey) ||
                        !ActivityIsFinished(requiredPrecondition.GetChildKey))
                    {
                        System.Diagnostics.Debug.WriteLine(
                            $"Precondition {requiredPrecondition.ChildId}|{requiredPrecondition.ChildOperationId}|{requiredPrecondition.ChildActivityId} for {activity.ProductionorderId}|{activity.OperationId}|{activity.ActivityId} is not fulfilled");

                        return(false);
                    }

                    break;

                case 8:
                    // ingore buy meterials for now
                    break;

                default:
                    System.Diagnostics.Debug.WriteLine("Materialtype does not exits!");
                    break;
                }
            }

            System.Diagnostics.Debug.WriteLine(
                $"All preconditions for {activity.ProductionorderId}|{activity.OperationId}|{activity.ActivityId} fulfilled");

            return(true);
        }
Exemple #5
0
        public void AddOrUpdateActivity(GptblProductionorderOperationActivity activity, ResourceDefinition resourceDefinition)
        {
            var currentActivityState = Activities.SingleOrDefault(x => x.Activity.GetKey.Equals(activity.GetKey));

            //if this is the forst activity
            if (currentActivityState == null)
            {
                currentActivityState = new ActivityState(activity, resourceDefinition);
                Activities.Add(currentActivityState);
                return;
            }

            currentActivityState.AddResource(resourceDefinition);
        }
Exemple #6
0
        public bool StartActivityAtResource(int resourceId,
                                            GptblProductionorderOperationActivity productionorderOperationActivity)
        {
            var resource = resourceStateList.Single(x => x.ResourceDefinition.Id.Equals(resourceId));

            if (resource.IsWorking)
            {
                return(false);
            }

            resource.StartActivityAtResource(productionorderOperationActivity);

            return(resource.IsWorking);
        }
        public void AddConfirmations(GptblProductionorderOperationActivity activity, GanttConfirmationState confirmationType, long currentTime, long activityStart)
        {
            var confirmationId = Guid.NewGuid().ToString();

            AddConfirmation(activity, confirmationType, confirmationId, currentTime, activityStart);
            // only finish !?

            /*if (confirmationType.NotEqual(GanttState.Finished))
             *  return;
             */
            foreach (var resource in activity.ProductionorderOperationActivityResources)
            {
                AddResourceConfirmation(resource, confirmationId);
            }
        }
Exemple #8
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));
            }
        }
Exemple #9
0
        private GptblConfirmation CreateConfirmation(GptblProductionorderOperationActivity activity,
                                                     GptblProductionorder productionorder, int confirmationType)
        {
            var newConf = new GptblConfirmation();

            newConf.ProductionorderId          = activity.ProductionorderId;
            newConf.ActivityEnd                = activity.DateEnd;
            newConf.ActivityStart              = activity.DateStart;
            newConf.ClientId                   = string.Empty;
            newConf.ConfirmationDate           = activity.DateEnd;
            newConf.ConfirmationId             = Guid.NewGuid().ToString();
            newConf.ProductionorderActivityId  = activity.ActivityId;
            newConf.ProductionorderOperationId = activity.OperationId;
            newConf.QuantityFinished           = confirmationType == 16 ? productionorder.QuantityNet : 0;
            newConf.QuantityFinishedUnitId     = productionorder.QuantityUnitId;
            newConf.ProductionorderSplitId     = 0;
            newConf.ConfirmationType           = confirmationType; // 16 = beendet
            return(newConf);
        }
Exemple #10
0
        public static FCreateSimulationJob ToSimulationJob(this GptblProductionorderOperationActivity activity, long start, long duration, string requiredCapabilityName)
        {
            var simulationJob = new FCreateSimulationJob(
                key: activity.GetKey
                , dueTime: activity.InfoDateLatestEndMaterial.Value.ToSimulationTime()
                , articleName: activity.Productionorder.MaterialId
                , operationName: activity.Name
                , operationHierarchyNumber: Int32.Parse(activity.OperationId)
                , operationDuration: duration
                , requiredCapabilityName: requiredCapabilityName
                , jobType: activity.ActivityId.Equals(2) ? JobType.SETUP : JobType.OPERATION
                , customerOrderId: string.Empty
                , isHeadDemand: false
                , fArticleKey: Guid.Empty
                , fArticleName: string.Empty
                , productionAgent: string.Empty
                , articleType: string.Empty
                , start: start
                , end: start + duration
                );

            return(simulationJob);
        }
 internal void StartActivityAtResource(GptblProductionorderOperationActivity productionorderOperationActivity)
 {
     CurrentProductionOrderActivity = productionorderOperationActivity;
 }
Exemple #12
0
 public void FinishActivityForResource(GptblProductionorderOperationActivity activity, int resourceId)
 {
     Activities.SingleOrDefault(x => x.Activity.GetKey.Equals(activity.GetKey))?.FinishForResource(resourceId);
 }
Exemple #13
0
        public void CreateSimulationJob(GptblProductionorderOperationActivity activity, long start, long duration, string requiredCapabilityName)
        {
            var pub = MessageFactory.ToSimulationJob(activity, start, duration, requiredCapabilityName);

            Agent.Context.System.EventStream.Publish(@event: pub);
        }