publish(
Configuration::get('LOGISTICS_QUEUE_'.(int) $cookie->id_employee),
json_encode(array('data' => base64_encode(
chr(2).'n'."\n" // Inch mode
.chr(2).'O0100'."\n" // Start position
.chr(2).'L'."\n"
.'C0000'."\n"
.'D11'."\n"
.chr(2).'L'."\n"
.$this->isoreplace($data)
.'Q0001'."\n" // Number of labels to print
.'E'."\n" // End
)))
);
return TRUE;
}
public function postProcess()
{
global $currentIndex, $cookie, $logistics_carriers;;
if (Tools::isSubmit('deleteorder_return_detail'))
{
if (($id_order_detail = (int)(Tools::getValue('id_order_detail'))) AND Validate::isUnsignedId($id_order_detail)) {
if (($id_order_return = (int)(Tools::getValue('id_order_return'))) AND Validate::isUnsignedId($id_order_return)) {
$orderReturn = new OrderReturn($id_order_return);
if (!Validate::isLoadedObject($orderReturn)) {
die(Tools::displayError());
}
if ((int)($orderReturn->countProduct()) > 1) {
if (OrderReturn::deleteOrderReturnDetail($id_order_return, $id_order_detail, (int)(Tools::getValue('id_customization', 0)))){
Tools::redirectAdmin($currentIndex.'&conf=4token='.$this->token);
} else {
HelperFormBootstrap::displayErrors(Tools::displayError('An error occurred while deleting an order return detail.'));
}
} else {
HelperFormBootstrap::displayErrors(Tools::displayError('You need at least one product.'));
}
} else {
HelperFormBootstrap::displayErrors(Tools::displayError('The order return is invalid.'));
}
} else {
HelperFormBootstrap::displayErrors(Tools::displayError('The order return detail is invalid.'));
}
} elseif (Tools::isSubmit('submitAddorder_return')) {
if (($id_order_return = (int)(Tools::getValue('id_order_return'))) AND Validate::isUnsignedId($id_order_return))
{
$orderReturn = new OrderReturn($id_order_return);
$order = new Order($orderReturn->id_order);
$customer = new Customer($orderReturn->id_customer);
$orderReturn->state = (int)(Tools::getValue('state'));
if ($orderReturn->save())
{
$orderReturnState = new OrderReturnState($orderReturn->state);
Db::getInstance()->ExecuteS('
INSERT INTO `'._DB_PREFIX_.'order_return_history`
VALUES (
DEFAULT,
'.(int) $cookie->id_employee.',
'.(int) $orderReturn->id.',
'.(int) $orderReturn->state.',
NOW()
)
');
$vars = array(
'{lastname}' => $customer->lastname,
'{firstname}' => $customer->firstname,
'{id_order_return}' => $id_order_return,
'{state_order_return}' => (isset($orderReturnState->name[(int)$order->id_lang]) ? $orderReturnState->name[(int)$order->id_lang] : $orderReturnState->name[(int)Configuration::get('PS_LANG_DEFAULT')]));
Mail::Send((int)$order->id_lang, 'order_return_state', Mail::l('Your order return state has changed', (int)$order->id_lang),
$vars, $customer->email, $customer->firstname.' '.$customer->lastname, NULL, NULL, NULL,
NULL, _PS_MAIL_DIR_, true);
Tools::redirectAdmin($currentIndex.'&id_order_return='.(int)$id_order_return.'&updateorder_return&ok=2&token='.$this->token);
}
} else {
HelperFormBootstrap::displayErrors(Tools::displayError('No order return ID.'));
}
} elseif (Tools::isSubmit('submitReply')) {
if (($id_order_return = (int)(Tools::getValue('id_order_return'))) AND Validate::isUnsignedId($id_order_return))
{
if (($id_customer_thread = (int)(Tools::getValue('id_customer_thread'))) AND Validate::isUnsignedId($id_customer_thread)) {
$ct = new CustomerThread($id_customer_thread);
$cm = new CustomerMessage();
$cm->id_employee = (int)$cookie->id_employee;
$cm->id_customer_thread = $ct->id;
$cm->message = Tools::htmlentitiesutf8(nl2br2(Tools::getValue('reply_message')));
$cm->ip_address = ip2long($_SERVER['REMOTE_ADDR']);
if (isset($_FILES) AND !empty($_FILES['joinFile']['name']) AND $_FILES['joinFile']['error'] != 0) {
HelperFormBootstrap::displayErrors(Tools::displayError('An error occurred with the file upload.'));
} elseif ($cm->add()) {
$fileAttachment = NULL;
if (!empty($_FILES['joinFile']['name']))
{
$cm->file_name = $_FILES['joinFile']['name'];
$fileAttachment['content'] = file_get_contents($_FILES['joinFile']['tmp_name']);
$fileAttachment['name'] = $_FILES['joinFile']['name'];
$fileAttachment['mime'] = $_FILES['joinFile']['type'];
}
if($ct->id_contact == 9 || $ct->id_contact == 1) {
$id_reason = Db::getInstance()->getValue('
SELECT sr.`id_reason`
FROM `'._DB_PREFIX_.'support_reason` sr
LEFT JOIN `'._DB_PREFIX_.'support_reason_customerthread` src ON (src.id_reason = sr.id_reason)
WHERE `id_customer_thread` = '.(int)($ct->id)
);
$link_reply = ($ct->id_lang == 3 ? str_replace('com','es',Tools::getShopDomain(true).__PS_BASE_URI__):Tools::getShopDomain(true).__PS_BASE_URI__).'modules/ant_support_form/support.php?id_customer_thread='.(int)($ct->id).'&token='.$ct->token.(($ct->id_contact == 9 || $ct->id_contact == 1)?'&id_contact='.$ct->id_contact : '').((isset($id_reason) && $id_reason)?'&id_reason='.(int)$id_reason : '');
} else {
$link_reply = $link->getPageLink('contact-form.php', true).'?id_customer_thread='.(int)($ct->id).'&token='.$ct->token;
if($ct->id_lang == 3) {
$link_reply = str_replace('com','es',$link_reply);
}
}
$params = array(
'{reply}' => nl2br2(Tools::getValue('reply_message')),
'{link}' => $link_reply);
if (Mail::Send($ct->id_lang, 'reply_msg', Mail::l('An answer to your message is available'),
$params, Tools::getValue('msg_email'), NULL, NULL, NULL, $fileAttachment, NULL,
_PS_MAIL_DIR_, true))
{
$ct->status = 'closed';
$ct->update();
$cm->update();
}
Tools::redirectAdmin($currentIndex.'&id_order_return='.(int)$id_order_return.'&updateorder_return&ok=3&token='.$this->token);
} else {
HelperFormBootstrap::displayErrors(Tools::displayError('An error occurred, your message was not sent. Please contact your system administrator.'));
}
} else {
HelperFormBootstrap::displayErrors(Tools::displayError('No conversation ID.'));
}
} else {
HelperFormBootstrap::displayErrors(Tools::displayError('No order return ID.'));
}
} elseif(Tools::isSubmit('submitOrderMessage')){
if (!($id_order = (int)(Tools::getValue('id_order'))) OR !($id_customer = (int)(Tools::getValue('id_customer')))) {
HelperFormBootstrap::displayErrors(Tools::displayError('An error occurred before sending message'));
return;
} elseif (!Tools::getValue('message')) {
HelperFormBootstrap::displayErrors(Tools::displayError('Message cannot be blank'));
return;
} 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 AND (string)$value != '0') {
if (!Tools::getValue('id_'.$this->table) OR $field != 'passwd') {
HelperFormBootstrap::displayErrors(Tools::displayError('field').' '.$field.' '.Tools::displayError('is required.'));
return;
}
}
}
foreach ($rules['size'] AS $field => $maxLength) {
if (Tools::getValue($field) AND Tools::strlen(Tools::getValue($field)) > $maxLength) {
HelperFormBootstrap::displayErrors(Tools::displayError('field').' '.$field.' '.Tools::displayError('is too long.').' ('.$maxLength.' '.Tools::displayError('chars max').')');
return;
}
}
foreach ($rules['validate'] AS $field => $function) {
if (Tools::getValue($field)) {
if (!Validate::$function(htmlentities(Tools::getValue($field), ENT_COMPAT, 'UTF-8'))) {
HelperFormBootstrap::displayErrors(Tools::displayError('field').' '.$field.' '.Tools::displayError('is invalid.'));
return;
}
}
}
$message = new Message();
$message->id_employee = (int)($cookie->id_employee);
$message->message = htmlentities(Tools::getValue('message'), ENT_COMPAT, 'UTF-8');
$message->id_order = $id_order;
$message->private = Tools::getValue('visibility');
if (!$message->add()) {
HelperFormBootstrap::displayErrors(Tools::displayError('An error occurred while sending message.'));
return;
} elseif ($message->private) {
HelperFormBootstrap::displaySuccess('Message bien envoyé');
return;
} elseif (Validate::isLoadedObject($customer = new Customer($id_customer))) {
$order = new Order((int)($message->id_order));
if (Validate::isLoadedObject($order))
{
$varsTpl = array('{lastname}' => $customer->lastname, '{firstname}' => $customer->firstname, '{id_order}' => $message->id_order, '{message}' => (Configuration::get('PS_MAIL_TYPE') == 2 ? $message->message : nl2br2($message->message)));
if (@Mail::Send((int)($order->id_lang), 'order_merchant_comment', Mail::l('New message regarding your order'), $varsTpl, $customer->email, $customer->firstname.' '.$customer->lastname, NULL, NULL, NULL, NULL, _PS_MAIL_DIR_, true)){
HelperFormBootstrap::displaySuccess('Message bien envoyé');
return;
}
}
}
HelperFormBootstrap::displayErrors('Une erreur est survenue !');
return;
}
} elseif(Tools::getValue('send_return_instruction') && Tools::getValue('id_order_return')) {
$id_order = (int) Tools::getValue('id_order');
$id_order_return = (int) Tools::getValue('id_order_return');
if(Validate::isLoadedObject($order = new Order($id_order))) {
$customer = new Customer($order->id_customer);
$return_link = Db::getInstance()->getRow('
SELECT `return_number`, `link`
FROM `'._DB_PREFIX_.'order_return_link`
WHERE `id_order_return` = '.(int) $id_order_return.'
');
$products = Db::getInstance()->ExecuteS('
SELECT `id_order_detail`, `product_quantity`
FROM `'._DB_PREFIX_.'order_return_detail`
WHERE `id_order_return` = '.(int) $id_order_return.'
');
$product_list = '
';
$product_list_txt = array();
foreach($products as $key => $product){
$product_name = Db::getInstance()->getValue('
SELECT `product_name`
FROM `'._DB_PREFIX_.'order_detail`
WHERE `id_order_detail` = '.(int) $product['id_order_detail'].'
');
$product_list_txt[] = (int) $product['product_quantity'].' x '.$product_name;
$product_list .= '- '.(int) $product['product_quantity'].' x '.htmlentities($product_name).'
';
}
$product_list .= '
';
Mail::Send(
intval($order->id_lang),
'order_return_2',
$subject[(int) $order->id_lang],
array(
'{id_order}' => $order->id,
'{return_link}' => $return_link['link'],
'{product_list}' => $product_list,
'{product_list_txt}' => implode("\r\n", $product_list_txt),
),
$customer->email,
$customer->firstname.' '.$customer->lastname
);
Tools::redirectAdmin($currentIndex.'&id_order_return='.(int)$id_order_return.'&updateorder_return&ok=4&token='.$this->token);
} else {
HelperFormBootstrap::displayErrors(Tools::displayError('Order ID missing.'));
}
} elseif (Tools::isSubmit('submitOrderState') && Tools::getValue('id_order_return') && ($id_order = (int)(Tools::getValue('id_order'))) AND Validate::isLoadedObject($order = new Order($id_order))) {
$id_order_return = (int) Tools::getValue('id_order_return');
if (!$newOrderStatusId = (int)(Tools::getValue('id_order_state'))) {
HelperFormBootstrap::displayErrors(Tools::displayError('Invalid new order status'));
} else {
$history = new OrderHistory();
$history->id_order = (int)$id_order;
$history->id_employee = (int)($cookie->id_employee);
$history->changeIdOrderState((int)($newOrderStatusId), (int)($id_order));
$order = new Order((int)$order->id);
$carrier = new Carrier((int)($order->id_carrier), (int)($order->id_lang));
$templateVars = array();
if ($history->id_order_state == Configuration::get('PS_OS_SHIPPING') AND $order->shipping_number) {
$templateVars = array('{followup}' => str_replace('@', $order->shipping_number, $carrier->url));
} elseif ($history->id_order_state == Configuration::get('PS_OS_CHEQUE')) {
$templateVars = array(
'{cheque_name}' => (Configuration::get('CHEQUE_NAME') ? Configuration::get('CHEQUE_NAME') : ''),
'{cheque_address_html}' => (Configuration::get('CHEQUE_ADDRESS') ? nl2br(Configuration::get('CHEQUE_ADDRESS')) : ''));
} elseif ($history->id_order_state == Configuration::get('PS_OS_BANKWIRE')) {
$templateVars = array(
'{bankwire_owner}' => (Configuration::get('BANK_WIRE_OWNER') ? Configuration::get('BANK_WIRE_OWNER') : ''),
'{bankwire_details}' => (Configuration::get('BANK_WIRE_DETAILS') ? nl2br(Configuration::get('BANK_WIRE_DETAILS')) : ''),
'{bankwire_address}' => (Configuration::get('BANK_WIRE_ADDRESS') ? nl2br(Configuration::get('BANK_WIRE_ADDRESS')) : ''));
}
if (Tools::getValue('noSendMail')) {
if ($history->add()) {
Tools::redirectAdmin($currentIndex.'&id_order_return='.(int)$id_order_return.'&updateorder_return&ok=5&token='.$this->token);
}
} else {
if ($history->addWithemail(true, $templateVars)) {
Tools::redirectAdmin($currentIndex.'&id_order_return='.(int)$id_order_return.'&updateorder_return&ok=5&token='.$this->token);
}
}
HelperFormBootstrap::displayErrors(Tools::displayError('An error occurred while changing the status or was unable to send e-mail to the customer.'));
}
} elseif(Tools::isSubmit('submitPayPalRefund') && Tools::getValue('id_order_return') && ($id_order = (int)(Tools::getValue('id_order'))) AND Validate::isLoadedObject($order = new Order($id_order))) {
$paypal = new Paypal();
if(!$paypal->generateTotalRefund($id_order)){
HelperFormBootstrap::displayErrors('Le remboursement n\'a pu avoir lieu');
return;
}
} elseif(Tools::isSubmit('submitCancelProduct') && Tools::getValue('id_order_return') && ($id_order = (int)(Tools::getValue('id_order'))) AND Validate::isLoadedObject($order = new Order($id_order))) {
$_POST['generateCreditSlip'] = 1;
$customer = new Customer($order->id_customer);
$productList = Tools::getValue('cancelQuantity');
$id_order_details = array();
$refund_quantities = array();
foreach ($productList as $id_order_detail => $qty) {
if((int)$qty ==0) {
unset($productList[$id_order_detail]);
}
$id_order_details[$id_order_detail] = $id_order_detail;
$refund_quantities[$id_order_detail] = $qty;
}
$errors = 0;
$id_cart = Cart::getCartIdByOrderId($order->id);
foreach ($productList AS $id_order_detail => $qty)
{
$qtyCancelProduct = abs($qty);
if (!$qtyCancelProduct) {
HelperFormBootstrap::displayErrors(Tools::displayError('No quantity selected for product.'));
$errors++;
}
// check actionable quantity
$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) {
HelperFormBootstrap::displayErrors(Tools::displayError('Invalid quantity selected for product.'));
$errors++;
}
}
if ($errors == 0 AND $productList) {
foreach ($productList AS $id_order_detail => $qty) {
$qtyCancelProduct = abs($qty);
$orderDetail = new OrderDetail((int)($id_order_detail));
//@Addition Antadis - prevent reinjection when the product is sent by Philea
$is_philea = DB::getInstance()->getValue('
SELECT p.`id_sale`
FROM `'._DB_PREFIX_.'philea_sync` p
LEFT JOIN `'._DB_PREFIX_.'product_ps_cache` ps ON (ps.`id_sale` = p.`id_sale`)
WHERE ps.`id_product`='.$orderDetail->product_id
);
// @Addition Antadis - prevent reinjection when the product is in Braderie
$is_braderie = (int)DB::getInstance()->getValue('
SELECT p.`braderie`
FROM `'._DB_PREFIX_.'privatesale` p
LEFT JOIN `'._DB_PREFIX_.'product_ps_cache` ps ON (ps.`id_sale` = p.`id_sale`)
WHERE ps.`id_product`='.$orderDetail->product_id
);
// $is_philea = false; // dev
// $is_braderie = false; // dev
// Reinject product
if (
!$order->hasBeenDelivered()
OR ($order->hasBeenDelivered() AND Tools::isSubmit('reinjectQuantities') AND !$is_philea AND !$is_braderie)
){
if(
(($is_philea || $is_braderie) && !$order->hasBeenShipped() && !$order->hasBeenDelivered())
|| (!$is_philea && !$is_braderie)
){
$reinjectableQuantity = (int)($orderDetail->product_quantity) - (int)($orderDetail->product_quantity_reinjected);
$quantityToReinject = $qtyCancelProduct > $reinjectableQuantity ? $reinjectableQuantity : $qtyCancelProduct;
if (!Product::reinjectQuantities($orderDetail, $quantityToReinject)) {
$errors++;
HelperFormBootstrap::displayErrors(Tools::displayError('Cannot re-stock product').' '.$orderDetail->product_name.'');
}
else
{
$updProductAttributeID = !empty($orderDetail->product_attribute_id) ? (int)($orderDetail->product_attribute_id) : NULL;
$newProductQty = Product::getQuantity((int)($orderDetail->product_id), $updProductAttributeID);
$product = get_object_vars(new Product((int)($orderDetail->product_id), false, (int)($cookie->id_lang)));
if (!empty($orderDetail->product_attribute_id))
{
$updProduct['quantity_attribute'] = (int)($newProductQty);
$product['quantity_attribute'] = $updProduct['quantity_attribute'];
}
else
{
$updProduct['stock_quantity'] = (int)($newProductQty);
$product['stock_quantity'] = $updProduct['stock_quantity'];
}
Hook::updateQuantity($product, $order);
}
}
}
// Delete product
if (!$order->deleteProduct($order, $orderDetail, $qtyCancelProduct)) {
$errors++;
HelperFormBootstrap::displayErrors(Tools::displayError('An error occurred during deletion of the product.').' '.$orderDetail->product_name.'');
}
Module::hookExec('cancelProduct', array('order' => $order, 'id_order_detail' => $id_order_detail));
}
$params['{lastname}'] = $customer->lastname;
$params['{firstname}'] = $customer->firstname;
$params['{id_order}'] = $order->id;
/* PRODUIT REMBOURSE */
$products_refund = "";
$total_refund = 0;
foreach ($productList as $id_order_detail => $qty) {
$details_refund = new OrderDetail($id_order_detail);
$tprice = $details_refund->product_price * (1 - $details_refund->reduction_percent / 100) - $details_refund->reduction_amount;
$tprice = $tprice * ( 1+ $details_refund->tax_rate / 100 );
$products_refund .= "
". $details_refund->product_name . " |
" . Tools::displayPrice($tprice) . " |
". (int)$qty ." |
" . Tools::displayPrice(($tprice * (int)$qty)) . " |
";
$total_refund = $total_refund + ($tprice * (int)$qty);
}
$params['{products}'] = $products_refund;
$params['{total_products}'] = Tools::displayPrice($total_refund);
$fraisport = "";
if(isset($_POST['shippingBack']))
{
$order = new Order($details_refund->id_order);
Module::hookExec('cancelShipping', array('order' => $order));
$fraisport .= "
Frais de port |
" . Tools::displayPrice($order->total_shipping) . " |
";
}
$params['{fraisport}'] = $fraisport;
if (isset($_POST['generateCreditSlip']) AND $errors==0)
{
if (!OrderSlip::createOrderSlip($order, $full_product_list, $full_quantity_list, isset($_POST['shippingBack']))) {
HelperFormBootstrap::displayErrors(Tools::displayError('Cannot generate credit slip'));
$errors++;
} else {
Module::hookExec('orderSlip', array('order' => $order, 'productList' => $id_order_details, 'qtyList' => $refund_quantities));
@Mail::Send((int)$order->id_lang, 'credit_slip', Mail::l('New credit slip regarding your order', $order->id_lang),
$params, $customer->email, $customer->firstname.' '.$customer->lastname, NULL, NULL, NULL, NULL,
_PS_MAIL_DIR_, true);
}
}
// update order state if it's partial
if($order->getCurrentState() == 17) {
$partial = true;
$to_send = Db::getInstance()->ExecuteS('
SELECT `id_order_detail`, (`product_quantity` - IF(`product_quantity_return` > 0, `product_quantity_return`, `product_quantity_refunded`)) AS `quantity`, `product_id`
FROM `'._DB_PREFIX_.'order_detail`
WHERE `id_order` = '.(int) $order->id.'
AND (`product_quantity` - IF(`product_quantity_return` > 0, `product_quantity_return`, `product_quantity_refunded`)) > 0
');
if(count($to_send) == 0) {
$partial = false;
} else {
include_once dirname(__FILE__).'/../../modules/privatesales/Sale.php';
$quantities_sent = array();
$product_ids = array();
foreach(Db::getInstance()->ExecuteS('
SELECT `product_id`
FROM `'._DB_PREFIX_.'order_detail`
WHERE `id_order` = '.(int) $order->id.'
') as $row) {
$product_ids[] = (int) $row['product_id'];
}
/**
* @Override Philea
*/
if(Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'philea_parcel`
WHERE `id_order` = '.(int) $order->id.'
')) {
foreach(Db::getInstance()->ExecuteS('
SELECT c.`id_product`
FROM `'._DB_PREFIX_.'product_ps_cache` c
WHERE c.`id_product` IN ('.implode(', ', $products_ids).')
') as $row) {
$quantities_sent[(int) $row['id_product']] = -1;
}
}
$parcel_quantities = array();
foreach($to_send as $ts) {
if(!isset($quantities_sent[(int) $ts['product_id']])) {
$parcel_quantities[(int) $ts['id_order_detail']] = $ts;
}
}
if(count($parcel_quantities) > 0) {
$partial = false;
$sent_logistics = array();
foreach(Db::getInstance()->ExecuteS('
SELECT SUM(`quantity`) AS `quantity`, `id_order_detail`
FROM `'._DB_PREFIX_.'lapostews`
WHERE `id_order_detail` IN ('.implode(', ', array_keys($parcel_quantities)).')
GROUP BY `id_order_detail`
') as $row) {
$sent_logistics[(int) $row['id_order_detail']] = (int) $row['quantity'];
}
foreach(Db::getInstance()->ExecuteS('
SELECT SUM(`quantity`) AS `quantity`, `id_order_detail`
FROM `'._DB_PREFIX_.'mondialrelay_parcel`
WHERE `id_order_detail` IN ('.implode(', ', array_keys($parcel_quantities)).')
GROUP BY `id_order_detail`
') as $row) {
$sent_logistics[(int) $row['id_order_detail']] = (int) $row['quantity'];
}
foreach(Db::getInstance()->ExecuteS('
SELECT SUM(`quantity`) AS `quantity`, `id_order_detail`
FROM `'._DB_PREFIX_.'exapaqws`
WHERE `id_order_detail` IN ('.implode(', ', array_keys($parcel_quantities)).')
GROUP BY `id_order_detail`
') as $row) {
$sent_logistics[(int) $row['id_order_detail']] = (int) $row['quantity'];
}
if(count($sent_logistics) == 0) {
$partial = true;
} else {
foreach($parcel_quantities as $k => $v) {
if(!isset($sent_logistics[(int) $k])) {
$partial = true;
break;
} else {
if($sent_logistics[(int) $k] < $v['quantity']) {
$partial = true;
break;
}
}
}
}
} else {
$partial = false;
}
if(!$partial) {
global $cookie;
Db::getInstance()->ExecuteS('
INSERT INTO `'._DB_PREFIX_.'order_history`
VALUES (
DEFAULT,
'.(int) $cookie->id_employee.',
'.(int) $order->id.',
'.Configuration::get('PS_OS_SHIPPING').',
NOW()
)
');
Db::getInstance()->ExecuteS('
INSERT INTO `'._DB_PREFIX_.'order_state_current`
VALUES (
'.(int) $order->id.',
'.Configuration::get('PS_OS_SHIPPING').',
NOW()
)
ON DUPLICATE KEY UPDATE
`id_order_state` = '.Configuration::get('PS_OS_SHIPPING').',
`date_upd` = NOW()
');
$newOS = new OrderState((int)(Configuration::get('PS_OS_SHIPPING')), $order->id_lang);
Module::hookExec('updateOrderStatus', array('newOrderStatus' => $newOS, 'id_order' => (int)($order->id)));
}
}
}
HelperFormBootstrap::displaySuccess('Remboursement Effectué');
}
} elseif(Tools::isSubmit('submitResendParcel') && Tools::getValue('id_order_return') && ($id_order = (int)(Tools::getValue('id_order'))) AND Validate::isLoadedObject($order = new Order($id_order))) {
$products = Tools::getValue('resendQuantity');
$parcel_carrier = Tools::getValue('parcel_carrier');
$weight = Tools::getValue('weight');
if($parcel_carrier == 'mondialrelay') {
HelperFormBootstrap::displayWarning('Option en cours de developpement...');
return;
}
if(!empty($products)) {
if($weight < 0.24) {
$weight = 0.24;
}
$qty_to_send = 0;
foreach ($products as $k => $qty) {
$qty_to_send+=$qty;
}
if($qty_to_send==0) {
HelperFormBootstrap::displayWarning('Aucune quantité renseignée');
return;
}
$result = $logistics_carriers[$parcel_carrier]->registerParcel($order, $products, $weight);
if($result[0] != '') {
HelperFormBootstrap::displayErrors($result[0]);
return;
}
$render = $logistics_carriers[$parcel_carrier]->renderLabel($order, $weight, $result[1]);
if($render === 'pr_error') {
HelperFormBootstrap::displayErrors($this->l('Unknown delivery point'));
} elseif($render === 'route_error') {
HelperFormBootstrap::displayErrors($this->l('Route not found'));
} elseif($render !== FALSE) {
$this->printLabel($render); // comment in dev
if($_SERVER['REMOTE_ADDR'] != '109.190.53.175'
&& $_SERVER['REMOTE_ADDR'] != '78.226.56.137'
&& $_SERVER['REMOTE_ADDR'] != '88.163.22.223'
&& $_SERVER['REMOTE_ADDR'] != '37.160.139.229'
&& substr($_SERVER['REMOTE_ADDR'], 0, 2) != '37') {
$products_sent = '';
$products_names = array();
foreach(Db::getInstance()->ExecuteS('
SELECT `id_order_detail`, `product_name`
FROM `'._DB_PREFIX_.'order_detail`
WHERE `id_order_detail` IN ('.implode(', ', array_keys($products)).')
') as $p) {
$products_names[(int) $p['id_order_detail']] = $p['product_name'];
}
$id_order_return = (int) Tools::getValue('id_order_return');
$logistics_carriers[$parcel_carrier]->logParcel($result[1], $products, $id_order_return);
foreach($products as $k => $v) {
if($v > 0) {
$products_sent .= '
'."\r\n".$v.' x '.(isset($products_names[$k])? $products_names[$k]: '--');
}
}
$logistics_carriers[$parcel_carrier]->addOrderHistory($result[1], $order, $products_sent);
HelperFormBootstrap::displaySuccess('Etiquette envoyée à l\'imprimante');
$orderReturn = new OrderReturn($id_order_return);
$orderReturn->state = 5; // return is ended
if ($orderReturn->save())
{
$orderReturnState = new OrderReturnState($orderReturn->state);
Db::getInstance()->ExecuteS('
INSERT INTO `'._DB_PREFIX_.'order_return_history`
VALUES (
DEFAULT,
'.(int) $cookie->id_employee.',
'.(int) $orderReturn->id.',
'.(int) $orderReturn->state.',
NOW()
)
');
}
}
} else {
HelperFormBootstrap::displayErrors($this->l('An error happened during the label rendering'));
}
} else {
HelperFormBootstrap::displayWarning('Aucune quantité renseignée');
}
} elseif(Tools::isSubmit('submitDetails') && Tools::getValue('id_order_return') && Tools::getValue('id_order_detail')){
$id_order_return = (int) Tools::getValue('id_order_return');
$id_order_detail = (int) Tools::getValue('id_order_detail');
$id_instruction = (int) Tools::getValue('instruction');
$id_reason = (int) Tools::getValue('reason');
Db::getInstance()->Execute('
UPDATE `'._DB_PREFIX_.'order_return_detail_qty`
SET reason = '.$id_reason.', instruction='.$id_instruction.'
WHERE id_order_detail='.$id_order_detail.' AND id_order_return='.$id_order_return.'
');
HelperFormBootstrap::displaySuccess('Mise à jour effectuée');
} elseif(Tools::isSubmit('submitComment') && Tools::getValue('id_order_return')){
$id_order_return = (int) Tools::getValue('id_order_return');
$comment = Tools::getValue('comment');
$return_link = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'order_return_link`
WHERE id_order_return='.$id_order_return.'
');
if($return_link){
$ok = Db::getInstance()->execute('
UPDATE `'._DB_PREFIX_.'order_return_link`
SET return_comment = "'.pSQL($comment).'"
WHERE id_order_return='.$id_order_return.'
');
} else {
$ok = Db::getInstance()->execute('
INSERT INTO `'._DB_PREFIX_.'order_return_link`
VALUES (
'.(int) $id_order_return.',
'.(int) $cookie->id_employee.',
NOW(),
1,
0.0,
"mondialrelay",
"0",
"",
"'.pSQL($comment).'"
)
');
}
if($ok) {
HelperFormBootstrap::displaySuccess('Mise à jour effectuée');
} else {
HelperFormBootstrap::displayErrors('La mise à jour n\'a pas pu s\'effectuer');
}
}
}
public function display()
{
global $cookie, $currentIndex;
if($return_number = Tools::getValue('return_number')) {
if($return = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'order_return_link`
WHERE `return_number` = "'.pSQL($return_number).'"
')) {
header('Location: /adm/index.php?tab=AdminAntReturnprocess&id_order_return='.(int) $return['id_order_return'].'&updateorder_return&token='.Tools::getValue('token'));
exit;
}
}
if($return_order = Tools::getValue('return_order')) {
if($returns = Db::getInstance()->executeS('
SELECT *
FROM `'._DB_PREFIX_.'order_return`
WHERE `id_order` = "'.(int)($return_order).'"
')) {
if($returns && count($returns) == 1) {
header('Location: /adm/index.php?tab=AdminAntReturnprocess&id_order_return='.(int) $returns[0]['id_order_return'].'&updateorder_return&token='.Tools::getValue('token'));
exit;
}
}
}
if (isset($_GET['updateorder_return'])) {
if(isset($_GET['ok'])){
switch ($_GET['ok']) {
case '2':
$success_mess = 'Mise à jour enregistrée';
break;
case '3':
$success_mess = 'Votre message a bien été envoyé';
break;
case '4':
$success_mess = 'Les instructions on été renvoyées';
break;
case '5':
$success_mess = 'Le nouveau statut de la commande a bien été enregistré';
break;
default:
$success_mess = 'Mise à jour enregistrée';
break;
}
HelperFormBootstrap::displaySuccess($success_mess);
}
$this->displayForm();
echo '
'.$this->l('Back to list').'
';
} else {
$this->displaylist();
}
}
public function displayForm()
{
global $cookie, $currentIndex;
if (($id_order_return = (int)(Tools::getValue('id_order_return'))) AND Validate::isUnsignedId($id_order_return)) {
$orderReturn = new OrderReturn($id_order_return);
if (!Validate::isLoadedObject($orderReturn)) {
die(Tools::displayError());
}
}
$instructions = array(
1 => 'Remboursement + Mise en stock',
2 => 'Échange',
3 => 'Défectueux',
4 => 'Commande à ré-expédier',
5 => 'Commande à rembourser',
);
$reasons = array(
// 1 => 'CLIENT : Annulation pré-envoi',
2 => 'CLIENT : Rétractation post-envoi',
11 => 'CLIENT : Annulation pour ré-achat',
4 => 'FEUR : Problème SAV',
5 => 'FEUR : Produit manquant',
3 => 'BBB : Erreur Achat / Prod',
6 => 'BBB : Erreur Logistique',
8 => 'BBB : Pbme Site / Paiment',
12 => 'BBB : Suspicion de fraude',
9 => 'TRANS : Colis détruit',
10 => 'TRANS : Colis perdu',
7 => 'Autre'
);
$carriers_socol = explode(',', Configuration::get('ANT_CARRIERS_SOCOL'));
$carriers_mr = explode(',', Configuration::get('ANT_CARRIERS_MR'));
$order = new Order($orderReturn->id_order);
$cart = new Cart((int)$order->id_cart);
$carrier = new Carrier((int)($order->id_carrier));
$addressDelivery = new Address((int)$order->id_address_delivery);
$addressInvoice = new Address((int)$order->id_address_invoice);
$customer = new Customer((int)$order->id_customer);
$data = $this->getOrderDetail($cart,(int)$cart->id_lang,$order);
$currency = new Currency((int)(Configuration::get('PS_CURRENCY_DEFAULT')));
$orderStates = OrderState::getOrderStates((int)($cookie->id_lang));
$shipping_numbers = Db::getInstance()->ExecuteS('
SELECT DISTINCT lpws.`shipping_number`, lpws.`date_add`
FROM `'._DB_PREFIX_.'lapostews` lpws
LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON (od.`id_order_detail` = lpws.`id_order_detail`)
WHERE `id_order` ='. (int)$order->id
);
$shipping_numbers2 = Db::getInstance()->ExecuteS('
SELECT DISTINCT ppp.`shipping_number`, ppp.`date_add`
FROM `'._DB_PREFIX_.'philea_parcel` ppp
LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON (od.`id_order_detail` = ppp.`id_order_detail`)
WHERE od.`id_order` ='. (int)$order->id
);
$shipping_numbers3 = Db::getInstance()->ExecuteS('
SELECT DISTINCT mrp.`shipping_number`, mrp.`date_add`
FROM `'._DB_PREFIX_.'mondialrelay_parcel` mrp
LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON (od.`id_order_detail` = mrp.`id_order_detail`)
WHERE od.`id_order` ='. (int)$order->id
);
$discounts = $order->getDiscounts();
$query_thread = Db::getInstance()->getValue('
SELECT `id_customer_thread`
FROM `'._DB_PREFIX_.'customer_thread`
WHERE id_customer ='.(int)$order->id_customer.' AND id_order = '.(int)$order->id.'
');
if(!$query_thread) {
$query_thread = Db::getInstance()->getValue('
SELECT `id_customer_thread`
FROM `'._DB_PREFIX_.'customer_thread`
WHERE id_customer ='.(int)$order->id_customer.'
ORDER BY `date_upd` DESC
');
}
if($query_thread){
$thread = new CustomerThread((int)$query_thread);
$last_message = Db::getInstance()->getRow('
SELECT ct.*, cm.*, cl.name subject, CONCAT(e.firstname, \' \', e.lastname) employee_name, CONCAT(c.firstname, \' \', c.lastname) customer_name, c.firstname
FROM '._DB_PREFIX_.'customer_thread ct
LEFT JOIN '._DB_PREFIX_.'customer_message cm ON (ct.id_customer_thread = cm.id_customer_thread)
LEFT JOIN '._DB_PREFIX_.'contact_lang cl ON (cl.id_contact = ct.id_contact AND cl.id_lang = '.(int)$cookie->id_lang.')
LEFT JOIN '._DB_PREFIX_.'employee e ON e.id_employee = cm.id_employee
LEFT JOIN '._DB_PREFIX_.'customer c ON (IFNULL(ct.id_customer, ct.email) = IFNULL(c.id_customer, c.email))
WHERE ct.id_customer_thread = '.(int)($thread->id).'
ORDER BY cm.date_add DESC'
);
}
$last_order_message = Db::getInstance()->getRow('
SELECT om.*, e.firstname, e.lastname
FROM `'._DB_PREFIX_.'message` om
LEFT JOIN `'._DB_PREFIX_.'employee` e ON (e.id_employee = om.id_employee)
WHERE om.id_order = '.(int)$order->id.' AND om.id_employee!=0 AND om.private=1
ORDER BY om.date_add DESC
');
$parcel_sent = Db::getInstance()->ExecuteS('
SELECT lpr.*, od.`product_name`
FROM '._DB_PREFIX_.'lapostews_return lpr
LEFT JOIN '._DB_PREFIX_.'order_detail od ON (lpr.id_order_detail = od.id_order_detail)
WHERE lpr.id_order_return = '.(int)($orderReturn->id).'
ORDER BY lpr.date_add DESC'
);
$tokenCatalog = Tools::getAdminToken('AdminCatalog'.(int)(Tab::getIdFromClassName('AdminCatalog')).(int)($cookie->id_employee));
$returnProducts = OrderReturn::getOrdersReturnProducts($orderReturn->id, $order);
$orderReturnState = new OrderReturnState($orderReturn->state);
$return_history = Db::getInstance()->ExecuteS('
SELECT rh.*, orsl.`name` as state, CONCAT(e.`firstname`,\' \',e.`lastname`) as employee
FROM '._DB_PREFIX_.'order_return_history rh
LEFT JOIN '._DB_PREFIX_.'order_return_state_lang orsl ON (orsl.`id_order_return_state` = rh.`id_order_return_state` AND orsl.`id_lang` = '.(int)($cookie->id_lang).')
LEFT JOIN '._DB_PREFIX_.'employee e ON (e.`id_employee` = rh.`id_employee`)
WHERE rh.`id_order_return` = '.(int)$orderReturn->id.'
ORDER BY rh.`date_add` DESC
');
$other_returnProducts = Db::getInstance()->ExecuteS('
SELECT a.*, orsl.`name`, ord.`id_order_detail`, ord.`qty`
FROM '._DB_PREFIX_.'order_return a
LEFT JOIN '._DB_PREFIX_.'order_return_detail_qty ord ON (ord.`id_order_return` = a.`id_order_return`)
LEFT JOIN '._DB_PREFIX_.'order_return_state_lang orsl ON (orsl.`id_order_return_state` = a.`state` AND orsl.`id_lang` = '.(int)($cookie->id_lang).')
WHERE a.id_order='.(int)$order->id.' AND a.id_order_return != '.(int)$orderReturn->id.'
');
$colorStates = array(
1 => "anticon anticon-hour-glass text-orange",
2 => "anticon anticon-hour-glass text-orange",
3 => "anticon anticon-box-add text-orange",
4 => "anticon anticon-cross text-rose",
5 => "anticon anticon-checkmark text-green-light",
6 => "anticon anticon-warning text-danger",
);
$return_link = Db::getInstance()->getRow('
SELECT `return_number`, `link`, `return_comment`
FROM `'._DB_PREFIX_.'order_return_link`
WHERE `id_order_return` = '.(int) $id_order_return.'
');
$helper = new HelperFormBootstrap();
$helper->_select2 = true;
$helper->_inputMask = true;
$html = $helper->renderStyle();
$html .= '
Retour #'.$id_order_return.'
'.$orderReturnState->name[(int)$cookie->id_lang].'
'.$this->l('Produit').' |
'.$this->l('Qté').' |
'.$this->l('Instructions').' |
'.$this->l('Action').' |
';
$productReturned = array();
$reason_selected = 0;
foreach ($returnProducts AS $k => $product) {
$productReturned[] = $product['product_id'];
$img_path = '';
$img = Db::getInstance()->getRow('
SELECT id_image
FROM `'._DB_PREFIX_.'image` i
WHERE i.`id_product` = '.(int)$product['product_id'].'
AND i.`cover` = 1'
);
if (isset($img['id_image']) && !empty($img['id_image'])) {
$image_obj = new Image((int)$img['id_image']);
$img_path = (isset($image_obj)?$image_obj->getExistingImgPath():'');
}
$return_details = Db::getInstance()->getRow('
SELECT reason, instruction
FROM `'._DB_PREFIX_.'order_return_detail_qty`
WHERE id_order_return = '.(int)$orderReturn->id.'
AND id_order_detail = '.(int)$product['id_order_detail']
);
if (!isset($quantityDisplayed[(int)($product['id_order_detail'])]) OR (int)($product['product_quantity']) > (int)($quantityDisplayed[(int)($product['id_order_detail'])])) {
$reason_selected = (int)$return_details['reason'];
$html .='
'.mb_strimwidth($product['product_name'], 0, 55, "...").'
|
'.$product['product_quantity'].' |
'.$instructions[(int)$return_details['instruction']].' |
|
';
}
}
$html .='
'.$this->l('Commentaire').'
'.(($return_link && !empty($return_link['return_comment']))?$return_link['return_comment']:'Sans commentaire').'
';
if($return_history && !empty($return_history)) {
$html .= '
'.$this->l('Statut').'
'.$return_history[0]['state'].'
('.$return_history[0]['employee'].' - '.date('d/m/Y H:i',strtotime($return_history[0]['date_add'])).')
';
foreach ($return_history as $key => $history) {
$html .= '
'.date('d/m/Y H:i',strtotime($history['date_add'])).' |
'.$history['state'].' |
'.$history['employee'].' |
';
}
$html .= '
';
}
$html.='
';
if($other_returnProducts && !empty($other_returnProducts)){
$html .= '
Autre(s) produit(s) en retour pour cette commande :
# Retour |
'.$this->l('Produit').' |
'.$this->l('Qté').' |
'.$this->l('Statut').' |
'.$this->l('Action').' |
';
foreach ($other_returnProducts as $key => $return_product) {
$order_detail = new OrderDetail((int)$return_product['id_order_detail']);
$img_path = '';
$img = Db::getInstance()->getRow('
SELECT id_image
FROM `'._DB_PREFIX_.'image` i
WHERE i.`id_product` = '.(int)$order_detail->product_id.'
AND i.`cover` = 1'
);
if (isset($img['id_image']) && !empty($img['id_image'])) {
$image_obj = new Image((int)$img['id_image']);
$img_path = (isset($image_obj)?$image_obj->getExistingImgPath():'');
}
$html .= '
'.(int) $return_product['id_order_return'].' |
'.mb_strimwidth($order_detail->product_name, 0, 55, "...").'
|
'.$return_product['qty'].' |
'.$return_product['name'].' |
|
';
}
$html .= '
';
}
$html .='
';
$html .= '
Détails paiement
'.Tools::substr($order->payment, 0, 32).' '.($order->module ? '('.$order->module.')' : '').'
'.$this->l('Products').' | '.Tools::displayPrice($order->getTotalProductsWithTaxes(), $currency, false).' |
'.($order->total_discounts > 0 ? ''.$this->l('Discounts').' | -'.Tools::displayPrice($order->total_discounts, $currency, false).' |
' : '').'
'.($order->total_wrapping > 0 ? ''.$this->l('Wrapping').' | '.Tools::displayPrice($order->total_wrapping, $currency, false).' |
' : '').'
'.$this->l('Shipping').' | '.Tools::displayPrice($order->total_shipping, $currency, false).' |
'.$this->l('Total').' | '.Tools::displayPrice($order->total_paid, $currency, false).($order->total_paid != $order->total_paid_real ? ' ('.$this->l('Paid:').' '.Tools::displayPrice($order->total_paid_real, $currency, false, false).')' : '').' |
Transporteur
'.$data['carrier_name'].'
';
if(count($shipping_numbers) > 0){
foreach ($shipping_numbers as $key => $number) {
$date = new DateTime($number['date_add']);
$html .= '- '. $number['shipping_number'] .' ajouté le '. $date->format('d/m/Y') .'
';
}
}
if(count($shipping_numbers2) > 0){
foreach ($shipping_numbers2 as $key => $number) {
$date = new DateTime($number['date_add']);
$html .= '- '. $number['shipping_number'] .' ajouté le '. $date->format('d/m/Y') .'
';
}
}
if(count($shipping_numbers3) > 0){
foreach ($shipping_numbers3 as $key => $number) {
$date = new DateTime($number['date_add']);
$html .= '- '. $number['shipping_number'] .' ajouté le '. $date->format('d/m/Y') .'
';
}
}
if(count($parcel_sent) > 0){
foreach ($parcel_sent as $key => $number) {
$date = new DateTime($number['date_add']);
$html .= '- '. $number['shipping_number'] .' ajouté le '. $date->format('d/m/Y') .'
';
}
}
$html .= '
Adresse Facturation
'.$data['order_invoice_address'].'
Adresse Livraison
'.($cart->id_carrier!=(int)Configuration::get('ANT_CARRIER_DOM') && in_array($cart->id_carrier,$carriers_socol)?'':'').'
'.(in_array($cart->id_carrier,$carriers_mr)?'':'').'
'.($cart->id_carrier==(int)Configuration::get('ANT_CARRIER_DOM')?'':'').'
'.$data['order_address'].'
';
if($order->module && $order->module=="paypal"){
$html.='
';
}
$html.='
'.($order->module ? ($order->module=="paybox"?' ':' ') : '').' Info Remboursement
';
if($order->module && $order->module=="paybox"){
require_once dirname(__FILE__).'/../../modules/paybox/paybox.php';
$refundsPaybox = Paybox::getAllRefundbyOrder($order->id);
if (sizeof($refundsPaybox))
{
$html .='
';
foreach ($refundsPaybox as $refund) {
$html .='
'.(!empty($refund['product_name'])?$refund['product_name']:'Frais de port').' |
'. $refund['amount'] / 100 . '€ |
';
}
$html .='
';
} else {
$html .= '
Pas de remboursement
';
}
} elseif($order->module && $order->module=="paypal") {
$messages = Db::getInstance()->ExecuteS('
SELECT `message`, `date_add`
FROM `ps_message`
WHERE `id_order` = '.$order->id.'
AND (`message` LIKE "%Refund operation%" || `message` LIKE "%Cancel products%")
ORDER BY `date_add` DESC
');
if($messages && !empty($messages)) {
foreach ($messages as $message) {
$html .= '
('.date('d/m/Y',strtotime($message['message'])).'):
'.$message['message'].'
';
}
}
}
$html .='
'.$this->l('Changer le statut de la commande').'
'.$this->l('Changer le statut du retour').'
Historique des colis renvoyés
';
if($parcel_sent && !empty($parcel_sent)) {
$html .= '
'.$this->l('Produit').' |
'.$this->l('Qté').' |
'.$this->l('Shipping number').' |
'.$this->l('date envoi').' |
';
foreach ($parcel_sent as $key => $parcel) {
$html .= '
'.$parcel['product_name'].' |
'.$parcel['quantity'].' |
'.(!empty($carrier->url) ? ''.$parcel['shipping_number'].'':$parcel['shipping_number']).' |
'.date('d/m/Y H:i',strtotime($parcel['date_add'])).' |
';
}
$html .= '
';
} else {
$html .='
Aucun renvoi effectué depuis ce retour
';
}
$html .='
';
$parcel_sent_other = Db::getInstance()->ExecuteS('
SELECT lpr.*, od.`product_name`
FROM '._DB_PREFIX_.'lapostews_return lpr
LEFT JOIN '._DB_PREFIX_.'order_detail od ON (lpr.id_order_detail = od.id_order_detail)
WHERE lpr.id_order_detail IN ('.implode(',', $id_order_details).')
AND lpr.id_order_return != '.$orderReturn->id.'
ORDER BY lpr.date_add DESC'
);
if($parcel_sent_other && !empty($parcel_sent_other)) {
$html .= '
Envoyé via un autre retour :
'.$this->l('Produit').' |
'.$this->l('Qté').' |
'.$this->l('Shipping number').' |
'.$this->l('date envoi').' |
';
foreach ($parcel_sent_other as $key => $parcel) {
$html .= '
'.$parcel['product_name'].' (retour #'.(int)$parcel['id_order_return'].') |
'.$parcel['quantity'].' |
'.$parcel['shipping_number'].' |
'.date('d/m/Y H:i',strtotime($parcel['date_add'])).' |
';
}
$html .= '
';
}
$html .='
';
$orderMessages = OrderMessage::getOrderMessages((int)($order->id_lang));
if(isset($thread)){
if($thread->id_order == $orderReturn->id_order) {
$products = Db::getInstance()->ExecuteS('
SELECT spc.*, pl.`name`
FROM `'._DB_PREFIX_.'support_product_customerthread` spc
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (pl.`id_product` = spc.`id_product`)
WHERE spc.`id_customer_thread` = '.(int)$thread->id.'
AND pl.`id_lang` = 2'
);
if($products && !empty($products)) {
$html .='
Produit(s) Concerné(s)
';
foreach ($products as $product) {
$img_path = '';
$img = Db::getInstance()->getRow('
SELECT id_image
FROM `'._DB_PREFIX_.'image` i
WHERE i.`id_product` = '.(int)$product['id_product'].'
AND i.`cover` = 1'
);
if (isset($img['id_image']) && !empty($img['id_image'])) {
$image_obj = new Image((int)$img['id_image']);
$img_path = (isset($image_obj)?$image_obj->getExistingImgPath():'');
}
$html .='
'.mb_strimwidth($product['name'], 0, 55, "...").'
';
}
}
}
if($last_message){
$html .='
Dernier Message '.($thread->id_order != $orderReturn->id_order?'
(Ne concerne pas cette commande)':'').'
';
$last_message['message'] = preg_replace('/(https?:\/\/[a-z0-9#%&_=\(\)\.\? \+\-@\/]{6,1000})([\s\n<])/Uui', '
\1\2', html_entity_decode($last_message['message'], ENT_NOQUOTES, 'UTF-8'));
if(!empty($last_message['employee_name'])) {
$html .='
Bébé Boutik - ('.Tools::displayDate($last_message['date_add'], (int)($cookie->id_lang), true).')
"'.$last_message['message'].'"
';
} else {
$html .='
'.$customer->firstname.' '.$customer->lastname.' - ('.Tools::displayDate($last_message['date_add'], (int)($cookie->id_lang), true).')
"'.$last_message['message'].'"
';
}
$html .='
';
}
} else {
$html .='
Pas de conversation en rapport avec cette commande !
';
}
$html .='
Message pour cette Commande
Laissez un message à votre service client pour cette commande
';
if($last_order_message){
$html .='
Dernier un message
'.$last_order_message['firstname'].' '.$last_order_message['lastname'].' - ('.Tools::displayDate($last_order_message['date_add'], (int)($cookie->id_lang), true).')
"'.$last_order_message['message'].'"
';
}
$html .='
';
$helper->_js .= '
';
$html .= $helper->renderScript();
echo $html;
}
public function displaylist()
{
global $cookie, $currentIndex;
$waiting_return_count = Db::getInstance()->getValue('SELECT COUNT(id_order_return) FROM '._DB_PREFIX_.'order_return WHERE state = 2');
$received_return_count = Db::getInstance()->getValue('SELECT COUNT(id_order_return) FROM '._DB_PREFIX_.'order_return WHERE state = 3');
$nonreceived_return_count = Db::getInstance()->getValue('SELECT COUNT(id_order_return) FROM '._DB_PREFIX_.'order_return WHERE state = 6');
$order_returns = Db::getInstance()->ExecuteS('
SELECT a.*, orsl.`name`
FROM '._DB_PREFIX_.'order_return a
LEFT JOIN '._DB_PREFIX_.'order_return_state_lang orsl ON (orsl.`id_order_return_state` = a.`state` AND orsl.`id_lang` = '.(int)($cookie->id_lang).')
WHERE a.state != 5 AND a.state != 6
'.(Tools::getValue('return_order')?' AND a.id_order='.(int)Tools::getValue('return_order'):'').'
ORDER BY a.date_add DESC'
);
$ended_order_returns = Db::getInstance()->ExecuteS('
SELECT a.*, orsl.`name`
FROM '._DB_PREFIX_.'order_return a
LEFT JOIN '._DB_PREFIX_.'order_return_state_lang orsl ON (orsl.`id_order_return_state` = a.`state` AND orsl.`id_lang` = '.(int)($cookie->id_lang).')
WHERE a.state = 5
'.(Tools::getValue('return_order')?' AND a.id_order='.(int)Tools::getValue('return_order'):'').'
ORDER BY a.date_add DESC'
);
$nonreceived_order_returns = Db::getInstance()->ExecuteS('
SELECT a.*, orsl.`name`
FROM '._DB_PREFIX_.'order_return a
LEFT JOIN '._DB_PREFIX_.'order_return_state_lang orsl ON (orsl.`id_order_return_state` = a.`state` AND orsl.`id_lang` = '.(int)($cookie->id_lang).')
WHERE a.state = 6
'.(Tools::getValue('return_order')?' AND a.id_order='.(int)Tools::getValue('return_order'):'').'
ORDER BY a.date_add DESC'
);
if(Tools::getValue('return_order') && empty($order_returns) && empty($ended_order_returns) && empty($nonreceived_order_returns)) {
HelperFormBootstrap::displayWarning('Aucun retour trouvé');
}
$colorStates = array(
1 => "anticon anticon-hour-glass text-orange",
2 => "anticon anticon-hour-glass text-orange",
3 => "anticon anticon-box-add text-orange",
4 => "anticon anticon-cross text-rose",
5 => "anticon anticon-checkmark text-green-light",
6 => "anticon anticon-warning text-danger",
);
$helper = new HelperFormBootstrap();
$helper->_select2 = true;
$helper->_inputMask = true;
$html = $helper->renderStyle();
$html .= '
Rechercher par code barre
';
if((!Tools::getValue('show_history') && !Tools::getValue('show_non_received')) || Tools::getValue('return_order')) {
$html.='
'.$this->l('#').' |
'.$this->l('# Order').' |
'.$this->l('# Customer').' |
'.$this->l('Status').' |
'.$this->l('Date').' |
'.$this->l('Action').' |
';
foreach ($order_returns as $key => $return) {
$html .= '
'.$return['id_order_return'].' |
n° '.$return['id_order'].' |
'.$return['id_customer'].' |
'.$return['name'].' |
'.date('d/m/Y H:i',strtotime($return['date_add'])).' |
|
';
}
$html .= '
';
}
if(Tools::getValue('show_non_received') || Tools::getValue('return_order')) {
$html.='
'.$this->l('#').' |
'.$this->l('# Order').' |
'.$this->l('# Customer').' |
'.$this->l('Status').' |
'.$this->l('Date').' |
'.$this->l('Action').' |
';
foreach ($nonreceived_order_returns as $key => $return) {
$html .= '
'.$return['id_order_return'].' |
n° '.$return['id_order'].' |
'.$return['id_customer'].' |
'.$return['name'].' |
'.date('d/m/Y H:i',strtotime($return['date_add'])).' |
|
';
}
$html .= '
';
}
if(Tools::getValue('show_history') || Tools::getValue('return_order')) {
$html.='
'.$this->l('#').' |
'.$this->l('# Order').' |
'.$this->l('# Customer').' |
'.$this->l('Status').' |
'.$this->l('Date').' |
'.$this->l('Action').' |
';
foreach ($ended_order_returns as $key => $return) {
$html .= '
'.$return['id_order_return'].' |
n° '.$return['id_order'].' |
'.$return['id_customer'].' |
'.$return['name'].' |
'.date('d/m/Y H:i',strtotime($return['date_add'])).' |
|
';
}
$html .= '
';
}
$html .= '
';
$helper->_js .= '
';
$html .= $helper->renderScript();
echo $html;
}
public function getOrderDetail($cart, $id_lang, $order){
if(Db::getInstance()->getValue('
SELECT `id_carrier`
FROM `'._DB_PREFIX_.'carrier`
WHERE `id_carrier` = '.(int) $cart->id_carrier.'
AND `name` LIKE "%colissimo%"
')) {
$socol = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'socolissimo_delivery_info`
WHERE `id_cart` = '.(int) $cart->id.'
AND `cecountry` IN ("FR","BE","ES")
AND (`pradress1`!= "" OR `pradress2`!= "" OR `pradress3`!= "" OR `pradress4`!= "")
');
if($socol && (int)$cart->id_carrier != (int)Configuration::get('ANT_CARRIER_DOM')) {
$order_address = nl2br(preg_replace("/(\r\n){2,}/", "\r\n", implode("\r\n", array(
$socol['cefirstname'].' '.$socol['cename'],
$socol['cecompanyname'],
$socol['prname'],
$socol['prcompladress'],
$socol['pradress1'],
$socol['pradress2'],
$socol['pradress3'],
$socol['pradress4'],
$socol['przipcode'].' '.$socol['prtown'],
$socol['cecountry'],
$socol['cephonenumber'],
!empty($socol['cedoorcode1'])? 'Code porte 1 : '.$socol['cedoorcode1']: '',
!empty($socol['cedoorcode2'])? 'Code porte 2 : '.$socol['cedoorcode2']: '',
$socol['cedeliveryinformation'],
))));
} else {
$order_address = nl2br(AddressFormat::generateAddress(new Address((int) $order->id_address_delivery)));
}
} elseif(Db::getInstance()->getValue('
SELECT COUNT(*)
FROM `'._DB_PREFIX_.'mr_method`
WHERE `id_carrier` = '.(int) $cart->id_carrier.'
AND `MR_Selected_Num` IS NOT NULL
')) {
$mr = Db::getInstance()->getRow('
SELECT mr_s.*
FROM `' . _DB_PREFIX_ . 'mr_selected` mr_s
WHERE `id_cart` = ' . (int) $cart->id . '
');
if($mr) {
$order_address = nl2br(preg_replace("/(\r\n){2,}/", "\r\n", implode("\r\n", array(
$mr['MR_Selected_LgAdr1'],
$mr['MR_Selected_LgAdr2'],
$mr['MR_Selected_LgAdr3'] . ' ' . $mr['MR_Selected_LgAdr4'],
$mr['MR_Selected_CP'] . ' ' . $mr['MR_Selected_Ville'],
'FRANCE',
))));
} else {
$order_address = nl2br(AddressFormat::generateAddress(new Address((int) $order->id_address_delivery)));
}
} else {
$order_address = nl2br(AddressFormat::generateAddress(new Address((int) $order->id_address_delivery)));
}
$carrier_name = Db::getInstance()->getValue('
SELECT `name`
FROM `'._DB_PREFIX_.'carrier`
WHERE `id_carrier` = '.(int) $cart->id_carrier.'
');
return array(
'order_invoice_address' => nl2br(AddressFormat::generateAddress(new Address((int) $order->id_address_invoice))),
'order_address' => $order_address,
'carrier_name' => $carrier_name,
);
}
}