/** * SE:I --> satisfy by orders PuOP */ public EntityCollector Satisfy(Demand demand, Quantity demandedQuantity) { EntityCollector entityCollector = new EntityCollector(); M_Article article = demand.GetArticle(); DueTime dueTime = demand.GetStartTimeBackward(); if (article.ToBuild) { throw new MrpRunException( "You try to create a purchaseOrderPart for a articleToBuild."); } // currently only one businessPartner per article TODO: This could be changing M_ArticleToBusinessPartner articleToBusinessPartner = _dbMasterDataCache.M_ArticleToBusinessPartnerGetAllByArticleId(article.GetId())[0]; M_BusinessPartner businessPartner = _dbMasterDataCache.M_BusinessPartnerGetById(new Id(articleToBusinessPartner .BusinessPartnerId)); T_PurchaseOrder purchaseOrder = new T_PurchaseOrder(); // [Name],[DueTime],[BusinessPartnerId] purchaseOrder.DueTime = dueTime.GetValue(); purchaseOrder.BusinessPartner = businessPartner; purchaseOrder.Name = $"PurchaseOrder{article.Name} for " + $"businessPartner {purchaseOrder.BusinessPartner.Id}"; // init a new purchaseOderPart T_PurchaseOrderPart tPurchaseOrderPart = new T_PurchaseOrderPart(); // [PurchaseOrderId],[ArticleId],[Quantity],[State],[ProviderId] tPurchaseOrderPart.PurchaseOrder = purchaseOrder; tPurchaseOrderPart.PurchaseOrderId = purchaseOrder.Id; tPurchaseOrderPart.Article = article; tPurchaseOrderPart.ArticleId = article.Id; tPurchaseOrderPart.Quantity = CalculateQuantity(articleToBusinessPartner, demandedQuantity) * articleToBusinessPartner .PackSize; if (tPurchaseOrderPart.Quantity < demandedQuantity.GetValue()) { throw new MrpRunException("You cannot purchase less than you need!"); } tPurchaseOrderPart.State = State.Created; PurchaseOrderPart purchaseOrderPart = new PurchaseOrderPart(tPurchaseOrderPart, null); T_DemandToProvider demandToProvider = new T_DemandToProvider() { DemandId = demand.GetId().GetValue(), ProviderId = purchaseOrderPart.GetId().GetValue(), Quantity = demandedQuantity.GetValue() }; entityCollector.Add(purchaseOrderPart); entityCollector.Add(demandToProvider); return(entityCollector); }
/*public static T_ProductionOrderBom CreateT_ProductionOrderBom() * { * T_ProductionOrderBom tProductionOrderBom = new T_ProductionOrderBom(); * tProductionOrderBom.Quantity = new Random().Next(1, 100); * M_Article article = dbMasterDataCache.M_ArticleGetById( * IdGenerator.GetRandomId(0.M_ArticleGetAll().Count - 1)); * tProductionOrderBom.ArticleChild = article; * tProductionOrderBom.ProductionOrderParent = CreateT_ProductionOrder() * }*/ public static ProductionOrder CreateT_ProductionOrder( Demand demand, Quantity quantity) { if (quantity == null || quantity.GetValue() == null) { throw new MrpRunException("Quantity is not set."); } T_ProductionOrder tProductionOrder = new T_ProductionOrder(); // [ArticleId],[Quantity],[Name],[DueTime],[ProviderId] tProductionOrder.DueTime = demand.GetStartTimeBackward().GetValue(); tProductionOrder.Article = demand.GetArticle(); tProductionOrder.ArticleId = demand.GetArticle().Id; tProductionOrder.Name = $"ProductionOrder for Demand {demand.GetArticle()}"; // connects this provider with table T_Provider tProductionOrder.Quantity = quantity.GetValue().GetValueOrDefault(); return(new ProductionOrder(tProductionOrder)); }
public void AddDemand(Demand oneDemand, Quantity reservedQuantity) { if (_demands.GetDemandById(oneDemand.GetId()) != null) { throw new MrpRunException("You cannot add an already added demand."); } // if it has quantity that is not reserved, remember it for later reserving if (oneDemand.GetType() == typeof(StockExchangeDemand) && reservedQuantity.IsSmallerThan(oneDemand.GetQuantity())) { _openDemands.Add(oneDemand.GetArticle(), new OpenNode <Demand>(oneDemand, oneDemand.GetQuantity().Minus(reservedQuantity), oneDemand.GetArticle())); } // save demand _demands.Add(oneDemand); }
private EntityCollector CreateProductionOrder(Demand demand, Quantity lotSize) { if (!demand.GetArticle().ToBuild) { throw new MrpRunException( "You are trying to create a productionOrder for a purchaseArticle."); } IProductionOrderCreator productionOrderCreator = new ProductionOrderCreator(); return(productionOrderCreator.CreateProductionOrder(demand, lotSize)); }
public EntityCollector CreateProductionOrder(Demand demand, Quantity quantity) { if (quantity == null || quantity.GetValue() == null) { throw new MrpRunException("Quantity is not set."); } T_ProductionOrder tProductionOrder = new T_ProductionOrder(); // [ArticleId],[Quantity],[Name],[DueTime],[ProviderId] tProductionOrder.DueTime = demand.GetStartTimeBackward().GetValue(); tProductionOrder.Article = demand.GetArticle(); tProductionOrder.ArticleId = demand.GetArticle().Id; tProductionOrder.Name = $"ProductionOrder for Demand {demand.GetArticle()}"; tProductionOrder.Quantity = quantity.GetValue().GetValueOrDefault(); ProductionOrder productionOrder = new ProductionOrder(tProductionOrder); EntityCollector entityCollector = new EntityCollector(); entityCollector.Add(productionOrder); return(entityCollector); }
/** * COP or PrOB --> satisfy by SE:W */ public EntityCollector Satisfy(Demand demand, Quantity demandedQuantity) { EntityCollector entityCollector = new EntityCollector(); Provider stockProvider = CreateStockExchangeProvider(demand.GetArticle(), demand.GetStartTimeBackward(), demandedQuantity); entityCollector.Add(stockProvider); T_DemandToProvider demandToProvider = new T_DemandToProvider(demand.GetId(), stockProvider.GetId(), demandedQuantity); entityCollector.Add(demandToProvider); return(entityCollector); }
public EntityCollector Satisfy(Demand demand, Quantity demandedQuantity) { // SE:I --> satisfy by orders (PuOP/PrOBom) if (demand.GetType() == typeof(StockExchangeDemand)) { if (demand.GetArticle().ToBuild) { return(_productionManager.Satisfy(demand, demandedQuantity)); } else { return(_purchaseManager.Satisfy(demand, demandedQuantity)); } } // COP or PrOB --> satisfy by SE:W else { return(_stockManager.Satisfy(demand, demandedQuantity)); } }
/** * SE:I --> satisfy by orders PrOBom */ public EntityCollector Satisfy(Demand demand, Quantity demandedQuantity) { if (demand.GetArticle().ToBuild == false) { throw new MrpRunException("Must be a build article."); } EntityCollector entityCollector = CreateProductionOrder(demand, demandedQuantity); foreach (var provider in entityCollector.GetProviders()) { T_DemandToProvider demandToProvider = new T_DemandToProvider() { DemandId = demand.GetId().GetValue(), ProviderId = provider.GetId().GetValue(), Quantity = provider.GetQuantity().GetValue() }; entityCollector.Add(demandToProvider); } return(entityCollector); }
private string ToGraphizString(Demand demand) { return($"\\n{demand.GetId()}: {demand.GetArticle().Name};Anzahl: {demand.GetQuantity()};" + $"\\nStart/End: {demand.GetStartTimeBackward()}/{demand.GetEndTimeBackward()};" ); }
public bool Contains(Demand demand) { return(_openNodes[demand.GetArticle()].Contains(demand.GetId())); }
public void Remove(Demand demand) { _openNodes[demand.GetArticle()].RemoveById(demand.GetId()); }