Beispiel #1
0
 /**
  * @param array $data
  * @return \Shopware\Bundle\StoreFrontBundle\Struct\Product\PriceRule
  */
 public function hydratePriceRule(array $data)
 {
     $price = new Struct\Product\PriceRule();
     $price->setId((int) $data['__price_id']);
     $price->setFrom((int) $data['__price_from']);
     $price->setPrice((double) $data['__price_price']);
     $price->setPseudoPrice((double) $data['__price_pseudoprice']);
     if (strtolower($data['__price_to']) == 'beliebig') {
         $price->setTo(null);
     } else {
         $price->setTo((int) $data['__price_to']);
     }
     if (isset($data['__price___attribute_id'])) {
         $attribute = $this->attributeHydrator->hydrate($this->extractFields('__attribute_', $data));
         $price->addAttribute('core', $attribute);
     }
     return $price;
 }
Beispiel #2
0
 /**
  * @return int|null
  */
 public function getTo()
 {
     return $this->rule->getTo();
 }
 /**
  * Helper function which calculates a single price struct of a product.
  * The product can contains multiple price struct elements like the graduated prices
  * and the cheapest price struct.
  * All price structs will be calculated through this function.
  *
  * @param Struct\Product\PriceRule $rule
  * @param Struct\Tax $tax
  * @param Struct\ProductContextInterface $context
  * @return Struct\Product\Price
  */
 private function calculatePriceStruct(Struct\Product\PriceRule $rule, Struct\Tax $tax, Struct\ProductContextInterface $context)
 {
     $price = new Struct\Product\Price($rule);
     //calculates the normal price of the struct.
     $price->setCalculatedPrice($this->calculatePrice($rule->getPrice(), $tax, $context));
     //check if a pseudo price is defined and calculates it too.
     $price->setCalculatedPseudoPrice($this->calculatePrice($rule->getPseudoPrice(), $tax, $context));
     //check if the product has unit definitions and calculate the reference price for the unit.
     if ($price->getUnit() && $price->getUnit()->getPurchaseUnit()) {
         $price->setCalculatedReferencePrice($this->calculateReferencePrice($price));
     }
     return $price;
 }
 /**
  * Helper function which builds the graduated prices
  * of a product for the passed price group discount array.
  *
  * This function is used to override the normal graduated prices
  * with a definition of the product price group discounts.
  *
  * @param Struct\Product\PriceRule $reference
  * @param Struct\Customer\Group $customerGroup
  * @param Struct\Product\PriceDiscount[] $discounts
  * @return array
  */
 private function buildDiscountGraduations(Struct\Product\PriceRule $reference, Struct\Customer\Group $customerGroup, array $discounts)
 {
     $prices = [];
     $firstDiscount = $discounts[0];
     /**@var $previous Struct\Product\PriceRule*/
     $previous = null;
     if ($firstDiscount->getQuantity() > 1) {
         $firstGraduation = clone $reference;
         $previous = $firstGraduation;
         $prices[] = $firstGraduation;
     }
     foreach ($discounts as $discount) {
         $rule = clone $reference;
         $percent = (100 - $discount->getPercent()) / 100;
         $price = $reference->getPrice() * $percent;
         $pseudo = $reference->getPseudoPrice();
         $rule->setPrice($price);
         $rule->setPseudoPrice($pseudo);
         $rule->setFrom($discount->getQuantity());
         $rule->setCustomerGroup($customerGroup);
         $rule->setTo(null);
         if ($previous) {
             $previous->setTo($rule->getFrom() - 1);
         }
         $previous = $rule;
         $prices[] = $rule;
     }
     return $prices;
 }