public function processPayment($result, $orderId) { $gopay = new Gopay(); $gpErrors = ""; $history = new OrderHistory(); $history->id_order = $orderId; if ($result["code"] == GopayHelper::WAITING) { $gpErrors = $result["description"]; } else { if ($result["code"] == GopayHelper::PAYMENT_DONE) { if ($history->getLastOrderState($orderId)->id == intval(_PS_OS_GOPAY_)) { $history->changeIdOrderState(intval(_PS_OS_PAYMENT_), intval($orderId)); $history->addWithemail(); } } else { if ($result["code"] == GopayHelper::CANCELED || $result["code"] == GopayHelper::TIMEOUTED) { if ($history->getLastOrderState($orderId)->id == intval(_PS_OS_GOPAY_)) { $history->changeIdOrderState(intval(_PS_OS_CANCELED_), $orderId); $history->addWithemail(); } $gpErrors = $result["description"]; } } } return $gpErrors; }
public function updateStatus(&$resp) { $this->log_on = Configuration::get('YA_P2P_LOGGING_ON'); if ($resp->status == 'success') { $cart = $this->context->cart; if ($cart->id > 0) { if ($cart->orderExists()) { $ord = new Order((int) Order::getOrderByCartId($cart->id)); $id_order = $ord->id; } else { $ord = $this->module->validateOrder($cart->id, Configuration::get('PS_OS_PAYMENT'), $cart->getOrderTotal(true, Cart::BOTH), $this->module->displayName . " Банковская карта", null, array(), null, false, $cart->secure_key); $id_order = $this->module->currentOrder; } if ($ord) { $history = new OrderHistory(); $history->id_order = $id_order; $history->changeIdOrderState(Configuration::get('PS_OS_PAYMENT'), $id_order); $history->addWithemail(true); } } if ($this->log_on) { $this->module->logSave('payment_card: #' . $this->module->currentOrder . ' ' . $this->module->l('Order success')); } Tools::redirect($this->context->link->getPageLink('order-confirmation') . '&id_cart=' . $this->context->cart->id . '&id_module=' . $this->module->id . '&id_order=' . $this->module->currentOrder . '&key=' . $this->context->cart->secure_key); } }
function TransactionNotification($notificationCode) { ob_clean(); global $cookie; $credentials = new PagSeguroAccountCredentials(Configuration::get("PAGSEGURO_BUSINESS"), Configuration::get("PAGSEGURO_TOKEN")); try { $transaction = PagSeguroNotificationService::checkTransaction($credentials, $notificationCode); $id_transaction = $transaction->getCode(); $id_status = $transaction->getStatus()->getValue(); $order_state = Configuration::get("PAGSEGURO_STATUS_{$id_status}"); $orderState = new OrderState($order_state); $status = $orderState->name[$cookie->id_lang]; $id_order = Db::getInstance()->getValue("SELECT id_order FROM " . _DB_PREFIX_ . "pagseguro_order WHERE id_transaction = '{$id_transaction}'"); $order = new Order(intval($id_order)); /** ENVIO DO EMAIL * */ $pagseguro = new pagseguro(); $idCustomer = $order->id_customer; $idLang = $order->id_lang; $customer = new Customer(intval($idCustomer)); $mailVars = array('{email}' => Configuration::get('PS_SHOP_EMAIL'), '{firstname}' => stripslashes($customer->firstname), '{lastname}' => stripslashes($customer->lastname), '{terceiro}' => stripslashes($pagseguro->displayName), '{id_order}' => stripslashes($pagseguro->currentOrder), '{status}' => stripslashes($status)); $pagseguro->enviar($mailVars, 'pagseguro', $status, $pagseguro->displayName, $idCustomer, $idLang, $customer->email, 'modules/pagseguro/mails/'); /** /ENVIO DO EMAIL * */ $extraVars = array(); $history = new OrderHistory(); $history->id_order = intval($id_order); $history->changeIdOrderState(intval($order_state), intval($id_order)); $history->addWithemail(true, $extraVars); die("Sucesso!"); } catch (PagSeguroServiceException $e) { file_put_contents(dirname(__FILE__) . "/error.log", var_export($e, true)); die("Error!"); } }
private function canceledOrderForError() { $history = new OrderHistory(); $history->id_order = (int) $this->pagSeguro->currentOrder; $history->changeIdOrderState(6, (int) $this->pagSeguro->currentOrder); $history->save(); }
/** * @see FrontController::postProcess() */ public function postProcess() { $oplata = new Oplata(); if ($_POST['order_status'] == OplataCls::ORDER_DECLINED) { $this->errors[] = Tools::displayError('Order declined'); } $settings = array('merchant_id' => $oplata->getOption('merchant'), 'secret_key' => $oplata->getOption('secret_key')); $isPaymentValid = OplataCls::isPaymentValid($settings, $_POST); if ($isPaymentValid !== true) { $this->errors[] = Tools::displayError($isPaymentValid); } $cart = $this->context->cart; if ($cart->id_customer == 0 || $cart->id_address_delivery == 0 || $cart->id_address_invoice == 0 || !$this->module->active) { Tools::redirect('index.php?controller=order&step=1'); } $customer = new Customer($cart->id_customer); if (!Validate::isLoadedObject($customer)) { Tools::redirect('index.php?controller=order&step=1'); } if (empty($this->errors)) { list($orderId, ) = explode(OplataCls::ORDER_SEPARATOR, $_POST['order_id']); $history = new OrderHistory(); $history->id_order = $orderId; $history->changeIdOrderState((int) Configuration::get('PS_OS_PAYMENT'), $orderId); $history->addWithemail(true, array('order_name' => $orderId)); Tools::redirect('index.php?controller=order-confirmation&id_cart=' . $cart->id . '&id_module=' . $this->module->id . '&id_order=' . $this->module->currentOrder . '&key=' . $customer->secure_key); } }
public function postProcess() { parent::postProcess(); if (Tools::isSubmit('markAsReceived')) { $idOrder = (int) Tools::getValue('id_order'); $order = new Order($idOrder); if (Validate::isLoadedObject($order)) { if ($order->getCurrentState() == 15) { $new_history = new OrderHistory(); $new_history->id_order = (int) $order->id; $new_history->changeIdOrderState(16, $order); // 16: Ready for Production //var_dump($order,$new_history); $myfile = fopen(PS_PRODUCT_IMG_PATH . "/orders/" . $order->reference . ".txt", "w") or die("Unable to open file!"); $txt = "Order Confirmed\n Order Reference: " . $order->reference; fwrite($myfile, $txt); fclose($myfile); $new_history->addWithemail(true); } $this->context->smarty->assign('receipt_confirmation', true); } else { $this->_errors[] = Tools::displayError('Error: Invalid order number'); } } }
/** * @see FrontController::postProcess() */ public function postProcess() { if (empty($_POST)) { $fap = json_decode(file_get_contents("php://input")); $_POST = array(); foreach ($fap as $key => $val) { $_POST[$key] = $val; } } try { if ($_POST['order_status'] == FondyCls::ORDER_DECLINED) { exit('Order declined'); } $fondy = new Fondy(); $settings = array('merchant_id' => $fondy->getOption('merchant'), 'secret_key' => $fondy->getOption('secret_key')); $isPaymentValid = FondyCls::isPaymentValid($settings, $_POST); if ($isPaymentValid !== true) { exit($isPaymentValid); } list($orderId, ) = explode(FondyCls::ORDER_SEPARATOR, $_POST['order_id']); $history = new OrderHistory(); $history->id_order = $orderId; $id_order_state = _PS_OS_PAYMENT_; $history->changeIdOrderState(intval($id_order_state), intval($orderId)); $history->addWithemail(true, ""); exit('OK'); } catch (Exception $e) { exit(get_class($e) . ': ' . $e->getMessage()); } }
public function refund($order_id) { $this->log_identifier = time(); if (!$this->util->isPaymillOrder($order_id)) { return false; } $data = $this->getTransactionData($order_id); try { $result = $this->refund->create(array('transactionId' => $data['transaction'], 'params' => array('amount' => number_format($data['total_paid'], 2) * 100))); $return_value = isset($result['response_code']) && $result['response_code'] === 20000; $this->log('Refund resulted in ' . (string) $return_value, var_export($result, true)); $db = Db::getInstance(); $db->execute('UPDATE `' . _DB_PREFIX_ . 'pigmbh_paymill_transactiondata` SET `refund`=1 WHERE `id`=' . pSQL($order_id)); } catch (Exception $exception) { $this->log('Refund exception ', var_export($exception->getMessage(), true)); $return_value = false; } if ($return_value) { $new_order_state = Configuration::get('PS_OS_REFUND'); $order = new Order($order_id); $history = new OrderHistory(); $history->id_order = (int) $order->id; $history->changeIdOrderState($new_order_state, (int) $order->id); //order status=3 $history->add(true); } return $return_value; }
public function initContent() { $order_id = (int) Tools::getValue('merchantReference'); Logger::addLog('Adyen module: incoming notification for id_order ' . $order_id); if ($this->validateNotificationCredential()) { $psp_reference = (string) Tools::getValue('pspReference'); $event_code = (string) Tools::getValue('eventCode'); $auth_result = (string) Tools::getValue('authResult'); $payment_method = (string) Tools::getValue('paymentMethod'); $success = (string) Tools::getValue('success'); $event_data = !empty($event_code) ? $event_code : $auth_result; // check if notification is already executed on server based on psp_reference and event_code if ((int) $order_id > 0 && !$this->isDuplicate($psp_reference, $event_code)) { // save notification to table so notification is handled only once Db::getInstance()->insert('adyen_event_data', array('psp_reference' => pSQL($psp_reference), 'adyen_event_code' => pSQL($event_code), 'adyen_event_result' => pSQL($event_data), 'id_order' => (int) $order_id, 'payment_method' => pSQL($payment_method), 'created_at' => date('Y-m-d H:i:s'))); // get the order $order = new Order($order_id); $history = new OrderHistory(); $history->id_order = (int) $order->id; if (strcmp($success, 'false') == 0 || $success == '' || $event_code == 'CANCELLATION') { // failed if post value success is false or not filled in $history->changeIdOrderState((int) Configuration::get('ADYEN_STATUS_CANCELLED'), (int) $order->id); $history->add(); Logger::addLog('Adyen module: status for id_order ' . $order->id . ' is changed to cancelled'); } else { // if success is not false then check if eventCode is AUTHORISATION so that order status is accepted if ($event_code == 'AUTHORISATION') { $history->changeIdOrderState((int) Configuration::get('ADYEN_STATUS_AUTHORIZED'), (int) $order->id); $history->add(); Logger::addLog('Adyen module: status for id_order ' . $order->id . ' is changed to authorized'); } else { Logger::addLog('Adyen module: status for id_order ' . $order->id . ' is ' . $event_code . ' and is ignored'); } } } else { Logger::addLog('Adyen module: incoming notification ignored because it is already handled for id_order ' . $order_id); } } else { Logger::addLog('Adyen module: invalid credential for incoming notification of id_order ' . $order_id, 4); // unauthorized header('HTTP/1.1 401 Unauthorized', true, 401); exit; } // always return accepted die('[accepted]'); }
function canceledOrderForErro($pag_seguro) { $currentOrder = (int) $pag_seguro->currentOrder; $history = new OrderHistory(); $history->id_order = $currentOrder; $history->changeIdOrderState(6, $currentOrder); $history->save(); }
public function validateOrderPay($id_cart, $id_order_state, $amount_paid, $extraCosts, $payment_method = 'Unknown', $message = null, $extra_vars = array(), $currency_special = null, $dont_touch_amount = false, $secure_key = false, Shop $shop = null) { $statusPending = Configuration::get('PAYNL_WAIT'); $statusPaid = Configuration::get('PAYNL_SUCCESS'); // Als er nog geen order van dit cartid is, de order valideren. $orderId = Order::getOrderByCartId($id_cart); if ($orderId == false) { if ($id_order_state == $statusPaid) { if ($extraCosts != 0) { $id_order_state_tmp = $statusPending; } else { $id_order_state_tmp = $statusPaid; } } else { $id_order_state_tmp = $id_order_state; } $result = parent::validateOrder($id_cart, $id_order_state_tmp, $amount_paid, $payment_method, $message, $extra_vars, $currency_special, $dont_touch_amount, $secure_key, $shop); $orderId = $this->currentOrder; if ($extraCosts == 0 && $id_order_state_tmp == $statusPaid) { //Als er geen extra kosten zijn, en de order staat op betaald zijn we klaar return $result; } } if ($orderId && $id_order_state == $statusPaid) { $order = new Order($orderId); $shippingCost = $order->total_shipping; $newShippingCosts = $shippingCost + $extraCosts; $extraCostsExcl = round($extraCosts / (1 + 21 / 100), 2); if ($extraCosts != 0) { //als de order extra kosten heeft, moeten deze worden toegevoegd. $order->total_shipping = $newShippingCosts; $order->total_shipping_tax_excl = $order->total_shipping_tax_excl + $extraCostsExcl; $order->total_shipping_tax_incl = $newShippingCosts; $order->total_paid_tax_excl = $order->total_paid_tax_excl + $extraCostsExcl; $order->total_paid_tax_incl = $order->total_paid_real = $order->total_paid = $order->total_paid + $extraCosts; } $result = $order->addOrderPayment($amount_paid, $payment_method, $extra_vars['transaction_id']); if (number_format($order->total_paid_tax_incl, 2) !== number_format($amount_paid, 2)) { $id_order_state = Configuration::get('PS_OS_ERROR'); } //paymentid ophalen $orderPayment = OrderPayment::getByOrderId($order->id); $history = new OrderHistory(); $history->id_order = (int) $order->id; $history->changeIdOrderState((int) $id_order_state, $order, $orderPayment); $res = Db::getInstance()->getRow(' SELECT `invoice_number`, `invoice_date`, `delivery_number`, `delivery_date` FROM `' . _DB_PREFIX_ . 'orders` WHERE `id_order` = ' . (int) $order->id); $order->invoice_date = $res['invoice_date']; $order->invoice_number = $res['invoice_number']; $order->delivery_date = $res['delivery_date']; $order->delivery_number = $res['delivery_number']; $order->update(); $history->addWithemail(); } return $result; }
private function updateStatus($orderId, $statusId) { $order_state_id = $this->getStatus($statusId); $history = new OrderHistory(); $history->id_order = $orderId; $history->id_order_state = $order_state_id; $history->changeIdOrderState($order_state_id, $orderId); $history->add(true); }
function addSyspayOrderHistory($id_order, $order_state, $use_existings_payment = false) { $history = new OrderHistory(); $history->id_order = $id_order; $history->id_employee = (int) Configuration::get('SYSPAY_EMPLOYEE'); $history->changeIdOrderState($order_state, $id_order, $use_existings_payment); $history->id_order_state = $order_state; $history->add(true); }
public static function changeOrderStatus($id_order, $id_new_state) { $new_history = new OrderHistory(); $new_history->id_order = (int) $id_order; $new_history->changeIdOrderState((int) $id_new_state, $id_order, true); if (!$new_history->addWithemail(true)) { ShiptomyidLog::addLog('Error changing order_state to #' . $id_new_state, $id_order); } }
public function postProcess() { parent::postProcess(); //ИД заказа $ordernumber = Tools::getValue('InvId'); //Сумма заказа $amount = Tools::getValue('OutSum'); $signature = md5($amount . ':' . $ordernumber . ':' . Configuration::get('robokassa_password2')); //Проверка подписи if (strtoupper($signature) != Tools::getValue('SignatureValue')) { robokassa::validateAnsver($this->module->l('Invalid signature')); } if (Configuration::get('robokassa_postvalidate')) { $cart = new Cart((int) $ordernumber); //Проверка существования заказа if (!Validate::isLoadedObject($cart)) { robokassa::validateAnsver($this->module->l('Cart does not exist')); } $total_to_pay = $cart->getOrderTotal(true, Cart::BOTH); $currency_rub = new Currency(Currency::getIdByIsoCode('RUB')); if ($cart->id_currency != $currency_rub->id) { $currency = new Currency($cart->id_currency); $total_to_pay = $total_to_pay / $currency->conversion_rate * $currency_rub->conversion_rate; } $total_to_pay = number_format($total_to_pay, 2, '.', ''); //Проверка суммы заказа if ($amount != $total_to_pay) { robokassa::validateAnsver($this->module->l('Incorrect payment summ')); } $this->module->validateOrder((int) $cart->id, Configuration::get('PS_OS_PAYMENT'), $cart->getOrderTotal(true, Cart::BOTH), $this->module->displayName, NULL, array(), NULL, false, $cart->secure_key); } else { $order = new Order((int) $ordernumber); //Проверка существования заказа if (!Validate::isLoadedObject($order)) { robokassa::validateAnsver($this->module->l('Order does not exist')); } $total_to_pay = $order->total_paid; $currency_rub = new Currency(Currency::getIdByIsoCode('RUB')); if ($order->id_currency != $currency_rub->id) { $currency = new Currency($order->id_currency); $total_to_pay = $total_to_pay / $currency->conversion_rate * $currency_rub->conversion_rate; } $total_to_pay = number_format($total_to_pay, 2, '.', ''); //Проверка суммы заказа if ($amount != $total_to_pay) { robokassa::validateAnsver($this->module->l('Incorrect payment summ')); } //Меняем статус заказа $history = new OrderHistory(); $history->id_order = $ordernumber; $history->changeIdOrderState(Configuration::get('PS_OS_PAYMENT'), $ordernumber); $history->addWithemail(true); } die('OK' . $ordernumber); }
/** * @see FrontController::postProcess() */ public function postProcess() { // Log requests from Privat API side in Debug mode. if (Configuration::get('PRIVAT24_DEBUG_MODE')) { $logger = new FileLogger(); $logger->setFilename(_PS_ROOT_DIR_ . '/log/' . $this->module->name . '_' . date('Ymd_His') . '_response.log'); $logger->logError($_POST); } $payment = array(); parse_str(Tools::getValue('payment'), $payment); $hash = sha1(md5(Tools::getValue('payment') . $this->module->merchant_password)); if ($payment && $hash === Tools::getValue('signature')) { if ($payment['state'] == 'ok') { $state = Configuration::get('PRIVAT24_WAITINGPAYMENT_OS'); $cart_id = (int) $payment['order']; $order = new Order(Order::getOrderByCartId($cart_id)); if (!Validate::isLoadedObject($order)) { PrestaShopLogger::addLog('Privat24: cannot get order by cart id ' . $cart_id, 3); die; } if ($order->getCurrentState() != $state) { PrestaShopLogger::addLog(sprintf('Privat24: order id %s current state %s !== expected state %s', $order->id, $order->getCurrentState(), $state), 3); die; } // Check paid currency and paid amount. $id_currency = Currency::getIdByIsoCode($payment['ccy']); if (!$id_currency) { PrestaShopLogger::addLog(sprintf('Privat24: order id %s cannot get currency id by iso code: %s', $order->id, $payment['ccy']), 3); die; } if ($order->id_currency != $id_currency) { PrestaShopLogger::addLog(sprintf('Privat 24: order id %s, order currency id %s does not match with %s', $order->id, $order->id_currency, $id_currency), 3); die; } if ((double) $order->total_paid != (double) $payment['amt']) { PrestaShopLogger::addLog(sprintf('Privat 24: order id %s order total paid %s does not match %s', $order->id, $order->total_paid, $payment['amt']), 3); die; } $order_history = new OrderHistory(); $order_history->id_order = $order->id; $order_history->changeIdOrderState(_PS_OS_PAYMENT_, $order->id); $order_history->addWithemail(); $this->setPaymentTransaction($order, $payment); $this->module->paymentNotify($order, $payment); PrestaShopLogger::addLog(sprintf('Privat24 payment accepted: order id: %s, amount: %s, ref: %s', $order->id, $payment['amt'], $payment['ref']), 1); } else { PrestaShopLogger::addLog(sprintf('Privat24 payment failed: state: %s, order: %s, ref: %s', $payment['state'], $payment['order'], $payment['ref']), 3, null, null, null, true); } } else { PrestaShopLogger::addLog('Privat24: Payment callback bad signature.', 3, null, null, null, true); } die; }
function updateOrder($orderId, $response) { $order_state_id = (int) Configuration::get('PS_OS_BCASH_CANCELLED'); if ($response->transactionStatusId == 6) { $order_state_id = (int) Configuration::get('PS_OS_BCASH_REFUNDED'); } $history = new OrderHistory(); $history->id_order = $orderId; $history->id_order_state = $order_state_id; $history->changeIdOrderState($order_state_id, $orderId); $history->add(true); }
public function initContent() { global $smarty, $cart; $this->display_column_left = false; $this->display_column_right = false; parent::initContent(); if (!empty($_POST)) { $b_is_SSL = function_exists('curl_init') && function_exists('curl_setopt') && function_exists('curl_exec') && function_exists('curl_close'); $p24_session_id = $_POST["p24_session_id"]; $p24_order_id = $_POST["p24_order_id"]; $p24_id_sprzedawcy = Configuration::get('P24_ID_SPRZEDAWCY'); //TWÓJ ID_SPRZEDAWCY; $sa_sid = explode('|', $_POST["p24_session_id"]); $sa_sid = preg_replace('/[^a-z0-9]/i', '', $sa_sid[1]); $o_order = Db::getInstance()->getRow('SELECT `i_id_order`,`i_amount` FROM `' . _DB_PREFIX_ . 'przelewy24_amount` WHERE `s_sid`="' . $sa_sid . '"'); $p24_kwota = (int) $o_order['i_amount']; // WYNIK POBRANY Z TWOJEJ BAZY (w groszach) $i_id_order = $o_order['i_id_order']; $WYNIK = false; $url = 'secure.przelewy24.pl'; if (Configuration::get('P24_TEST_MODE') == 1) { $url = 'sandbox.przelewy24.pl'; } if ($b_is_SSL) { $WYNIK = p24_weryfikujSSL($p24_id_sprzedawcy, $p24_session_id, $p24_order_id, $p24_kwota, $url); } else { $WYNIK = p24_weryfikujNoSSL($p24_id_sprzedawcy, $p24_session_id, $p24_order_id, $p24_kwota, $url); } $o_przelewy24 = new Przelewy24(); $opis = "przelewy24.pl"; $cart = new Cart($i_id_order); $secure_key = $cart->secure_key; if ($WYNIK[0] == 'TRUE') { $order_id = Order::getOrderByCartId(intval($i_id_order)); $order = new Order($order_id); $history = new OrderHistory(); $history->id_order = intval($order_id); $order_state = Configuration::get('P24_ORDER_STATE_2'); $history->changeIdOrderState($order_state, intval($order_id)); $history->addWithemail(true); $payments = $order->getOrderPaymentCollection(); if (count($payments) > 0) { $payments[0]->transaction_id = $p24_order_id; $payments[0]->update(); } } $smarty->assign('p24_status', 'success'); } $this->setTemplate('paymentSuccessful.tpl'); }
private function updateOrderStatus($orderId, $statusName) { $query = ' SELECT osl.`id_order_state`, osl.`name` FROM `' . _DB_PREFIX_ . 'order_state_lang` osl JOIN `' . _DB_PREFIX_ . 'order_state` os ON osl.`id_order_state` = os.`id_order_state` AND module_name = \'pagseguro\' WHERE osl.`name` LIKE "' . $statusName . '" GROUP BY osl.`name` LIMIT 0, 1 '; if ($result = Db::getInstance()->executeS($query)) { $status = $result[0]['id_order_state']; $order = new Order($orderId); $history = new OrderHistory(); $history->id_order = (int) $order->id; $history->changeIdOrderState($status, $order->id); return (bool) $history->addWithemail(); } return false; }
/** * Makes requesting a refund */ public function display() { $sa = new DotpaySellerApi($this->config->getDotpaySellerApiUrl()); $result = $sa->makeReturnMoney($this->config->getDotpayApiUsername(), $this->config->getDotpayApiPassword(), Tools::getValue('payment'), Tools::getValue('amount'), Tools::getValue('order_id'), Tools::getValue('description')); if ($result['http_code'] == 200) { $status = 'success'; $state = $this->config->getDotpayWaitingRefundStatusId(); $history = new OrderHistory(); $history->id_order = Tools::getValue('order_id'); $history->changeIdOrderState($state, $history->id_order); $history->addWithemail(true); } else { $status = 'error'; $this->context->cookie->dotpay_error = $result['detail']; } Tools::redirectAdmin($this->getRedirectUrl($status)); }
/** * @see FrontController::initContent() */ public function initContent() { // if customer press "back" from VTweb, they'll be redirected to re-order link in order to put back their order into shopping cart (normally, their shopping cart is emptied before redirected to VTWeb, so re-order is needed to make sure they have their order back in shopping cart). $this->display_column_left = false; $this->display_column_right = false; parent::initContent(); global $smarty; if (null !== Tools::getValue('order_id') && '' !== Tools::getValue('order_id')) { $order_id = Tools::getValue('order_id'); } // set order status in backend to be failure $history = new OrderHistory(); $history->id_order = $order_id; $history->changeIdOrderState(Configuration::get('VI_PAYMENT_FAILURE_STATUS_MAP'), $order_id); $history->add(true); // $cart = $this->context->cart; $status = 'back'; $this->context->smarty->assign(array('status' => $status, 'order_id' => $order_id, 'this_path' => $this->module->getPathUri(), 'this_path_ssl' => Tools::getShopDomainSsl(true, true) . __PS_BASE_URI__ . 'modules/' . $this->module->name . '/')); $this->setTemplate('notification.tpl'); }
/** * @see FrontController::postProcess() */ public function postProcess() { try { if ($_POST['order_status'] == OplataCls::ORDER_DECLINED) { exit('Order declined'); } $oplata = new Oplata(); $settings = array('merchant_id' => $oplata->getOption('merchant'), 'secret_key' => $oplata->getOption('secret_key')); $isPaymentValid = OplataCls::isPaymentValid($settings, $_POST); if ($isPaymentValid !== true) { exit($isPaymentValid); } list($orderId, ) = explode(OplataCls::ORDER_SEPARATOR, $_POST['order_id']); $history = new OrderHistory(); $history->id_order = $orderId; $history->changeIdOrderState((int) Configuration::get('PS_OS_PAYMENT'), $orderId); $history->addWithemail(true, array('order_name' => $orderId)); exit('OK'); } catch (Exception $e) { exit(get_class($e) . ': ' . $e->getMessage()); } }
public function postProcess() { list($orderId, ) = explode(FondyCls::ORDER_SEPARATOR, $_POST['order_id']); $this->_order = new Order(intval($orderId)); $this->_customer = new Customer($this->_order->id_customer); if ($_POST['order_status'] == FondyCls::ORDER_DECLINED) { $this->showError(Tools::displayError('Order declined')); } $settings = array('merchant_id' => $this->getOption('merchant'), 'secret_key' => $this->getOption('secret_key')); $isPaymentValid = FondyCls::isPaymentValid($settings, $_POST); if ($isPaymentValid !== true) { $this->showError(Tools::displayError($isPaymentValid)); } if (!Validate::isLoadedObject($this->_customer)) { Tools::redirectLink(__PS_BASE_URI__ . 'order.php?step=1'); } $history = new OrderHistory(); $history->id_order = $orderId; $id_order_state = _PS_OS_PAYMENT_; $history->changeIdOrderState(intval($id_order_state), intval($orderId)); $history->addWithemail(true, ""); // redirect to success Tools::redirectLink(__PS_BASE_URI__ . 'modules/fondy/result-success.php'); }
} } if (_PS_VERSION_ >= '1.5') { $ppec->getContext()->cookie->id_cart = $cart->id; $ppec->validateOrder((int) $cart->id, $payment_type, (double) $cart->getOrderTotal(true, Cart::BOTH), 'PayPal', $message, $transaction, (int) $cart->id_currency, false, $customer->secure_key, $ppec->getContext()->shop); } else { $ppec->validateOrder((int) $cart->id, $payment_type, (double) $cart->getOrderTotal(true, Cart::BOTH), 'PayPal', $message, $transaction, (int) $cart->id_currency, false, $customer->secure_key); } if (!$ppec->currentOrder) { $ppec->logs[] = $this->l('Cannot create order'); } else { $id_order = (int) $ppec->currentOrder; $order = new Order($id_order); $history = new OrderHistory(); $history->id_order = (int) $id_order; $history->changeIdOrderState((int) $payment_type, $id_order); $history->addWithemail(); $history->add(); } unset(Context::getContext()->cookie->{PaypalExpressCheckout::$COOKIE_NAME}); // Update for the Paypal shipping cost if ($order) { $values = array('key' => $customer->secure_key, 'id_module' => (int) $ppec->id, 'id_cart' => (int) $cart->id, 'id_order' => (int) $ppec->currentOrder); $query = http_build_query($values, '', '&'); if (_PS_VERSION_ < '1.5') { Tools::redirectLink(__PS_BASE_URI__ . '/modules/paypal/express_checkout/submit.php?' . $query); } else { $controller = new FrontController(); $controller->init(); Tools::redirect(Context::getContext()->link->getModuleLink('paypal', 'submit', $values)); }
public function update_cart_by_junglee_xml($order_id, $data) { $xml = simplexml_load_string($data); $prefix = _DB_PREFIX_; $tablename = $prefix . 'orders'; $total_amount = 0; $total_principal = 0; $shipping_amount = 0; $total_promo = 0; foreach ($xml->ProcessedOrder->ProcessedOrderItems->ProcessedOrderItem as $item) { $product_id = (string) $item->SKU; $product = new Product((int) $product_id); $SKU = $product->reference; $Title = (string) $item->Title; $Amount = (double) $item->Price->Amount; $other_promo = 0; foreach ($item->ItemCharges->Component as $amount_type) { $item_charge_type = (string) $amount_type->Type; if ($item_charge_type == 'Principal') { $principal = (string) $amount_type->Charge->Amount; } if ($item_charge_type == 'Shipping') { $Shipping = (string) $amount_type->Charge->Amount; } if ($item_charge_type == 'PrincipalPromo') { $principal_promo = (string) $amount_type->Charge->Amount; } if ($item_charge_type == 'ShippingPromo') { $shipping_promo = (string) $amount_type->Charge->Amount; } if ($item_charge_type == 'OtherPromo') { $other_promo = (string) $amount_type->Charge->Amount; } } $CurrencyCode = (string) $item->Price->CurrencyCode; $Quantity = (int) $item->Quantity; $total_principal += $principal; $total_amount += $principal - $principal_promo + ($Shipping - $shipping_promo); $shipping_amount += $Shipping; $total_promo += $principal_promo + $shipping_promo + $other_promo; } $ShippingServiceLevel = (string) $xml->ProcessedOrder->ShippingServiceLevel; $sql = 'UPDATE `' . $prefix . 'pwa_orders` set `shipping_service` = "' . $ShippingServiceLevel . '" , `order_type` = "junglee" where `prestashop_order_id` = "' . $order_id . '" '; Db::getInstance()->Execute($sql); $email = (string) $xml->ProcessedOrder->BuyerInfo->BuyerEmailAddress; $sql = 'SELECT * from `' . $prefix . 'customer` where email = "' . $email . '" '; $results = Db::getInstance()->ExecuteS($sql); if (empty($results)) { $name = (string) $xml->ProcessedOrder->BuyerInfo->BuyerName; $name_arr = explode(' ', $name); if (count($name_arr) > 1) { $firstname = ''; for ($i = 0; $i <= count($name_arr) - 2; $i++) { $firstname = $firstname . ' ' . $name_arr[$i]; } $lastname = $name_arr[count($name_arr) - 1]; } else { $firstname = $name; $lastname = '.'; } $password = Tools::passwdGen(); $customer = new Customer(); $customer->firstname = trim($firstname); $customer->lastname = $lastname; $customer->email = (string) $xml->ProcessedOrder->BuyerInfo->BuyerEmailAddress; $customer->passwd = md5($password); $customer->active = 1; if (Configuration::get('PS_GUEST_CHECKOUT_ENABLED')) { $customer->is_guest = 1; } else { $customer->is_guest = 0; } $customer->add(); $customer_id = $customer->id; if (Configuration::get('PS_CUSTOMER_CREATION_EMAIL') && !Configuration::get('PS_GUEST_CHECKOUT_ENABLED')) { Mail::Send($this->context->language->id, 'account', Mail::l('Welcome!'), array('{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{passwd}' => $password), $customer->email, $customer->firstname . ' ' . $customer->lastname); } } else { $customer_id = $results[0]['id_customer']; } $id_country = Country::getByIso((string) $xml->ProcessedOrder->ShippingAddress->CountryCode); if ($id_country == 0 || $id_country == '') { $id_country = 110; } $name = (string) $xml->ProcessedOrder->ShippingAddress->Name; $name_arr = explode(' ', $name); if (count($name_arr) > 1) { $firstname = ''; for ($i = 0; $i <= count($name_arr) - 2; $i++) { $firstname = $firstname . ' ' . $name_arr[$i]; } $lastname = $name_arr[count($name_arr) - 1]; } else { $firstname = $name; $lastname = '.'; } $address = new Address(); $address->id_country = $id_country; $address->id_state = 0; $address->id_customer = $customer_id; $address->alias = 'My Address'; $address->firstname = trim($firstname); $address->lastname = $lastname; $address->address1 = (string) $xml->ProcessedOrder->ShippingAddress->AddressFieldOne; $address->address2 = (string) $xml->ProcessedOrder->ShippingAddress->AddressFieldTwo; $address->postcode = (string) $xml->ProcessedOrder->ShippingAddress->PostalCode; $address->city = (string) $xml->ProcessedOrder->ShippingAddress->City . ' ' . (string) $xml->ProcessedOrder->ShippingAddress->State; $address->active = 1; $address->add(); $address_id = $address->id; //$id_order_state = Configuration::get('PS_OS_PREPARATION'); $id_order_state = 99; $reference = Order::generateReference(); $order = new Order(); $order->id = $order_id; $order->id_customer = (int) $customer_id; $order->id_address_invoice = (int) $address_id; $carrier = null; $sql = 'SELECT id_carrier from `' . $prefix . 'carrier` where `active` = 1 and `deleted` = 0 limit 0,1'; $result = Db::getInstance()->ExecuteS($sql); $id_carrier = $result[0]['id_carrier']; $sql = 'SELECT id_currency from `' . $prefix . 'currency` where `active` = 1 and `deleted` = 0 and `iso_code` = "INR" limit 0,1'; $result = Db::getInstance()->ExecuteS($sql); $currency_id = $result[0]['id_currency']; $sql = 'UPDATE `' . $tablename . '` set `id_customer` = ' . (int) $customer_id . ', `id_carrier` = ' . $id_carrier . ', `id_address_invoice` = ' . (int) $address_id . ', `id_address_delivery` = ' . (int) $address_id . ', `id_currency` = ' . $currency_id . ', `reference` = "' . $reference . '", `secure_key` = "' . md5(uniqid()) . '", `total_paid` = ' . $total_amount . ', `total_paid_tax_incl` = ' . $total_amount . ', `total_paid_tax_excl` = ' . $total_amount . ', `total_paid_real` = 0, `total_shipping` = ' . $shipping_amount . ', `total_shipping_tax_incl` = ' . $shipping_amount . ', `total_shipping_tax_excl` = ' . $shipping_amount . ', `total_discounts` = ' . (double) $total_promo . ', `total_discounts_tax_incl` = ' . (double) $total_promo . ', `total_discounts_tax_excl` = ' . (double) $total_promo . ', `total_products` = ' . $total_principal . ', `total_products_wt` = ' . $total_principal . ', `invoice_date` = "0000-00-00 00:00:00", `delivery_date` = "0000-00-00 00:00:00" where `id_order` = ' . $order_id . ' '; //`round_mode` = '.Configuration::get('PS_PRICE_ROUND_MODE').', /*`total_wrapping_tax_incl` = '.$WrappingAmount.', `total_wrapping_tax_excl` = '.$WrappingAmount.', `total_wrapping` = '.$WrappingAmount.',*/ Db::getInstance()->Execute($sql); $acknowledge_arr = array(); $i = 0; foreach ($xml->ProcessedOrder->ProcessedOrderItems->ProcessedOrderItem as $item) { $product_id = (string) $item->SKU; $product = new Product((int) $product_id); $SKU = $product->reference; $AmazonOrderItemCode = (string) $item->AmazonOrderItemCode; $Title = (string) $item->Title; $Amount = (double) $item->Price->Amount; $acknowledge_arr['items'][$i]['AmazonOrderItemCode'] = $AmazonOrderItemCode; $acknowledge_arr['items'][$i]['product_id'] = $product_id; $CurrencyCode = (string) $item->Price->CurrencyCode; $Quantity = (int) $item->Quantity; $other_promo = 0; foreach ($item->ItemCharges->Component as $amount_type) { $item_charge_type = (string) $amount_type->Type; if ($item_charge_type == 'Principal') { $principal = (string) $amount_type->Charge->Amount; } if ($item_charge_type == 'Shipping') { $Shipping = (string) $amount_type->Charge->Amount; } if ($item_charge_type == 'PrincipalPromo') { $principal_promo = (string) $amount_type->Charge->Amount; } if ($item_charge_type == 'ShippingPromo') { $shipping_promo = (string) $amount_type->Charge->Amount; } if ($item_charge_type == 'OtherPromo') { $other_promo = (string) $amount_type->Charge->Amount; } } $sql = 'INSERT into `' . $prefix . 'order_detail` set `id_order` = ' . $order_id . ', `product_id` = ' . $product_id . ', `product_name` = "' . $Title . '", `product_quantity` = ' . $Quantity . ', `product_quantity_in_stock` = ' . $Quantity . ', `product_price` = ' . $Amount . ', `product_reference` = "' . $SKU . '", `total_price_tax_incl` = ' . $Amount * $Quantity . ', `total_price_tax_excl` = ' . $Amount * $Quantity . ', `unit_price_tax_incl` = ' . $Amount . ', `unit_price_tax_excl` = ' . $Amount . ', `original_product_price` = ' . $Amount . ' '; Db::getInstance()->Execute($sql); $sql = 'UPDATE `' . $prefix . 'stock_available` set `quantity` = `quantity` - ' . $Quantity . ' where `id_product` = ' . $product_id . ' and `id_product_attribute` = 0 '; Db::getInstance()->Execute($sql); $date = date('Y-m-d'); $sql = 'UPDATE `' . $prefix . 'product_sale` set `quantity` = `quantity` + ' . $Quantity . ', `sale_nbr` = `sale_nbr` + ' . $Quantity . ', `date_upd` = ' . $date . ' where `id_product` = ' . $product_id . ' '; Db::getInstance()->Execute($sql); $i++; } // Adding an entry in order_carrier table if (!is_null($carrier)) { $order_carrier = new OrderCarrier(); $order_carrier->id_order = (int) $order->id; $order_carrier->id_carrier = (int) $id_carrier; $order_carrier->weight = '0'; $order_carrier->shipping_cost_tax_excl = (double) $shipping_amount; $order_carrier->shipping_cost_tax_incl = (double) $shipping_amount; $order_carrier->add(); } else { $order_carrier = new OrderCarrier(); $order_carrier->id_order = (int) $order->id; $order_carrier->id_carrier = (int) $id_carrier; $order_carrier->weight = '0'; $order_carrier->shipping_cost_tax_excl = (double) $shipping_amount; $order_carrier->shipping_cost_tax_incl = (double) $shipping_amount; $order_carrier->add(); } // Set the order status $history = new OrderHistory(); $history->id_order = (int) $order->id; $history->changeIdOrderState((int) $id_order_state, $order->id, true); $history->addWithemail(true, array()); $acknowledge_arr['MerchantOrderID'] = (int) $order->id; }
public function postProcess() { // If id_order is sent, we instanciate a new Order object if (Tools::isSubmit('id_order') && Tools::getValue('id_order') > 0) { $order = new Order(Tools::getValue('id_order')); if (!Validate::isLoadedObject($order)) { $this->errors[] = Tools::displayError('The order cannot be found within your database.'); } ShopUrl::cacheMainDomainForShop((int) $order->id_shop); } /* Update shipping number */ if (Tools::isSubmit('submitShippingNumber') && isset($order)) { if ($this->tabAccess['edit'] === '1') { $order_carrier = new OrderCarrier(Tools::getValue('id_order_carrier')); if (!Validate::isLoadedObject($order_carrier)) { $this->errors[] = Tools::displayError('The order carrier ID is invalid.'); } elseif (!Validate::isTrackingNumber(Tools::getValue('tracking_number'))) { $this->errors[] = Tools::displayError('The tracking number is incorrect.'); } else { // update shipping number // Keep these two following lines for backward compatibility, remove on 1.6 version $order->shipping_number = Tools::getValue('tracking_number'); $order->update(); // Update order_carrier $order_carrier->tracking_number = pSQL(Tools::getValue('tracking_number')); if ($order_carrier->update()) { // Send mail to customer $customer = new Customer((int) $order->id_customer); $carrier = new Carrier((int) $order->id_carrier, $order->id_lang); if (!Validate::isLoadedObject($customer)) { throw new PrestaShopException('Can\'t load Customer object'); } if (!Validate::isLoadedObject($carrier)) { throw new PrestaShopException('Can\'t load Carrier object'); } $templateVars = array('{followup}' => str_replace('@', $order->shipping_number, $carrier->url), '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{id_order}' => $order->id, '{shipping_number}' => $order->shipping_number, '{order_name}' => $order->getUniqReference()); if (@Mail::Send((int) $order->id_lang, 'in_transit', Mail::l('Package in transit', (int) $order->id_lang), $templateVars, $customer->email, $customer->firstname . ' ' . $customer->lastname, null, null, null, null, _PS_MAIL_DIR_, true, (int) $order->id_shop)) { Hook::exec('actionAdminOrdersTrackingNumberUpdate', array('order' => $order, 'customer' => $customer, 'carrier' => $carrier), null, false, true, false, $order->id_shop); Tools::redirectAdmin(self::$currentIndex . '&id_order=' . $order->id . '&vieworder&conf=4&token=' . $this->token); } else { $this->errors[] = Tools::displayError('An error occurred while sending an email to the customer.'); } } else { $this->errors[] = Tools::displayError('The order carrier cannot be updated.'); } } } else { $this->errors[] = Tools::displayError('You do not have permission to edit this.'); } } elseif (Tools::isSubmit('submitState') && isset($order)) { if ($this->tabAccess['edit'] === '1') { $order_state = new OrderState(Tools::getValue('id_order_state')); if (!Validate::isLoadedObject($order_state)) { $this->errors[] = Tools::displayError('The new order status is invalid.'); } else { $current_order_state = $order->getCurrentOrderState(); if ($current_order_state->id != $order_state->id) { // Create new OrderHistory $history = new OrderHistory(); $history->id_order = $order->id; $history->id_employee = (int) $this->context->employee->id; $use_existings_payment = false; if (!$order->hasInvoice()) { $use_existings_payment = true; } $history->changeIdOrderState((int) $order_state->id, $order, $use_existings_payment); $carrier = new Carrier($order->id_carrier, $order->id_lang); $templateVars = array(); if ($history->id_order_state == Configuration::get('PS_OS_SHIPPING') && $order->shipping_number) { $templateVars = array('{followup}' => str_replace('@', $order->shipping_number, $carrier->url)); } // Save all changes if ($history->addWithemail(true, $templateVars)) { // synchronizes quantities if needed.. if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT')) { foreach ($order->getProducts() as $product) { if (StockAvailable::dependsOnStock($product['product_id'])) { StockAvailable::synchronize($product['product_id'], (int) $product['id_shop']); } } } Tools::redirectAdmin(self::$currentIndex . '&id_order=' . (int) $order->id . '&vieworder&token=' . $this->token); } $this->errors[] = Tools::displayError('An error occurred while changing order status, or we were unable to send an email to the customer.'); } else { $this->errors[] = Tools::displayError('The order has already been assigned this status.'); } } } else { $this->errors[] = Tools::displayError('You do not have permission to edit this.'); } } elseif (Tools::isSubmit('submitMessage') && isset($order)) { if ($this->tabAccess['edit'] === '1') { $customer = new Customer(Tools::getValue('id_customer')); if (!Validate::isLoadedObject($customer)) { $this->errors[] = Tools::displayError('The customer is invalid.'); } elseif (!Tools::getValue('message')) { $this->errors[] = Tools::displayError('The message cannot be blank.'); } else { /* Get message rules and and check fields validity */ $rules = call_user_func(array('Message', 'getValidationRules'), 'Message'); foreach ($rules['required'] as $field) { if (($value = Tools::getValue($field)) == false && (string) $value != '0') { if (!Tools::getValue('id_' . $this->table) || $field != 'passwd') { $this->errors[] = sprintf(Tools::displayError('field %s is required.'), $field); } } } foreach ($rules['size'] as $field => $maxLength) { if (Tools::getValue($field) && Tools::strlen(Tools::getValue($field)) > $maxLength) { $this->errors[] = sprintf(Tools::displayError('field %1$s is too long (%2$d chars max).'), $field, $maxLength); } } foreach ($rules['validate'] as $field => $function) { if (Tools::getValue($field)) { if (!Validate::$function(htmlentities(Tools::getValue($field), ENT_COMPAT, 'UTF-8'))) { $this->errors[] = sprintf(Tools::displayError('field %s is invalid.'), $field); } } } if (!count($this->errors)) { //check if a thread already exist $id_customer_thread = CustomerThread::getIdCustomerThreadByEmailAndIdOrder($customer->email, $order->id); if (!$id_customer_thread) { $customer_thread = new CustomerThread(); $customer_thread->id_contact = 0; $customer_thread->id_customer = (int) $order->id_customer; $customer_thread->id_shop = (int) $this->context->shop->id; $customer_thread->id_order = (int) $order->id; $customer_thread->id_lang = (int) $this->context->language->id; $customer_thread->email = $customer->email; $customer_thread->status = 'open'; $customer_thread->token = Tools::passwdGen(12); $customer_thread->add(); } else { $customer_thread = new CustomerThread((int) $id_customer_thread); } $customer_message = new CustomerMessage(); $customer_message->id_customer_thread = $customer_thread->id; $customer_message->id_employee = (int) $this->context->employee->id; $customer_message->message = Tools::getValue('message'); $customer_message->private = Tools::getValue('visibility'); if (!$customer_message->add()) { $this->errors[] = Tools::displayError('An error occurred while saving the message.'); } elseif ($customer_message->private) { Tools::redirectAdmin(self::$currentIndex . '&id_order=' . (int) $order->id . '&vieworder&conf=11&token=' . $this->token); } else { $message = $customer_message->message; if (Configuration::get('PS_MAIL_TYPE', null, null, $order->id_shop) != Mail::TYPE_TEXT) { $message = Tools::nl2br($customer_message->message); } $varsTpl = array('{lastname}' => $customer->lastname, '{firstname}' => $customer->firstname, '{id_order}' => $order->id, '{order_name}' => $order->getUniqReference(), '{message}' => $message); if (@Mail::Send((int) $order->id_lang, 'order_merchant_comment', Mail::l('New message regarding your order', (int) $order->id_lang), $varsTpl, $customer->email, $customer->firstname . ' ' . $customer->lastname, null, null, null, null, _PS_MAIL_DIR_, true, (int) $order->id_shop)) { Tools::redirectAdmin(self::$currentIndex . '&id_order=' . $order->id . '&vieworder&conf=11' . '&token=' . $this->token); } } $this->errors[] = Tools::displayError('An error occurred while sending an email to the customer.'); } } } else { $this->errors[] = Tools::displayError('You do not have permission to delete this.'); } } elseif (Tools::isSubmit('partialRefund') && isset($order)) { if ($this->tabAccess['edit'] == '1') { if (is_array($_POST['partialRefundProduct'])) { $amount = 0; $order_detail_list = array(); foreach ($_POST['partialRefundProduct'] as $id_order_detail => $amount_detail) { $order_detail_list[$id_order_detail]['quantity'] = (int) $_POST['partialRefundProductQuantity'][$id_order_detail]; if (empty($amount_detail)) { $order_detail = new OrderDetail((int) $id_order_detail); $order_detail_list[$id_order_detail]['amount'] = $order_detail->unit_price_tax_incl * $order_detail_list[$id_order_detail]['quantity']; } else { $order_detail_list[$id_order_detail]['amount'] = (double) str_replace(',', '.', $amount_detail); } $amount += $order_detail_list[$id_order_detail]['amount']; $order_detail = new OrderDetail((int) $id_order_detail); if (!$order->hasBeenDelivered() || $order->hasBeenDelivered() && Tools::isSubmit('reinjectQuantities') && $order_detail_list[$id_order_detail]['quantity'] > 0) { $this->reinjectQuantity($order_detail, $order_detail_list[$id_order_detail]['quantity']); } } $shipping_cost_amount = (double) str_replace(',', '.', Tools::getValue('partialRefundShippingCost')); if ($shipping_cost_amount > 0) { $amount += $shipping_cost_amount; } $order_carrier = new OrderCarrier((int) $order->getIdOrderCarrier()); if (Validate::isLoadedObject($order_carrier)) { $order_carrier->weight = (double) $order->getTotalWeight(); if ($order_carrier->update()) { $order->weight = sprintf("%.3f " . Configuration::get('PS_WEIGHT_UNIT'), $order_carrier->weight); } } if ($amount > 0) { if (!OrderSlip::createPartialOrderSlip($order, $amount, $shipping_cost_amount, $order_detail_list)) { $this->errors[] = Tools::displayError('You cannot generate a partial credit slip.'); } // Generate voucher if (Tools::isSubmit('generateDiscountRefund') && !count($this->errors)) { $cart_rule = new CartRule(); $cart_rule->description = sprintf($this->l('Credit slip for order #%d'), $order->id); $languages = Language::getLanguages(false); foreach ($languages as $language) { // Define a temporary name $cart_rule->name[$language['id_lang']] = sprintf('V0C%1$dO%2$d', $order->id_customer, $order->id); } // Define a temporary code $cart_rule->code = sprintf('V0C%1$dO%2$d', $order->id_customer, $order->id); $cart_rule->quantity = 1; $cart_rule->quantity_per_user = 1; // Specific to the customer $cart_rule->id_customer = $order->id_customer; $now = time(); $cart_rule->date_from = date('Y-m-d H:i:s', $now); $cart_rule->date_to = date('Y-m-d H:i:s', $now + 3600 * 24 * 365.25); /* 1 year */ $cart_rule->partial_use = 1; $cart_rule->active = 1; $cart_rule->reduction_amount = $amount; $cart_rule->reduction_tax = true; $cart_rule->minimum_amount_currency = $order->id_currency; $cart_rule->reduction_currency = $order->id_currency; if (!$cart_rule->add()) { $this->errors[] = Tools::displayError('You cannot generate a voucher.'); } else { // Update the voucher code and name foreach ($languages as $language) { $cart_rule->name[$language['id_lang']] = sprintf('V%1$dC%2$dO%3$d', $cart_rule->id, $order->id_customer, $order->id); } $cart_rule->code = sprintf('V%1$dC%2$dO%3$d', $cart_rule->id, $order->id_customer, $order->id); if (!$cart_rule->update()) { $this->errors[] = Tools::displayError('You cannot generate a voucher.'); } else { $currency = $this->context->currency; $customer = new Customer((int) $order->id_customer); $params['{lastname}'] = $customer->lastname; $params['{firstname}'] = $customer->firstname; $params['{id_order}'] = $order->id; $params['{order_name}'] = $order->getUniqReference(); $params['{voucher_amount}'] = Tools::displayPrice($cart_rule->reduction_amount, $currency, false); $params['{voucher_num}'] = $cart_rule->code; $customer = new Customer((int) $order->id_customer); @Mail::Send((int) $order->id_lang, 'voucher', sprintf(Mail::l('New voucher regarding your order %s', (int) $order->id_lang), $order->reference), $params, $customer->email, $customer->firstname . ' ' . $customer->lastname, null, null, null, null, _PS_MAIL_DIR_, true, (int) $order->id_shop); } } } } else { $this->errors[] = Tools::displayError('You have to enter an amount if you want to create a partial credit slip.'); } // Redirect if no errors if (!count($this->errors)) { Tools::redirectAdmin(self::$currentIndex . '&id_order=' . $order->id . '&vieworder&conf=30&token=' . $this->token); } } else { $this->errors[] = Tools::displayError('The partial refund data is incorrect.'); } } else { $this->errors[] = Tools::displayError('You do not have permission to delete this.'); } } elseif (Tools::isSubmit('cancelProduct') && isset($order)) { if ($this->tabAccess['delete'] === '1') { if (!Tools::isSubmit('id_order_detail') && !Tools::isSubmit('id_customization')) { $this->errors[] = Tools::displayError('You must select a product.'); } elseif (!Tools::isSubmit('cancelQuantity') && !Tools::isSubmit('cancelCustomizationQuantity')) { $this->errors[] = Tools::displayError('You must enter a quantity.'); } else { $productList = Tools::getValue('id_order_detail'); if ($productList) { $productList = array_map('intval', $productList); } $customizationList = Tools::getValue('id_customization'); if ($customizationList) { $customizationList = array_map('intval', $customizationList); } $qtyList = Tools::getValue('cancelQuantity'); if ($qtyList) { $qtyList = array_map('intval', $qtyList); } $customizationQtyList = Tools::getValue('cancelCustomizationQuantity'); if ($customizationQtyList) { $customizationQtyList = array_map('intval', $customizationQtyList); } $full_product_list = $productList; $full_quantity_list = $qtyList; if ($customizationList) { foreach ($customizationList as $key => $id_order_detail) { $full_product_list[(int) $id_order_detail] = $id_order_detail; if (isset($customizationQtyList[$key])) { $full_quantity_list[(int) $id_order_detail] += $customizationQtyList[$key]; } } } if ($productList || $customizationList) { if ($productList) { $id_cart = Cart::getCartIdByOrderId($order->id); $customization_quantities = Customization::countQuantityByCart($id_cart); foreach ($productList as $key => $id_order_detail) { $qtyCancelProduct = abs($qtyList[$key]); if (!$qtyCancelProduct) { $this->errors[] = Tools::displayError('No quantity has been selected for this product.'); } $order_detail = new OrderDetail($id_order_detail); $customization_quantity = 0; if (array_key_exists($order_detail->product_id, $customization_quantities) && array_key_exists($order_detail->product_attribute_id, $customization_quantities[$order_detail->product_id])) { $customization_quantity = (int) $customization_quantities[$order_detail->product_id][$order_detail->product_attribute_id]; } if ($order_detail->product_quantity - $customization_quantity - $order_detail->product_quantity_refunded - $order_detail->product_quantity_return < $qtyCancelProduct) { $this->errors[] = Tools::displayError('An invalid quantity was selected for this product.'); } } } if ($customizationList) { $customization_quantities = Customization::retrieveQuantitiesFromIds(array_keys($customizationList)); foreach ($customizationList as $id_customization => $id_order_detail) { $qtyCancelProduct = abs($customizationQtyList[$id_customization]); $customization_quantity = $customization_quantities[$id_customization]; if (!$qtyCancelProduct) { $this->errors[] = Tools::displayError('No quantity has been selected for this product.'); } if ($qtyCancelProduct > $customization_quantity['quantity'] - ($customization_quantity['quantity_refunded'] + $customization_quantity['quantity_returned'])) { $this->errors[] = Tools::displayError('An invalid quantity was selected for this product.'); } } } if (!count($this->errors) && $productList) { foreach ($productList as $key => $id_order_detail) { $qty_cancel_product = abs($qtyList[$key]); $order_detail = new OrderDetail((int) $id_order_detail); if (!$order->hasBeenDelivered() || $order->hasBeenDelivered() && Tools::isSubmit('reinjectQuantities') && $qty_cancel_product > 0) { $this->reinjectQuantity($order_detail, $qty_cancel_product); } // Delete product $order_detail = new OrderDetail((int) $id_order_detail); if (!$order->deleteProduct($order, $order_detail, $qty_cancel_product)) { $this->errors[] = Tools::displayError('An error occurred while attempting to delete the product.') . ' <span class="bold">' . $order_detail->product_name . '</span>'; } // Update weight SUM $order_carrier = new OrderCarrier((int) $order->getIdOrderCarrier()); if (Validate::isLoadedObject($order_carrier)) { $order_carrier->weight = (double) $order->getTotalWeight(); if ($order_carrier->update()) { $order->weight = sprintf("%.3f " . Configuration::get('PS_WEIGHT_UNIT'), $order_carrier->weight); } } Hook::exec('actionProductCancel', array('order' => $order, 'id_order_detail' => (int) $id_order_detail), null, false, true, false, $order->id_shop); } } if (!count($this->errors) && $customizationList) { foreach ($customizationList as $id_customization => $id_order_detail) { $order_detail = new OrderDetail((int) $id_order_detail); $qtyCancelProduct = abs($customizationQtyList[$id_customization]); if (!$order->deleteCustomization($id_customization, $qtyCancelProduct, $order_detail)) { $this->errors[] = Tools::displayError('An error occurred while attempting to delete product customization.') . ' ' . $id_customization; } } } // E-mail params if ((Tools::isSubmit('generateCreditSlip') || Tools::isSubmit('generateDiscount')) && !count($this->errors)) { $customer = new Customer((int) $order->id_customer); $params['{lastname}'] = $customer->lastname; $params['{firstname}'] = $customer->firstname; $params['{id_order}'] = $order->id; $params['{order_name}'] = $order->getUniqReference(); } // Generate credit slip if (Tools::isSubmit('generateCreditSlip') && !count($this->errors)) { if (!OrderSlip::createOrderSlip($order, $full_product_list, $full_quantity_list, Tools::isSubmit('shippingBack'))) { $this->errors[] = Tools::displayError('A credit slip cannot be generated. '); } else { Hook::exec('actionOrderSlipAdd', array('order' => $order, 'productList' => $full_product_list, 'qtyList' => $full_quantity_list), null, false, true, false, $order->id_shop); @Mail::Send((int) $order->id_lang, 'credit_slip', Mail::l('New credit slip regarding your order', (int) $order->id_lang), $params, $customer->email, $customer->firstname . ' ' . $customer->lastname, null, null, null, null, _PS_MAIL_DIR_, true, (int) $order->id_shop); } } // Generate voucher if (Tools::isSubmit('generateDiscount') && !count($this->errors)) { $cartrule = new CartRule(); $languages = Language::getLanguages($order); $cartrule->description = sprintf($this->l('Credit card slip for order #%d'), $order->id); foreach ($languages as $language) { // Define a temporary name $cartrule->name[$language['id_lang']] = 'V0C' . (int) $order->id_customer . 'O' . (int) $order->id; } // Define a temporary code $cartrule->code = 'V0C' . (int) $order->id_customer . 'O' . (int) $order->id; $cartrule->quantity = 1; $cartrule->quantity_per_user = 1; // Specific to the customer $cartrule->id_customer = $order->id_customer; $now = time(); $cartrule->date_from = date('Y-m-d H:i:s', $now); $cartrule->date_to = date('Y-m-d H:i:s', $now + 3600 * 24 * 365.25); /* 1 year */ $cartrule->active = 1; $products = $order->getProducts(false, $full_product_list, $full_quantity_list); $total = 0; foreach ($products as $product) { $total += $product['unit_price_tax_incl'] * $product['product_quantity']; } if (Tools::isSubmit('shippingBack')) { $total += $order->total_shipping; } $cartrule->reduction_amount = $total; $cartrule->reduction_tax = true; $cartrule->minimum_amount_currency = $order->id_currency; $cartrule->reduction_currency = $order->id_currency; if (!$cartrule->add()) { $this->errors[] = Tools::displayError('You cannot generate a voucher.'); } else { // Update the voucher code and name foreach ($languages as $language) { $cartrule->name[$language['id_lang']] = 'V' . (int) $cartrule->id . 'C' . (int) $order->id_customer . 'O' . $order->id; } $cartrule->code = 'V' . (int) $cartrule->id . 'C' . (int) $order->id_customer . 'O' . $order->id; if (!$cartrule->update()) { $this->errors[] = Tools::displayError('You cannot generate a voucher.'); } else { $currency = $this->context->currency; $params['{voucher_amount}'] = Tools::displayPrice($cartrule->reduction_amount, $currency, false); $params['{voucher_num}'] = $cartrule->code; @Mail::Send((int) $order->id_lang, 'voucher', sprintf(Mail::l('New voucher regarding your order %s', (int) $order->id_lang), $order->reference), $params, $customer->email, $customer->firstname . ' ' . $customer->lastname, null, null, null, null, _PS_MAIL_DIR_, true, (int) $order->id_shop); } } } } else { $this->errors[] = Tools::displayError('No product or quantity has been selected.'); } // Redirect if no errors if (!count($this->errors)) { Tools::redirectAdmin(self::$currentIndex . '&id_order=' . $order->id . '&vieworder&conf=31&token=' . $this->token); } } } else { $this->errors[] = Tools::displayError('You do not have permission to delete this.'); } } elseif (Tools::isSubmit('messageReaded')) { Message::markAsReaded(Tools::getValue('messageReaded'), $this->context->employee->id); } elseif (Tools::isSubmit('submitAddPayment') && isset($order)) { if ($this->tabAccess['edit'] === '1') { $amount = str_replace(',', '.', Tools::getValue('payment_amount')); $currency = new Currency(Tools::getValue('payment_currency')); $order_has_invoice = $order->hasInvoice(); if ($order_has_invoice) { $order_invoice = new OrderInvoice(Tools::getValue('payment_invoice')); } else { $order_invoice = null; } if (!Validate::isLoadedObject($order)) { $this->errors[] = Tools::displayError('The order cannot be found'); } elseif (!Validate::isNegativePrice($amount) || !(double) $amount) { $this->errors[] = Tools::displayError('The amount is invalid.'); } elseif (!Validate::isGenericName(Tools::getValue('payment_method'))) { $this->errors[] = Tools::displayError('The selected payment method is invalid.'); } elseif (!Validate::isString(Tools::getValue('payment_transaction_id'))) { $this->errors[] = Tools::displayError('The transaction ID is invalid.'); } elseif (!Validate::isLoadedObject($currency)) { $this->errors[] = Tools::displayError('The selected currency is invalid.'); } elseif ($order_has_invoice && !Validate::isLoadedObject($order_invoice)) { $this->errors[] = Tools::displayError('The invoice is invalid.'); } elseif (!Validate::isDate(Tools::getValue('payment_date'))) { $this->errors[] = Tools::displayError('The date is invalid'); } else { if (!$order->addOrderPayment($amount, Tools::getValue('payment_method'), Tools::getValue('payment_transaction_id'), $currency, Tools::getValue('payment_date'), $order_invoice)) { $this->errors[] = Tools::displayError('An error occurred during payment.'); } else { Tools::redirectAdmin(self::$currentIndex . '&id_order=' . $order->id . '&vieworder&conf=4&token=' . $this->token); } } } else { $this->errors[] = Tools::displayError('You do not have permission to edit this.'); } } elseif (Tools::isSubmit('submitEditNote')) { $note = Tools::getValue('note'); $order_invoice = new OrderInvoice((int) Tools::getValue('id_order_invoice')); if (Validate::isLoadedObject($order_invoice) && Validate::isCleanHtml($note)) { if ($this->tabAccess['edit'] === '1') { $order_invoice->note = $note; if ($order_invoice->save()) { Tools::redirectAdmin(self::$currentIndex . '&id_order=' . $order_invoice->id_order . '&vieworder&conf=4&token=' . $this->token); } else { $this->errors[] = Tools::displayError('The invoice note was not saved.'); } } else { $this->errors[] = Tools::displayError('You do not have permission to edit this.'); } } else { $this->errors[] = Tools::displayError('The invoice for edit note was unable to load. '); } } elseif (Tools::isSubmit('submitAddOrder') && ($id_cart = Tools::getValue('id_cart')) && ($module_name = Tools::getValue('payment_module_name')) && ($id_order_state = Tools::getValue('id_order_state')) && Validate::isModuleName($module_name)) { if ($this->tabAccess['edit'] === '1') { $payment_module = Module::getInstanceByName($module_name); $cart = new Cart((int) $id_cart); Context::getContext()->currency = new Currency((int) $cart->id_currency); Context::getContext()->customer = new Customer((int) $cart->id_customer); $employee = new Employee((int) Context::getContext()->cookie->id_employee); $payment_module->validateOrder((int) $cart->id, (int) $id_order_state, $cart->getOrderTotal(true, Cart::BOTH), $payment_module->displayName, $this->l('Manual order -- Employee:') . ' ' . substr($employee->firstname, 0, 1) . '. ' . $employee->lastname, array(), null, false, $cart->secure_key); if ($payment_module->currentOrder) { Tools::redirectAdmin(self::$currentIndex . '&id_order=' . $payment_module->currentOrder . '&vieworder' . '&token=' . $this->token); } } else { $this->errors[] = Tools::displayError('You do not have permission to add this.'); } } elseif ((Tools::isSubmit('submitAddressShipping') || Tools::isSubmit('submitAddressInvoice')) && isset($order)) { if ($this->tabAccess['edit'] === '1') { $address = new Address(Tools::getValue('id_address')); if (Validate::isLoadedObject($address)) { // Update the address on order if (Tools::isSubmit('submitAddressShipping')) { $order->id_address_delivery = $address->id; } elseif (Tools::isSubmit('submitAddressInvoice')) { $order->id_address_invoice = $address->id; } $order->update(); Tools::redirectAdmin(self::$currentIndex . '&id_order=' . $order->id . '&vieworder&conf=4&token=' . $this->token); } else { $this->errors[] = Tools::displayError('This address can\'t be loaded'); } } else { $this->errors[] = Tools::displayError('You do not have permission to edit this.'); } } elseif (Tools::isSubmit('submitChangeCurrency') && isset($order)) { if ($this->tabAccess['edit'] === '1') { if (Tools::getValue('new_currency') != $order->id_currency && !$order->valid) { $old_currency = new Currency($order->id_currency); $currency = new Currency(Tools::getValue('new_currency')); if (!Validate::isLoadedObject($currency)) { throw new PrestaShopException('Can\'t load Currency object'); } // Update order detail amount foreach ($order->getOrderDetailList() as $row) { $order_detail = new OrderDetail($row['id_order_detail']); $fields = array('ecotax', 'product_price', 'reduction_amount', 'total_shipping_price_tax_excl', 'total_shipping_price_tax_incl', 'total_price_tax_incl', 'total_price_tax_excl', 'product_quantity_discount', 'purchase_supplier_price', 'reduction_amount', 'reduction_amount_tax_incl', 'reduction_amount_tax_excl', 'unit_price_tax_incl', 'unit_price_tax_excl', 'original_product_price'); foreach ($fields as $field) { $order_detail->{$field} = Tools::convertPriceFull($order_detail->{$field}, $old_currency, $currency); } $order_detail->update(); $order_detail->updateTaxAmount($order); } $id_order_carrier = (int) $order->getIdOrderCarrier(); if ($id_order_carrier) { $order_carrier = $order_carrier = new OrderCarrier((int) $order->getIdOrderCarrier()); $order_carrier->shipping_cost_tax_excl = (double) Tools::convertPriceFull($order_carrier->shipping_cost_tax_excl, $old_currency, $currency); $order_carrier->shipping_cost_tax_incl = (double) Tools::convertPriceFull($order_carrier->shipping_cost_tax_incl, $old_currency, $currency); $order_carrier->update(); } // Update order && order_invoice amount $fields = array('total_discounts', 'total_discounts_tax_incl', 'total_discounts_tax_excl', 'total_discount_tax_excl', 'total_discount_tax_incl', 'total_paid', 'total_paid_tax_incl', 'total_paid_tax_excl', 'total_paid_real', 'total_products', 'total_products_wt', 'total_shipping', 'total_shipping_tax_incl', 'total_shipping_tax_excl', 'total_wrapping', 'total_wrapping_tax_incl', 'total_wrapping_tax_excl'); $invoices = $order->getInvoicesCollection(); if ($invoices) { foreach ($invoices as $invoice) { foreach ($fields as $field) { if (isset($invoice->{$field})) { $invoice->{$field} = Tools::convertPriceFull($invoice->{$field}, $old_currency, $currency); } } $invoice->save(); } } foreach ($fields as $field) { if (isset($order->{$field})) { $order->{$field} = Tools::convertPriceFull($order->{$field}, $old_currency, $currency); } } // Update currency in order $order->id_currency = $currency->id; // Update exchange rate $order->conversion_rate = (double) $currency->conversion_rate; $order->update(); } else { $this->errors[] = Tools::displayError('You cannot change the currency.'); } } else { $this->errors[] = Tools::displayError('You do not have permission to edit this.'); } } elseif (Tools::isSubmit('submitGenerateInvoice') && isset($order)) { if (!Configuration::get('PS_INVOICE', null, null, $order->id_shop)) { $this->errors[] = Tools::displayError('Invoice management has been disabled.'); } elseif ($order->hasInvoice()) { $this->errors[] = Tools::displayError('This order already has an invoice.'); } else { $order->setInvoice(true); Tools::redirectAdmin(self::$currentIndex . '&id_order=' . $order->id . '&vieworder&conf=4&token=' . $this->token); } } elseif (Tools::isSubmit('submitDeleteVoucher') && isset($order)) { if ($this->tabAccess['edit'] === '1') { $order_cart_rule = new OrderCartRule(Tools::getValue('id_order_cart_rule')); if (Validate::isLoadedObject($order_cart_rule) && $order_cart_rule->id_order == $order->id) { if ($order_cart_rule->id_order_invoice) { $order_invoice = new OrderInvoice($order_cart_rule->id_order_invoice); if (!Validate::isLoadedObject($order_invoice)) { throw new PrestaShopException('Can\'t load Order Invoice object'); } // Update amounts of Order Invoice $order_invoice->total_discount_tax_excl -= $order_cart_rule->value_tax_excl; $order_invoice->total_discount_tax_incl -= $order_cart_rule->value; $order_invoice->total_paid_tax_excl += $order_cart_rule->value_tax_excl; $order_invoice->total_paid_tax_incl += $order_cart_rule->value; // Update Order Invoice $order_invoice->update(); } // Update amounts of order $order->total_discounts -= $order_cart_rule->value; $order->total_discounts_tax_incl -= $order_cart_rule->value; $order->total_discounts_tax_excl -= $order_cart_rule->value_tax_excl; $order->total_paid += $order_cart_rule->value; $order->total_paid_tax_incl += $order_cart_rule->value; $order->total_paid_tax_excl += $order_cart_rule->value_tax_excl; // Delete Order Cart Rule and update Order $order_cart_rule->delete(); $order->update(); Tools::redirectAdmin(self::$currentIndex . '&id_order=' . $order->id . '&vieworder&conf=4&token=' . $this->token); } else { $this->errors[] = Tools::displayError('You cannot edit this cart rule.'); } } else { $this->errors[] = Tools::displayError('You do not have permission to edit this.'); } } elseif (Tools::isSubmit('submitNewVoucher') && isset($order)) { if ($this->tabAccess['edit'] === '1') { if (!Tools::getValue('discount_name')) { $this->errors[] = Tools::displayError('You must specify a name in order to create a new discount.'); } else { if ($order->hasInvoice()) { // If the discount is for only one invoice if (!Tools::isSubmit('discount_all_invoices')) { $order_invoice = new OrderInvoice(Tools::getValue('discount_invoice')); if (!Validate::isLoadedObject($order_invoice)) { throw new PrestaShopException('Can\'t load Order Invoice object'); } } } $cart_rules = array(); $discount_value = (double) str_replace(',', '.', Tools::getValue('discount_value')); switch (Tools::getValue('discount_type')) { // Percent type case 1: if ($discount_value < 100) { if (isset($order_invoice)) { $cart_rules[$order_invoice->id]['value_tax_incl'] = Tools::ps_round($order_invoice->total_paid_tax_incl * $discount_value / 100, 2); $cart_rules[$order_invoice->id]['value_tax_excl'] = Tools::ps_round($order_invoice->total_paid_tax_excl * $discount_value / 100, 2); // Update OrderInvoice $this->applyDiscountOnInvoice($order_invoice, $cart_rules[$order_invoice->id]['value_tax_incl'], $cart_rules[$order_invoice->id]['value_tax_excl']); } elseif ($order->hasInvoice()) { $order_invoices_collection = $order->getInvoicesCollection(); foreach ($order_invoices_collection as $order_invoice) { $cart_rules[$order_invoice->id]['value_tax_incl'] = Tools::ps_round($order_invoice->total_paid_tax_incl * $discount_value / 100, 2); $cart_rules[$order_invoice->id]['value_tax_excl'] = Tools::ps_round($order_invoice->total_paid_tax_excl * $discount_value / 100, 2); // Update OrderInvoice $this->applyDiscountOnInvoice($order_invoice, $cart_rules[$order_invoice->id]['value_tax_incl'], $cart_rules[$order_invoice->id]['value_tax_excl']); } } else { $cart_rules[0]['value_tax_incl'] = Tools::ps_round($order->total_paid_tax_incl * $discount_value / 100, 2); $cart_rules[0]['value_tax_excl'] = Tools::ps_round($order->total_paid_tax_excl * $discount_value / 100, 2); } } else { $this->errors[] = Tools::displayError('The discount value is invalid.'); } break; // Amount type // Amount type case 2: if (isset($order_invoice)) { if ($discount_value > $order_invoice->total_paid_tax_incl) { $this->errors[] = Tools::displayError('The discount value is greater than the order invoice total.'); } else { $cart_rules[$order_invoice->id]['value_tax_incl'] = Tools::ps_round($discount_value, 2); $cart_rules[$order_invoice->id]['value_tax_excl'] = Tools::ps_round($discount_value / (1 + $order->getTaxesAverageUsed() / 100), 2); // Update OrderInvoice $this->applyDiscountOnInvoice($order_invoice, $cart_rules[$order_invoice->id]['value_tax_incl'], $cart_rules[$order_invoice->id]['value_tax_excl']); } } elseif ($order->hasInvoice()) { $order_invoices_collection = $order->getInvoicesCollection(); foreach ($order_invoices_collection as $order_invoice) { if ($discount_value > $order_invoice->total_paid_tax_incl) { $this->errors[] = Tools::displayError('The discount value is greater than the order invoice total.') . $order_invoice->getInvoiceNumberFormatted(Context::getContext()->language->id, (int) $order->id_shop) . ')'; } else { $cart_rules[$order_invoice->id]['value_tax_incl'] = Tools::ps_round($discount_value, 2); $cart_rules[$order_invoice->id]['value_tax_excl'] = Tools::ps_round($discount_value / (1 + $order->getTaxesAverageUsed() / 100), 2); // Update OrderInvoice $this->applyDiscountOnInvoice($order_invoice, $cart_rules[$order_invoice->id]['value_tax_incl'], $cart_rules[$order_invoice->id]['value_tax_excl']); } } } else { if ($discount_value > $order->total_paid_tax_incl) { $this->errors[] = Tools::displayError('The discount value is greater than the order total.'); } else { $cart_rules[0]['value_tax_incl'] = Tools::ps_round($discount_value, 2); $cart_rules[0]['value_tax_excl'] = Tools::ps_round($discount_value / (1 + $order->getTaxesAverageUsed() / 100), 2); } } break; // Free shipping type // Free shipping type case 3: if (isset($order_invoice)) { if ($order_invoice->total_shipping_tax_incl > 0) { $cart_rules[$order_invoice->id]['value_tax_incl'] = $order_invoice->total_shipping_tax_incl; $cart_rules[$order_invoice->id]['value_tax_excl'] = $order_invoice->total_shipping_tax_excl; // Update OrderInvoice $this->applyDiscountOnInvoice($order_invoice, $cart_rules[$order_invoice->id]['value_tax_incl'], $cart_rules[$order_invoice->id]['value_tax_excl']); } } elseif ($order->hasInvoice()) { $order_invoices_collection = $order->getInvoicesCollection(); foreach ($order_invoices_collection as $order_invoice) { if ($order_invoice->total_shipping_tax_incl <= 0) { continue; } $cart_rules[$order_invoice->id]['value_tax_incl'] = $order_invoice->total_shipping_tax_incl; $cart_rules[$order_invoice->id]['value_tax_excl'] = $order_invoice->total_shipping_tax_excl; // Update OrderInvoice $this->applyDiscountOnInvoice($order_invoice, $cart_rules[$order_invoice->id]['value_tax_incl'], $cart_rules[$order_invoice->id]['value_tax_excl']); } } else { $cart_rules[0]['value_tax_incl'] = $order->total_shipping_tax_incl; $cart_rules[0]['value_tax_excl'] = $order->total_shipping_tax_excl; } break; default: $this->errors[] = Tools::displayError('The discount type is invalid.'); } $res = true; foreach ($cart_rules as &$cart_rule) { $cartRuleObj = new CartRule(); $cartRuleObj->date_from = date('Y-m-d H:i:s', strtotime('-1 hour', strtotime($order->date_add))); $cartRuleObj->date_to = date('Y-m-d H:i:s', strtotime('+1 hour')); $cartRuleObj->name[Configuration::get('PS_LANG_DEFAULT')] = Tools::getValue('discount_name'); $cartRuleObj->quantity = 0; $cartRuleObj->quantity_per_user = 1; if (Tools::getValue('discount_type') == 1) { $cartRuleObj->reduction_percent = $discount_value; } elseif (Tools::getValue('discount_type') == 2) { $cartRuleObj->reduction_amount = $cart_rule['value_tax_excl']; } elseif (Tools::getValue('discount_type') == 3) { $cartRuleObj->free_shipping = 1; } $cartRuleObj->active = 0; if ($res = $cartRuleObj->add()) { $cart_rule['id'] = $cartRuleObj->id; } else { break; } } if ($res) { foreach ($cart_rules as $id_order_invoice => $cart_rule) { // Create OrderCartRule $order_cart_rule = new OrderCartRule(); $order_cart_rule->id_order = $order->id; $order_cart_rule->id_cart_rule = $cart_rule['id']; $order_cart_rule->id_order_invoice = $id_order_invoice; $order_cart_rule->name = Tools::getValue('discount_name'); $order_cart_rule->value = $cart_rule['value_tax_incl']; $order_cart_rule->value_tax_excl = $cart_rule['value_tax_excl']; $res &= $order_cart_rule->add(); $order->total_discounts += $order_cart_rule->value; $order->total_discounts_tax_incl += $order_cart_rule->value; $order->total_discounts_tax_excl += $order_cart_rule->value_tax_excl; $order->total_paid -= $order_cart_rule->value; $order->total_paid_tax_incl -= $order_cart_rule->value; $order->total_paid_tax_excl -= $order_cart_rule->value_tax_excl; } // Update Order $res &= $order->update(); } if ($res) { Tools::redirectAdmin(self::$currentIndex . '&id_order=' . $order->id . '&vieworder&conf=4&token=' . $this->token); } else { $this->errors[] = Tools::displayError('An error occurred during the OrderCartRule creation'); } } } else { $this->errors[] = Tools::displayError('You do not have permission to edit this.'); } } parent::postProcess(); }
session_register("checkStep"); if ($total==0){ echo Module::display(_iMODULE_NAME_CVS_,'ErrorStep.tpl'); session_destroy(); }else{ $_SESSION["checkStep"]="1"; echo Module::display(_iMODULE_NAME_CVS_,'validationOrder.tpl'); } }else if($_SESSION["checkStep"]=="1" && $check=="1"){ $CheckPay->validateOrder((int)$cart->id, 1, $inttotal, $CheckPay->displayName, NULL, array(), NULL, false, $customer->secure_key); $newOrderStatusId="1"; $history = new OrderHistory(); $history->id_order = (int)($CheckPay->currentOrder); $history->changeIdOrderState((int)$newOrderStatusId, (int)($CheckPay->currentOrder)); $history->addWithemail(); $URL=$CheckPay->getBaseURL(); $PostData.="mer_id=".$CheckPay->getShopCode(); $PostData.="&enc_key=".$CheckPay->getEncryptionCode(); $PostData.="&prd_desc=".$CheckPay->getPrdDesc(); $PostData.="&payment_type=".$CheckPay->getPaymentType(); $PostData.="&amt=".$inttotal; $PostData.="&od_sob=".$CheckPay->currentOrder; $PostData.="&ok_url=".rawurlencode("http://".$_SERVER["HTTP_HOST"].$CheckPay->path."doFictitiousDetonate.php"); echo $PostData; // 建立CURL連線
public function execNotification() { $veritrans = new Veritrans_Config(); Veritrans_Config::$isProduction = Configuration::get('VT_ENVIRONMENT') == 'production' ? true : false; Veritrans_Config::$serverKey = Configuration::get('VT_SERVER_KEY'); $veritrans_notification = new Veritrans_Notification(); $history = new OrderHistory(); $history->id_order = (int) $veritrans_notification->order_id; error_log('message notif'); error_log(print_r($veritrans_notification, TRUE)); error_log('=============================================='); // check if order history already been updated to payment success, then save to array $order_history. $order_id_notif = (int) $veritrans_notification->order_id; $order = new Order($order_id_notif); $order_histories = $order->getHistory($this->context->language->id, Configuration::get('VT_PAYMENT_SUCCESS_STATUS_MAP')); // if (empty($order_histories)) // error_log("not found in DB"); // error_log(print_r($order_histories,true)); // print_r($order_histories,true); //Validating order //if ($veritrans_notification->isVerified()) //{ //$history->id_order = (int)$veritrans_notification->order_id; //error_log('notif verified'); //error_log('message notif: '.(int)$veritrans_notification->order_id); if ($veritrans_notification->transaction_status == 'capture') { if ($veritrans_notification->fraud_status == 'accept') { // if order history !contains payment accepted, then update DB. Else, don't update DB if (empty($order_histories)) { $history->changeIdOrderState(Configuration::get('VT_PAYMENT_SUCCESS_STATUS_MAP'), $order_id_notif); echo 'Valid success notification accepted.'; } else { error_log("########## Transaction has already been updated to success status once, no need to update again"); } } else { if ($veritrans_notification->fraud_status == 'challenge') { $history->changeIdOrderState(Configuration::get('VT_PAYMENT_CHALLENGE_STATUS_MAP'), $order_id_notif); echo 'Valid challenge notification accepted.'; } } } else { if ($veritrans_notification->transaction_status == 'settlement') { if ($veritrans_notification->payment_type != 'credit_card') { // if order history !contains payment accepted, then update DB. Else, don't update DB if (empty($order_histories)) { $history->changeIdOrderState(Configuration::get('VT_PAYMENT_SUCCESS_STATUS_MAP'), $order_id_notif); echo 'Valid success notification accepted.'; } else { error_log("########## Transaction has already been updated to success status once, no need to update again"); } } else { echo 'Credit card settlement notification accepted.'; } } else { if ($veritrans_notification->transaction_status == 'pending') { $history->changeIdOrderState(Configuration::get('VT_PAYMENT_CHALLENGE_STATUS_MAP'), $order_id_notif); echo 'Pending notification accepted.'; } else { if ($veritrans_notification->transaction_status == 'cancel') { $history->changeIdOrderState(Configuration::get('VT_PAYMENT_FAILURE_STATUS_MAP'), $order_id_notif); echo 'Pending notification accepted.'; } else { if ($veritrans_notification->transaction_status == 'expire') { $history->changeIdOrderState(Configuration::get('VT_PAYMENT_FAILURE_STATUS_MAP'), $order_id_notif); echo 'Expire notification accepted.'; } else { $history->changeIdOrderState(Configuration::get('VT_PAYMENT_FAILURE_STATUS_MAP'), $order_id_notif); echo 'Valid failure notification accepted'; } } } } } try { $history->add(true); } catch (Exception $e) { echo 'Order history not added: ' . $e->getMessage(); exit; } //} exit; }
public function successOrder($response_params, $response_mode) { $status = $this->pfConfig->getSuccessOrderStatusId(); if ($this->getStatusId() == $status) { return true; } if ($this->getOrderId()) { $history = new OrderHistory(); $history->id_order = (int) $this->getOrderId(); $history->changeIdOrderState($status, $this->getLoadedOrder()); $history->addWithemail(true, array()); $message = $this->module->l('Payfort Fort update: payment complete.', 'order'); $this->addMessage($message); } return true; }
public function updateOrder(ShopgateOrder $order) { $shopgateOrder = PSShopgateOrder::instanceByOrderNumber($order->getOrderNumber()); if (!Validate::isLoadedObject($shopgateOrder)) { throw new ShopgateLibraryException(ShopgateLibraryException::PLUGIN_ORDER_NOT_FOUND, 'Order not found', true); } $order_states = array(); if ($order->getUpdatePayment() && $order->getIsPaid()) { array_push($order_states, $this->getOrderStateId('PS_OS_PAYMENT')); } if ($order->getUpdateShipping() && !$order->getIsShippingBlocked()) { array_push($order_states, $this->getOrderStateId('PS_OS_PREPARATION')); } if (count($order_states)) { $ps_order = new Order($shopgateOrder->id_order); foreach ($order_states as $id_order_state) { if (version_compare(_PS_VERSION_, '1.4.1.0', '<')) { $history = new OrderHistory(); $history->id_order = (int) $shopgateOrder->id_order; $history->changeIdOrderState((int) $id_order_state, (int) $shopgateOrder->id_order); } else { $ps_order->setCurrentState($id_order_state); } } } return array('external_order_id' => $shopgateOrder->id_order, 'external_order_number' => $shopgateOrder->id_order); }