Exemple #1
0
        private static int CalculateQuantity(M_ArticleToBusinessPartner articleToBusinessPartner,
                                             Quantity demandQuantity)
        {
            if (demandQuantity == null || demandQuantity.GetValue() == 0)
            {
                throw new MrpRunException("Quantity is not set.");
            }
            // force round up the decimal demandQuantity
            int demandQuantityInt = (int)decimal.Truncate(demandQuantity.GetValue());  // TODO: PASCAL .GetValueOrDefault());

            if (demandQuantityInt < demandQuantity.GetValue())
            {
                demandQuantityInt++;
            }
            int purchaseQuantity = 0;

            for (int quantity = 0;
                 quantity < demandQuantityInt;
                 quantity += articleToBusinessPartner.PackSize)
            {
                purchaseQuantity++;
            }

            return(purchaseQuantity);
        }
        public void TestPurchaseQuantityIsAMultipleOfPackSize()
        {
            IZppSimulator zppSimulator = new ZppSimulator.impl.ZppSimulator();

            zppSimulator.StartTestCycle();

            IDbMasterDataCache dbMasterDataCache =
                ZppConfiguration.CacheManager.GetMasterDataCache();
            IDbTransactionData persistedTransactionData =
                ZppConfiguration.CacheManager.ReloadTransactionData();

            List <T_PurchaseOrderPart> tPurchaseOrderParts = persistedTransactionData
                                                             .PurchaseOrderPartGetAll().GetAllAs <T_PurchaseOrderPart>();

            foreach (var tPurchaseOrderPart in tPurchaseOrderParts)
            {
                M_ArticleToBusinessPartner articleToBusinessPartner =
                    dbMasterDataCache.M_ArticleToBusinessPartnerGetAllByArticleId(
                        new Id(tPurchaseOrderPart.ArticleId))[0];
                Quantity multiplier = new Quantity(1);
                while (multiplier.GetValue() * articleToBusinessPartner.PackSize <
                       tPurchaseOrderPart.Quantity)
                {
                    multiplier.IncrementBy(new Quantity(1));
                }

                Quantity expectedPurchaseQuantity = new Quantity(multiplier.GetValue() *
                                                                 articleToBusinessPartner.PackSize);
                Assert.True(tPurchaseOrderPart.GetQuantity().Equals(expectedPurchaseQuantity),
                            $"Quantity of PurchaseOrderPart ({tPurchaseOrderPart}) ist not a multiple of packSize.");
            }
        }
