Пример #1
0
 private function getPriceByWebServicesCalculationType(Cart $cart, $is_cod_method, $order_total_price, $id_method, $id_address_delivery, $additional_shipping_cost, $handling_charges, DpdGroupConfiguration $configuration, $price_rule, $products)
 {
     $shipment = new DpdGroupShipment();
     $cart_products = empty($products) ? $cart->getProducts() : $products;
     if (!self::$parcels) {
         self::$parcels = $shipment->putProductsToParcels($cart_products);
     }
     $extra_params = array();
     if ($is_cod_method) {
         $extra_params['cod'] = array('total_paid' => $order_total_price, 'currency_iso_code' => $this->context->currency->iso_code, 'reference' => (int) $this->context->cart->id);
     }
     $product_names = '';
     if (count($cart_products)) {
         foreach ($cart_products as $product) {
             $product_names .= '|' . $product['name'];
         }
     }
     $extra_params['highInsurance'] = array('total_paid' => $order_total_price, 'currency_iso_code' => $this->context->currency->iso_code, 'content' => $product_names);
     $result = $shipment->calculate($id_method, $id_address_delivery, self::$parcels, null, $extra_params);
     if ($result === false || !isset($result['price']) || !isset($result['id_currency'])) {
         return false;
     }
     $result_price_in_default_currency = Tools::convertPrice($result['price'], new Currency((int) $result['id_currency']), false);
     $result['price'] = Tools::convertPrice($result_price_in_default_currency);
     $result['price'] += $additional_shipping_cost + $handling_charges;
     if (!empty($price_rule)) {
         if ($price_rule['shipping_price_percentage'] !== '') {
             $surcharge = $result['price'] * $price_rule['shipping_price_percentage'] / 100;
             $result['price'] += $surcharge;
         }
         if ($is_cod_method && $price_rule['cod_surcharge'] !== '') {
             $result['price'] += $this->convertPriceByCurrency($price_rule['cod_surcharge'], $price_rule['currency']);
         } elseif ($is_cod_method && $price_rule['cod_surcharge_percentage'] !== '') {
             $percentage_starting_price = $configuration->cod_percentage_calculation == DpdGroupConfiguration::COD_PERCENTAGE_CALCULATION_CART ? $order_total_price : $order_total_price + $result['price'];
             $result['price'] += $this->calculateCODSurchargePercentage($percentage_starting_price, $price_rule['cod_surcharge_percentage'], $price_rule['cod_min_surcharge'], $price_rule['currency']);
         }
     }
     return $result['price'];
 }