Merge remote-tracking branch 'origin/ticket/r15365-logistic-reshipping'

This commit is contained in:
Michael RICOIS 2018-01-15 16:04:15 +01:00
commit 35e9afa6d9
2 changed files with 52 additions and 168 deletions

View File

@ -274,7 +274,7 @@ class AdminLogistics extends AdminTab
$order = new Order((int) $id_order);
if (Validate::isLoadedObject($order)) {
$parcel_carrier == 'laposte' ? $weight = 0.24 : true;
if ($parcel_carrier == "laposte" || $parcel_carrier == "mondialrelay") {
if ($parcel_carrier == 'laposte' || $parcel_carrier == 'mondialrelay') {
$result = $logistics_carriers[$parcel_carrier]->registerParcel($order, $products, $weight);
if($result[0] != '') {
$this->_html .= $result[0];

View File

@ -120,105 +120,8 @@ if(($id_order = (int) Tools::getValue('id_order'))
$invoice_address = new Address($order->id_address_invoice);
$delivery_address = new Address($order->id_address_delivery);
/*if($delivery_address->id_country == 8) {
$replace_tests = array(
'-S-' => ' SUR ',
'-SS-' => ' SOUS ',
' ST-' => ' SAINT ',
'-ST ' => ' SAINT ',
'-ST-' => ' SAINT ',
' STE-' => ' SAINTE ',
'-STE ' => ' SAINTE ',
'-STE ' => ' SAINTE ',
' MT-' => ' MONT ',
'-MT ' => ' MONT ',
'-MT-' => ' MONT ',
' BG-' => ' BOURG ',
'-BG ' => ' BOURG ',
'-BG-' => ' BOURG ',
' GD-' => ' GRAND ',
'-GD ' => ' GRAND ',
'-GD-' => ' GRAND ',
' GDE-' => ' GRANDE ',
'-GDE ' => ' GRANDE ',
'-GDE-' => ' GRANDE ',
' MTS-' => ' MONTS ',
'-MTS ' => ' MONTS ',
'-MTS-' => ' MONTS ',
' VX-' => ' VIEUX ',
'-VX ' => ' VIEUX ',
'-VX-' => ' VIEUX ',
' HT-' => ' HAUT ',
'-HT ' => ' HAUT ',
'-HT-' => ' HAUT ',
' BS-' => ' BAS ',
'-BS ' => ' BAS ',
'-BS-' => ' BAS ',
' S ' => ' SUR ',
' SS ' => ' SOUS ',
' ST ' => ' SAINT ',
' STE ' => ' SAINTE ',
' MT ' => ' MONT ',
' BG ' => ' BOURG ',
' GD ' => ' GRAND ',
' GDE ' => ' GRANDE ',
' MTS ' => ' MONTS ',
' VX ' => ' VIEUX ',
' HT ' => ' HAUT ',
' BS ' => ' BAS ',
' ST. ' => ' SAINT ',
);
$cities = array();
foreach(Db::getInstance()->ExecuteS('
SELECT `city`
FROM `'._DB_PREFIX_.'france_postcode`
WHERE `postcode` = "'.pSQL(trim($delivery_address->postcode)).'"
') as $row) {
$cities[] = $row['city'];
}
$found = FALSE;
if($cities) {
foreach($cities as $city) {
if(str_replace(array('\\', '-', '_', ' ', '/', '\'', '"', '«', '»', '', ' ', '.', ',',), '', strtolower(trim(stripaccents($city)))) == str_replace(array('\\', '-', '_', ' ', '/', '\'', '"', '«', '»', '', ' ', '.', ',',), '', strtolower(trim(stripaccents(preg_replace('/ C(I|E)DEX(.*)$/i', '', $delivery_address->city)))))) {
$found = TRUE;
}
}
}
if(!$found) {
foreach($cities as $city) {
$clean_city = str_replace(array('\\', '-', '_', ' ', '/', '\'', '"', '«', '»', '', ' ', '.', ',',), '', strtolower(trim(stripaccents($city))));
$clean_customer_city = str_replace(array('\\', '-', '_', ' ', '/', '\'', '"', '«', '»', '', ' ', '.', ',',), '', strtolower(trim(str_ireplace('/', ' SUR ', str_ireplace(' S/', ' SUR ', str_ireplace(array_keys($replace_tests), array_values($replace_tests), stripaccents(' '.preg_replace('/ C(I|E)DEX(.*)$/i', '', $delivery_address->city).' ')))))));
if($clean_city === $clean_customer_city
|| $clean_city === 'le'.$clean_customer_city
|| $clean_city === 'la'.$clean_customer_city
|| $clean_city === 'les'.$clean_customer_city
|| $clean_city === 'l'.$clean_customer_city
|| 'le'.$clean_city === $clean_customer_city
|| 'la'.$clean_city === $clean_customer_city
|| 'les'.$clean_city === $clean_customer_city
|| 'l'.$clean_city === $clean_customer_city) {
$found = TRUE;
}
}
}
$france_address_error = !$found;
$france_address_suggestions = array();
if($france_address_error) {
$france_address_suggestions = Db::getInstance()->ExecuteS('
SELECT `postcode`, `city`
FROM `'._DB_PREFIX_.'france_postcode`
WHERE `postcode` = "'.pSQL($delivery_address->postcode).'"
OR `city` = "'.pSQL($delivery_address->city).'"
GROUP BY `postcode`, `city`
');
}
} else {*/
$france_address_error = FALSE;
$france_address_suggestions = array();
/*}*/
$id_order_details = array();
@ -227,35 +130,32 @@ if(($id_order = (int) Tools::getValue('id_order'))
$link = new Link(2);
$products = array();
foreach($order->getProductsDetail() as $p) {
// --- Get quantity sent
// LaPoste
$p['product_quantity_sent'] += (int) Db::getInstance()->getValue('
SELECT IFNULL(SUM(`quantity`), 0)
FROM `'._DB_PREFIX_.'lapostews`
WHERE `id_order_detail` = '.(int) $p['id_order_detail'].'
');
// Exapaq
$p['product_quantity_sent'] += (int) Db::getInstance()->getValue('
SELECT IFNULL(SUM(`quantity`), 0)
FROM `'._DB_PREFIX_.'exapaqws`
WHERE `id_order_detail` = '.(int) $p['id_order_detail'].'
');
/**
* @Override MondialRelay
*/
// MondialRelay
$p['product_quantity_sent'] += (int) Db::getInstance()->getValue('
SELECT IFNULL(SUM(`quantity`), 0)
FROM `'._DB_PREFIX_.'mondialrelay_parcel`
WHERE `id_order_detail` = ' . (int) $p['id_order_detail'] . '
');
/**
* @Override Philea
*/
// Philea
$p['product_quantity_sent'] += (int) Db::getInstance()->getValue('
SELECT IFNULL(SUM(`quantity`), 0)
FROM `'._DB_PREFIX_.'philea_parcel`
WHERE `id_order_detail` = ' . (int) $p['id_order_detail'] . '
');
/**
* @Override Dropshipping
*/
// DropShipping
$p['product_quantity_sent'] += (int) Db::getInstance()->getValue('
SELECT IFNULL(SUM(`quantity`), 0)
FROM `'._DB_PREFIX_.'ant_dropshipping_parcel`
@ -287,21 +187,6 @@ if(($id_order = (int) Tools::getValue('id_order'))
$p['image'] = '//'.$link->getImageLink('image', $p['product_id'].'-'.$p['id_image'], 'home');
/*$shipping = Db::getInstance()->getRow('
SELECT s.`id_shipping`, s.`id_sale`
FROM `'._DB_PREFIX_.'privatesale_shipping_sale` s
LEFT JOIN `'._DB_PREFIX_.'product_ps_cache` c
ON c.`id_sale` = s.`id_sale`
WHERE c.`id_product` = '.(int) $p['product_id'].'
');
if(!$shipping) {
$p['id_shipping'] = 1; // PSS
$p['id_sale'] = 999999;
} else {
$p['id_shipping'] = $shipping['id_shipping'];
$p['id_sale'] = $shipping['id_sale'];
}*/
$p['id_shipping'] = 1;
$p['id_sale'] = (int) Db::getInstance()->getValue('
SELECT `id_sale`
@ -315,7 +200,7 @@ if(($id_order = (int) Tools::getValue('id_order'))
WHERE `id_product` = '.(int) $p['product_id'].' AND id_order = '.(int)$id_order
);
if(!isset($sales_carriers[(int) $p['id_sale']])) {
if (!isset($sales_carriers[(int) $p['id_sale']])) {
$sales_carriers[(int) $p['id_sale']] = array();
foreach(Db::getInstance()->ExecuteS('
SELECT `id_carrier`
@ -327,43 +212,12 @@ if(($id_order = (int) Tools::getValue('id_order'))
}
$p['carriers'] = $sales_carriers[(int) $p['id_sale']];
$p['location'] = isset($locations[(int) $p['product_id'].'-'.(int) $p['product_attribute_id']]) ?
$locations[(int) $p['product_id'].'-'.(int) $p['product_attribute_id']]: '';
$p['location'] = isset($locations[(int) $p['product_id'].'-'.(int) $p['product_attribute_id']])? $locations[(int) $p['product_id'].'-'.(int) $p['product_attribute_id']]: '';
// --- Get Shipping Numbers
$shipping_numbers = array();
foreach(Db::getInstance()->ExecuteS('
SELECT l.`shipping_number`
FROM `'._DB_PREFIX_.'lapostews` l
LEFT JOIN `'._DB_PREFIX_.'order_detail` d ON (d.`id_order_detail` = l.`id_order_detail`)
LEFT JOIN `'._DB_PREFIX_.'order_history` h ON (h.`id_order` = d.`id_order`)
WHERE h.`id_order` = '.(int) $order->id.'
') as $row) {
$shipping_numbers[] = '"'.pSQL($row['shipping_number']).'"';
}
foreach(Db::getInstance()->ExecuteS('
SELECT e.`shipping_number`
FROM `'._DB_PREFIX_.'exapaqws` e
LEFT JOIN `'._DB_PREFIX_.'order_detail` d ON (d.`id_order_detail` = e.`id_order_detail`)
LEFT JOIN `'._DB_PREFIX_.'order_history` h ON (h.`id_order` = d.`id_order`)
WHERE h.`id_order` = '.(int) $order->id.'
') as $row) {
$shipping_numbers[] = '"'.pSQL($row['shipping_number']).'"';
}
/*
* @Override MondialRelay
*/
foreach(Db::getInstance()->ExecuteS('
SELECT l.`shipping_number`
FROM `'._DB_PREFIX_.'mondialrelay_parcel` l
LEFT JOIN `'._DB_PREFIX_.'order_detail` d ON (d.`id_order_detail` = l.`id_order_detail`)
LEFT JOIN `'._DB_PREFIX_.'order_history` h ON (h.`id_order` = d.`id_order`)
WHERE h.`id_order` = '.(int) $order->id.'
') as $row) {
$shipping_numbers[] = '"'.pSQL($row['shipping_number']).'"';
}
/*
* @Override Philea
*/
// Philea
foreach(Db::getInstance()->ExecuteS('
SELECT l.`shipping_number`
FROM `'._DB_PREFIX_.'philea_parcel` l
@ -373,12 +227,41 @@ if(($id_order = (int) Tools::getValue('id_order'))
') as $row) {
$shipping_numbers[] = '"'.pSQL($row['shipping_number']).'"';
}
// LaPoste
foreach(Db::getInstance()->ExecuteS('
SELECT l.`shipping_number`
FROM `'._DB_PREFIX_.'lapostews` l
LEFT JOIN `'._DB_PREFIX_.'order_detail` d ON (d.`id_order_detail` = l.`id_order_detail`)
LEFT JOIN `'._DB_PREFIX_.'order_history` h ON (h.`id_order` = d.`id_order`)
WHERE h.`id_order` = '.(int) $order->id.'
') as $row) {
$shipping_numbers[] = '"'.pSQL($row['shipping_number']).'"';
}
// Exapaq
foreach(Db::getInstance()->ExecuteS('
SELECT e.`shipping_number`
FROM `'._DB_PREFIX_.'exapaqws` e
LEFT JOIN `'._DB_PREFIX_.'order_detail` d ON (d.`id_order_detail` = e.`id_order_detail`)
LEFT JOIN `'._DB_PREFIX_.'order_history` h ON (h.`id_order` = d.`id_order`)
WHERE h.`id_order` = '.(int) $order->id.'
') as $row) {
$shipping_numbers[] = '"'.pSQL($row['shipping_number']).'"';
}
// MondialRelay
foreach(Db::getInstance()->ExecuteS('
SELECT l.`shipping_number`
FROM `'._DB_PREFIX_.'mondialrelay_parcel` l
LEFT JOIN `'._DB_PREFIX_.'order_detail` d ON (d.`id_order_detail` = l.`id_order_detail`)
LEFT JOIN `'._DB_PREFIX_.'order_history` h ON (h.`id_order` = d.`id_order`)
WHERE h.`id_order` = '.(int) $order->id.'
') as $row) {
$shipping_numbers[] = '"'.pSQL($row['shipping_number']).'"';
}
if(((int) $p['product_quantity_sent'] === 0)
&& Db::getInstance()->getRow('
if(((int) $p['product_quantity_sent'] === 0) && Db::getInstance()->getRow('
SELECT h.`id_sale`
FROM `'._DB_PREFIX_.'shipping_history` h
WHERE h.`id_sale` = '.((int) $p['id_sale'] === 999999? 0: (int) $p['id_sale']).'
WHERE h.`id_sale` = '.((int) $p['id_sale'] === 999999 ? 0: (int) $p['id_sale']).'
AND h.`id_order` = '.(int) $order->id.'
'.(count($shipping_numbers) > 0? 'AND h.`shipping_number` NOT IN ('.implode(', ', $shipping_numbers).')': '').'
')) {
@ -406,8 +289,24 @@ if(($id_order = (int) Tools::getValue('id_order'))
if(count($id_order_details) > 0) {
$logs = array();
// Send by PHILEA
if ($l = Db::getInstance()->ExecuteS('
SELECT l.*, d.`product_name`, d.`product_reference`, d.`product_supplier_reference`, "Philea" as firstname,
(CASE c.`external_module_name` WHEN "soflexibilite" THEN "laposte" ELSE c.`external_module_name` END) as carrier,
"1" as philea
FROM `'._DB_PREFIX_.'philea_parcel` l
LEFT JOIN `'._DB_PREFIX_.'order_detail` d ON d.`id_order_detail` = l.`id_order_detail`
LEFT JOIN `'._DB_PREFIX_.'orders` o ON o.`id_order` = d.`id_order`
LEFT JOIN `'._DB_PREFIX_.'carrier` c ON c.`id_carrier` = o.`id_carrier`
WHERE l.`id_order_detail` IN ('.implode(', ', $id_order_details).')
AND l.`quantity` > 0
ORDER BY l.`date_add` DESC
')) {
$logs = array_merge($logs, $l);
}
// Send by LAPOSTE
if($l = Db::getInstance()->ExecuteS('
if ($l = Db::getInstance()->ExecuteS('
SELECT l.*, d.`product_name`, d.`product_reference`, d.`product_supplier_reference`,
e.`firstname`, e.`lastname`, "laposte" as carrier, "0" as philea
FROM `'._DB_PREFIX_.'lapostews` l
@ -422,7 +321,7 @@ if(($id_order = (int) Tools::getValue('id_order'))
}
// Send by EXAPAQ
if($l = Db::getInstance()->ExecuteS('
if ($l = Db::getInstance()->ExecuteS('
SELECT l.*, d.`product_name`, d.`product_reference`, d.`product_supplier_reference`,
e.`firstname`, e.`lastname`, "exapaq" as carrier, "0" as philea
FROM `'._DB_PREFIX_.'exapaqws` l
@ -437,7 +336,7 @@ if(($id_order = (int) Tools::getValue('id_order'))
}
// Send by MONDIAL RELAY
if($l = Db::getInstance()->ExecuteS('
if ($l = Db::getInstance()->ExecuteS('
SELECT l.*, d.`product_name`, d.`product_reference`, d.`product_supplier_reference`,
e.`firstname`, e.`lastname`, "mondialrelay" as carrier, "0" as philea
FROM `'._DB_PREFIX_.'mondialrelay_parcel` l
@ -452,7 +351,7 @@ if(($id_order = (int) Tools::getValue('id_order'))
}
// Send by DROPSHIPPING
if($l = Db::getInstance()->ExecuteS('
if ($l = Db::getInstance()->ExecuteS('
SELECT l.*, d.`product_name`, d.`product_reference`, d.`product_supplier_reference`,
"Dropshipping" as firstname, "0" as philea
FROM `'._DB_PREFIX_.'ant_dropshipping_parcel` l
@ -465,21 +364,6 @@ if(($id_order = (int) Tools::getValue('id_order'))
$logs = array_merge($logs, $l);
}
// Send by PHILEA
if($l = Db::getInstance()->ExecuteS('
SELECT l.*, d.`product_name`, d.`product_reference`, d.`product_supplier_reference`, "Philea" as firstname,
(CASE c.`external_module_name` WHEN "soflexibilite" THEN "laposte" ELSE c.`external_module_name` END) as carrier,
"1" as philea
FROM `'._DB_PREFIX_.'philea_parcel` l
LEFT JOIN `'._DB_PREFIX_.'order_detail` d ON d.`id_order_detail` = l.`id_order_detail`
LEFT JOIN `'._DB_PREFIX_.'orders` o ON o.`id_order` = d.`id_order`
LEFT JOIN `'._DB_PREFIX_.'carrier` c ON c.`id_carrier` = o.`id_carrier`
WHERE l.`id_order_detail` IN ('.implode(', ', $id_order_details).')
AND l.`quantity` > 0
ORDER BY l.`date_add` DESC
')) {
$logs = array_merge($logs, $l);
}
} else {
$logs = array();
}