load->model('localisation/country'); $this->load->model('setting/setting'); $countries = $this->model_setting_setting->getSetting('retailcrm')['retailcrm_country']; $deliveryTypes = array(); foreach ($countries as $country) { $deliveryTypes = array_merge($deliveryTypes, $this->getDeliveryTypesByZones($country)); } if (isset($this->request->server['HTTP_ORIGIN'])) { $this->response->addHeader('Access-Control-Allow-Origin: ' . $this->request->server['HTTP_ORIGIN']); $this->response->addHeader('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS'); $this->response->addHeader('Access-Control-Max-Age: 1000'); $this->response->addHeader('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With'); } $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($deliveryTypes)); } protected function getDeliveryTypesByZones($country_id) { $this->load->model('extension/extension'); $this->load->model('localisation/zone'); $this->load->model('localisation/country'); $shippingModules = $this->model_extension_extension->getExtensions('shipping'); $zones = $this->model_localisation_zone->getZonesByCountryId($country_id); $country = $this->model_localisation_country->getCountry($country_id); $quote_data = array(); foreach ($zones as $zone) { $address = array( 'country_id' => $country_id, 'zone_id' => $zone['zone_id'], 'iso_code_2' => $country['iso_code_2'], 'iso_code_3' => $country['iso_code_3'], 'zone_code' => $zone['code'], 'postcode' => '', 'city' => '' ); foreach ($shippingModules as $shippingModule) { $this->load->model('shipping/' . $shippingModule['code']); if ($this->config->get($shippingModule['code'] . '_status')) { if ($shippingModule['code'] == 'free') { $free_total = $this->config->get('free_total'); if ($free_total > 0) { $this->config->set('free_total', 0); } } if($this->{'model_shipping_' . $shippingModule['code']}->getQuote($address)) { $quote_data[] = $this->{'model_shipping_' . $shippingModule['code']}->getQuote($address); } } } } $deliveryTypes = array(); foreach ($quote_data as $shipping) { foreach ($shipping['quote'] as $shippingMethod) { $deliveryTypes[$shipping['code']]['title'] = $shipping['title']; $deliveryTypes[$shipping['code']][$shippingMethod['code']] = $shippingMethod; } } return $deliveryTypes; } }