* @copyright 1997-2016 Quadra Informatique * @license http://www.opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ if (!defined('_PS_VERSION_')) { exit; } require_once(dirname(__FILE__).'/classes/Be2billXml.php'); require_once(dirname(__FILE__).'/classes/Be2billAlias.php'); require_once(dirname(__FILE__).'/classes/Be2billApi.php'); require_once(dirname(__FILE__).'/classes/Be2billExeccode.php'); require_once(dirname(__FILE__).'/classes/Be2billExeccodeHistory.php'); require_once(dirname(__FILE__).'/classes/Be2billOrderReference.php'); require_once(dirname(__FILE__).'/classes/Be2billSchedule.php'); require_once(dirname(__FILE__).'/classes/Be2billTransaction.php'); require_once(dirname(__FILE__).'/models/MerchandConfiguration.php'); require_once(dirname(__FILE__).'/models/MerchandConfigurationOptions.php'); require_once(dirname(__FILE__).'/models/MerchandConfigurationCountries.php'); class Be2bill extends PaymentModule { private $_html = ''; /** * Constructor */ public function __construct() { $this->name = 'be2bill'; $this->tab = 'payments_gateways'; $this->version = '2.0.11'; $this->author = 'Be2bill'; $this->module_key = '182f5ec2e5fb97d04e0008254b92819a'; $this->bootstrap = true; $this->need_instance = 1; parent::__construct(); $this->displayName = $this->l('Be2bill Internet Dynamic Payments'); $this->description = $this->l('The payment solution for the e-sellers.'); $this->confirmUninstall = $this->l('Are you sure you want to uninstall?'); $this->ps_versions_compliancy = array( 'min' => '1.6', 'max' => _PS_VERSION_); $this->module_key = '0b8e0275aec7993e370e2391d28cca53'; /* if (!Tools::isEmpty($old_version)) $this->runUpgrades($old_version, true); */ } /** * Install procedure * @return boolean */ public function install() { if (Shop::isFeatureActive()) { Shop::setContext(Shop::CONTEXT_ALL); } // Set default configuration Configuration::updateGlobalValue('BE2BILL_LOGS', 0); Configuration::updateGlobalValue('BE2BILL_SANDBOX', 0); Configuration::updateGlobalValue('BE2BILL_URL_XML', 'https://template.be2bill.com/cms/xml/v1/configuration.xml'); Configuration::updateGlobalValue('BE2BILL_MAIN_SERVER', 'https://secure-magenta1.be2bill.com'); Configuration::updateGlobalValue('BE2BILL_SLAVE_SERVER', 'https://secure-magenta2.be2bill.com'); Configuration::updateGlobalValue('BE2BILL_SB_MAIN_SERVER', 'https://secure-test.be2bill.com'); Configuration::updateGlobalValue('BE2BILL_SB_SLAVE_SERVER', 'https://secure-test.be2bill.com'); Configuration::updateGlobalValue('BE2BILL_REDIRECT_PAYMENT', 1); return parent::install() && $this->installBackOffice() && $this->createTables() && $this->registerOrderStatus() && $this->registerOrderDeferedStatus() && $this->registerOrderNxStatus() && $this->registerOrderShipStatus() && $this->registerHook('displayHeader') && $this->registerHook('displayPayment') && $this->registerHook('displayPaymentReturn') && $this->registerHook('displayBackOfficeHeader') && $this->registerHook('actionAdminControllerSetMedia') && $this->registerHook('displayAdminCustomers') && $this->registerHook('actionOrderStatusUpdate') && $this->registerHook('displayAdminOrder'); } /** * Uninstall procedure * @return boolean */ public function uninstall() { return parent::uninstall() && $this->uninstallModuleTab('AdminManageBe2billConf') && Be2billXml::uninstallBe2billXmlTables() && Configuration::deleteByName('BE2BILL_XML_VERSION') && Configuration::deleteByName('BE2BILL_LOGS') && Configuration::deleteByName('BE2BILL_URL_XML') && Configuration::deleteByName('BE2BILL_SANDBOX') && Configuration::deleteByName('BE2BILL_MAIN_SERVER') && Configuration::deleteByName('BE2BILL_SLAVE_SERVER') && Configuration::deleteByName('BE2BILL_SB_MAIN_SERVER') && Configuration::deleteByName('BE2BILL_SB_SLAVE_SERVER') && Configuration::deleteByName('BE2BILL_REDIRECT_PAYMENT'); } /** * Create module tables procedure * @return boolean */ public function createTables() { return Be2billXml::createBe2billXmlTables() && Be2billAlias::createBe2billAliasTable() && Be2billExeccode::createBe2billExeccodeTable() && Be2billExeccode::insertBe2billExeccodeDefaultValues() && Be2billExeccodeHistory::createBe2billExeccodeHistoryTable() && Be2billSchedule::createBe2billScheduleTable() && Be2billTransaction::createBe2billTransactionTable() && Be2billOrderReference::createBe2billOrderReferenceTable(); } public function installBackOffice() { $id_lang_en = LanguageCore::getIdByIso('en'); $id_lang_fr = LanguageCore::getIdByIso('fr'); $id_root_tab = Tab::getIdFromClassName('AdminParentModules'); if (!$id_root_tab) { $this->installModuleTab('be2bill', array( $id_lang_fr => 'Be2bill', $id_lang_en => 'Be2bill'), '0'); } $this->installModuleTab('AdminManageBe2billConf', array( $id_lang_fr => 'Configuration paiements Be2bill', $id_lang_en => 'Be2bill Payments configuration'), $id_root_tab); return true; } public function uninstallModuleTab($tabClass) { $idTab = Tab::getIdFromClassName($tabClass); if ($idTab != 0) { $tab = new Tab($idTab); $tab->delete(); return true; } return false; } public function installModuleTab($tabClass, $tabName, $idTabParent) { $tab = new Tab(); $tab->name = $tabName; $tab->class_name = $tabClass; $tab->module = $this->name; $tab->id_parent = (int)($idTabParent); if (!$tab->save()) { return false; } return true; } /** * Launch upgrade process */ public function runUpgrades($registered_version, $install = false) { if (!$install) { return false; } $list = array(); $upgrade_path = _PS_MODULE_DIR_.$this->name.'/upgrade/'; // Check if folder exist and it could be read if (file_exists($upgrade_path) && ($files = scandir($upgrade_path))) { // Read each file name foreach ($files as $file) { if (!in_array($file, array( '.', '..', '.svn', 'index.php'))) { $tab = explode('-', $file); $file_version = basename($tab[1], '.php'); // Compare version, if minor than actual, we need to upgrade the module if (count($tab) == 2 && (Tools::version_compare($file_version, $this->version, '<=') && Tools::version_compare($file_version, $registered_version, '>'))) { $list[] = array( 'file' => $upgrade_path.$file, 'version' => $file_version, 'upgrade_function' => 'upgrade_module_'.str_replace('.', '_', $file_version)); } } } } if (count($list)) { foreach ($list as $list_detail) { include_once($list_detail['file']); call_user_func($list_detail['upgrade_function'], $this, $install); } } } /** * Create Be2bill order status pending * @return boolean */ public function registerOrderStatus() { if ((int)Configuration::get('BE2BILL_OS_PENDING') > 0) { return true; } $order_state = new OrderState(); $order_state->unremovable = true; $order_state->name = array(); foreach (Language::getLanguages() as $language) { if (Tools::strtolower($language['iso_code']) == 'fr') { $order_state->name[$language['id_lang']] = 'En attente du paiement par Be2bill'; } else { $order_state->name[$language['id_lang']] = 'Awaiting Be2bill payment'; } } $order_state->module_name = $this->name; $order_state->color = 'RoyalBlue'; $order_state->hidden = false; $order_state->delivery = false; $order_state->logable = false; $order_state->invoice = false; $order_state->send_email = false; if ($order_state->save()) { Tools::copy( _PS_MODULE_DIR_.$this->name.'/views/img/be2bill.gif', _PS_IMG_DIR_.'os/'.(int)$order_state->id.'.gif' ); Configuration::updateValue('BE2BILL_OS_PENDING', (int)$order_state->id); return true; } return false; } /** * Create Be2billNx order status * @return boolean */ public function registerOrderNxStatus() { if ((int)Configuration::get('BE2BILLNX_OS_PAYMENT') > 0) { return true; } $id_order_state = (int)Configuration::get('BE2BILLNX_ORDER_STATE_ID'); if ($id_order_state) { Configuration::deleteByName('BE2BILLNX_ORDER_STATE_ID'); } $order_state = new OrderState($id_order_state); $order_state->unremovable = true; $order_state->name = array(); foreach (Language::getLanguages() as $language) { if (Tools::strtolower($language['iso_code']) == 'fr') { $order_state->name[$language['id_lang']] = 'Paiement en plusieurs fois'; } else { $order_state->name[$language['id_lang']] = 'Payment in several times'; } } $order_state->module_name = $this->name; $order_state->color = '#0074A1'; $order_state->hidden = false; $order_state->delivery = false; $order_state->logable = false; $order_state->invoice = true; $order_state->send_email = false; $order_state->template = ''; if ($order_state->save()) { copy( _PS_MODULE_DIR_.$this->name.'/views/img/be2bill.gif', _PS_IMG_DIR_.'os/'.(int)$order_state->id.'.gif' ); Configuration::updateValue('BE2BILLNX_OS_PAYMENT', (int)$order_state->id); return true; } return false; } /** * Create Be2billShip order status * @return boolean */ public function registerOrderShipStatus() { if ((int)Configuration::get('BE2BILLSHIP_OS_PAYMENT') > 0) { return true; } $id_order_state = (int)Configuration::get('BE2BILLSHIP_ORDER_STATE_ID'); if ($id_order_state) { Configuration::deleteByName('BE2BILLSHIP_ORDER_STATE_ID'); } $order_state = new OrderState($id_order_state); $order_state->unremovable = true; $order_state->name = array(); foreach (Language::getLanguages() as $language) { if (Tools::strtolower($language['iso_code']) == 'fr') { $order_state->name[$language['id_lang']] = 'Paiement à capturer lors de l\'expédition'; } else { $order_state->name[$language['id_lang']] = 'Payment has to be captured at shipment'; } } $order_state->module_name = $this->name; $order_state->color = '#0074A1'; $order_state->hidden = false; $order_state->delivery = false; $order_state->logable = false; $order_state->paid = false; $order_state->invoice = true; $order_state->send_email = false; $order_state->template = ''; if ($order_state->save()) { copy( _PS_MODULE_DIR_.$this->name.'/views/img/be2bill.gif', _PS_IMG_DIR_.'os/'.(int)$order_state->id.'.gif' ); Configuration::updateValue('BE2BILLSHIP_OS_PAYMENT', (int)$order_state->id); return true; } return false; } public function registerOrderDeferedStatus() { if ((int)Configuration::get('BE2BILLDEF_OS_PAYMENT') > 0) { return true; } $id_order_state = (int)Configuration::get('BE2BILLDEF_ORDER_STATE_ID'); if ($id_order_state) { Configuration::deleteByName('BE2BILLDEF_ORDER_STATE_ID'); } $order_state = new OrderState($id_order_state); $order_state->unremovable = true; $order_state->name = array(); foreach (Language::getLanguages() as $language) { if (Tools::strtolower($language['iso_code']) == 'fr') { $order_state->name[$language['id_lang']] = 'Paiement différé'; } else { $order_state->name[$language['id_lang']] = 'Deferred payment'; } } $order_state->module_name = $this->name; $order_state->color = '#0074A1'; $order_state->hidden = false; $order_state->delivery = false; $order_state->logable = false; $order_state->paid = false; $order_state->invoice = true; $order_state->send_email = false; $order_state->template = ''; if ($order_state->save()) { copy( _PS_MODULE_DIR_.$this->name.'/views/img/be2bill.gif', _PS_IMG_DIR_.'os/'.(int)$order_state->id.'.gif' ); Configuration::updateValue('BE2BILLDEF_OS_PAYMENT', (int)$order_state->id); return true; } return false; } /** * Hook order status update : Caputre transaction * * @param array $params list of specific data */ public function hookActionOrderStatusUpdate($params) { if (!$this->active) { return; } $order = new Order((int)$params['id_order']); if ($order->module == $this->name || $order->module == 'be2billship') { $id_account = Be2billTransaction::getMerchandAccountIdByOrderId($order->id); $status_account = MerchandConfigurationOptions::getAccountOptionsParameterValue($id_account, 'delivery'); if ($status_account) { $status_ids = explode(';', $status_account); if (in_array($params['newOrderStatus']->id, $status_ids)) { foreach (Be2billSchedule::getOrderScheduleToCapture($order->reference) as $schedule) { $extradata = $this->name; $result = Be2billApi::capture( $order->reference, $schedule['transaction_id'], $id_account, $schedule['amount'], $extradata ); if ($result['EXECCODE'] != '0000') { die($result['MESSAGE']); } } } } } } /** * Hook Header : Add Media CSS & JS * * @param array $params list of specific data */ public function hookDisplayHeader($params) { $this->context->controller->addCSS(($this->_path).'views/css/fo_be2bill.css', 'all'); } /** * Hook Display Payment : Display payment smarty tpl * * @param array $params list of specific data * @return string Html */ public function hookDisplayPayment($params) { $available_payments = $this->getAvailablePayments($params); if (!$available_payments) { return false; } if (!$this->canDisplayPayment($params)) { return false; } $this->context->smarty->assign(array( 'available_payments' => $available_payments, 'redirect_auto' => (int)Configuration::getGlobalValue('BE2BILL_REDIRECT_PAYMENT') )); return $this->display(__FILE__, 'payment.tpl'); } /** * Available Payments : return a list of available payment * * @param array $params list of specific data * @return array of payment */ public function getAvailablePayments($params) { // Check if the payment method can be displayed if (!$params['cart']) { return false; } // retrieving currency $currency = Currency::getCurrency((int)$params['cart']->id_currency); if (!$currency) { return false; } $iso_currency = $currency['iso_code']; // retrieving country $address = Address::getCountryAndState($params['cart']->id_address_invoice); if (!$address) { return false; } $iso_country = Country::getIsoById($address['id_country']); if (!$iso_country) { return false; } return MerchandConfiguration::getAvailablePayments( $iso_currency, $iso_country, $params['cart']->getOrderTotal(true), (int)$this->context->customer->id ); } public function canDisplayPayment($params) { if (!$this->active) { return false; } if (!$this->checkCurrency($params['cart'])) { return false; } // Check if the module is configure if (/* Production mode */ (!Configuration::getGlobalValue('BE2BILL_SANDBOX') && (!Configuration::getGlobalValue('BE2BILL_MAIN_SERVER') || !Configuration::getGlobalValue('BE2BILL_SLAVE_SERVER'))) || /* Sandbox mode */ (Configuration::getGlobalValue('BE2BILL_SANDBOX') && (!Configuration::getGlobalValue('BE2BILL_SB_MAIN_SERVER') || !Configuration::getGlobalValue('BE2BILL_SB_SLAVE_SERVER')))) { return false; } return true; } /** * Hook Display Payment Return : Display payment return smarty tpl * * @param array $params list of specific data * @return string Html */ public function hookDisplayPaymentReturn($params) { if (!$this->active) { return; } $customer = new Customer($params['objOrder']->id_customer); if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 1) { $controller = 'order-opc'; } else { $controller = 'order'; } if ($params['objOrder']->getCurrentState() != Configuration::get('BE2BILL_OS_PENDING') && $params['objOrder']->getCurrentState() != _PS_OS_ERROR_ && $params['objOrder']->getCurrentState() != _PS_OS_OUTOFSTOCK_UNPAID_) { $is_payment_ok = true; $partial_paid = false; } elseif ($params['objOrder']->getCurrentState() == _PS_OS_ERROR_ && $params['objOrder']->total_paid_real < $params['objOrder']->total_paid && $params['objOrder']->total_paid_real > 0 && $params['objOrder']->getCurrentState() != _PS_OS_OUTOFSTOCK_UNPAID_) { $is_payment_ok = false; $partial_paid = true; } else { $is_payment_ok = false; $partial_paid = false; } $this->context->smarty->assign(array( 'is_waiting' => ($params['objOrder']->getCurrentState() == Configuration::get('BE2BILL_OS_PENDING')) ? true : false, 'is_payment_ok' => $is_payment_ok, 'partial_paid' => $partial_paid, 'total_to_pay' => Tools::displayPrice($params['total_to_pay'], $params['currencyObj'], false), 'order' => $params['objOrder'], 'customer' => $customer, 'order_controller' => $controller )); return $this->display(__FILE__, 'payment_return.tpl'); } /** * Hook Back office Header : Add Media for the administration panel * * @param array $params list of specific data * @return string Html */ public function hookBackOfficeHeader($params) { if (in_array('addCSS', get_class_methods($this->context->controller))) { $this->context->controller->addCSS(($this->_path).'views/css/bo_be2bill.css', 'all'); } } /** * Hook Admin Controller Set Media : Add JS for the administration panel * * @param array $params list of specific data * @return string Html */ public function hookActionAdminControllerSetMedia($params) { $this->context->controller->addJs(($this->_path).'views/js/adminbe2bill.js'); } /** * Hook Display Admin Customer : Display customer alias * * @param array $params list of specific data * @return string Html */ public function hookDisplayAdminCustomers($params) { // Display be2bill customer alias data $this->context->smarty->assign(array( 'aliases' => Be2billAlias::getAllByIdCustomer($params['id_customer']) )); return $this->display(__FILE__, 'admin_customers.tpl'); } /** * Hook Display Admin Order : Display Transaction and Schedule data, enable * refund, capture * * @param array $params list of specific data * @return string Html */ public function hookDisplayAdminOrder($params) { $order = new Order($params['id_order']); // Refund Submit if (Tools::isSubmit('submitBe2billRefund')) { if (!Tools::getValue('be2bill_refund_transaction')) { $this->_errors[] = $this->l('Select a transaction to refund.'); } if (!Tools::getValue('be2bill_refund_slip')) { $this->_errors[] = $this->l('Select a slip to refund.'); } if (!count($this->_errors)) { $transaction_id = Tools::getValue('be2bill_refund_transaction'); // Get transaction $transaction = Be2billTransaction::getByTransactionId($transaction_id); if ($transaction) { // Get slip $slip_id = Tools::getValue('be2bill_refund_slip'); $slip = new OrderSlip($slip_id); if ($slip->id) { // Refund $id_account = Be2billTransaction::getMerchandAccountIdByOrderId($order->id); $result = Be2billApi::refund( $order->reference, $transaction_id, $id_account, $slip->amount, 'ORDER#'.$order->id.' SLIP#'.$slip->id ); if ($result['EXECCODE'] != '0000') { $this->_errors[] = $result['MESSAGE']; } } else { $this->_errors[] = $this->l('Unknown slip ID:').' '.$slip_id; } } else { $this->_errors[] = $this->l('Unknown transaction ID:').' '.$transaction_id; } } } $id_account = Be2billTransaction::getMerchandAccountIdByOrderId($order->id); $merchand_configuration = new MerchandConfiguration($id_account); $can_refund = Be2billApi::hasRefund($merchand_configuration->b2b_xml_account_type_code); // Display be2bill order data $this->context->smarty->assign(array( 'order' => $order, 'be2bill_module_dir' => _PS_MODULE_DIR_.'be2bill/', 'module_name' => $this->displayName, 'can_refund' => $can_refund, 'transaction_history' => Be2billTransaction::getOrderTransactionHistory($order->reference), 'transaction_currency' => $merchand_configuration->currency_iso, 'refundable_transaction' => Be2billTransaction::getOrderRefundableTransaction($order->reference), 'slips' => Be2billTransaction::getOrderRefundableSlip((int)$order->id, (int)$order->id_customer), 'schedule' => Be2billSchedule::getByOrderReference($order->reference), 'errors' => $this->_errors )); return $this->display(__FILE__, 'admin_order.tpl'); } private function postValidation() { if (Tools::isSubmit('submit'.$this->name)) { if (!Tools::getValue('BE2BILL_URL_XML') || !Validate::isAbsoluteUrl(Tools::getValue('BE2BILL_URL_XML'))) { $this->_errors[] = $this->l('XML URL is required.'); } if (!Tools::getValue('BE2BILL_MAIN_SERVER') || !Validate::isAbsoluteUrl(Tools::getValue('BE2BILL_MAIN_SERVER'))) { $this->_errors[] = $this->l('Main server URL is required.'); } if (!Tools::getValue('BE2BILL_SLAVE_SERVER') || !Validate::isAbsoluteUrl(Tools::getValue('BE2BILL_SLAVE_SERVER'))) { $this->_errors[] = $this->l('Second server URL is required.'); } if (Tools::getValue('BE2BILL_SANDBOX') && (!Tools::getValue('BE2BILL_SB_MAIN_SERVER') || !Validate::isAbsoluteUrl(Tools::getValue('BE2BILL_SB_MAIN_SERVER')))) { $this->_errors[] = $this->l('Sandbox main server URL is required.'); } if (Tools::getValue('BE2BILL_SANDBOX') && (!Tools::getValue('BE2BILL_SB_SLAVE_SERVER') || !Validate::isAbsoluteUrl(Tools::getValue('BE2BILL_SB_SLAVE_SERVER')))) { $this->_errors[] = $this->l('Sandbox second server URL is required.'); } } if (count($this->_errors) > 0) { return false; } return true; } private function postProcess() { // Used for not validate form by changing shop if (count($_POST) <= 1) { return false; } if (Tools::getValue('proceed_import')) { $this->proceedImport(); } if (!$this->postValidation()) { return false; } if (Tools::isSubmit('submit'.$this->name)) { Configuration::updateGlobalValue('BE2BILL_URL_XML', Tools::getValue('BE2BILL_URL_XML')); Configuration::updateGlobalValue('BE2BILL_LOGS', (int)Tools::getValue('BE2BILL_LOGS')); Configuration::updateGlobalValue('BE2BILL_SANDBOX', (int)Tools::getValue('BE2BILL_SANDBOX')); Configuration::updateGlobalValue('BE2BILL_MAIN_SERVER', Tools::getValue('BE2BILL_MAIN_SERVER')); Configuration::updateGlobalValue('BE2BILL_SLAVE_SERVER', Tools::getValue('BE2BILL_SLAVE_SERVER')); Configuration::updateGlobalValue('BE2BILL_SB_MAIN_SERVER', Tools::getValue('BE2BILL_SB_MAIN_SERVER')); Configuration::updateGlobalValue('BE2BILL_SB_SLAVE_SERVER', Tools::getValue('BE2BILL_SB_SLAVE_SERVER')); Configuration::updateGlobalValue('BE2BILL_REDIRECT_PAYMENT', Tools::getValue('BE2BILL_REDIRECT_PAYMENT')); } } public function getContent() { $output = null; if (Tools::isSubmit('submit'.$this->name)) { $this->postProcess(); if (count($this->_errors) > 0) { $output .= $this->displayError(implode('
', $this->_errors)); } else { if (Tools::getValue('proceed_import')) { $output .= $this->displayConfirmation($this->l('Import successfully done, please check your new account setting.')); } else { $output .= $this->displayConfirmation($this->l('Server settings updated')); } } } // Display Advices $this->context->smarty->assign(array( 'server_ip' => $_SERVER['SERVER_ADDR'], 'notification_url' => Tools::getHttpHost(true).str_replace( _PS_ROOT_DIR_.'/', __PS_BASE_URI__, $this->_path ).'notification.php', 'validation_url' => Tools::getHttpHost(true).str_replace( _PS_ROOT_DIR_.'/', __PS_BASE_URI__, $this->_path ).'validation.php', 'template_url' => Tools::getHttpHost(true).str_replace( _PS_ROOT_DIR_.'/', __PS_BASE_URI__, $this->_path ).'template.php', 'ajax_url' => '//'.Tools::getHttpHost().str_replace( _PS_ROOT_DIR_.'/', __PS_BASE_URI__, $this->_path ).'ajax.php', 'content_dir' => Tools::getHttpHost(true).str_replace( _PS_ROOT_DIR_.'/', __PS_BASE_URI__, $this->_path ).'views/img/', )); return $output.$this->displayForm(); } public function displayForm() { // Get default Language $default_lang = (int)Configuration::get('PS_LANG_DEFAULT'); // for ajax translate $msg = $this->l('Reset complete'); $msg = $this->l('Udpate not needed, tables already up to date'); $msg = $this->l('Update complete'); // Init Fields form array $fields_form = array(); if (Configuration::getGlobalValue('BE2BILL_NEED_IMPORT')) { $fields_form[0]['form'] = array( 'legend' => array( 'title' => $this->l('Import parameters'), 'image' => _PS_ADMIN_IMG_.'cog.gif' ), 'input' => array( array( 'type' => 'text', 'label' => $this->l('Identifer to import'), 'name' => 'BE2BILL_ID', 'desc' => $this->l('This is your identifier account to import with all payment informations'), 'size' => 50 ), ), 'submit' => array( 'title' => $this->l('Run import'), 'class' => 'button', 'name' => 'proceed_import' ) ); } $fields_form[1]['form'] = array( 'legend' => array( 'title' => $this->l('Servers parameters'), 'image' => _PS_ADMIN_IMG_.'cog.gif' ), 'input' => array( array( 'type' => 'textbutton', 'label' => $this->l('Update XML URL'), 'name' => 'BE2BILL_URL_XML', 'required' => true, 'desc' => $this->l('Default value: https://template.be2bill.com/cms/xml/v1/configuration.xml'), 'size' => 50, 'button' => array( 'label' => $this->l('Update your account list'), 'attributes' => array( 'onclick' => 'doClick();' ) ) ), array( 'type' => 'text', 'label' => $this->l('Current XML Version'), 'name' => 'BE2BILL_XML_VERSION', 'required' => false, 'readonly' => true, 'size' => 10 ), array( 'type' => 'radio', 'label' => $this->l('Use Debug mode'), 'name' => 'BE2BILL_LOGS', 'desc' => $this->l('Enable or disable the Debug mode'), 'values' => array( array( 'id' => 'debug_on', 'value' => 1, 'label' => $this->l('Yes')), array( 'id' => 'debug_off', 'value' => 0, 'label' => $this->l('No')), ), 'is_bool' => true, 'class' => 't' ), array( 'type' => 'text', 'label' => $this->l('Production main server URL'), 'name' => 'BE2BILL_MAIN_SERVER', 'required' => true, 'desc' => $this->l('Default value: https://secure-magenta1.be2bill.com'), 'size' => 50 ), array( 'type' => 'text', 'label' => $this->l('Production second server URL'), 'name' => 'BE2BILL_SLAVE_SERVER', 'required' => true, 'desc' => $this->l('Default value: https://secure-magenta2.be2bill.com'), 'size' => 50 ), array( 'type' => 'radio', 'label' => $this->l('Use Sandbox mode'), 'name' => 'BE2BILL_SANDBOX', 'desc' => $this->l('Enable or disable the Sandbox mode'), 'values' => array( array( 'id' => 'sandbox_on', 'value' => 1, 'label' => $this->l('Yes')), array( 'id' => 'sandbox_off', 'value' => 0, 'label' => $this->l('No')), ), 'is_bool' => true, 'class' => 't' ), array( 'type' => 'text', 'label' => $this->l('Sandbox main server URL'), 'name' => 'BE2BILL_SB_MAIN_SERVER', 'desc' => $this->l('Default value: https://secure-test.be2bill.com'), 'size' => 50 ), array( 'type' => 'text', 'label' => $this->l('Sandbox second server URL'), 'name' => 'BE2BILL_SB_SLAVE_SERVER', 'desc' => $this->l('Default value: https://secure-test.be2bill.com'), 'size' => 50 ), array( 'type' => 'radio', 'label' => $this->l('Redirect directly to BE2BILL'), 'name' => 'BE2BILL_REDIRECT_PAYMENT', 'desc' => $this->l('Enable or disable the redirection directly to the payment page'), 'values' => array( array( 'id' => 'redirect_on', 'value' => 1, 'label' => $this->l('Yes')), array( 'id' => 'redirect_off', 'value' => 0, 'label' => $this->l('No')), ), 'is_bool' => true, 'class' => 't' ) ), 'submit' => array( 'title' => $this->l('Save'), 'class' => 'button' ) ); $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; $helper->base_tpl = 'form.tpl'; // Title and toolbar $helper->title = $this->displayName; $helper->show_toolbar = true; $helper->toolbar_scroll = true; $helper->submit_action = 'submit'.$this->name; $helper->toolbar_btn = array( 'save' => array( 'desc' => $this->l('Save'), 'href' => $helper->currentIndex.'&save'.$this->name.'&token='.$helper->token, ), 'back' => array( 'href' => AdminController::$currentIndex.'&token='.$helper->token, 'desc' => $this->l('Back to list') ) ); // Load current value $helper->fields_value['BE2BILL_ID'] = Configuration::getGlobalValue('BE2BILL_ID'); $helper->fields_value['BE2BILL_LOGS'] = Configuration::getGlobalValue('BE2BILL_LOGS'); $helper->fields_value['BE2BILL_URL_XML'] = Configuration::getGlobalValue('BE2BILL_URL_XML'); $helper->fields_value['BE2BILL_SANDBOX'] = Configuration::getGlobalValue('BE2BILL_SANDBOX'); $helper->fields_value['BE2BILL_MAIN_SERVER'] = Configuration::getGlobalValue('BE2BILL_MAIN_SERVER'); $helper->fields_value['BE2BILL_SLAVE_SERVER'] = Configuration::getGlobalValue('BE2BILL_SLAVE_SERVER'); $helper->fields_value['BE2BILL_SB_MAIN_SERVER'] = Configuration::getGlobalValue('BE2BILL_SB_MAIN_SERVER'); $helper->fields_value['BE2BILL_SB_SLAVE_SERVER'] = Configuration::getGlobalValue('BE2BILL_SB_SLAVE_SERVER'); $helper->fields_value['BE2BILL_REDIRECT_PAYMENT'] = Configuration::getGlobalValue('BE2BILL_REDIRECT_PAYMENT'); $helper->fields_value['BE2BILL_XML_VERSION'] = Configuration::getGlobalValue('BE2BILL_XML_VERSION'); return $helper->generateForm($fields_form); } /** * Check the cart and the module currency * @param Cart $cart * @return boolean */ public function checkCurrency($cart) { $currency_order = new Currency($cart->id_currency); $currencies_module = $this->getCurrency($cart->id_currency); if (is_array($currencies_module)) { foreach ($currencies_module as $currency_module) { if ($currency_order->id == $currency_module['id_currency']) { return true; } } } return false; } public static function log($message, $level = AbstractLogger::DEBUG) { if ((int)Configuration::getGlobalValue('BE2BILL_LOGS')) { $logger = new FileLogger(AbstractLogger::DEBUG); $logger->setFilename(_PS_ROOT_DIR_.'/log/'.date('Ymd').'_be2bill.log'); $logger->log(strip_tags($message), $level); } } public static function getBe2billModule() { return Module::getInstanceByName('be2bill'); } public function proceedImport() { if (Be2billXml::paymentsNeedUpgrade()) { $this->_errors[] = $this->l('You need to upgrade your xml before import.'); return false; } // creating new account (cbmcvisa-fr) $merchand_conf = new MerchandConfiguration(); $merchand_conf->b2b_xml_account_type_code = 'CB/Visa/MasterCard'; $merchand_conf->b2b_xml_mode_code = 'form'; $merchand_conf->currency_iso = 'EUR'; $merchand_conf->login_account = Configuration::getGlobalValue('BE2BILL_ID'); $merchand_conf->password = Configuration::getGlobalValue('BE2BILL_PWD'); // get default logo $logo = Be2billApi::getLogoUrl($merchand_conf->b2b_xml_account_type_code); if ($logo && isset($logo['b2b_xml_account_type_logo'])) { $merchand_conf->logo_url = $logo['b2b_xml_account_type_logo']; } foreach (Language::getLanguages() as $language) { $merchand_conf->name[$language['id_lang']] = 'cbvisamc-fr'; } $merchand_conf->active = 1; $merchand_conf->add(); // adding defaut options standard $option = new MerchandConfigurationOptions(); $option->id_b2b_merchand_configuration_account = $merchand_conf->id; $option->b2b_xml_option = 'standard'; $option->min_amount = 0; $option->max_amount = 0; $option->b2b_xml_option_extra = ''; $option->active = 1; $option->add(); // adding defaut options defered $option = new MerchandConfigurationOptions(); $option->id_b2b_merchand_configuration_account = $merchand_conf->id; $option->b2b_xml_option = 'defered'; $option->min_amount = 0; $option->max_amount = 0; $option->b2b_xml_option_extra = '7'; $option->active = 0; $option->add(); // adding defaut options delivery $option = new MerchandConfigurationOptions(); $option->id_b2b_merchand_configuration_account = $merchand_conf->id; $option->b2b_xml_option = 'delivery'; $option->min_amount = 0; $option->max_amount = 0; $option->b2b_xml_option_extra = '4'; $option->active = 0; $option->add(); // adding defaut options ntimes $option = new MerchandConfigurationOptions(); $option->id_b2b_merchand_configuration_account = $merchand_conf->id; $option->b2b_xml_option = 'ntimes'; $option->min_amount = 0; $option->max_amount = 0; $option->b2b_xml_option_extra = '3'; $option->active = 0; $option->add(); // adding defaut options secure $option = new MerchandConfigurationOptions(); $option->id_b2b_merchand_configuration_account = $merchand_conf->id; $option->b2b_xml_option = 'secure'; $option->min_amount = 0; $option->max_amount = 0; $option->b2b_xml_option_extra = ''; $option->active = 0; $option->add(); // adding defaut options oneclick $option = new MerchandConfigurationOptions(); $option->id_b2b_merchand_configuration_account = $merchand_conf->id; $option->b2b_xml_option = 'oneclick'; $option->min_amount = 0; $option->max_amount = 0; $option->b2b_xml_option_extra = ''; $option->active = 0; $option->add(); // adding defaut options oneclickcvv $option = new MerchandConfigurationOptions(); $option->id_b2b_merchand_configuration_account = $merchand_conf->id; $option->b2b_xml_option = 'oneclickcvv'; $option->min_amount = 0; $option->max_amount = 0; $option->b2b_xml_option_extra = ''; $option->active = 0; $option->add(); // adding defaut options displaycreatealias $option = new MerchandConfigurationOptions(); $option->id_b2b_merchand_configuration_account = $merchand_conf->id; $option->b2b_xml_option = 'displaycreatealias'; $option->min_amount = 0; $option->max_amount = 0; $option->b2b_xml_option_extra = ''; $option->active = 0; $option->add(); // inject old alias $alias_list = array(); $old_list = Be2billAlias::getOldList(); foreach ($old_list as $row) { $b2b_alias = new Be2billAlias(); $b2b_alias->id_customer = $row['id_customer']; $b2b_alias->id_merchand_account = $merchand_conf->id; $b2b_alias->alias = $row['alias']; $b2b_alias->card_type = $row['card_type']; $b2b_alias->card_number = $row['card_number']; $b2b_alias->date_end = $row['date_end']; $b2b_alias->date_add = $row['date_add']; $b2b_alias->add(); $alias_list[$row['id_be2bill_alias']] = (int)Db::getInstance()->Insert_ID(); } // inject old order reference $old_list = Be2billOrderReference::getOldList(); foreach ($old_list as $row) { $b2b_ref = new Be2billOrderReference(); $b2b_ref->id_cart = $row['id_cart']; $b2b_ref->reference = $row['reference']; $b2b_ref->add(); } // inject old transaction $transaction_list = array(); $old_list = Be2billTransaction::getOldList(); foreach ($old_list as $row) { $b2b_transac = new Be2billTransaction(); $b2b_transac->id_order = $row['id_order']; $b2b_transac->id_merchand_account = $merchand_conf->id; $b2b_transac->id_order_slip = $row['id_order_slip']; $b2b_transac->transaction_id = $row['transaction_id']; $b2b_transac->transaction_type = $row['transaction_type']; $b2b_transac->amount = $row['amount']; $b2b_transac->date_add = $row['date_add']; $order = new Order($row['id_order']); if ($order->module != 'be2billamex') { $b2b_transac->add(); $transaction_list[$row['id_be2bill_transaction']] = (int)Db::getInstance()->Insert_ID(); } } // inject old execode history $old_list = Be2billExeccodeHistory::getOldList(); foreach ($old_list as $row) { if (isset($transaction_list[$row['id_be2bill_transaction']])) { $b2b_exec = new Be2billExeccodeHistory(); $b2b_exec->id_b2b_execcode = $row['id_be2bill_execcode']; $b2b_exec->id_b2b_transaction = $transaction_list[$row['id_be2bill_transaction']]; $b2b_exec->date_add = $row['date_add']; $b2b_exec->add(); } } // inject old schedule $old_list = Be2billSchedule::getOldList(); foreach ($old_list as $row) { $b2b_schedule = new Be2billSchedule(); $b2b_schedule->id_order = $row['id_order']; $b2b_schedule->schedule_id = $row['schedule_id']; $b2b_schedule->id_b2b_alias = 0; if ($row['id_be2bill_alias']) { $b2b_schedule->id_b2b_alias = $alias_list[$row['id_be2bill_alias']]; } $b2b_schedule->transaction_id = $row['transaction_id']; $b2b_schedule->amount = $row['amount']; $b2b_schedule->date_add = $row['date_add']; $b2b_schedule->date_scheduled = $row['date_scheduled']; $b2b_schedule->date_done = $row['date_done']; $b2b_schedule->is_done = $row['is_done']; $option = ''; $order = new Order($row['id_order']); if ($order->id) { switch ($order->module) { case 'be2bill': break; case 'be2billamex': $option = 'amex'; break; case 'be2billdef': $option = 'defered'; break; case 'be2billship': $option = 'delivery'; break; case 'be2billnx': $option = 'ntimes'; break; } } $b2b_schedule->option = $option; if ($option != 'amex') { $b2b_schedule->add(); } } Configuration::updateGlobalValue('BE2BILL_NEED_IMPORT', 0); return true; } }