public function testCreate() { $productQuantityDiscount = $this->dummyData->getProductQuantityDiscount(); $catalogPromotion = $this->dummyData->getCatalogPromotion(); $this->pricing->setProductQuantityDiscounts([$productQuantityDiscount]); $this->pricing->setCatalogPromotions([$catalogPromotion]); $this->assertTrue($this->pricing->getPrice(new Product(), 1) instanceof Price); $this->assertTrue($this->pricing->getDate() instanceof DateTime); $this->assertTrue($this->pricing->getProductQuantityDiscounts()[0] instanceof ProductQuantityDiscount); $this->assertTrue($this->pricing->getCatalogPromotions()[0] instanceof CatalogPromotion); }
public function testGetPriceWithProductQuantityDiscountPercent() { $product = new Product(); $product->setUnitPrice(500); $productQuantityDiscount6 = new ProductQuantityDiscount($product); $productQuantityDiscount6->setType(PromotionType::percent()); $productQuantityDiscount6->setQuantity(6); $productQuantityDiscount6->setValue(5); $productQuantityDiscount12 = new ProductQuantityDiscount($product); $productQuantityDiscount12->setType(PromotionType::percent()); $productQuantityDiscount12->setQuantity(12); $productQuantityDiscount12->setValue(30); $productQuantityDiscount24 = new ProductQuantityDiscount($product); $productQuantityDiscount24->setType(PromotionType::percent()); $productQuantityDiscount24->setQuantity(24); $productQuantityDiscount24->setValue(35); $productQuantityDiscounts = $product->getProductQuantityDiscounts(); $this->pricing->setProductQuantityDiscounts($productQuantityDiscounts); $expectedPrice = new Price(); $expectedPrice->unitPrice = 500; $expectedPrice->origUnitPrice = 500; $expectedPrice->quantityPrice = 500; $expectedPrice->origQuantityPrice = 500; $this->assertEquals($expectedPrice, $this->pricingCalculator->getPrice($product, 1)); $expectedPrice = new Price(); $expectedPrice->unitPrice = 475; $expectedPrice->origUnitPrice = 500; $expectedPrice->quantityPrice = 2850; $expectedPrice->origQuantityPrice = 3000; $expectedPrice->addProductQuantityDiscount($productQuantityDiscount6); $this->assertEquals($expectedPrice, $this->pricingCalculator->getPrice($product, 6)); $expectedPrice = new Price(); $expectedPrice->unitPrice = 350; $expectedPrice->origUnitPrice = 500; $expectedPrice->quantityPrice = 4200; $expectedPrice->origQuantityPrice = 6000; $expectedPrice->addProductQuantityDiscount($productQuantityDiscount12); $this->assertEquals($expectedPrice, $this->pricingCalculator->getPrice($product, 12)); $expectedPrice = new Price(); $expectedPrice->unitPrice = 325; $expectedPrice->origUnitPrice = 500; $expectedPrice->quantityPrice = 7800; $expectedPrice->origQuantityPrice = 12000; $expectedPrice->addProductQuantityDiscount($productQuantityDiscount24); $this->assertEquals($expectedPrice, $this->pricingCalculator->getPrice($product, 24)); }
/** * @param CatalogPromotion[]|null $catalogPromotions * @param ProductQuantityDiscount[]|null $productQuantityDiscounts * @return Pricing */ public function getPricing(array $catalogPromotions = null, array $productQuantityDiscounts = null) { if ($catalogPromotions === null) { $catalogPromotions = [$this->getCatalogPromotion()]; } if ($productQuantityDiscounts === null) { $productQuantityDiscounts = [$this->getProductQuantityDiscount()]; } $pricing = new Pricing(); $pricing->setCatalogPromotions($catalogPromotions); $pricing->setProductQuantityDiscounts($productQuantityDiscounts); return $pricing; }
/** * @param Pricing $pricing * @return static */ public function withProductQuantityDiscounts(Pricing $pricing) { $productQuantityDiscounts = $this->entity->getProductQuantityDiscounts(); $pricing->setProductQuantityDiscounts($productQuantityDiscounts); foreach ($productQuantityDiscounts as $productQuantityDiscount) { $this->entityDTO->productQuantityDiscounts[] = $this->dtoBuilderFactory->getProductQuantityDiscountDTOBuilder($productQuantityDiscount)->withPrice($pricing)->build(); } return $this; }