%PDF- %PDF-
| Direktori : /proc/self/root/home1/lightco1/www/plugins/vmpayment/klarna/klarna/helpers/ |
| Current File : //proc/self/root/home1/lightco1/www/plugins/vmpayment/klarna/klarna/helpers/klarnahandler.php |
<?php
defined('_JEXEC') or die('Restricted access');
/**
* @version $Id: klarnahandler.php 8388 2014-10-07 21:06:30Z alatak $
*
* @author Valérie Isaksen
* @package VirtueMart
* @copyright Copyright (C) 2012 iStraxx - All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* VirtueMart is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
*/
class KlarnaHandler {
/**
* @static
* @return array
*/
static function countriesData () {
$countriesData = array(
'NOR' => array(
'pno_encoding' => 3,
'language' => 97,
'language_code' => 'nb',
'country' => 164,
'currency' => 1,
'currency_code' => 'NOK',
'currency_symbol' => 'kr',
'country_code' => 'no'
),
'SWE' => array(
'pno_encoding' => 2,
'language' => 138,
'language_code' => 'sv',
'country' => 209,
'country_code' => 'se',
'currency' => 0,
'currency_code' => 'SEK',
'currency_symbol' => 'kr'
),
'DNK' => array(
'pno_encoding' => 5,
'language' => 27,
'language_code' => 'da',
'country' => 59,
'country_code' => 'dk',
'currency' => 3,
'currency_code' => 'DKK',
'currency_symbol' => 'kr',
),
'FIN' => array(
'pno_encoding' => 4,
'language' => 37,
'language_code' => 'fi',
'country' => 73,
'country_code' => 'fi',
'currency' => 2,
'currency_code' => 'EUR',
'currency_symbol' => '€'
),
'NLD' => array(
'pno_encoding' => 7,
'language' => 101,
'language_code' => 'nl',
'country' => 154,
'country_code' => 'nl',
'currency' => 2,
'currency_code' => 'EUR',
'currency_symbol' => '€',
),
'DEU' => array(
'pno_encoding' => 6,
'language' => 28,
'language_code' => 'de',
'country' => 81,
'country_code' => 'de',
'currency' => 2,
'currency_code' => 'EUR',
'currency_symbol' => '€'
)
);
return $countriesData;
}
/**
* @static
* @param $method
* @param $country
* @return array|null
*/
static function countryData ($method, $country) {
$countriesData = self::countriesData();
$lower_country = strtolower($country);
if (array_key_exists(strtoupper($country), $countriesData)) {
$cData = $countriesData[strtoupper($country)];
$eid = 'klarna_merchantid_' . $lower_country;
$secret = 'klarna_sharedsecret_' . $lower_country;
$invoice_fee = 'klarna_invoicefee_' . $lower_country;
$min_amount = 'klarna_min_amount_part_' . $lower_country;
$payment_activated = 'klarna_payments_' . $lower_country;
$active = 'klarna_active_' . $lower_country;
$cData['eid'] = $method->$eid;
$cData['secret'] = $method->$secret;
$cData['invoice_fee'] = (double)$method->$invoice_fee;
$cData['country_code_3'] = $country;
$cData['virtuemart_currency_id'] = ShopFunctions::getCurrencyIDByName($cData['currency_code']);
$cData['virtuemart_country_id'] = ShopFunctions::getCountryIDByName($country);
$cData['mode'] = KlarnaHandler::getKlarnaMode($method, $country);
$cData['min_amount'] = $method->$min_amount;
$cData['active'] = $method->$active;
if (empty($method->$payment_activated)) {
$method->$payment_activated = array('invoice', 'part');
}
$cData['payments_activated'] = $method->$payment_activated;
if (!class_exists('VirtueMartModelVendor')) {
require(VMPATH_ADMIN . DS . 'models' . DS . 'vendor.php');
}
$vendor_id = 1;
$cData['vendor_currency'] = VirtueMartModelVendor::getVendorCurrency($vendor_id)->vendor_currency;
return $cData;
} else {
return NULL;
}
}
/**
* @static
* @param $method
* @param $country
* @return array|null
*/
public static function getCountryData ($method, $country) {
//$country = self::convertToThreeLetterCode($country);
return self::countryData($method, $country);
}
/**
* @static
* @param $method
* @param $country
* @return mixed
*/
public static function convertCountry ($method, $country) {
$country_data = self::countryData($method, $country);
return $country_data['country_code'];
}
/**
* @static
* @param $method
* @param $country
* @return mixed
*/
public static function getLanguageForCountry ($method, $country) {
$country = self::convertToThreeLetterCode($country);
$country_data = self::countryData($method, $country);
return $country_data['language_code'];
}
/**
* @static
* @param $method
* @param $country
* @return mixed
*/
public static function getCurrencySymbolForCountry ($method, $country) {
$country_data = self::countryData($method, $country);
return $country_data['currency_symbol'];
}
/**
* @static
* @param $method
* @param $country
* @return mixed
*/
public static function getInvoiceFee ($method, $country) {
$invoice_fee = 'klarna_invoicefee_' . strtolower($country);
return $method->$invoice_fee;
}
/**
* @static
* @param $method
* @param $country
* @return mixed
*/
public static function getInvoiceTaxId ($method, $country) {
$invoice_fee_tax = 'klarna_invoice_tax_id_' . strtolower($country);
return $method->$invoice_fee_tax;
}
/**
* The invoice fee is in the vendor currency, and should be converted to the payment currency
*
* @static
* @param $method
* @param $country
* @return mixed
*/
public static function getInvoiceFeeInclTax ($method, $country, $cartPricesCurrency, $cartPaymentCurrency, &$display_invoice_fee, &$invoice_fee) {
$method_invoice_fee = self::getInvoiceFee($method, $country);
$invoice_tax_id = self::getInvoiceTaxId($method, $country);
vmdebug('getInvoiceFeeInclTax', $cartPaymentCurrency, $invoice_fee);
if (!class_exists('calculationHelper')) {
require(VMPATH_ADMIN . DS . 'helpers' . DS . 'calculationh.php');
}
if (!class_exists('CurrencyDisplay')) {
require(VMPATH_ADMIN . DS . 'helpers' . DS . 'currencydisplay.php');
}
if (!class_exists('VirtueMartModelVendor')) {
require(VMPATH_ADMIN . DS . 'models' . DS . 'vendor.php');
}
$vendor_id = 1;
$vendor_currency = VirtueMartModelVendor::getVendorCurrency($vendor_id);
//$currency = CurrencyDisplay::getInstance ();
$paymentCurrency = CurrencyDisplay::getInstance($cartPaymentCurrency);
$invoice_fee = (double)round($paymentCurrency->convertCurrencyTo($cartPaymentCurrency, $method_invoice_fee, FALSE), 2);
$currencyDisplay = CurrencyDisplay::getInstance($cartPricesCurrency);
$paymentCurrency = CurrencyDisplay::getInstance($cartPaymentCurrency);
$display_invoice_fee = $paymentCurrency->priceDisplay($method_invoice_fee, $cartPaymentCurrency);
$currencyDisplay = CurrencyDisplay::getInstance($cartPricesCurrency);
vmdebug('getInvoiceFeeInclTax', $cartPaymentCurrency, $invoice_fee, $invoice_tax_id, $display_invoice_fee);
return;
}
/*
* @depredecated
*/
/**
* @static
* @param $country
* @return string
*/
public static function convertToThreeLetterCode ($country) {
switch (strtolower($country)) {
case "se":
return "swe";
case "de":
return "deu";
case "dk":
return "dnk";
case "nl":
return "nld";
case "fi":
return "fin";
case "no":
return "nor";
default:
return $country;
}
}
/**
* @static
* @return array
*/
public static function getKlarnaCountries () {
$klarna_countries = array("swe", "deu", "dnk", "nld", "fin", "nor");
return $klarna_countries;
}
/**
* @static
* @return array
*/
static function getDataFromEditPayment () {
VmConfig::loadJLang('com_virtuemart_shoppers', true);
$kIndex = 'klarna_';
$klarna['klarna_paymentmethod'] = vRequest::getVar($kIndex . 'paymentmethod');
if ($klarna['klarna_paymentmethod'] == 'klarna_invoice') {
$klarna_option = 'invoice';
} elseif ($klarna['klarna_paymentmethod'] == 'klarna_partPayment') {
$klarna_option = 'part';
} elseif ($klarna['klarna_paymentmethod'] == 'klarna_speccamp') {
$klarna_option = 'spec';
} else {
return NULL;
}
$prefix = $klarna_option . '_' . $kIndex;
//Removes spaces, tabs, and other delimiters.
$klarna['pno'] = preg_replace('/[ \t\,\.\!\#\;\:\r\n\v\f]/', '', vRequest::getVar($prefix . 'pnum', ''));
$klarna['socialNumber'] = preg_replace('/[ \t\,\.\!\#\;\:\r\n\v\f]/', '', vRequest::getVar($prefix . 'socialNumber'));
$klarna['phone'] = vRequest::getVar($prefix . 'phone');
$klarna['email'] = vRequest::getVar($prefix . 'emailAddress');
$klarna['street'] = vRequest::getVar($prefix . 'street');
$klarna['house_no'] = vRequest::getVar($prefix . 'homenumber');
$klarna['house_ext'] = vRequest::getVar($prefix . 'house_extension');
$klarna['year_salary'] = vRequest::getVar($prefix . 'ysalary');
$klarna['reference'] = vRequest::getVar($prefix . 'reference');
$klarna['city'] = vRequest::getVar($prefix . 'city');
$klarna['zip'] = vRequest::getVar($prefix . 'zipcode');
$klarna['first_name'] = vRequest::getVar($prefix . 'firstName');
$klarna['last_name'] = vRequest::getVar($prefix . 'lastName');
$klarna['invoice_type'] = vRequest::getVar('klarna_invoice_type');
$klarna['company_name'] = vRequest::getVar('klarna_company_name');
$klarna['phone'] = vRequest::getVar($prefix . 'phone');
$klarna['consent'] = vRequest::getVar($prefix . 'consent');
$klarna['gender'] = vRequest::getVar($prefix . 'gender');
switch ($klarna['gender']) {
case KlarnaFlags::MALE :
$klarna['title'] = vmText::_('COM_VIRTUEMART_SHOPPER_TITLE_MR');
break;
case KlarnaFlags::FEMALE:
//$this->klarna_gender = KlarnaFlags::FEMALE;
$klarna['title'] = vmText::_('COM_VIRTUEMART_SHOPPER_TITLE_MRS');
break;
}
$klarna['birth_day'] = vRequest::getVar($prefix . 'birth_day', '');
$klarna['birth_month'] = vRequest::getVar($prefix . 'birth_month', '');
$klarna['birth_year'] = vRequest::getVar($prefix . 'birth_year', '');
if (isset($klarna['birth_year']) and !empty($klarna['birth_year'])) {
// due to the select list
if ($klarna['birth_month'] != 0 and $klarna['birth_month'] != 0) {
$klarna['birthday'] = $klarna['birth_year'] . "-" . $klarna['birth_month'] . "-" . $klarna['birth_day'];
$klarna['pno_frombirthday'] = vRequest::getVar($prefix . 'birth_day') . vRequest::getVar($prefix . 'birth_month') . vRequest::getVar($prefix . 'birth_year');
$klarna['birth_day'] = vRequest::getVar($prefix . 'birth_day') ;
$klarna['birth_month'] = vRequest::getVar($prefix . 'birth_month') ;
$klarna['birth_year'] = vRequest::getVar($prefix . 'birth_year') ;
} else {
$klarna['birthday'] = '';
}
} else {
$klarna['birthday'] = '';
}
return $klarna;
}
/**
* @static
* @param $cData
* @param $order
* @return KlarnaAddr
*/
private static function getBilling ($cData, $order) {
$bt = $order['BT'];
$bill_country = shopFunctions::getCountryByID($bt['virtuemart_country_id'], 'country_2_code');
//$cData = self::countryData($method, $country);
$bill_street = $bt['address_1'];
$bill_ext = "";
$bill_number = "";
if (strtolower($bill_country) == "de" || strtolower($bill_country) == "nl") {
$splitAddress = array('', '', '');
$splitAddress = self::splitAddress($bt['address_1']);
$bill_street = $splitAddress[0];
$bill_number = $splitAddress[1];
switch ($bt['title']) {
case vmText::_('COM_VIRTUEMART_SHOPPER_TITLE_MR'):
//$this->klarna_gender = KlarnaFlags::MALE;
break;
case vmText::_('COM_VIRTUEMART_SHOPPER_TITLE_MISS'):
case vmText::_('COM_VIRTUEMART_SHOPPER_TITLE_MRS'):
//$this->klarna_gender = KlarnaFlags::FEMALE;
break;
default:
//$this->klarna_gender = NULL;
break;
}
if (strtolower($bill_country) == "nl") {
$bill_ext = $splitAddress[2];
}
}
$billing = new KlarnaAddr($bt['email'], $bt['phone_1'], @$bt['phone_2'], utf8_decode($bt['first_name']), utf8_decode($bt['last_name']), '', utf8_decode($bill_street), $bt['zip'], utf8_decode($bt['city']), $bill_country, $bill_number, $bill_ext);
return $billing;
}
/**
* @static
* @param $method
* @param $order
* @param $klarna_pclass
* @return array|bool
* @throws Exception
*/
public static function addTransaction ($method, $order, $klarna_pclass) {
if (!class_exists('KlarnaAddr')) {
require(JPATH_VMKLARNAPLUGIN . DS . 'klarna' . DS . 'api' . DS . 'klarnaaddr.php');
}
$session = JFactory::getSession();
$sessionKlarna = $session->get('Klarna', 0, 'vm');
$sessionKlarnaData = (object)json_decode($sessionKlarna,true );
if (!isset($sessionKlarnaData)) {
throw new Exception("No klarna Session data set");
}
$klarnaData = $sessionKlarnaData->KLARNA_DATA;
// let's put it back as an array
$klarnaData=(array)$klarnaData;
if (VMKLARNA_SHIPTO_SAME_AS_BILLTO) {
$shipTo = $order['details']['BT'];
} else {
$shipTo = (!isset($order['details']['ST']) or empty($order['details']['ST']) or count($order['details']['ST']) == 0) ? $order['details']['BT'] : $order['details']['ST'];
}
$billTo = $order['details']['BT'];
$country = shopFunctions::getCountrybyID($shipTo->virtuemart_country_id, 'country_3_code');
$cData = self::countryData($method, $country);
//$total_price_excl_vat = self::convertPrice($order['details']['BT']->order_subtotal, $cData['currency_code']);
//$total_price_incl_vat = self::convertPrice($order['details']['BT']->order_subtotal + $order['details']['BT']->order_tax, $cData['currency_code'], $order['details']['BT']->order_currency);
$mode = KlarnaHandler::getKlarnaMode($method, $cData['country_code_3']);
$ssl = KlarnaHandler::getKlarnaSSL($mode);
// Instantiate klarna object.
$klarna = new Klarna_virtuemart();
$klarna->config($cData['eid'], $cData['secret'], $cData['country_code'], $cData['language'], $cData['currency_code'], $mode, VMKLARNA_PC_TYPE, KlarnaHandler::getKlarna_pc_type(), $ssl);
// Sets order id's from other systems for the upcoming transaction.
$klarna->setEstoreInfo($order['details']['BT']->order_number);
// Fill the good list the we send to Klarna
foreach ($order['items'] as $item) {
if ($item->product_basePriceWithTax != 0.0) {
if ($item->product_basePriceWithTax != $item->product_final_price) {
$price = $item->product_basePriceWithTax;
} else {
$price = $item->product_final_price;
}
} else {
if ($item->product_priceWithoutTax != $item->product_item_price) {
$price = $item->product_item_price;
} else {
$price = $item->product_discountedPriceWithoutTax;
}
}
$item_price = self::convertPrice($price, $order['details']['BT']->order_currency, $cData['currency_code']);
$item_price = (double)(round($item_price, 2));
$item_tax_percent = 0;
foreach ($order['calc_rules'] as $calc_rule) {
if ($calc_rule->virtuemart_order_item_id == $item->virtuemart_order_item_id AND $calc_rule->calc_kind == 'VatTax') {
$item_tax_percent = $calc_rule->calc_value;
break;
}
}
//$item_discount_percent = (double)(round (abs (($item->product_subtotal_discount / $item->product_quantity) * 100 / $price), 2));
$item_discount_percent = 0.0;
$discount_tax_percent = 0.0;
$klarna->addArticle($item->product_quantity, utf8_decode($item->order_item_sku), utf8_decode(strip_tags($item->order_item_name)), $item_price, (double)$item_tax_percent, $item_discount_percent, KlarnaFlags::INC_VAT);
$discount_tax_percent = 0.0;
$includeVat = KlarnaFlags::INC_VAT;
if ($item->product_subtotal_discount != 0.0) {
if ($item->product_subtotal_discount > 0.0) {
$discount_tax_percent = $item_tax_percent;
$includeVat = 0;
}
$name = utf8_decode(strip_tags($item->order_item_name)) . ' (' . vmText::_('VMPAYMENT_KLARNA_PRODUCTDISCOUNT') . ')';
$discount = self::convertPrice(abs($item->product_subtotal_discount), $order['details']['BT']->order_currency, $cData['currency_code']);
$discount = (double)(round(abs($discount), 2)) * -1;
$klarna->addArticle(1, utf8_decode($item->order_item_sku), $name, $discount, (double)$discount_tax_percent, $item_discount_percent, $includeVat);
}
}
// this is not correct yet
/*
foreach($order['calc_rules'] as $rule){
if ($rule->calc_kind == 'DBTaxRulesBill' or $rule->calc_kind == 'taxRulesBill' or $rule->calc_kind == 'DATaxRulesBill') {
$klarna->addArticle (1, "", $rule->calc_rule_name, $rule->calc_amount, 0.0, 0.0, 0);
}
}
*/
// Add shipping
$shipment = self::convertPrice($order['details']['BT']->order_shipment + $order['details']['BT']->order_shipment_tax, $order['details']['BT']->order_currency, $cData['currency_code']);
foreach ($order['calc_rules'] as $calc_rule) {
if ($calc_rule->calc_kind == 'shipment') {
$shipment_tax_percent = $calc_rule->calc_value;
break;
}
}
$klarna->addArticle(1, "shippingfee", vmText::_('VMPAYMENT_KLARNA_SHIPMENT'), ((double)(round(($shipment), 2))), round($shipment_tax_percent, 2), 0, KlarnaFlags::IS_SHIPMENT + KlarnaFlags::INC_VAT);
// Add invoice fee
if ($klarna_pclass == -1) { //Only for invoices!
$payment_without_tax = self::convertPrice($order['details']['BT']->order_payment, $order['details']['BT']->order_currency, $cData['currency_code']);
$payment_with_tax = self::convertPrice($order['details']['BT']->order_payment + $order['details']['BT']->order_payment_tax, $order['details']['BT']->order_currency, $cData['currency_code']);
foreach ($order['calc_rules'] as $calc_rule) {
if ($calc_rule->calc_kind == 'payment') {
$payment_tax_percent = $calc_rule->calc_value;
break;
}
}
if ($payment_without_tax > 0) {
//vmdebug('invoicefee', $payment, $payment_tax);
$klarna->addArticle(1, "invoicefee", utf8_decode(vmText::_('VMPAYMENT_KLARNA_INVOICE_FEE_TITLE')), ((double)(round(($payment_with_tax), 2))), (double)round($payment_tax_percent, 2), 0, KlarnaFlags::IS_HANDLING + KlarnaFlags::INC_VAT);
}
}
// Add coupon if there is any
if (abs($order['details']['BT']->coupon_discount) > 0.0) {
$coupon_discount = self::convertPrice(round($order['details']['BT']->coupon_discount), $order['details']['BT']->order_currency, $cData['currency_code']);
$coupon_discount = (double)(round(abs($coupon_discount), 2)) * -1;
//vmdebug('discount', $coupon_discount);
$klarna->addArticle(1, 'discount', utf8_decode(vmText::_('VMPAYMENT_KLARNA_DISCOUNT')) . ' ' . utf8_decode($order['details']['BT']->coupon_code), $coupon_discount, 0, 0, KlarnaFlags::INC_VAT);
}
try {
$klarna_shipping = new KlarnaAddr($order['details']['BT']->email, $shipTo->phone_1, isset($shipTo->phone_2) ? $shipTo->phone_2 : "", utf8_decode($shipTo->first_name), utf8_decode($shipTo->last_name), '', utf8_decode($shipTo->address_1), $shipTo->zip, utf8_decode($shipTo->city), utf8_decode($cData['country']), KlarnaHandler::setHouseNo(isset($shipTo->house_no) ? $shipTo->house_no : "", $cData['country_code_3']), KlarnaHandler::setAddress2($shipTo->address_2, $cData['country_code_3']));
} catch (Exception $e) {
VmInfo($e->getMessage());
return FALSE;
}
$klarna_reference = ""; // what is that?
if ($klarnaData['invoice_type'] == 'company') {
$klarna_shipping->isCompany = TRUE;
$klarna_shipping->setCompanyName($shipTo->company);
$klarna_comment = $shipTo->first_name . ' ' . $shipTo->last_name; //$klarnaData['reference'];
if ($klarna_shipping->getLastName() == "") {
$klarna_shipping->setLastName("-");
}
if ($klarna_shipping->getFirstName() == "") {
$klarna_shipping->setFirstName("-");
}
} else {
$klarna_reference = "";
$klarna_comment = "";
}
// Only allow billing and shipping to be the same for Germany and the Netherlands
if (VMKLARNA_SHIPTO_SAME_AS_BILLTO) {
$klarna_billing = $klarna_shipping;
} else {
$klarna_billing = self::getBilling($cData, $order);
}
$klarna_flags = KlarnaFlags::RETURN_OCR; // get ocr back from KO.
$klarna->setComment($klarna_comment);
$klarna->setReference($klarna_reference, "");
$pno = self::getPNOfromSession($sessionKlarnaData->KLARNA_DATA, $country);
try {
$klarna->setAddress(KlarnaFlags::IS_SHIPPING, $klarna_shipping);
$klarna->setAddress(KlarnaFlags::IS_BILLING, $klarna_billing);
if (isset($klarnaData['year_salary'])) {
$klarna->setIncomeInfo("'yearly_salary'", $klarnaData['year_salary']);
}
$result = $klarna->addTransaction($pno, ($klarna->getCountry() == KlarnaCountry::DE || $klarna->getCountry() == KlarnaCountry::NL) ? $klarnaData['gender'] : NULL, $klarna_flags, $klarna_pclass);
$result['eid'] = $cData['eid'];
$result['status_code'] = $result[2];
$result['status_text'] = vmText::_('VMPAYMENT_KLARNA_ORDER_STATUS_TEXT_' . $result[2]);
return $result; //return $result;
} catch (Exception $e) {
$result['status_code'] = KlarnaFlags::DENIED;
$result['status_text'] = mb_convert_encoding($e->getMessage(), 'UTF-8', 'ISO-8859-1') . " (#" . $e->getCode() . ")";
return $result; //return $result;
//self::redirectPaymentMethod('error', htmlentities($e->getMessage()) . " (#" . $e->getCode() . ")");
}
}
private static function setAddress2 ($address2, $country) {
if ($country == 'NLD') {
return $address2;
} else {
return NULL;
}
}
private static function setHouseNo ($houseNo, $country) {
if (($country == 'DEU') or ($country == 'NLD')) {
return $houseNo;
} else {
return NULL;
}
}
/**
* Returns a collection of addresses that are connected to the
* supplied SSN
*
* @param <type> $pno The SSN of the user. This method is only available
* for swedish customers
* @return array
*/
public static function getAddresses ($pno, $settings, $method) {
// Only available for sweden.
$addresses = array();
$klarna = new Klarna_virtuemart();
$mode = KlarnaHandler::getKlarnaMode($method, $settings['country_code_3']);
$klarna->config($settings['eid'], $settings['secret'], KlarnaCountry::SE, KlarnaLanguage::SV, KlarnaCurrency::SEK, $mode, VMKLARNA_PC_TYPE, KlarnaHandler::getKlarna_pc_type(), $mode);
try {
$addresses = $klarna->getAddresses($pno, NULL, KlarnaFlags::GA_GIVEN);
} catch (Exception $e) {
// the message is returned NOT in UTF-8
$msg = mb_convert_encoding($e->getMessage(), 'UTF-8', 'ISO-8859-1');
VmInfo($msg);
}
unset($klarna);
return $addresses;
}
/**
* @static
* @param $method
* @return array
*/
public static function fetchAllPClasses ($method) {
$message = '';
$success = '';
$results = array();
$countries = self::getKlarnaCountries();
$pc_type = KlarnaHandler::getKlarna_pc_type();
if (empty($pc_type)) {
return FALSE;
} else {
// delete the file directly
if (file_exists($pc_type)) {
unlink($pc_type);
}
}
foreach ($countries as $country) {
$active_country = "klarna_active_" . $country;
if ($method->$active_country) {
// country is CODE 3==> converting to 2 letter country
//$country = self::convertCountryCode($method, $country);
$lang = self::getLanguageForCountry($method, $country);
$flagImg = JURI::root(TRUE) . '/administrator/components/com_virtuemart/assets/images/flag/' . strtolower($lang) . '.png';
$flag = "<img src='" . $flagImg . "' />";
try {
$settings = self::getCountryData($method, $country);
$klarna = new Klarna_virtuemart();
$klarna->config($settings['eid'], $settings['secret'], $settings['country'], $settings['language'], $settings['currency'], KlarnaHandler::getKlarnaMode($method, $settings['country_code_3']), VMKLARNA_PC_TYPE, $pc_type, TRUE);
$klarna->fetchPClasses($country);
$success .= shopFunctions::getCountryByID($settings['virtuemart_country_id']);
} catch (Exception $e) {
$message .= $flag . " " . shopFunctions::getCountryByID($settings['virtuemart_country_id']) . ": " . $e->getMessage() . ' Error Code #' . $e->getCode() . '</span></br>';
}
}
}
$results['msg'] = $message;
$results['notice'] = $success;
return $results;
//echo $notice;
}
static function createKlarnaFolder () {
$safePath = VmConfig::get('forSale_path', '');
if ($safePath) {
$exists = JFolder::exists($safePath . 'klarna');
if (!$exists) {
$created = JFolder::create($safePath . 'klarna');
if ($created) {
return TRUE;
}
} else {
return TRUE;
}
}
$uri = JFactory::getURI();
$link = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=config';
VmError(vmText::sprintf('VMPAYMENT_KLARNA_CANNOT_STORE_CONFIG', '<a href="' . $link . '">' . $link . '</a>', vmText::_('COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH')));
return FALSE;
}
/**
* Redirects user to payment method stage.
*
* @param <type> $type e.g. 'error', ...
* @param <type> $message
*/
public static function redirectPaymentMethod ($type = NULL, $message = NULL) {
$log = utf8_encode($message);
//Display the error.
if (strlen($log) > 0) {
if ($type === NULL) {
$type = 'message';
}
$app = JFactory::getApplication();
$app->enqueueMessage(vmText::_(urldecode($log)), $type);
}
//Redirect to previous page.
$session = JFactory::getSession();
$sessionKlarna = new stdClass();
$sessionKlarna->klarna_error = addslashes($message);
$session->set('Klarna', json_encode($sessionKlarna), 'vm');
if (isset($_SESSION['klarna_paymentmethod'])) {
$pid = $_SESSION['klarna_paymentmethod'];
unset($_SESSION['klarna_paymentmethod']);
}
//$_SESSION['klarna_error'] = addslashes($message);
$app = JFactory::getApplication();
$app->enqueueMessage($message);
$app->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE), vmText::_('COM_VIRTUEMART_CART_ORDERDONE_DATA_NOT_VALID'));
}
/**
*
* @param <type> $address
* @return <type>
*/
public static function splitAddress ($address) {
$numbers = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
$characters = array(
'-',
'/',
' ',
'#',
'.',
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z',
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z'
);
$specialchars = array('-', '/', ' ', '#', '.');
//Where do the numbers start? Allow for leading numbers
$numpos = self::strpos_arr($address, $numbers, 2);
//Get the streetname by splitting off the from the start of the numbers
$streetname = substr($address, 0, $numpos);
//Strip off spaces at the end
$streetname = trim($streetname);
//Get the housenumber+extension
$numberpart = substr($address, $numpos);
//and strip off spaces
$numberpart = trim($numberpart);
//Get the start position of the extension
$extpos = self::strpos_arr($numberpart, $characters, 0);
//See if there is one, if so
if ($extpos != '') {
//get the housenumber
$housenumber = substr($numberpart, 0, $extpos);
// and the extension
$houseextension = substr($numberpart, $extpos);
// and strip special characters from it
$houseextension = str_replace($specialchars, '', $houseextension);
} else {
//Otherwise, we already have the housenumber
$housenumber = $numberpart;
}
return array($streetname, $housenumber, $houseextension);
}
/**
*
* @param <type> $haystack
* @param <type> $needle
* @param <type> $where
* @return <type>
*/
private static function strpos_arr ($haystack, $needle, $where) {
$defpos = 10000;
if (!is_array($needle)) {
$needle = array($needle);
}
foreach ($needle as $what) {
if (($pos = strpos($haystack, $what, $where)) !== FALSE) {
if ($pos < $defpos) {
$defpos = $pos;
}
}
}
return $defpos;
}
/**
* gets Eid and Secret for activated countries.
*/
public static function getEidSecretArray ($method) {
$eid_array = array();
if (isset($method->klarna_merchantid_swe) && $method->klarna_merchantid_swe != "" && $method->klarna_sharedsecret_swe != "") {
$eid_array['swe']['secret'] = $method->klarna_sharedsecret_swe;
$eid_array['swe']['eid'] = (int)$method->klarna_merchantid_swe;
}
if (isset($method->klarna_merchantid_nor) && $method->klarna_merchantid_nor != "" && $method->klarna_sharedsecret_nor != "") {
$eid_array['nor']['secret'] = $method->klarna_sharedsecret_nor;
$eid_array['nor']['eid'] = $method->klarna_merchantid_nor;
}
if (isset($method->klarna_merchantid_deu) && $method->klarna_merchantid_deu != "" && $method->klarna_sharedsecret_deu != "") {
$eid_array['deu']['secret'] = $method->klarna_sharedsecret_deu;
$eid_array['deu']['eid'] = $method->klarna_merchantid_deu;
}
if (isset($method->klarna_nld_merchantid) && $method->klarna_nld_merchantid != "" && $method->klarna_sharedsecret_nld != "") {
$eid_array['nld']['secret'] = $method->klarna_sharedsecret_nld;
$eid_array['nld']['eid'] = $method->klarna_nld_merchantid;
}
if (isset($method->klarna_merchantid_dnk) && $method->klarna_merchantid_dnk != "" && $method->klarna_sharedsecret_dnk != "") {
$eid_array['dnk']['secret'] = $method->klarna_sharedsecret_dnk;
$eid_array['dnk']['eid'] = $method->klarna_merchantid_dnk;
}
if (isset($method->klarna_merchantid_fin) && $method->klarna_merchantid_fin != "" && $method->klarna_sharedsecret_fin != "") {
$eid_array['fin']['secret'] = $method->klarna_sharedsecret_fin;
$eid_array['fin']['eid'] = $method->klarna_merchantid_fin;
}
return $eid_array;
}
/**
* @param $obj
* @param int $level
* @return array
*/
public function xmlToArray ($obj, $level = 0) {
$aResult = array();
if (!is_object($obj)) {
return $aResult;
}
$aChild = (array)$obj;
if (sizeof($aChild) > 1) {
foreach ($aChild as $sName => $mValue) {
if ($sName == "@attributes") {
$sName = "_attributes";
}
if (is_array($mValue)) {
foreach ($mValue as $ee => $ff) {
if (!is_object($ff)) {
$aResult[$sName][$ee] = $ff;
} else {
if (get_class($ff) == 'SimpleXMLElement') {
$aResult[$sName][$ee] = self::xmlToArray($ff, $level + 1);
}
}
}
} else {
if (!is_object($mValue)) {
$aResult[$sName] = $mValue;
} else {
if (get_class($mValue) == 'SimpleXMLElement') {
$aResult[$sName] = self::xmlToArray($mValue, $level + 1);
}
}
}
}
} else {
if (sizeof($aChild) > 0) {
foreach ($aChild as $sName => $mValue) {
if ($sName == "@attributes") {
$sName = "_attributes";
}
if (!is_array($mValue) && !is_object($mValue)) {
$aResult[$sName] = $mValue;
} else {
if (is_object($mValue)) {
$aResult[$sName] = self::xmlToArray($mValue, $level + 1);
} else {
foreach ($mValue as $sNameTwo => $sValueTwo) {
if (!is_object($sValueTwo)) {
$aResult[$obj->getName()][$sNameTwo] = $sValueTwo;
} else {
if (get_class($sValueTwo) == 'SimpleXMLElement') {
$aResult[$obj->getName()][$sNameTwo] = self::xmlToArray($sValueTwo, $level + 1);
}
}
}
}
}
}
}
}
return $aResult;
}
/**
* @static
* @param $settings
* @param $mode
* @param $klarna_invoice_no
* @return string
*/
public static function checkOrderStatus ($settings, $mode, $orderNumber) {
try {
$klarna = new Klarna_virtuemart();
$klarna->config($settings['eid'], $settings['secret'], $settings['country'], $settings['language'], $settings['currency'], $mode, VMKLARNA_PC_TYPE, KlarnaHandler::getKlarna_pc_type(), TRUE);
vmdebug('checkOrderStatus', $klarna);
$os = $klarna->checkOrderStatus($orderNumber, 1);
} catch (Exception $e) {
$msg = $e->getMessage() . ' #' . $e->getCode() . ' </br>';
VmError($msg);
return $msg;
}
//$os = self::getStatusForCode($os);
return $os;
}
/**
* Return pclasses stored in json file.
*/
public static function getPClasses ($type = NULL, $mode, $settings) {
//$settings = self::countryData($method, $country);
try {
$klarna = new Klarna_virtuemart();
$klarna->config($settings['eid'], $settings['secret'], $settings['country'], $settings['language'], $settings['currency'], $mode, VMKLARNA_PC_TYPE, KlarnaHandler::getKlarna_pc_type(), TRUE);
return $klarna->getPClasses($type);
} catch (Exception $e) {
}
}
static function getCheapestPclass ($kCheckout, &$cheapest, &$minimum) {
$pclasses = $kCheckout->aPClasses;
if (empty($pclasses)) {
$minimum = 0;
return;
}
$cheapest = 0;
$minimum = '';
foreach ($pclasses as $pclass) {
if ($cheapest == 0 || $pclass['monthlyCost'] < $cheapest) {
$cheapest = $pclass['monthlyCost'];
}
if ($pclass['pclass']->getMinAmount() < $minimum || $minimum === '') {
$minimum = $pclass['pclass']->getMinAmount();
}
}
}
/**
* @param string $fld
* @return string
*/
public static function getVendorCountry ($fld = 'country_3_code') {
if (!class_exists('VirtueMartModelVendor')) {
JLoader::import('vendor', JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_virtuemart' . DS . 'models');
}
$virtuemart_vendor_id = 1;
$model = VmModel::getModel('vendor');
$vendorAddress = $model->getVendorAdressBT($virtuemart_vendor_id);
$vendor_country = ShopFunctions::getCountryByID($vendorAddress->virtuemart_country_id, $fld);
return $vendor_country;
}
/**
* @param $klarnaError
* @param $klarnaOption
* @return bool
*/
function getKlarnaError (&$klarnaError, &$klarnaOption) {
$session = JFactory::getSession();
$sessionKlarna = $session->get('Klarna', 0, 'vm');
if (empty($sessionKlarna)) {
return FALSE;
}
$sessionKlarnaData = json_decode($sessionKlarna );
if (isset($sessionKlarnaData->klarna_error) and isset($sessionKlarnaData->klarna_paymentmethod)) {
$klarnaError = $sessionKlarnaData->klarna_error; // it is a message to display
$klarnaOption = $sessionKlarnaData->klarna_paymentmethod;
return TRUE;
} else {
return FALSE;
}
return FALSE;
}
function setKlarnaErrorInSession ($msg, $option) {
$session = JFactory::getSession();
$sessionKlarna = $session->get('Klarna', 0, 'vm');
if (empty($sessionKlarna)) {
$sessionKlarnaData = new stdClass();
} else {
$sessionKlarnaData =(object) json_decode($sessionKlarna, true );
}
$sessionKlarnaData->klarna_error = $msg;
//$sessionKlarnaData->klarna_option = $option;
$session->set('Klarna', json_encode($sessionKlarnaData), 'vm');
}
/**
*
*/
function clearKlarnaError () {
$session = JFactory::getSession();
$sessionKlarna = $session->get('Klarna', 0, 'vm');
if ($sessionKlarna) {
$sessionKlarnaData = json_decode($sessionKlarna );
if (isset($sessionKlarnaData->klarna_error)) {
unset($sessionKlarnaData->klarna_error);
//unset($sessionKlarnaData->klarna_option);
$session->set('Klarna', json_encode($sessionKlarnaData), 'vm');
}
}
}
/**
* @static
* @param $method
* @return int
*/
static function getKlarnaMode ($method, $country) {
//return Klarna::BETA;
// It is the VM specific store ID to test
$merchant_id = strtolower('klarna_merchantid_' . $country);
if ($method->$merchant_id == VMPAYMENT_KLARNA_MERCHANT_ID_VM or $method->$merchant_id == VMPAYMENT_KLARNACHECKOUT_MERCHANT_ID_VM or $method->$merchant_id == VMPAYMENT_KLARNA_MERCHANT_ID_DEMO) {
return Klarna::BETA;
} else {
return Klarna::LIVE;
}
}
/**
* @static
* @param $mode
* @return bool
*/
static function getKlarnaSSL ($mode) {
return ($mode == Klarna::LIVE);
}
/**
* @static
* @param $price
* @param string $toCurrency
* @return float
*/
static function convertPrice ($price, $fromCurrency, $toCurrency = '', $cartPricesCurrency = '') {
if (!(is_int($toCurrency) or is_numeric($toCurrency)) && !empty($toCurrency)) {
$toCurrency = ShopFunctions::getCurrencyIDByName($toCurrency);
}
if ($fromCurrency == $toCurrency) {
return $price;
}
// product prices or total in cart is always in vendor currency
$priceInNewCurrency = vmPSPlugin::getAmountInCurrency($price, $toCurrency);
// set back the currency display
if (empty($cartPricesCurrency)) {
$cartPricesCurrency = $fromCurrency;
}
$cd = CurrencyDisplay::getInstance($cartPricesCurrency);
vmDebug('convertPrice', $price, $toCurrency, $fromCurrency, $cartPricesCurrency, $priceInNewCurrency);
return $priceInNewCurrency['value'];
}
/*
* if client has not given address then get cdata depending on the currency
* otherwise get info depending on the country
*/
/**
* @static
* @param $method
* @param $address
* @return array|null
*/
static function getcData ($method, $address) {
if (!isset($address['virtuemart_country_id'])) {
$vendor_country = KlarnaHandler::getVendorCountry();
$cData = self::countryData($method, $vendor_country);
} else {
$cart_country_code_3 = ShopFunctions::getCountryByID($address['virtuemart_country_id'], 'country_3_code');
// the user gave an address, get info according to his country
$cData = self::countryData($method, $cart_country_code_3);
}
return $cData;
}
/**
* @static
* @return null|string
*/
static function getKlarna_pc_type () {
$safePath = VmConfig::get('forSale_path', '');
if ($safePath) {
return $safePath . "klarna/klarna.json";
} else {
$uri = JFactory::getURI();
$link = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=config';
VmError(vmText::sprintf('VMPAYMENT_KLARNA_CANNOT_STORE_CONFIG', '<a href="' . $link . '">' . $link . '</a>', vmText::_('COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH')));
return NULL;
}
}
/**
* Sweden: yymmdd-nnnn, it can be sent with or without dash "-" or with or without the two first numbers in the year.
* Finland: ddmmyy-nnnn
* Denmark: ddmmyynnnn
* Norway: ddmmyynnnnn
* Germany: ddmmyyyy
* Netherlands: ddmmyyyy
*
* @static
* @param $billTo
* @param $country
* @return string
*/
static function getPNOfromSession ($sessionData, $country) {
if (($country == "NLD" || $country == "DEU")) {
$pno = $sessionData['pno_frombirthday'];
} else {
$pno = $sessionData['socialNumber'];
}
return $pno;
}
/**
* @param $data
* @return bool
*/
static function checkDataFromEditPayment ($data, $country3) {
if (!class_exists('VirtueMartModelUserfields')) {
require(VMPATH_ADMIN . DS . 'models' . DS . 'userfields.php');
}
$errors = array();
/*
if ($country3 == "DEU") {
$consent = vRequest::getVar ('klarna_consent');
if ($consent != 'on') {
$errors = vmText::_ ('VMPAYMENT_KLARNA_NO_CONSENT');
}
}
// todo later
$userFieldsModel = VmModel::getModel ('userfields');
$userFields = $userFieldsModel->getUserFields (
'account'
, array('required' => FALSE,
'delimiters' => TRUE,
'captcha' => TRUE,
'system' => FALSE)
, array('delimiter_userinfo', 'name', 'username', 'password', 'password2', 'address_type_name', 'address_type', 'user_is_vendor', 'agreed'));
$required_shopperfields_vm = Klarnahandler::getKlarnaVMGenericShopperFields (FALSE);
$required_shopperfields_bycountry = KlarnaHandler::getKlarnaSpecificShopperFields ();
$required_shopperfields = array_merge ($required_shopperfields_vm, $required_shopperfields_bycountry[$country3]);
foreach ($userFields as $userField) {
if (in_array ($userField->name, $required_shopperfields)) {
if (empty($data[$userField->name])) {
$errors[] = vmText::_($userField->title);
}
}
}
*/
// Quick and durty .. but it works
$kIndex = "klarna_";
if ($country3 == "SWE") {
if (vRequest::getVar('klarna_invoice_type') == 'company') {
if (strlen(trim((string)vRequest::getVar('klarna_company_name'))) == 0) {
$errors[] = 'VMPAYMENT_KLARNA_COMPANY_NAME';
}
} else {
if (!KlarnaEncoding::checkPNO($data['socialNumber'], KlarnaEncoding::PNO_SE)) {
$errors[] = 'VMPAYMENT_KLARNA_PERSONALORORGANISATIO_NUMBER';
}
}
} else {
if ($data['phone'] == '') {
$errors[] = 'VMPAYMENT_KLARNA_PHONE_NUMBER';
}
if ($data['street'] == '') {
$errors[] = 'VMPAYMENT_KLARNA_STREET_ADRESS';
}
if ($data['first_name'] == '') {
$errors[] = 'VMPAYMENT_KLARNA_FIRST_NAME';
}
if ($data['last_name'] == '') {
$errors[] = 'VMPAYMENT_KLARNA_LAST_NAME';
}
if ($data['city'] == '') {
$errors[] = 'VMPAYMENT_KLARNA_ADDRESS_CITY';
}
if ($data['zip'] == '') {
$errors[] = 'VMPAYMENT_KLARNA_ADDRESS_ZIP';
}
}
// German and dutch
if ($country3 == "NLD" || $country3 == "DEU") {
if ($data['street'] == '') {
$errors[] = 'VMPAYMENT_KLARNA_STREET_ADRESS';
}
if ($data['house_no'] == '') {
$errors[] = 'VMPAYMENT_KLARNA_ADDRESS_HOMENUMBER';
}
if ($country3 == "DEU") {
if ($data['consent'] != 'on') {
$errors[] = 'VMPAYMENT_KLARNA_NO_CONSENT';
}
}
if ($data['pno_frombirthday'] == '') {
$errors[] = 'VMPAYMENT_KLARNA_PERSONALORORGANISATIO_NUMBER';
}
if ($data['gender'] == '') {
$errors[] = 'VMPAYMENT_KLARNA_SEX';
}
}
// General
/* the email is not in the payment form
if ($data['emailAddress'] == '') {
$errors[] = 'VMPAYMENT_KLARNA_EMAIL';
}
*/
// Norwegian, Danish and Finnish
if (($country3 == "NOR") || ($country3 == "DNK") || $country3 == "FIN") {
if ($data['socialNumber'] == '') {
$errors[] = 'VMPAYMENT_KLARNA_PERSONALORORGANISATIO_NUMBER';
}
}
if (!empty($errors)) {
$msg = vmText::_('VMPAYMENT_KLARNA_ERROR_TITLE_2');
foreach ($errors as $error) {
$msg .= "<li>" . vmText::_($error) . "</li>";
}
$option = NULL;
self::setKlarnaErrorInSession($msg, $option);
return $msg;
}
return NULL;
}
/**
* @static
* @return array
*/
static function getKlarnaSpecificShopperFields () {
return array(
"SWE" => array("email"),
"DNK" => array(), // should not be given to the shopper year_salary
"NOR" => array(),
"FIN" => array(),
"NLD" => array("address_2", "house_no"),
"DEU" => array("house_no")
);
}
/**
* @return array
*/
static function getKlarnaVMGenericShopperFields ($all = TRUE) {
$required = array("first_name", "last_name", "address_1", "city", "zip", "phone_1", "virtuemart_country_id");
if ($all) {
$required = array_merge($required, array("company"));
}
return $required;
}
static function getKlarnaShopperFieldsType () {
return array(
"socialNumber" => "text",
"email" => "email",
"birthday" => "date",
"address_2" => "text",
"house_no" => "text",
);
}
/**
*
*/
function getByFieds () {
$required_shopperfields_byfields = array(
"socialNumber" => array("SWE", "DNK", "NOR", "FIN"),
"year_salary" => array("DNK"),
"address_2",
"birthday" => array("DEU", "NLD"),
"house_no" => array("NLD"),
"email" => array("SWE")
);
}
/**
* Get the shipToAddress which might differ from default address.
* From VM shopperFields to Klarna Fields
*/
public static function getShipToAddress ($cart) {
//vmdebug('getShipToAddress',$cart);
if (VMKLARNA_SHIPTO_SAME_AS_BILLTO) {
$shipTo = $cart->BT;
} else {
$shipTo = (($cart->ST == 0 or empty($cart->ST)) ? $cart->BT : $cart->ST);
}
return self::getKlarnaFieldsFromVmShopperFields($shipTo, $cart->BT['email']);
}
/**
* @static
* @param $from
* @param $from_email
* @return array
*/
static function getKlarnaFieldsFromVmShopperFields ($from, $from_email) {
$klarnaFields = array();
switch ($from['title']) {
case vmText::_('COM_VIRTUEMART_SHOPPER_TITLE_MR'):
$klarnaFields['gender'] = KlarnaFlags::MALE;
break;
case vmText::_('COM_VIRTUEMART_SHOPPER_TITLE_MISS'):
case vmText::_('COM_VIRTUEMART_SHOPPER_TITLE_MRS'):
$klarnaFields['gender'] = KlarnaFlags::FEMALE;
break;
default:
$klarnaFields['gender'] = NULL;
break;
}
$country_code_3 = ShopFunctions::getCountryByID($from['virtuemart_country_id'], 'country_3_code');
$klarnaFields['email'] = $from_email;
$klarnaFields['country'] = @ShopFunctions::getCountryByID(@$from['virtuemart_country_id'], 'country_3_code');
$klarnaFields['socialNumber'] = @$from['socialNumber'];
$klarnaFields['houseNr'] = @$from['house_no'];
$klarnaFields['houseExt'] = @$from['address_2'];
$klarnaFields['first_name'] = @$from['first_name'];
if ($country_code_3 == 'NLD') {
$klarnaFields['last_name'] = @$from['middle_name'] . " " . @$from['last_name'];
} else {
$klarnaFields['last_name'] = @$from['last_name'];
}
$klarnaFields['reference'] = $from['first_name'] . ' ' . $from['last_name'];
$klarnaFields['company_name'] = @$from['company_name'];
$klarnaFields['phone'] = @$from['phone_1'];
$klarnaFields['street'] = @$from['address_1'];
$klarnaFields['city'] = @$from['city'];
$klarnaFields['country'] = $country_code_3;
$klarnaFields['state'] = @$from['state'];
$klarnaFields['zip'] = @$from['zip'];
$klarnaFields['birthday'] = @$from['birthday'];
if (isset($from['birthday']) and !empty($from['birthday'])) {
$date = explode("-", $from['birthday']);
if (is_array($date)) {
$klarnaFields['birth_year'] = $date['0'];
$klarnaFields['birth_month'] = $date['1'];
$klarnaFields['birth_day'] = $date['2'];
}
}
return $klarnaFields;
}
function checkNLpriceCondition ($price) {
// Since 12/09/12: merchants can sell goods with Klarna Invoice up to thousands of euros.
if ($price > 250) {
// We can't show our payment options for Dutch customers
// if price exceeds 250 euro. Will be replaced with ILT in
// the future.
return FALSE;
}
return TRUE;
}
function checkPartNLpriceCondition ($cart) {
// Since 12/09/12: merchants can sell goods with Klarna Invoice up to thousands of euros.
// convert price in euro
//$euro_currency_id = ShopFunctions::getCurrencyByName( 'EUR');
$price = KlarnaHandler::convertPrice($cart->cartPrices['billTotal'], $cart->pricesCurrency, 'EUR', $cart->pricesCurrency);
return self::checkNLpriceCondition($price);
}
function checkPartpriceCondition ($cData, $cart) {
// Since 12/09/12: merchants can sell goods with Klarna Invoice up to thousands of euros.
// convert price in euro
//$euro_currency_id = ShopFunctions::getCurrencyByName( 'EUR');
$amount = KlarnaHandler::convertPrice($cart->cartPrices['billTotal'], $cart->pricesCurrency, 'EUR', $cart->pricesCurrency);
if ($amount <= $cData['min_amount'] AND !empty($cData['min_amount'])) {
return FALSE;
}
return true;
}
}