OpenCart 🇺🇦

Схема

public mixed shipping_quotes ( )

Аргументы

Аргумент Возможный тип Описание
У метода нет аргументов

Описание

Метод пока еще не документирован.

Исходный код

$this->load->model('setting/extension');

$this->load->library('cba');
$this->load->model('payment/amazon_checkout');

$this->language->load('payment/amazon_checkout');

if (!isset($this->session->data['cba'])) {
	$this->redirect($this->url->link('common/home'));
}

$contract_id = $this->session->data['cba']['contract_id'];

$cba = new CBA($this->config->get('amazon_checkout_merchant_id'), $this->config->get('amazon_checkout_access_key'),
		$this->config->get('amazon_checkout_access_secret'));
$cba->setMode($this->config->get('amazon_checkout_mode'));

$response = $cba->getPurchaseContract($contract_id);

$xml = simplexml_load_string($response);

$json = array();

if (isset($xml->GetPurchaseContractResult->PurchaseContract->Destinations->Destination[0]->PhysicalDestinationAttributes->ShippingAddress)) {
	$address_xml = $xml->GetPurchaseContractResult->PurchaseContract->Destinations->Destination[0]->PhysicalDestinationAttributes->ShippingAddress;

	$result = $this->model_payment_amazon_checkout->getCountry((string)$address_xml->CountryCode);

	if (!empty($result)) {
		$iso_code2 = $result['iso_code_2'];
		$iso_code3 = $result['iso_code_3'];
		$address_format = $result['address_format'];
		$country_name = $result['name'];
		$country_id = (int)$result['country_id'];

		$zone = (string)$address_xml->StateOrProvinceCode;

		$result = $this->model_payment_amazon_checkout->getZone($zone, $country_id);

		if (isset($result['zone_id'])) {
			$zone_id = $result['zone_id'];
			$zone_code = $result['code'];
		} else {
			$zone_id = 0;
			$zone_code = '';
		}
	} else {
		$iso_code2 = '';
		$iso_code3 = '';
		$address_format = '';
		$country_name = '';
		$country_id = 0;
		$zone_id = 0;
		$zone_code = '';
		$zone = '';
	}


	$this->tax->setShippingAddress($country_id, $zone_id);

	$address = array(
		'firstname' => (string)$address_xml->Name,
		'lastname' => '',
		'company' => '',
		'company_id' => '',
		'tax_id' => '',
		'address_1' => '',
		'address_2' => '',
		'postcode' => (string)$address_xml->PostalCode,
		'city' => (string)$address_xml->City,
		'zone_id' => $zone_id,
		'zone' => (string)$address_xml->StateOrProvinceCode,
		'zone_code' => $zone_code,
		'country_id' => $country_id,
		'country' => $country_name,
		'iso_code_2' => $iso_code2,
		'iso_code_3' => $iso_code3,
		'address_format' => $address_format,
	);

	$quotes = array();

	$results = $this->model_setting_extension->getExtensions('shipping');

	foreach ($results as $result) {

		if (isset($result['code'])) {
			$code = $result['code'];
		} else {
			$code = $result['key'];
		}

		if ($this->config->get($code . '_status')) {
			$this->load->model('shipping/' . $code);

			$quote = $this->{'model_shipping_' . $code}->getQuote($address);

			if ($quote && empty($quote['error'])) {
				$quotes[$code] = array(
					'title' => $quote['title'],
					'quote' => $quote['quote'],
					'sort_order' => $quote['sort_order'],
					'error' => $quote['error']
				);
			}
		}
	}

	$sort_order = array();

	foreach ($quotes as $key => $value) {
		$sort_order[$key] = $value['sort_order'];
	}

	array_multisort($sort_order, SORT_ASC, $quotes);

	$this->session->data['cba']['shipping_methods'] = $quotes;

	if (empty($quotes)) {
		$json['error'] = $this->language->get('error_no_shipping_methods');
	} else {
		$json['quotes'] = $quotes;
	}

	if (isset($this->session->data['cba']['shipping_method']) && !empty($this->session->data['cba']['shipping_method'])
			&& isset($this->session->data['cba']['shipping_method']['code'])) {
		$json['selected'] = $this->session->data['cba']['shipping_method']['code'];
	} else {
		$json['selected'] = '';
	}
} else {
	$json['error'] = $this->language->get('error_shipping_methods');
}

$this->response->setOutput(json_encode($json));