ControllerExtensionPaymentKlarnaCheckout::getTransaction PHP Method

getTransaction() public method

public getTransaction ( )
    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));
    }