/**
  * @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;
 }
Beispiel #3
0
 /**
  * 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');
 }