name = 'santandercredit'; $this->tab = 'payments_gateways'; $this->version = 5.5; $this->ps_versions_compliancy = array('min' => '1.7.1.0', 'max' => _PS_VERSION_); $this->author = 'Santander Consumer Bank'; $this->bootstrap = true; parent::__construct(); $this->page = basename(__FILE__, '.php'); $this->displayName = $this->l('Santander - System ratalny'); $this->description = $this->l('Santander - Zakupy na raty w internecie'); if (array_key_exists('HTTPS', $_SERVER) && $_SERVER['HTTPS'] == "on") { $this->ssl = true; } } public function install() { if ( !parent::install() || !Configuration::updateValue('SANTANDERCREDIT_SHOP_ID', $this->shopTestId) || !Configuration::updateValue('SANTANDERCREDIT_BLOCK', 'left') || !Configuration::updateValue('SANTANDERCREDIT_BLOCK_TITLE', 'eRaty Santander Consumer Bank') || !Configuration::updateValue('SANTANDERCREDIT_SYMULATOR', 'true') || !Configuration::updateValue('SANTANDERCREDIT_URL_SYMULATOR', 'https://wniosek.eraty.pl/symulator/oblicz/') || !Configuration::updateValue('SANTANDERCREDIT_URL_WNIOSEK', 'https://wniosek.eraty.pl/formularz/') || !Configuration::updateValue('SANTANDERCREDIT_QTY_SELECTOR', '#quantity_wanted') || !Configuration::updateValue('SANTANDERCREDIT_PRICE_SELECTOR', 'div.current-price > span[itemprop="price"]') || !$this->registerHook('paymentOptions') || !$this->registerHook('paymentReturn') || !$this->registerHook('displayProductAdditionalInfo') || !$this->createOrderState() || // !$this->registerHook('displayRightColumnProduct') || // !$this->registerHook('displayCompareExtraInformation') || // !$this->registerHook('displayFooterProduct') || // !$this->registerHook('rightColumn') || // !$this->registerHook('leftColumn') || // !$this->registerHook('productActions') || !Configuration::updateValue('SANTANDERCREDIT_USE_ORDER_STATE', 'SANTANDERCREDIT_OS_AUTHORIZATION') ) { return false; } return true; } public function uninstall() { if ( !Configuration::deleteByName('SANTANDERCREDIT_SHOP_ID') || !Configuration::deleteByName('SANTANDERCREDIT_BLOCK') || !Configuration::deleteByName('SANTANDERCREDIT_BLOCK_TITLE') || !Configuration::deleteByName('SANTANDERCREDIT_SYMULATOR') || !Configuration::deleteByName('SANTANDERCREDIT_USE_ORDER_STATE') || !Configuration::deleteByName('SANTANDERCREDIT_URL_SYMULATOR') || !Configuration::deleteByName('SANTANDERCREDIT_URL_WNIOSEK') || !Configuration::deleteByName('SANTANDERCREDIT_QTY_SELECTOR') || !Configuration::deleteByName('SANTANDERCREDIT_PRICE_SELECTOR') || !parent::uninstall() ) { return false; } return true; } public function getContent() { $output = null; if (Tools::isSubmit('submit' . $this->name)) { $scbShopID = strval(Tools::getValue('SANTANDERCREDIT_SHOP_ID')); if (!$scbShopID || empty($scbShopID) || !Validate::isGenericName($scbShopID)) $output .= $this->displayError($this->l('Nieprawidłowy numer Sklepu')); else { Configuration::updateValue('SANTANDERCREDIT_SHOP_ID', '1234'); Configuration::updateValue('SANTANDERCREDIT_SHOP_ID', trim(Tools::getValue('SANTANDERCREDIT_SHOP_ID'))); Configuration::updateValue('SANTANDERCREDIT_SYMULATOR', strval(Tools::getValue('SANTANDERCREDIT_SYMULATOR'))); Configuration::updateValue('SANTANDERCREDIT_URL_SYMULATOR', Tools::getValue('SANTANDERCREDIT_URL_SYMULATOR')); Configuration::updateValue('SANTANDERCREDIT_URL_WNIOSEK', Tools::getValue('SANTANDERCREDIT_URL_WNIOSEK')); Configuration::updateValue('SANTANDERCREDIT_QTY_SELECTOR', Tools::getValue('SANTANDERCREDIT_QTY_SELECTOR')); Configuration::updateValue('SANTANDERCREDIT_PRICE_SELECTOR', Tools::getValue('SANTANDERCREDIT_PRICE_SELECTOR')); $output .= $this->displayConfirmation($this->l('Zmiany zostały zapisane')); } } $output = $output . $this->display(__FILE__, 'infos.tpl'); return $output . $this->displayForm(); } public function displayForm() { // Get default language $default_lang = (int) Configuration::get('PS_LANG_DEFAULT'); // Init Fields form array $fields_form[0]['form'] = array( 'legend' => array( 'title' => $this->l('Parametry bramki płatniczej eRaty Santander:'), 'icon' => 'icon-cogs' ), 'input' => array( array( 'type' => 'text', 'label' => $this->l('Numer Sklepu'), 'name' => 'SANTANDERCREDIT_SHOP_ID', 'size' => 20, 'required' => true ), array( 'type' => 'switch', 'label' => $this->l('Kalkulator na stronie produktu'), 'name' => 'SANTANDERCREDIT_SYMULATOR', 'is_bool' => true, 'hint' => $this->l('Umożliwia obliczanie wysokości raty na stronie produktu'), 'values' => array( array( 'id' => 'active_on', 'value' => true, 'label' => $this->l('TAK'), ), array( 'id' => 'active_off', 'value' => false, 'label' => $this->l('NIE'), ) ), ), array( 'type' => 'text', 'label' => $this->l('Adres symulatora'), 'name' => 'SANTANDERCREDIT_URL_SYMULATOR', 'size' => 128, 'required' => true ), array( 'type' => 'text', 'label' => $this->l('Adres rejestratora wniosków'), 'name' => 'SANTANDERCREDIT_URL_WNIOSEK', 'size' => 128, 'required' => true ), array( 'type' => 'text', 'label' => $this->l('Selektor ilości towaru'), 'name' => 'SANTANDERCREDIT_QTY_SELECTOR', 'hint' => 'Selektor (jQuery) wskazujący na pole zawierające ilość jednostek produktu. Odczyt wartości metodą val().', 'size' => 128, 'required' => true ), array( 'type' => 'text', 'label' => $this->l('Selektor ceny towaru'), 'name' => 'SANTANDERCREDIT_PRICE_SELECTOR', 'hint' => 'Selektor (jQuery) wskazujący na pole zawierające cenę jednostkową. Odczyt wartości z atrybutu content.', 'size' => 128, 'required' => true ), ), 'submit' => array( 'title' => $this->l('Save'), 'class' => 'btn btn-default pull-right' ) ); $helper = new HelperForm(); // Module, token and currentIndex $helper->module = $this; $helper->name_controller = $this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->currentIndex = AdminController::$currentIndex . '&configure=' . $this->name; // Language $helper->default_form_language = $default_lang; $helper->allow_employee_form_lang = $default_lang; // Title and toolbar $helper->title = $this->displayName; $helper->show_toolbar = true; // false -> remove toolbar $helper->toolbar_scroll = true; // yes - > Toolbar is always visible on the top of the screen. $helper->submit_action = 'submit' . $this->name; $helper->toolbar_btn = array( 'save' => array( 'desc' => $this->l('Save'), 'href' => AdminController::$currentIndex . '&configure=' . $this->name . '&save' . $this->name . '&token=' . Tools::getAdminTokenLite('AdminModules'), ), 'back' => array( 'href' => AdminController::$currentIndex . '&token=' . Tools::getAdminTokenLite('AdminModules'), 'desc' => $this->l('Back to list') ) ); // Load current value $helper->fields_value['SANTANDERCREDIT_SHOP_ID'] = Configuration::get('SANTANDERCREDIT_SHOP_ID'); $helper->fields_value['SANTANDERCREDIT_SYMULATOR'] = Configuration::get('SANTANDERCREDIT_SYMULATOR'); $helper->fields_value['SANTANDERCREDIT_URL_SYMULATOR'] = Configuration::get('SANTANDERCREDIT_URL_SYMULATOR'); $helper->fields_value['SANTANDERCREDIT_URL_WNIOSEK'] = Configuration::get('SANTANDERCREDIT_URL_WNIOSEK'); $helper->fields_value['SANTANDERCREDIT_QTY_SELECTOR'] = Configuration::get('SANTANDERCREDIT_QTY_SELECTOR'); $helper->fields_value['SANTANDERCREDIT_PRICE_SELECTOR'] = Configuration::get('SANTANDERCREDIT_PRICE_SELECTOR'); return $helper->generateForm($fields_form); } public function hookPaymentOptions($params) { // Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/' // 'imgDir' => $this->context->link->getModuleLink('santandercredit','images') if ($params['cart']->getOrderTotal() < 100) return; $this->smarty->assign(array( 'totalOrderC' => Tools::displayPrice($params['cart']->getOrderTotal(true, Cart::BOTH)), 'shopId' => trim(Configuration::get('SANTANDERCREDIT_SHOP_ID')), 'symulatorURL' => Configuration::get('SANTANDERCREDIT_URL_SYMULATOR'), 'jq_qtySelector' => Configuration::get('SANTANDERCREDIT_QTY_SELECTOR'), 'jq_priceSelector' => Configuration::get('SANTANDERCREDIT_PRICE_SELECTOR'), 'totalOrder' => $params['cart']->getOrderTotal(), 'imgDir' => $this->_path . 'images' )); if (!isset($this->context)) { $this->context = Context::getContext(); } $newOption = new PaymentOption(); $newOption->setModuleName($this->name) ->setCallToActionText('eRaty Santander Consumer Bank') ->setAction($this->context->link->getModuleLink('santandercredit', 'santanderCreditValidate', array(), true)) ->setAdditionalInformation($this->fetch('module:santandercredit/views/templates/hook/santanderCreditInfo.tpl')); $payment_options = [ $newOption, ]; return $payment_options; } function hookPaymentReturn($params) { // global $cart, $cookie, $currency; $cart = new Cart(intval($params['order']->id_cart)); $cookie = $this->context->cookie; $address = new Address(intval($cart->id_address_invoice)); $customer = new Customer(intval($cart->id_customer)); $total = floatval(number_format($cart->getOrderTotal(true, Cart::BOTH), 2, '.', '')); $santanderCreditShopId = trim(Configuration::get('SANTANDERCREDIT_SHOP_ID')); /* if (!Validate::isUnsignedInt($santanderCreditShopId)) { return $this->l('Błąd płatności: nieprawidłowy numer sklepu.'); } */ if (!Validate::isLoadedObject($address) || !Validate::isLoadedObject($customer)) { return $this->l('Błąd płatności: nieprawidłowy adres lub dane klienta.'); } // $productsInputs = ''; // $products = $cart->getProducts(true); $summaryDetails = $cart->getSummaryDetails(); $proto = 'http://'; if ($this->ssl) { $proto = 'https://'; } $this->smarty->assign(array( 'applicationURL' => Configuration::get('SANTANDERCREDIT_URL_WNIOSEK'), 'jq_qtySelector' => Configuration::get('SANTANDERCREDIT_QTY_SELECTOR'), 'jq_priceSelector' => Configuration::get('SANTANDERCREDIT_PRICE_SELECTOR'), 'orderId' => $params['order']->id, 'shopId' => $santanderCreditShopId, 'shopName' => Configuration::get('PS_SHOP_NAME'), 'shopMailAdress' => Configuration::get('PS_SHOP_EMAIL'), 'shopPhone' => Configuration::get('PS_SHOP_PHONE'), 'shopHttp' => $proto . $_SERVER['HTTP_HOST'] . __PS_BASE_URI__, // http://localhost/presta/prestashop_1.7.1.0/module/santandercredit/test 'returnTrue' => $proto . $_SERVER['HTTP_HOST'] . __PS_BASE_URI__ . 'module/' . $this->name . '/santanderCreditReturn?status=true&orderId=', 'returnFalse' => $proto . $_SERVER['HTTP_HOST'] . __PS_BASE_URI__ . 'module/' . $this->name . '/santanderCreditReturn?status=false&orderId=', 'email' => $customer->email, 'imie' => ( $cookie->logged ? $cookie->customer_firstname : false ), 'nazwisko' => ( $cookie->logged ? $cookie->customer_lastname : false ), 'telKontakt' => $address->phone_mobile, 'ulica' => $address->address1, 'ulica2' => $address->address2, 'miasto' => $address->city, 'kodPocz' => $address->postcode, // 'productsInputs' => $productsInputs, 'shipping' => round($summaryDetails['total_shipping'], 2), 'products' => $cart->getProducts(true), 'totalOrder' => $total, 'modDir' => $proto . $_SERVER['HTTP_HOST'] . __PS_BASE_URI__ . 'modules/' . $this->name )); $this->context->controller->registerJavascript( $this->name . '-scb_js', 'modules/' . $this->name . '/js/santanderCredit.js', [ 'priority' => 200, 'attribute' => 'async', ] ); return $this->fetch('module:santandercredit/views/templates/hook/santanderCreditPayment.tpl'); } public function displaySymulator($params) { global $smarty; $id_product = Tools::getValue('id_product'); $product = new Product($id_product, true); $smarty->assign(array( 'shopId' => trim(Configuration::get('SANTANDERCREDIT_SHOP_ID')), 'santanderCreditProductPrice' => round($product->getPrice(true), 2), 'jq_qtySelector' => Configuration::get('SANTANDERCREDIT_QTY_SELECTOR'), 'jq_priceSelector' => Configuration::get('SANTANDERCREDIT_PRICE_SELECTOR'), 'symulatorURL' => Configuration::get('SANTANDERCREDIT_URL_SYMULATOR') )); if (Configuration::get('SANTANDERCREDIT_SYMULATOR') <> null) { return $this->display(__FILE__, 'santanderCreditProduct.tpl'); } } public function hookDisplayProductAdditionalInfo($params){ return $this->displaySymulator($params); } public function hookDisplayFooterProduct($params){ return $this->displaySymulator($params); } public function hookDisplayCompareExtraInformation($params) { return $this->displaySymulator($params); } public function hookDisplayRightColumnProduct($params) { return $this->displaySymulator($params); } public function hookProductActions($params) { return $this->displaySymulator($params); } public function hookRightColumn($params) { return $this->displaySymulator($params); } public function hookLeftColumn($params) { return $this->displaySymulator($params); } /** * Creates new order state for eRaty payment system and configuration parameter SANTANDERCREDIT_OS_AUTHORIZATION * containing new order id. If parameter already exists - do nothing. * * @boolean creating order result */ function createOrderState() { $result = true; if (!Configuration::get('SANTANDERCREDIT_OS_AUTHORIZATION')) { try { $order_state = new OrderState(); $order_state = new OrderState(); $order_state->name = array(); foreach (Language::getLanguages() as $language) { if (Tools::strtolower($language['iso_code']) == 'pl') $order_state->name[$language['id_lang']] = 'Płatność eRaty – status decyzji Banku dostępny w Panel Sklep.'; else $order_state->name[$language['id_lang']] = 'eRaty payment - decision state available in Panel Sklep.'; } $order_state->send_email = false; $order_state->color = '#DDEEFF'; $order_state->hidden = false; $order_state->delivery = false; $order_state->logable = true; $order_state->invoice = true; $order_state->module_name = 'eRaty'; $order_state->add(); $result = Configuration::updateValue('SANTANDERCREDIT_OS_AUTHORIZATION', (int) $order_state->id); } catch (Exception $exc) { $result = false; } } return $result; } }