/** * @return int|null */ private function getKlarnaPClass() { $pClasses = $this->klarnaService->getPClasses(); if (isset($pClasses[0])) { return $pClasses[0]; } return; }
public function getMonthlyCoast($cart, $countries, $country) { if (!$this->klarna->active) { return; } $klarna = new Klarna(); $klarna->config(Configuration::get('KLARNA_STORE_ID_' . $countries[$country->iso_code]['name']), Configuration::get('KLARNA_SECRET_' . $countries[$country->iso_code]['name']), $countries[$country->iso_code]['code'], $countries[$country->iso_code]['langue'], $countries[$country->iso_code]['currency'], Configuration::get('KLARNA_MOD'), 'mysql', array('user' => _DB_USER_, 'passwd' => _DB_PASSWD_, 'dsn' => _DB_SERVER_, 'db' => _DB_NAME_, 'table' => _DB_PREFIX_ . 'klarna_payment_pclasses')); $accountPrice = array(); $pclasses = array_merge($klarna->getPClasses(KlarnaPClass::ACCOUNT), $klarna->getPClasses(KlarnaPClass::CAMPAIGN)); $total = (double) $cart->getOrderTotal(); foreach ($pclasses as $val) { if ($val->getMinAmount() < $total) { $accountPrice[$val->getId()] = array('price' => KlarnaCalc::calc_monthly_cost($total, $val, KlarnaFlags::CHECKOUT_PAGE), 'month' => (int) $val->getMonths(), 'description' => htmlspecialchars_decode(Tools::safeOutput($val->getDescription()))); } } return $accountPrice; }
/** * Fetch the PClasses from file * * @param integer $iSum The sum of the objects to be bought * @param integer $iFlag The KlarnaFlag to be used. Either Checkout or ProductPage flag. * @return void */ public function fetchPClasses($iSum, $iFlag, $aTypes = NULL) { if ($this->oKlarna == NULL) { throw new KlarnaApiException("No klarna class is set.", "1000"); } $aPClasses = array(); $default = NULL; foreach ($this->oKlarna->getPClasses() as $pclass) { if ($aTypes == NULL || in_array($pclass->getType(), $aTypes)) { $sType = $pclass->getType(); if ($sType != KlarnaPClass::SPECIAL) { if ($iSum < $pclass->getMinAmount()) { continue; } if ($pclass->getType() == KlarnaPClass::FIXED) { if ($iFlag == KlarnaFlags::PRODUCT_PAGE) { continue; } $iMonthlyCost = -1; } else { $lowest_payment = KlarnaCalc::get_lowest_payment_for_account($pclass->getCountry()); $iMonthlyCost = KlarnaCalc::calc_monthly_cost($iSum, $pclass, $iFlag); if ($iMonthlyCost < 0.01) { continue; } if ($iFlag == KlarnaFlags::CHECKOUT_PAGE && $pclass->getType() == KlarnaPClass::ACCOUNT && $iMonthlyCost < $lowest_payment) { $iMonthlyCost = $lowest_payment; } if ($pclass->getType() == KlarnaPClass::CAMPAIGN && $iMonthlyCost < $lowest_payment) { continue; } } } else { $iMonthlyCost = -1; } if ($this->sType == 'part') { if ($sType == KlarnaPClass::ACCOUNT) { $default = $pclass; } else { if ($sType == KlarnaPClass::CAMPAIGN) { if ($default === NULL || $default->getType() != KlarnaPClass::ACCOUNT) { $default = $pclass; } } else { if ($sType == KlarnaPClass::FIXED) { if ($default === NULL) { $default = $pclass; } } else { continue; } } } } else { if ($this->sType == 'spec') { if ($sType != KlarnaPClass::SPECIAL) { continue; } $default = $pclass; } } $aPClasses[$pclass->getId()]['pclass'] = $pclass; $aPClasses[$pclass->getId()]['monthlyCost'] = $iMonthlyCost; $aPClasses[$pclass->getId()]['default'] = FALSE; } } if ($default !== NULL) { $aPClasses[$default->getId()]['default'] = TRUE; } $this->aPClasses = $aPClasses; }
/** * Update list of pclasses * * @param int $sum order total for filtering * @param int $page PRODUCT_PAGE or CHECKOUT_PAGE * @param array $types PClass types to include * * @return void */ public function update($sum, $page, $types) { $pclasses = array(); $default = null; $minimum = null; $minval = null; foreach ($this->_kapi->getPClasses() as $pclass) { $type = $pclass->getType(); if (!in_array($type, $types) || $sum < $pclass->getMinAmount()) { continue; } // Get monthly cost if (in_array($type, array(KlarnaPClass::FIXED, KlarnaPClass::SPECIAL))) { if ($page == KlarnaFlags::PRODUCT_PAGE) { continue; } $monthlyCost = -1; } else { $lowestPayment = KlarnaCalc::get_lowest_payment_for_account($pclass->getCountry()); $monthlyCost = KlarnaCalc::calc_monthly_cost($sum, $pclass, $page); if ($monthlyCost < 0.01) { continue; } if ($monthlyCost < $lowestPayment) { if ($pclass->getType() == KlarnaPClass::CAMPAIGN) { continue; } if ($page == KlarnaFlags::CHECKOUT_PAGE && $pclass->getType() == KlarnaPClass::ACCOUNT) { $monthlyCost = $lowestPayment; } } } // Select the minimum if ($minimum === null || $minval > $monthlyCost) { $minimum = $pclass; $minval = $monthlyCost; } // Select the default if ($type == KlarnaPClass::ACCOUNT) { $default = $pclass; } else { if ($type == KlarnaPClass::CAMPAIGN) { if ($default === null || $default->getType() != KlarnaPClass::ACCOUNT) { $default = $pclass; } } else { if ($default === null) { $default = $pclass; } } } $pclasses[$pclass->getId()] = array('pclass' => $pclass, 'locale' => new KiTT_Locale($pclass->getCountry()), 'monthlyCost' => $monthlyCost); } // Save result $this->pclasses = $pclasses; if ($default != null) { $this->_default = $default; } if ($minimum != null) { $this->_minimum = $minimum; } }
public function hookdisplayPayment($params) { if (!Configuration::get('KLARNA_ACTIVE_INVOICE') && !Configuration::get('KLARNA_ACTIVE_PARTPAYMENT')) { return false; } $smarty = $this->context->smarty; $klarna = new Klarna(); $address_invoice = new Address((int) $params['cart']->id_address_invoice); $country = new Country((int) $address_invoice->id_country); $currency = new Currency((int) $params['cart']->id_currency); if (isset($this->countries[$country->iso_code])) { $this->context->cart->deleteProduct((int) Configuration::get('KLARNA_INV_FEE_ID_' . $this->countries[$country->iso_code]['name'])); } if (!$this->verifCountryAndCurrency($country, $currency)) { return false; } if (!$this->_verifRange($params['cart']->getOrderTotal(), $this->countries[$country->iso_code]['name'])) { return false; } try { $klarna->config(Configuration::get('KLARNA_STORE_ID_' . $this->countries[$country->iso_code]['name']), Configuration::get('KLARNA_SECRET_' . $this->countries[$country->iso_code]['name']), $this->countries[$country->iso_code]['code'], $this->countries[$country->iso_code]['langue'], $this->countries[$country->iso_code]['currency'], Configuration::get('KLARNA_MOD'), 'mysql', $this->_getDb()); $pclass = $klarna->getCheapestPClass((double) $this->context->cart->getOrderTotal(), KlarnaFlags::CHECKOUT_PAGE); if ($pclass && $pclass->getMinAmount() < $this->context->cart->getOrderTotal()) { if ($country->iso_code == 'NL' && $this->context->cart->getOrderTotal() > 250) { return false; } else { $value = KlarnaCalc::calc_monthly_cost((double) $this->context->cart->getOrderTotal(), $pclass, KlarnaFlags::CHECKOUT_PAGE); } } $pclassSpec = $klarna->getPClasses(KlarnaPClass::SPECIAL); if (count($pclassSpec) && $pclassSpec[0]->getExpire() > time()) { $smarty->assign('special', $pclassSpec[0]->getDescription()); } } catch (Exception $e) { return false; } $smarty->assign(array('var' => array('path' => $this->_path, 'this_path_ssl' => (_PS_VERSION_ >= 1.4 ? Tools::getShopDomainSsl(true, true) : '') . __PS_BASE_URI__ . 'modules/' . $this->moduleName . '/'), 'iso_code' => strtolower($country->iso_code), 'monthly_amount' => (double) $value, 'invoiceActive' => Configuration::get('KLARNA_ACTIVE_INVOICE'), 'accountActive' => Configuration::get('KLARNA_ACTIVE_PARTPAYMENT'), 'specialActive' => true)); return $this->display(__FILE__, 'tpl/payment.tpl'); }