Exemple #3
0
        /**
         * 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);
        }
Exemple #4
0
        public override Duration GetDuration()
        {
            // currently only one businessPartner per article TODO: This could be changing
            M_ArticleToBusinessPartner articleToBusinessPartner =
                _dbMasterDataCache.M_ArticleToBusinessPartnerGetAllByArticleId(GetArticleId())[0];
            Duration duration = new Duration(
                articleToBusinessPartner.TimeToDelivery);

            return(duration);
        }
        private static M_ArticleToBusinessPartner[] CreateArticleToBusinessPartners(M_BusinessPartner businessPartner2,
                                                                                    M_Article[] articles)
        {
            var artToBusinessPartner = new M_ArticleToBusinessPartner[]
            {
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner2.Id,
                    ArticleId         = articles.Single(predicate: x => x.Name == ARTICLE_TABLE).Id, PackSize = 10, Price = 20.00,
                    TimeToDelivery    = 2880
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner2.Id,
                    ArticleId         = articles.Single(predicate: x => x.Name == ARTICLE_TABLE_LEG).Id, PackSize = 10, Price = 20.00,
                    TimeToDelivery    = 2880
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner2.Id,
                    ArticleId         = articles.Single(predicate: x => x.Name == ARTICLE_TABLETOP).Id, PackSize = 500, Price = 0.05,
                    TimeToDelivery    = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner2.Id,
                    ArticleId         = articles.Single(predicate: x => x.Name == ARTICLE_SCREW).Id, PackSize = 50, Price = 2.50,
                    TimeToDelivery    = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner2.Id,
                    ArticleId         = articles.Single(predicate: x => x.Name == ARTICLE_PEG).Id, PackSize = 50, Price = 0.20,
                    TimeToDelivery    = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner2.Id,
                    ArticleId         = articles.Single(predicate: x => x.Name == ARTICLE_WOOD_PANEL).Id, PackSize = 50, Price = 0.20,
                    TimeToDelivery    = 1440
                },
            };

            return(artToBusinessPartner);
        }
        internal void Init(MasterDBContext context, MasterTableBusinessPartner businessPartner, MasterTableArticle article)
        {
            var artToBusinessPartner = new M_ArticleToBusinessPartner[]
            {
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.SKELETON.Id, PackSize = 10, Price = 20.00,
                    TimeToDelivery    = 2880
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.TRUCK_BED.Id, PackSize = 10, Price = 20.00,
                    TimeToDelivery    = 2880
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.CHASSIS_TYPE_DUMP.Id, PackSize = 10,
                    Price             = 20.00, TimeToDelivery = 2880
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.CHASSIS_TYPE_RACE.Id, PackSize = 10,
                    Price             = 25.00, TimeToDelivery = 2880
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.CABIN.Id, PackSize = 10, Price = 1.75,
                    TimeToDelivery    = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.ENGINE_BLOCK.Id, PackSize = 10,
                    Price             = 0.40, TimeToDelivery = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.ENGINE_RACE_EXTENSION.Id, PackSize = 10,
                    Price             = 1.00, TimeToDelivery = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.SIDEWALL_LONG.Id, PackSize = 10,
                    Price             = 0.55, TimeToDelivery = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.SIDEWALL_SHORT.Id, PackSize = 10,
                    Price             = 0.45, TimeToDelivery = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.BASEPLATE_TRUCK_BED.Id, PackSize = 10,
                    Price             = 0.40, TimeToDelivery = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.DUMP_JOINT.Id /*Kippgelenk*/,
                    PackSize          = 50, Price = 0.90, TimeToDelivery = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.WHEEL.Id, PackSize = 150, Price = 0.35,
                    TimeToDelivery    = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.BASE_PLATE.Id, PackSize = 10, Price = 0.80,
                    TimeToDelivery    = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.SEMITRAILER.Id /*Aufleger*/, PackSize = 25,
                    Price             = 0.10, TimeToDelivery = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.RACE_WING.Id, PackSize = 10, Price = 1.50,
                    TimeToDelivery    = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.WASHER.Id, PackSize = 150, Price = 0.02,
                    TimeToDelivery    = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.TIMBER_PLATE.Id,
                    PackSize          = 100, Price = 0.20, TimeToDelivery = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.TIMBER_BLOCK.Id,
                    PackSize          = 100, Price = 0.20, TimeToDelivery = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.GLUE.Id, PackSize = 1000, Price = 0.01,
                    TimeToDelivery    = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.PEGS.Id, PackSize = 200, Price = 0.01,
                    TimeToDelivery    = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.POLE.Id, PackSize = 200, Price = 0.25,
                    TimeToDelivery    = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.BUTTON.Id, PackSize = 500, Price = 0.05,
                    TimeToDelivery    = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.PACKING.Id, PackSize = 50, Price = 2.50,
                    TimeToDelivery    = 1440
                },
                new M_ArticleToBusinessPartner
                {
                    BusinessPartnerId = businessPartner.KREDITOR_MATERIAL_WHOLSALE.Id,
                    ArticleId         = article.USER_MANUAL.Id, PackSize = 50,
                    Price             = 0.20, TimeToDelivery = 1440
                },
            };

            context.ArticleToBusinessPartners.AddRange(entities: artToBusinessPartner);
            context.SaveChanges();
        }