context = $context; $this->priceService = $priceService; } /** * @param array $specificPrices * * @return void */ public function decorateSpecificPrices(&$specificPrices) { foreach ($specificPrices as &$specificPrice) { $this->addTotalPrice($specificPrice); $this->setShopId($specificPrice); $this->castPropertyValues($specificPrice); } } /** * @param array $specificPrice * * @return void */ private function addTotalPrice(&$specificPrice) { $this->context->country = new \Country($specificPrice['id_country']); $this->context->currency = new \Currency($specificPrice['id_currency']); $specificPrice['price_tax_included'] = $this->priceService->getSpecificProductPrice( $specificPrice['id_product'], $specificPrice['id_product_attribute'], $specificPrice['id_specific_price'], true, false, $this->context ); $specificPrice['price_tax_excluded'] = $this->priceService->getSpecificProductPrice( $specificPrice['id_product'], $specificPrice['id_product_attribute'], $specificPrice['id_specific_price'], false, false, $this->context ); $specificPrice['sale_price_tax_incl'] = $this->priceService->getSpecificProductPrice( $specificPrice['id_product'], $specificPrice['id_product_attribute'], $specificPrice['id_specific_price'], true, true, $this->context ); $specificPrice['sale_price_tax_excl'] = $this->priceService->getSpecificProductPrice( $specificPrice['id_product'], $specificPrice['id_product_attribute'], $specificPrice['id_specific_price'], false, true, $this->context ); } /** * @param array $specificPrice * * @return void */ private function castPropertyValues(&$specificPrice) { $specificPrice['id_specific_price'] = (int) $specificPrice['id_specific_price']; $specificPrice['id_product'] = (int) $specificPrice['id_product']; $specificPrice['id_shop'] = (int) $specificPrice['id_shop']; $specificPrice['id_group'] = (int) $specificPrice['id_group']; $specificPrice['id_shop_group'] = (int) $specificPrice['id_shop_group']; $specificPrice['id_product_attribute'] = (int) $specificPrice['id_product_attribute']; $specificPrice['price'] = (float) $specificPrice['price']; $specificPrice['from_quantity'] = (int) $specificPrice['from_quantity']; $specificPrice['reduction'] = (float) $specificPrice['reduction']; $specificPrice['reduction_tax'] = (int) $specificPrice['reduction_tax']; $specificPrice['id_currency'] = (int) $specificPrice['id_currency']; $specificPrice['id_country'] = (int) $specificPrice['id_country']; $specificPrice['id_customer'] = (int) $specificPrice['id_customer']; $specificPrice['currency'] = $specificPrice['currency'] ?: 'ALL'; $specificPrice['country'] = $specificPrice['country'] ?: 'ALL'; $specificPrice['price_tax_included'] = (float) $specificPrice['price_tax_included']; $specificPrice['price_tax_excluded'] = (float) $specificPrice['price_tax_excluded']; $specificPrice['sale_price_tax_incl'] = (float) $specificPrice['sale_price_tax_incl']; $specificPrice['sale_price_tax_excl'] = (float) $specificPrice['sale_price_tax_excl']; if ($specificPrice['reduction_type'] === 'percentage') { $specificPrice['discount_percentage'] = $specificPrice['reduction'] * 100; $specificPrice['discount_value_tax_incl'] = 0.0; $specificPrice['discount_value_tax_excl'] = 0.0; } else { $specificPrice['discount_percentage'] = 0; $specificPrice['discount_value_tax_incl'] = $specificPrice['price_tax_included'] - $specificPrice['sale_price_tax_incl']; $specificPrice['discount_value_tax_excl'] = $specificPrice['price_tax_excluded'] - $specificPrice['sale_price_tax_excl']; } } /** * @param array $specificPrice * * @return void */ private function setShopId(&$specificPrice) { if ($this->context->shop === null) { throw new \PrestaShopException('No shop context'); } if ($specificPrice['id_shop']) { $specificPrice['id_shop'] = $this->context->shop->id; } } }