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']; }