opencart-module/catalog/controller/api/retailcrm.php
2017-09-06 13:08:39 +03:00

103 lines
3.1 KiB
PHP

<?php
class ControllerApiRetailcrm extends Controller
{
public function getDeliveryTypes()
{
$this->load->model('localisation/country');
$this->load->model('setting/setting');
$moduleTitle = $this->getModuleTitle();
$countries = $this->model_setting_setting->getSetting($moduleTitle)[$moduleTitle . '_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->loadModels();
$this->load->model('localisation/zone');
$this->load->model('localisation/country');
$shippingModules = $this->{'model_' . $this->modelExtension}->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('extension/shipping/' . $shippingModule['code']);
if (version_compare(VERSION, '3.0', '<')) {
$shippingCode = $shippingModule['code'];
} else {
$shippingCode = 'shipping_' . $shippingModule['code'];
}
if ($this->config->get($shippingCode . '_status')) {
if($this->{'model_extension_shipping_' . $shippingModule['code']}->getQuote($address)) {
$quote_data[] = $this->{'model_extension_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;
}
private function loadModels()
{
if (version_compare(VERSION, '3.0', '<')) {
$this->load->model('extension/extension');
$this->modelExtension = 'extension_extension';
} else {
$this->load->model('setting/extension');
$this->modelExtension = 'setting_extension';
}
}
private function getModuleTitle()
{
if (version_compare(VERSION, '3.0', '<')) {
$title = 'retailcrm';
} else {
$title = 'module_retailcrm';
}
return $title;
}
}