public function getTransaction()
{
$this->load->language('extension/payment/klarna_checkout');
$this->load->model('extension/payment/klarna_checkout');
$this->load->model('sale/order');
if (!$this->config->get('klarna_checkout_status') || !isset($this->request->get['order_id'])) {
return;
}
$order_reference = $this->model_extension_payment_klarna_checkout->getOrder($this->request->get['order_id']);
$order_info = $this->model_sale_order->getOrder($this->request->get['order_id']);
if (!$order_reference || !$order_reference['order_ref'] || !$order_info) {
return;
}
list($klarna_account, $connector) = $this->model_extension_payment_klarna_checkout->getConnector($this->config->get('klarna_checkout_account'), $order_info['currency_code']);
if (!$klarna_account || !$connector) {
return;
}
$klarna_order = $this->model_extension_payment_klarna_checkout->omRetrieve($connector, $order_reference['order_ref']);
if (!$klarna_order) {
return;
}
$data['text_na'] = $this->language->get('text_na');
$data['text_confirm_cancel'] = $this->language->get('text_confirm_cancel');
$data['text_confirm_capture'] = $this->language->get('text_confirm_capture');
$data['text_confirm_refund'] = $this->language->get('text_confirm_refund');
$data['text_confirm_extend_authorization'] = $this->language->get('text_confirm_extend_authorization');
$data['text_confirm_release_authorization'] = $this->language->get('text_confirm_release_authorization');
$data['text_confirm_merchant_reference'] = $this->language->get('text_confirm_merchant_reference');
$data['text_confirm_shipping_info'] = $this->language->get('text_confirm_shipping_info');
$data['text_confirm_billing_address'] = $this->language->get('text_confirm_billing_address');
$data['text_confirm_shipping_address'] = $this->language->get('text_confirm_shipping_address');
$data['text_confirm_trigger_send_out'] = $this->language->get('text_confirm_trigger_send_out');
$data['text_no_capture'] = $this->language->get('text_no_capture');
$data['text_no_refund'] = $this->language->get('text_no_refund');
$data['text_new_capture_title'] = $this->language->get('text_new_capture_title');
$data['text_new_refund_title'] = $this->language->get('text_new_refund_title');
$data['column_order_id'] = $this->language->get('column_order_id');
$data['column_merchant_id'] = $this->language->get('column_merchant_id');
$data['column_capture_id'] = $this->language->get('column_capture_id');
$data['column_reference'] = $this->language->get('column_reference');
$data['column_status'] = $this->language->get('column_status');
$data['column_fraud_status'] = $this->language->get('column_fraud_status');
$data['column_merchant_reference_1'] = $this->language->get('column_merchant_reference_1');
$data['column_customer_details'] = $this->language->get('column_customer_details');
$data['column_billing_address'] = $this->language->get('column_billing_address');
$data['column_shipping_address'] = $this->language->get('column_shipping_address');
$data['column_order_lines'] = $this->language->get('column_order_lines');
$data['column_amount'] = $this->language->get('column_amount');
$data['column_authorization_remaining'] = $this->language->get('column_authorization_remaining');
$data['column_authorization_expiry'] = $this->language->get('column_authorization_expiry');
$data['column_item_reference'] = $this->language->get('column_item_reference');
$data['column_type'] = $this->language->get('column_type');
$data['column_quantity'] = $this->language->get('column_quantity');
$data['column_quantity_unit'] = $this->language->get('column_quantity_unit');
$data['column_name'] = $this->language->get('column_name');
$data['column_total_amount'] = $this->language->get('column_total_amount');
$data['column_unit_price'] = $this->language->get('column_unit_price');
$data['column_total_discount_amount'] = $this->language->get('column_total_discount_amount');
$data['column_tax_rate'] = $this->language->get('column_tax_rate');
$data['column_total_tax_amount'] = $this->language->get('column_total_tax_amount');
$data['column_action'] = $this->language->get('column_action');
$data['column_cancel'] = $this->language->get('column_cancel');
$data['column_capture'] = $this->language->get('column_capture');
$data['column_refund'] = $this->language->get('column_refund');
$data['column_date'] = $this->language->get('column_date');
$data['column_refund_history'] = $this->language->get('column_refund_history');
$data['column_title'] = $this->language->get('column_title');
$data['column_given_name'] = $this->language->get('column_given_name');
$data['column_family_name'] = $this->language->get('column_family_name');
$data['column_street_address'] = $this->language->get('column_street_address');
$data['column_street_address2'] = $this->language->get('column_street_address2');
$data['column_city'] = $this->language->get('column_city');
$data['column_postal_code'] = $this->language->get('column_postal_code');
$data['column_region'] = $this->language->get('column_region');
$data['column_country'] = $this->language->get('column_country');
$data['column_email'] = $this->language->get('column_email');
$data['column_phone'] = $this->language->get('column_phone');
$data['column_shipping_info'] = $this->language->get('column_shipping_info');
$data['column_shipping_company'] = $this->language->get('column_shipping_company');
$data['column_shipping_method'] = $this->language->get('column_shipping_method');
$data['column_tracking_number'] = $this->language->get('column_tracking_number');
$data['column_tracking_uri'] = $this->language->get('column_tracking_uri');
$data['column_return_shipping_company'] = $this->language->get('column_return_shipping_company');
$data['column_return_tracking_number'] = $this->language->get('column_return_tracking_number');
$data['column_return_tracking_uri'] = $this->language->get('column_return_tracking_uri');
$data['entry_shipping_company'] = $this->language->get('entry_shipping_company');
$data['entry_shipping_method'] = $this->language->get('entry_shipping_method');
$data['entry_tracking_number'] = $this->language->get('entry_tracking_number');
$data['entry_tracking_uri'] = $this->language->get('entry_tracking_uri');
$data['entry_return_shipping_company'] = $this->language->get('entry_return_shipping_company');
$data['entry_return_tracking_number'] = $this->language->get('entry_return_tracking_number');
$data['entry_return_tracking_uri'] = $this->language->get('entry_return_tracking_uri');
$data['button_cancel'] = $this->language->get('button_cancel');
$data['button_capture'] = $this->language->get('button_capture');
$data['button_refund'] = $this->language->get('button_refund');
$data['button_extend_authorization'] = $this->language->get('button_extend_authorization');
$data['button_release_authorization'] = $this->language->get('button_release_authorization');
$data['button_update'] = $this->language->get('button_update');
$data['button_add'] = $this->language->get('button_add');
$data['button_add_shipping_info'] = $this->language->get('button_add_shipping_info');
$data['button_edit'] = $this->language->get('button_edit');
$data['button_close'] = $this->language->get('button_close');
$data['button_trigger_send_out'] = $this->language->get('button_trigger_send_out');
$data['button_edit_shipping_info'] = $this->language->get('button_edit_shipping_info');
$data['button_edit_billing_address'] = $this->language->get('button_edit_billing_address');
$data['button_new_capture'] = $this->language->get('button_new_capture');
$data['button_new_refund'] = $this->language->get('button_new_refund');
$data['order_ref'] = $order_reference['order_ref'];
$data['token'] = $this->session->data['token'];
$data['order_id'] = $this->request->get['order_id'];
$data['store_url'] = $this->request->server['HTTPS'] ? HTTPS_CATALOG : HTTP_CATALOG;
$extend_authorization_action = $cancel_action = $capture_action = $refund_action = $merchant_reference_action = $address_action = $release_authorization_action = false;
switch (strtoupper($klarna_order['status'])) {
case 'AUTHORIZED':
$merchant_reference_action = true;
$extend_authorization_action = true;
$address_action = true;
$cancel_action = true;
$capture_action = true;
break;
case 'PART_CAPTURED':
$merchant_reference_action = true;
$extend_authorization_action = true;
$release_authorization_action = true;
$address_action = true;
$capture_action = true;
$refund_action = true;
break;
case 'CAPTURED':
$address_action = true;
$merchant_reference_action = true;
$refund_action = true;
break;
case 'CANCELLED':
break;
case 'EXPIRED':
break;
case 'CLOSED':
break;
}
$format = '{title} {given_name} {family_name}' . "\n" . '{street_address}' . "\n" . '{street_address2}' . "\n" . '{city} {postcode}' . "\n" . '{region}' . "\n" . '{country}' . "\n" . '{email} {phone}';
$find = array('{title}', '{given_name}', '{family_name}', '{street_address}', '{street_address2}', '{city}', '{postcode}', '{region}', '{country}', '{email}', '{phone}');
$replace = array('title' => $klarna_order['billing_address']['title'], 'given_name' => $klarna_order['billing_address']['given_name'], 'family_name' => $klarna_order['billing_address']['family_name'], 'street_address' => $klarna_order['billing_address']['street_address'], 'street_address2' => $klarna_order['billing_address']['street_address2'], 'city' => $klarna_order['billing_address']['city'], 'postcode' => $klarna_order['billing_address']['postal_code'], 'region' => $klarna_order['billing_address']['region'], 'country' => $klarna_order['billing_address']['country'], 'email' => $klarna_order['billing_address']['email'], 'phone' => $klarna_order['billing_address']['phone']);
$billing_address_formatted = str_replace(array("\r\n", "\r", "\n"), '<br />', preg_replace(array("/\\s\\s+/", "/\r\r+/", "/\n\n+/"), '<br />', trim(str_replace($find, $replace, $format))));
$replace = array('title' => $klarna_order['shipping_address']['title'], 'given_name' => $klarna_order['shipping_address']['given_name'], 'family_name' => $klarna_order['shipping_address']['family_name'], 'street_address' => $klarna_order['shipping_address']['street_address'], 'street_address2' => $klarna_order['shipping_address']['street_address2'], 'city' => $klarna_order['shipping_address']['city'], 'postcode' => $klarna_order['shipping_address']['postal_code'], 'region' => $klarna_order['shipping_address']['region'], 'country' => $klarna_order['shipping_address']['country'], 'email' => $klarna_order['shipping_address']['email'], 'phone' => $klarna_order['shipping_address']['phone']);
$shipping_address_formatted = str_replace(array("\r\n", "\r", "\n"), '<br />', preg_replace(array("/\\s\\s+/", "/\r\r+/", "/\n\n+/"), '<br />', trim(str_replace($find, $replace, $format))));
$order_lines = array();
foreach ($klarna_order['order_lines'] as $order_line) {
$order_lines[] = array('reference' => $order_line['reference'], 'type' => $order_line['type'], 'quantity' => $order_line['quantity'], 'quantity_unit' => $order_line['quantity_unit'], 'name' => $order_line['name'], 'total_amount' => $this->currency->format($order_line['total_amount'] / 100, $order_info['currency_code'], '1.00000000'), 'unit_price' => $this->currency->format($order_line['unit_price'] / 100, $order_info['currency_code'], '1.00000000'), 'total_discount_amount' => $this->currency->format($order_line['total_discount_amount'] / 100, $order_info['currency_code'], '1.00000000'), 'tax_rate' => $order_line['tax_rate'] / 100 . '%', 'total_tax_amount' => $this->currency->format($order_line['total_tax_amount'] / 100, $order_info['currency_code'], '1.00000000'));
}
$merchant_id = '';
if ($order_reference['data']) {
$klarna_checkout_order_data = json_decode($this->encryption->decrypt($order_reference['data']), true);
if ($klarna_checkout_order_data && $klarna_checkout_order_data['merchant_id']) {
$merchant_id = $klarna_checkout_order_data['merchant_id'];
}
}
$data['transaction'] = array('order_id' => $klarna_order['order_id'], 'merchant_id' => $merchant_id, 'reference' => $klarna_order['klarna_reference'], 'status' => $klarna_order['status'], 'fraud_status' => $klarna_order['fraud_status'], 'merchant_reference_1' => $klarna_order['merchant_reference1'], 'billing_address' => $klarna_order['billing_address'], 'shipping_address' => $klarna_order['shipping_address'], 'billing_address_formatted' => $billing_address_formatted, 'shipping_address_formatted' => $shipping_address_formatted, 'order_lines' => $order_lines, 'amount' => $this->currency->format($klarna_order['order_amount'] / 100, $order_info['currency_code'], '1.00000000'), 'authorization_expiry' => isset($klarna_order['expires_at']) ? date($this->language->get('date_format_short'), strtotime($klarna_order['expires_at'])) : '', 'authorization_remaining' => $this->currency->format($klarna_order['remaining_authorized_amount'] / 100, $order_info['currency_code'], '1.00000000'));
$max_capture_amount = $klarna_order['remaining_authorized_amount'] / 100;
$max_refund_amount = $klarna_order['captured_amount'] / 100;
$data['captures'] = array();
foreach ($klarna_order['captures'] as $capture) {
$data['captures'][] = array('capture_id' => $capture['capture_id'], 'shipping_info_title' => sprintf($this->language->get('text_capture_shipping_info_title'), $capture['capture_id']), 'billing_address_title' => sprintf($this->language->get('text_capture_billing_address_title'), $capture['capture_id']), 'date_added' => date($this->language->get('datetime_format'), strtotime($capture['captured_at'])), 'amount' => $this->currency->format($capture['captured_amount'] / 100, $order_info['currency_code'], '1.00000000', true), 'reference' => $capture['klarna_reference'], 'shipping_info' => $capture['shipping_info'], 'billing_address' => $capture['billing_address'], 'shipping_address' => $capture['shipping_address']);
}
$data['refunds'] = array();
foreach ($klarna_order['refunds'] as $capture) {
$max_refund_amount -= $capture['refunded_amount'] / 100;
$data['refunds'][] = array('date_added' => date($this->language->get('datetime_format'), strtotime($capture['refunded_at'])), 'amount' => $this->currency->format($capture['refunded_amount'] / 100, $order_info['currency_code'], '1.00000000', true));
}
if (!$max_capture_amount) {
$capture_action = false;
}
if (!$max_refund_amount) {
$refund_action = false;
}
$data['allowed_shipping_methods'] = array('PickUpStore', 'Home', 'BoxReg', 'BoxUnreg', 'PickUpPoint', 'Own');
$data['extend_authorization_action'] = $extend_authorization_action;
$data['cancel_action'] = $cancel_action;
$data['capture_action'] = $capture_action;
$data['refund_action'] = $refund_action;
$data['address_action'] = $address_action;
$data['merchant_reference_action'] = $merchant_reference_action;
$data['release_authorization_action'] = $release_authorization_action;
$data['max_capture_amount'] = $this->currency->format($max_capture_amount, $order_info['currency_code'], '1.00000000', false);
$data['max_refund_amount'] = $this->currency->format($max_refund_amount, $order_info['currency_code'], '1.00000000', false);
$data['symbol_left'] = $this->currency->getSymbolLeft($order_info['currency_code']);
$data['symbol_right'] = $this->currency->getSymbolRight($order_info['currency_code']);
$this->response->setOutput($this->load->view('extension/payment/klarna_checkout_order_ajax', $data));
}