0) { $id_address = (int)Tools::getValue('id_address_delivery'); } else { $id_address = Context::getContext()->cart->id_address_delivery; } if (empty($delivery_options[$id_address])) { return $delivery_options; } $address = new Address($id_address); $customer_country = new Country($address->id_country); $customer_geo_address = array( 'country' => $customer_country->iso_code, 'postal_code' => $address->postcode ); if (DDWMapsHelper::getMapsApiService() == 'openmaps') { $ddw_maps_helper = new DDWMapsOSMHelper(); } else { $ddw_maps_helper = new DDWMapsGoogleHelper(); } foreach ($delivery_options[$id_address] as $key => $value) { //$address->postcode = str_replace(' ', '', $address->postcode); $id_carrier = Tools::str_replace_once(',', '', $key); $carrier = new Carrier($id_carrier); if ((int)$carrier->id_reference == 0) { continue; } $ddw_carrier_distance = DDWCarrierDistanceHelper::getByCarrier($id_carrier, Context::getContext()->shop->id); if ($ddw_carrier_distance->distance_enabled) { $carrier_geo_addresses[] = array( 'id_carrier' => $id_carrier, 'country' => $ddw_carrier_distance->carrier_country_iso, 'postal_code' => $ddw_carrier_distance->carrier_postal_code ); } // if disabled then ensure carrier is shown if (!$ddw_carrier_distance->distance_enabled) { $delivery_options_filtered[$id_address][$key] = $value; } } if (empty($carrier_geo_addresses)) { return $delivery_options; } if (!isset(self::$_cache[$cache_id])) { $carrier_distances = $ddw_maps_helper->getDistancesByPostCodes($customer_geo_address, $carrier_geo_addresses); self::$_cache[$cache_id] = $carrier_distances; } else { $carrier_distances = self::$_cache[$cache_id]; } foreach ($delivery_options[$id_address] as $key => $value) { $id_carrier = Tools::str_replace_once(',', '', $key); $ddw_carrier_distance = DDWCarrierDistanceHelper::getByCarrier($id_carrier, Context::getContext()->shop->id); if (!empty($carrier_distances[$id_carrier])) { $distance = (float)$carrier_distances[$id_carrier]['distance']; if (($distance >= $ddw_carrier_distance->radius_from_km && $distance <= $ddw_carrier_distance->radius_to_km) || $distance == 0) { $delivery_options_filtered[$id_address][$key] = $value; } } else { $delivery_options_filtered[$id_address][$key] = $value; } } return $delivery_options_filtered; } }