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; }
/// <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)); } }
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); }
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); }
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); } }
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)); } }
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); }
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; }
public void FinishActivityForResource(GptblProductionorderOperationActivity activity, int resourceId) { Activities.SingleOrDefault(x => x.Activity.GetKey.Equals(activity.GetKey))?.FinishForResource(resourceId); }
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); }