Merge branch 'ticket-philea' into develop

This commit is contained in:
Marion Muszynski 2016-09-07 11:43:17 +02:00
commit 72eadd62bd
5 changed files with 358 additions and 262 deletions

View File

@ -15,12 +15,12 @@ class AdminPhileaMagistor extends AdminTab {
if(!Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'philea_magistor_sync`
FROM `'._DB_PREFIX_.'philea_sync`
WHERE `id_sale` = '.(int) $id_sale.'
AND `status` = 0
')) {
Db::getInstance()->execute('
INSERT INTO `'._DB_PREFIX_.'philea_magistor_sync`
INSERT INTO `'._DB_PREFIX_.'philea_sync`
VALUES (
DEFAULT,
'.(int) $id_sale.',
@ -59,7 +59,7 @@ class AdminPhileaMagistor extends AdminTab {
if($id_sale) {
$active = (int) Tools::getValue('active');
$sql = '
INSERT INTO `'._DB_PREFIX_.'philea_magistor_auto_sync`
INSERT INTO `'._DB_PREFIX_.'philea_auto_sync`
VALUES (
'.(int) $id_sale.',
'.(int) $active.',
@ -82,13 +82,13 @@ class AdminPhileaMagistor extends AdminTab {
if($id_sale) {
if(Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'philea_magistor_sync`
FROM `'._DB_PREFIX_.'philea_sync`
WHERE `id_sale` = '.(int) $id_sale.'
AND (`status` = 2
OR `status` = 4)
')) {
Db::getInstance()->ExecuteS('
UPDATE `'._DB_PREFIX_.'philea_magistor_sync`
UPDATE `'._DB_PREFIX_.'philea_sync`
SET `status` = 3
WHERE id_sale = '.(int) $id_sale.'
LIMIT 1
@ -111,7 +111,7 @@ class AdminPhileaMagistor extends AdminTab {
$id_sales = Tools::getValue('id_sales');
if (count($id_sales)){
$sql_values = array();
$sql_insert = 'INSERT INTO `'._DB_PREFIX_.'philea_magistor_archive` (`id_sale`, `date_add`) VALUES';
$sql_insert = 'INSERT INTO `'._DB_PREFIX_.'philea_archive` (`id_sale`, `date_add`) VALUES';
foreach ($id_sales as $id_sale)
$sql_values[] = '(' . (int) $id_sale . ', NOW())';
$sql_insert .= implode(', ', $sql_values) . ' ON DUPLICATE KEY UPDATE `date_add` = NOW()';
@ -128,7 +128,7 @@ class AdminPhileaMagistor extends AdminTab {
}
elseif(Tools::isSubmit('unarchiveSale') && Tools::getValue('id_sale_unarchive')){
if (Db::getInstance()->executeS('
DELETE FROM `' . _DB_PREFIX_ . 'philea_magistor_archive`
DELETE FROM `' . _DB_PREFIX_ . 'philea_archive`
WHERE `id_sale` = ' . (int) Tools::getValue('id_sale_unarchive') . '
LIMIT 1
')){
@ -144,7 +144,7 @@ class AdminPhileaMagistor extends AdminTab {
$sql = '
SELECT *
FROM `'._DB_PREFIX_.'philea_magistor_reception`
FROM `'._DB_PREFIX_.'philea_reception`
WHERE `id_sale` = ' . (int) $id_sale . '
AND `filename` LIKE "' . pSQL($filename) . '"';
$recept = Db::getInstance()->getRow($sql);
@ -385,8 +385,8 @@ class AdminPhileaMagistor extends AdminTab {
SELECT
pm_sync.`id_sale`,
MAX(pm_sync.`date_add`) as `sync_date`
FROM `'._DB_PREFIX_.'philea_magistor_sync` pm_sync
LEFT JOIN `'._DB_PREFIX_.'philea_magistor_archive` pm_arch
FROM `'._DB_PREFIX_.'philea_sync` pm_sync
LEFT JOIN `'._DB_PREFIX_.'philea_archive` pm_arch
ON pm_arch.`id_sale` = pm_sync.`id_sale`
WHERE 1
AND `pm_arch`.`id_sale` IS NULL
@ -404,7 +404,7 @@ class AdminPhileaMagistor extends AdminTab {
pm_r.`id_sale`,
pm_r.`filename`,
MAX(pm_r.`date_add`) as `recep_date`
FROM `'._DB_PREFIX_.'philea_magistor_reception` pm_r
FROM `'._DB_PREFIX_.'philea_reception` pm_r
WHERE `id_sale` IN (' . implode(', ', $id_sales) . ')
GROUP BY `id_sale`';
foreach (Db::getInstance()->executeS($sql) as $row)
@ -430,7 +430,7 @@ class AdminPhileaMagistor extends AdminTab {
SELECT
pm_as.`id_sale`,
pm_as.`active` as `auto_sync_active`
FROM `'._DB_PREFIX_.'philea_magistor_auto_sync` pm_as
FROM `'._DB_PREFIX_.'philea_auto_sync` pm_as
WHERE `id_sale` IN (' . implode(', ', $id_sales) . ')
AND pm_as.`active` = 1';
foreach (Db::getInstance()->executeS($sql) as $row)
@ -441,7 +441,7 @@ class AdminPhileaMagistor extends AdminTab {
SELECT
pm_s.`id_sale`,
MAX(pm_s.`date_add`) as `sent_date`
FROM `'._DB_PREFIX_.'philea_magistor_sent` pm_s
FROM `'._DB_PREFIX_.'philea_sent` pm_s
WHERE pm_s.`id_sale` IN (' . implode(', ', $id_sales) . ')
GROUP BY pm_s.`id_sale`';
foreach (Db::getInstance()->executeS($sql) as $row)
@ -481,18 +481,18 @@ class AdminPhileaMagistor extends AdminTab {
// pmas.`active` as `auto_sync_active`,
// p.date_start,
// p.date_end
// FROM `'._DB_PREFIX_.'philea_magistor_sync` pmsync
// LEFT JOIN `'._DB_PREFIX_.'philea_magistor_sent` pms
// FROM `'._DB_PREFIX_.'philea_sync` pmsync
// LEFT JOIN `'._DB_PREFIX_.'philea_sent` pms
// ON pms.`id_sale` = pmsync.`id_sale`
// LEFT JOIN `'._DB_PREFIX_.'privatesale` p
// ON p.`id_sale` = pmsync.`id_sale`
// LEFT JOIN `'._DB_PREFIX_.'category_lang` c
// ON c.`id_category` = p.`id_category`
// LEFT JOIN `'._DB_PREFIX_.'philea_magistor_reception` pmr
// LEFT JOIN `'._DB_PREFIX_.'philea_reception` pmr
// ON pmsync.`id_sale` = pmr.`id_sale`
// LEFT JOIN `'._DB_PREFIX_.'philea_magistor_auto_sync` pmas
// LEFT JOIN `'._DB_PREFIX_.'philea_auto_sync` pmas
// ON pmas.`id_sale` = pmsync.`id_sale`
// LEFT JOIN `'._DB_PREFIX_.'philea_magistor_archive` pm_arch
// LEFT JOIN `'._DB_PREFIX_.'philea_archive` pm_arch
// ON pm_arch.`id_sale` = pmsync.`id_sale`
// WHERE 1
// AND c.id_lang = 2
@ -518,7 +518,7 @@ class AdminPhileaMagistor extends AdminTab {
$archives_options = array();
foreach(Db::getInstance()->executeS('
SELECT a.`id_sale`, cl.`name`
FROM `' . _DB_PREFIX_ . 'philea_magistor_archive` a
FROM `' . _DB_PREFIX_ . 'philea_archive` a
LEFT JOIN `' . _DB_PREFIX_ . 'privatesale` p
ON p.`id_sale` = a.`id_sale`
LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl

View File

@ -8,13 +8,13 @@ if(isset($_SERVER['REMOTE_ADDR'])) {
set_time_limit(600);
if($row = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'philea_magistor_sync`
FROM `'._DB_PREFIX_.'philea_sync`
WHERE `status` = 0
ORDER BY `date_add` ASC
')) {
// SEND ART01
Db::getInstance()->ExecuteS('
UPDATE `'._DB_PREFIX_.'philea_magistor_sync`
UPDATE `'._DB_PREFIX_.'philea_sync`
SET `status` = 1
WHERE `id_sync` = '.(int) $row['id_sync'].'
LIMIT 1
@ -22,9 +22,9 @@ if($row = Db::getInstance()->getRow('
system('cd '.dirname(__FILE__).'/script && php send_article.php '.(int) $row['id_sale']);
sleep(20);
// SEND REC01 - pas de gestion recption fournisseur sur bbb
// SEND REC01 - pas de gestion recption fournisseur sur bbb
/*Db::getInstance()->ExecuteS('
UPDATE `'._DB_PREFIX_.'philea_magistor_sync`
UPDATE `'._DB_PREFIX_.'philea_sync`
SET `status` = 2
WHERE `id_sync` = '.(int) $row['id_sync'].'
LIMIT 1
@ -34,13 +34,13 @@ if($row = Db::getInstance()->getRow('
if($row = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'philea_magistor_sync`
FROM `'._DB_PREFIX_.'philea_sync`
WHERE `status` = 3
ORDER BY `date_add` ASC
')) {
// SEND CDC02
/*Db::getInstance()->ExecuteS('
UPDATE `'._DB_PREFIX_.'philea_magistor_sync`
UPDATE `'._DB_PREFIX_.'philea_sync`
SET `status` = 4
WHERE `id_sync` = '.(int) $row['id_sync'].'
LIMIT 1

View File

@ -79,7 +79,7 @@ class philea_magistor extends Module
public function install()
{
Db::getInstance()->ExecuteS('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'philea_magistor_sent` (
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'philea_sent` (
`id_order` INTEGER NOT NULL,
`date_add` DATETIME NOT NULL,
INDEX (`id_order`)
@ -87,7 +87,7 @@ class philea_magistor extends Module
');
Db::getInstance()->ExecuteS('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'philea_magistor_parcel` (
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'philea_parcel` (
`id_order` INTEGER NOT NULL,
`shipping_number` VARCHAR(64) NOT NULL,
`date_add` DATETIME NOT NULL,
@ -96,7 +96,7 @@ class philea_magistor extends Module
');
Db::getInstance()->ExecuteS('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'philea_magistor_sync` (
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'philea_sync` (
`id_sync` INTEGER NOT NULL AUTO_INCREMENT,
`id_sale` INTEGER NOT NULL,
`status` TINYINT NOT NULL,
@ -107,7 +107,7 @@ class philea_magistor extends Module
');
Db::getInstance()->ExecuteS('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'philea_magistor_auto_sync` (
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'philea_auto_sync` (
`id_sale` INTEGER NOT NULL,
`active` TINYINT NOT NULL,
`last_sent` DATETIME NOT NULL,
@ -117,15 +117,36 @@ class philea_magistor extends Module
');
Db::getInstance()->execute('
CREATE TABLE `'._DB_PREFIX_.'philea_magistor_archive` (
CREATE TABLE `'._DB_PREFIX_.'philea_archive` (
`id_sale` int(11) NOT NULL,
`date_add` datetime NOT NULL,
PRIMARY KEY (`id_sale`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
');
if (parent::install() == false)
if (parent::install() == false) {
return false;
}
return true;
}
public function uninstall() {
if (parent::uninstall() == false) {
return false;
}
// Db::getInstance()->Execute('DROP TABLE `'._DB_PREFIX_.'philea_sent`');
// Db::getInstance()->Execute('DROP TABLE `'._DB_PREFIX_.'philea_parcel`');
// Db::getInstance()->Execute('DROP TABLE `'._DB_PREFIX_.'philea_sync`');
// Db::getInstance()->Execute('DROP TABLE `'._DB_PREFIX_.'philea_auto_sync`');
// Db::getInstance()->Execute('DROP TABLE `'._DB_PREFIX_.'philea_archive`');
Db::getInstance()->Execute('DROP TABLE `'._DB_PREFIX_.'philea_magistor_sent`');
Db::getInstance()->Execute('DROP TABLE `'._DB_PREFIX_.'philea_magistor_parcel`');
Db::getInstance()->Execute('DROP TABLE `'._DB_PREFIX_.'philea_magistor_sync`');
Db::getInstance()->Execute('DROP TABLE `'._DB_PREFIX_.'philea_magistor_auto_sync`');
Db::getInstance()->Execute('DROP TABLE `'._DB_PREFIX_.'philea_magistor_archive`');
return true;
}
@ -334,12 +355,12 @@ class philea_magistor extends Module
')) {
if(!Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'philea_magistor_sync`
FROM `'._DB_PREFIX_.'philea_sync`
WHERE `id_sale` = '.(int) $id_sale.'
AND `status` = 0
')) {
Db::getInstance()->ExecuteS('
INSERT INTO `'._DB_PREFIX_.'philea_magistor_sync`
INSERT INTO `'._DB_PREFIX_.'philea_sync`
VALUES (
DEFAULT,
'.(int) $id_sale.',

View File

@ -12,7 +12,7 @@
$magistorModule = new philea_magistor();
$id_shipping = 4; // PHILEA
//$id_shipping = 4; // PHILEA
$CRE = array(
'OP_CODE' => array(1,10),
@ -53,34 +53,30 @@
@set_time_limit(0);
// Checking for ".bal" files with a "CRE" prefix that has an equivalent ".dat" file and process them...
$inFolder = dirname(__FILE__) . '/IN/';
$iterator = new DirectoryIterator($inFolder);
$id_order_state = Configuration::get('PHILEA_MAGISTOR_STATUS_CRE');
foreach ($iterator as $fileinfo) {
if ($fileinfo->isFile()) {
if( preg_match( '@^CRE(.*)\.BAL@', $fileinfo->getFilename() ) ) {
if( preg_match('@^CRE(.*)\.BAL@', $fileinfo->getFilename())) {
$datFile = $fileinfo->getPath() . '/' . preg_replace( '@BAL$@', 'DAT', $fileinfo->getFilename() );
if( file_exists( $datFile ) ) {
$content = file_get_contents( $datFile );
$lines = preg_split( '@\n@', $content );
if( !empty($lines) ) {
if(file_exists($datFile)) {
$content = file_get_contents($datFile);
$lines = preg_split('@\n@',$content);
if(!empty($lines)) {
foreach( $lines as $line ) {
$data = array();
foreach($format as $field=>$value)
foreach($format as $field=>$value) {
$data[] = substr($line, ($value[0]-1), $value[1]);
}
if( !isset($data[2]) || (isset($data[2]) && !$data[2]) )
if(!isset($data[2]) || (isset($data[2]) && !$data[2])){
continue;
}
$id_sale = 0;
$id_order = (string) $data[3];
@ -95,227 +91,285 @@
$id_order = (int) $id_order;
}
$order = new Order((int) ($id_order));
if($detail = Db::getInstance()->getRow('
SELECT `id_order_detail`, `product_quantity` - GREATEST(`product_quantity_return`, `product_quantity_refunded`) AS `quantity`
FROM `'._DB_PREFIX_.'order_detail`
WHERE `id_order` = '.(int) $id_order.'
AND (
`product_ean13` = "'.pSQL($data[9]).'"
OR `product_supplier_reference` = "'.pSQL($data[9]).'"
)
')) {
$sent = (int) Db::getInstance()->getValue('
SELECT SUM(`quantity`)
FROM `'._DB_PREFIX_.'philea_parcel`
WHERE `id_order_detail` = '.(int) $detail['id_order_detail'].'
');
if(Validate::isLoadedObject($order))
{
$order->shipping_number = trim($data[5]);
$order->id_sale_shipping = $id_sale;
$to_send = (int) $detail['quantity'] - $sent;
$new_id_order_state = $id_order_state;
## GET SHIPPING CARRIER ID
$id_active_carrier = FALSE;
$id_inactive_carrier = FALSE;
$carrier_found = FALSE;
if (trim($data[5]) && isset($data[8]) && $data[8]){
$carrier_name = trim($data[8]);
if ($carrier_name == '315')
$carrier_name = 'DUCROS';
$carriers = philea_magistor::getCarriersIdByRef($carrier_name);
if ($carriers){
foreach ($carriers as $carrier) {
if ($carrier['name'] == 'GLS' && $carrier_name == 'DPD')
continue;
if ($carrier['active'] == 1 && $carrier['deleted'] == 0)
$id_active_carrier = (int) $carrier['id_carrier'];
if ($carrier['active'] == 0 && $carrier['deleted'] == 0)
$id_inactive_carrier = (int) $carrier['id_carrier'];
if ((int) $order->id_carrier == (int) $carrier['id_carrier']){
$carrier_found = (int) $order->id_carrier;
}
}
}
}
if ($carrier_found)
$id_carrier = (int) $carrier_found;
elseif ($id_active_carrier)
$id_carrier = (int) $id_active_carrier;
elseif ($id_inactive_carrier)
$id_carrier = (int) $id_inactive_carrier;
else
$id_carrier = (int) $order->id_carrier;
$order->id_carrier_shipping = (int) $id_carrier;
$order->update();
if (version_compare(_PS_VERSION_,'1.5','<'))
$last_order_state = $order->getCurrentState();
else
$last_order_state = $order->getCurrentOrderState();
// ANTADIS
$is_single = !((bool) Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'product_ps_cache` c
LEFT JOIN `'._DB_PREFIX_.'order_detail` d ON (d.`product_id` = c.`id_product`)
WHERE d.`id_order` = '.(int) $order->id.'
'));
// PRODUCTS FROM OTHER SALES
if(!$is_single) {
$sent = TRUE;
// GET QUANTITIES - SENT BY LAPOSTE
foreach(Db::getInstance()->ExecuteS('
SELECT d.`id_order_detail`, d.`product_id`, d.`product_attribute_id`, SUM(d.`product_quantity` - GREATEST(d.`product_quantity_return`, d.`product_quantity_refunded`) - IFNULL(l.`quantity`, 0)) AS `quantity`
FROM `'._DB_PREFIX_.'order_detail` d
LEFT JOIN `'._DB_PREFIX_.'lapostews` l
ON d.`id_order_detail` = l.`id_order_detail`
WHERE d.`id_order` = '.(int) $order->id.'
GROUP BY d.`id_order_detail`
') as $row) {
// GET QUANTITIES - SENT BY LAPOSTE - SENT BY EXAPAQ
$row['quantity'] -= (int) Db::getInstance()->getValue('
SELECT SUM(`quantity`)
FROM `'._DB_PREFIX_.'exapaqws`
WHERE `id_order_detail` = '.(int) $row['id_order_detail'].'
if((int) $data[10] <= $to_send) {
if(trim($data[5]) != '') {
Db::getInstance()->ExecuteS('
INSERT INTO `'._DB_PREFIX_.'philea_parcel`
VALUES (
'.(int) $detail['id_order_detail'].',
'.(int) $data[10].',
"'.pSQL(trim($data[5])).'",
"'.pSQL(substr($data[7], 0, 4).'-'.substr($data[7], 4, 2).'-'.substr($data[7], 6, 2).' 18:00:00').'"
)
');
// IF QTIES > 0 (NOT ALL SENT) GET IF PRODUCT HAS BEEN SENT
// order has been registered in shipping_history for another shipping methode
if((int) $row['quantity'] > 0) {
if(!Db::getInstance()->getRow('
SELECT c.`id_sale`
FROM `'._DB_PREFIX_.'product_ps_cache` c
LEFT JOIN `'._DB_PREFIX_.'shipping_history` h
ON h.`id_sale` = c.`id_sale`
WHERE c.`id_product` = '.(int) $row['product_id'].'
AND h.`id_order` = '.(int) $order->id.'
')) {
$sent = FALSE;
break;
$id_order_details[] = (int) $detail['id_order_detail'];
$shipping_numbers[] = '"'.pSQL(trim($data[5])).'"';
if (isset($data[8]) && $data[8]){
$carrier_name = trim($data[8]);
$carriers = philea_magistor::getCarriersIdByRef($carrier_name);
if ($carriers){
foreach ($carriers as $carrier) {
if ($carrier['name'] == 'GLS' && $carrier_name == 'DPD') {
continue;
}
if ($carrier['active'] == 1 && $carrier['deleted'] == 0) {
$id_active_carrier = (int) $carrier['id_carrier'];
}
if ($carrier['active'] == 0 && $carrier['deleted'] == 0) {
$id_inactive_carrier = (int) $carrier['id_carrier'];
}
// if ((int) $order->id_carrier == (int) $carrier['id_carrier']){
// $carrier_found = (int) $order->id_carrier;
// }
}
}
}
if(isset($id_active_carrier) && $id_active_carrier) {
$parcel_carrier[(int) $id_order.'|'.trim($data[5])] = $carriers[$data[8]];
} else { // MISSING CARRIER
$errors[] = array(
$data[3],
$data[8], // carrier name
$data[9],
$data[10], // quantity
$data[5], // shipping number
$data[7],
'carrier_missing',
);
}
} else { // SHIPPING NUMBER IS EMPTY
$errors[] = array(
$data[3],
$data[8],
$data[9],
$data[10],
$data[5],
$data[7],
'empty_shipping_number',
);
}
if(!$sent) {
$new_id_order_state = 17;
}
}
$products_sent = '';
mail('marion@antadis.com', 'philea id op', serialize($data[3]));
if(substr((string) $data[3], 0, 2) == 'OP') {
$id_sale = explode('-', substr((string) $data[3], 2));
if(count($id_sale) < 2) {
mail('marion@antadis.com', '[BBB] Philea erreur', serialize($data));
exit;
}
$id_sale = (int) $id_sale[0];
} else {
$id_sale = 0;
// TOO MUCH
$errors[] = array(
$data[3],
$data[8],
$data[9],
$data[10],
$data[5],
$data[7],
'wrong_quantities',
);
}
foreach(Db::getInstance()->ExecuteS('
SELECT d.`product_name`, d.`product_quantity` - GREATEST(d.`product_quantity_return`, d.`product_quantity_refunded`) AS `quantity`
FROM `'._DB_PREFIX_.'order_detail` d
LEFT JOIN `'._DB_PREFIX_.'product_ps_cache` c
ON c.`id_product` = d.`product_id`
WHERE c.`id_sale` = '.(int) $id_sale.'
AND d.`id_order` = '.(int) $id_order.'
') as $p) {
if((int) $p['quantity'] > 0) {
$products_sent .= '<br />'."\r\n".$p['quantity'].' x '.$p['product_name'];
}
}
$templateVars = array(
'{product_list}' => !empty($products_sent)? '<strong>Contenu du colis :</strong>'.$products_sent: '',
'{product_list_txt}' => !empty($products_sent)? 'Contenu du colis :'.strip_tags($products_sent): '',
} else {
// NOT FOUND
$errors[] = array(
$data[3],
$data[8],
$data[9],
$data[10],
$data[5],
$data[7],
'product_not_found',
);
}
}
if(/*$last_order_state->id*/ $last_order_state != $new_id_order_state && $last_order_state != 5 && ($new_id_order_state != 17 || $last_order_state != 4))
{
$id_order = (int)$order->id;
$new_history = new OrderHistory();
$new_history->id_order = (int)$order->id;
$new_history->changeIdOrderState((int)$new_id_order_state, $id_order);
$new_history->addWithemail(TRUE, $templateVars);
}
$id_order_details = array_unique($id_order_details);
$shipping_numbers = array_unique($shipping_numbers);
Db::getInstance()->Execute('
INSERT INTO `'._DB_PREFIX_.'philea_magistor_parcel`
if(count($id_order_details) > 0) {
$id_orders = array();
$orders_infos = array();
foreach(Db::getInstance()->ExecuteQ('
SELECT d.`id_order`, p.`shipping_number`, p.`date_add`
FROM `'._DB_PREFIX_.'philea_parcel` p
LEFT JOIN `'._DB_PREFIX_.'order_detail` d
ON p.`id_order_detail` = d.`id_order_detail`
WHERE d.`id_order_detail` IN ('.implode(', ', $id_order_details).')
AND p.`shipping_number` IN ('.implode(', ', $shipping_numbers).')
GROUP BY d.`id_order`, p.`shipping_number`
') as $row) {
Db::getInstance()->ExecuteS('
INSERT INTO `'._DB_PREFIX_.'shipping_history`
VALUES (
'.(int) $order->id.',
"'.pSQl(trim($order->shipping_number)).'",
'.(int) $id_sale.',
NOW()
'.(int) $row['id_order'].',
"'.pSQL($row['shipping_number']).'",
"'.pSQL($row['date_add']).'",
'.(int) $parcel_carrier[(int) $row['id_order'].'|'.$row['shipping_number']].',
0
)
');
if ($data[5])
{
// $code_socolissimo = Db::getInstance()->getValue('SELECT delivery_mode FROM `'._DB_PREFIX_.'socolissimo_delivery_info` WHERE id_cart = '.$order->id_cart);
// $key_carrier = $order->id_carrier.':'.($code_socolissimo? $code_socolissimo: '');
// if($code_socolissimo && isset($socol_to_magistor[$code_socolissimo])) {
// $carrier_value = $socol_to_magistor[$code_socolissimo];
// } else {
// if(!isset($tab_conversion_carrier[$key_carrier])) {
// $carrier_value = $socol_to_magistor['DOM'];
// } else {
// $carrier_value = $tab_conversion_carrier[$key_carrier];
// }
// }
$id_orders[] = (int) $row['id_order'];
if(!isset($orders_infos[(int) $row['id_order']])) {
$orders_infos[(int) $row['id_order']] = array();
}
$orders_infos[(int) $row['id_order']][] = array($row['shipping_number'], $row['date_add'], (int) $parcel_carrier[(int) $row['id_order'].'|'.$row['shipping_number']]);
}
// $code_socolissimo = FALSE;
// $code_mr = FALSE;
// $relay_code = FALSE;
$id_orders = array_unique($id_orders);
// // GET DELIVERY METHOD
// $code_socolissimo = Db::getInstance()->getValue('SELECT delivery_mode FROM `'._DB_PREFIX_.'socolissimo_delivery_info` WHERE id_cart = '.$order->id_cart);
// // Socolissimo delivery method
// if ($code_socolissimo){
// $relay_code = $code_socolissimo;
// }
// elseif (Module::isInstalled('mondialrelay')){
// $code_mr = Db::getInstance()->getValue('
// SELECT mr_m.`dlv_mode`
// FROM `'._DB_PREFIX_.'mr_selected` mr_s
// LEFT JOIN `'._DB_PREFIX_.'mr_method` mr_m
// ON (mr_m.id_mr_method = mr_s.id_method)
// WHERE mr_s.`id_cart` = ' . (int) $order->id_cart
// );
// // Mondial Relay delivery method
// if ($code_mr)
// $relay_code = $code_mr;
// }
// $key_carrier = $order->id_carrier.':'.($relay_code? $relay_code: '');
// if($code_socolissimo && isset($socol_to_magistor[$code_socolissimo])) {
// $carrier_value = $socol_to_magistor[$code_socolissimo];
// } elseif($code_mr && isset($mr_to_magistor[$code_mr])) {
// $carrier_value = $mr_to_magistor[$code_mr];
// } else {
// if(!isset($tab_conversion_carrier[$key_carrier])) {
// $carrier_value = $socol_to_magistor['DOM'];
// } else {
// $carrier_value = $tab_conversion_carrier[$key_carrier];
// }
// }
// if($code_socolissimo && isset($socol_to_magistor[$code_socolissimo])) {
// $carrier_value = $socol_to_magistor[$code_socolissimo];
// } else {
// if(!isset($tab_conversion_carrier[$key_carrier])) {
// $carrier_value = $socol_to_magistor['DOM'];
// } else {
// $carrier_value = $tab_conversion_carrier[$key_carrier];
// }
// }
$products = Db::getInstance()->ExecuteQ('
SELECT d.`id_order_detail`, d.`id_order`, c.`id_sale`, d.`product_quantity` - GREATEST(d.`product_quantity_refunded`, d.`product_quantity_return`) AS `quantity`
FROM ps_order_detail d
LEFT JOIN `'._DB_PREFIX_.'product_ps_cache` c
ON d.`product_id` = c.`id_product`
WHERE d.`id_order` IN ('.implode(', ', $id_orders).')
');
## GET DELIVERY METHOD
// $carrier = new Carrier((int)($order->id_carrier));
$customer = new Customer((int) $order->id_customer);
$carrier = new Carrier((int) $order->id_carrier_shipping);
if (!Validate::isLoadedObject($customer) OR !Validate::isLoadedObject($carrier))
die(Tools::displayError());
$sent_sales = array();
foreach(Db::getInstance()->ExecuteQ('
SELECT `id_order`, `id_sale`
FROM `'._DB_PREFIX_.'shipping_history`
WHERE `id_order` IN ('.implode(', ', $id_orders).')
AND `id_sale` != 0
GROUP BY `id_order`, `id_sale`
') as $row) {
if(!isset($sent_sales[(int) $row['id_order']])) {
$sent_sales[(int) $row['id_order']] = array();
}
$sent_sales[(int) $row['id_order']][] = (int) $row['id_sale'];
}
$to_send = array();
foreach($products as $product) {
if((int) $product['quantity'] > 0
&& (!isset($sent_sales[(int) $product['id_order']])
|| !in_array((int) $product['id_sale'], $sent_sales[(int) $product['id_order']]))) {
$to_send[] = $product;
}
}
unset($products);
$sent_products = array();
foreach(Db::getInstance()->ExecuteQ('
SELECT l.`id_order_detail`, SUM(l.`quantity`) AS `quantity`
FROM `'._DB_PREFIX_.'lapostews` l
LEFT JOIN `'._DB_PREFIX_.'order_detail` d
ON l.`id_order_detail` = d.`id_order_detail`
WHERE d.`id_order` IN ('.implode(', ', $id_orders).')
GROUP BY l.`id_order_detail`
') as $row) {
$sent_products[(int) $row['id_order_detail']] = (int) $row['quantity'];
}
foreach(Db::getInstance()->ExecuteQ('
SELECT l.`id_order_detail`, SUM(l.`quantity`) AS `quantity`
FROM `'._DB_PREFIX_.'philea_parcel` l
LEFT JOIN `'._DB_PREFIX_.'order_detail` d
ON l.`id_order_detail` = d.`id_order_detail`
WHERE d.`id_order` IN ('.implode(', ', $id_orders).')
GROUP BY l.`id_order_detail`
') as $row) {
$sent_products[(int) $row['id_order_detail']] = (int) $row['quantity'];
}
$orders_to_send = array();
$orders_list = array();
$total = count($to_send);
foreach($to_send as $product) {
if(!in_array((int) $product['id_order'], $orders_list)) {
$orders_list[] = (int) $product['id_order'];
}
if(!in_array((int) $product['id_order'], $orders_to_send)) {
if(!isset($sent_products[(int) $product['id_order_detail']])
|| $product['quantity'] > $sent_products[(int) $product['id_order_detail']]) {
$orders_to_send[] = (int) $product['id_order'];
}
}
}
unset($sent_products);
unset($to_send);
$orders_sent = array();
foreach($orders_list as $order) {
if(!in_array($order, $orders_to_send)) {
$orders_sent[] = $order;
}
}
unset($orders_list);
$status_sent = array();
$status_partially_sent = array();
foreach($orders_sent as $order) {
if((int) Db::getInstance()->getValue('
SELECT `id_order_state`
FROM `'._DB_PREFIX_.'order_history`
WHERE `id_order` = '.(int) $order.'
ORDER BY `date_add` DESC
') != 4) {
$status_sent[] = (int) $order;
}
}
foreach($id_orders as $order) {
if(!in_array($order, $status_sent)) {
if(!in_array((int) Db::getInstance()->getValue('
SELECT `id_order_state`
FROM `'._DB_PREFIX_.'order_history`
WHERE `id_order` = '.(int) $order.'
ORDER BY `date_add` DESC
'), array(4, 17, 9))) {
$status_partially_sent[] = (int) $order;
}
}
}
unset($orders_sent);
unset($orders_to_send);
foreach($orders_infos as $id_order => $parcels) {
$order = new Order($id_order);
$customer = new Customer((int) $order->id_customer);
foreach($parcels as $parcel) {
$products_sent = '';
$products_names = array();
foreach(Db::getInstance()->ExecuteQ('
SELECT d.`id_order_detail`, d.`product_name`, SUM(p.`quantity`) AS `quantity`
FROM `'._DB_PREFIX_.'philea_parcel` p
LEFT JOIN `'._DB_PREFIX_.'order_detail` d
ON p.`id_order_detail` = d.`id_order_detail`
WHERE d.`id_order` = '.(int) $id_order.'
AND p.`shipping_number` = "'.pSQL($parcel[0]).'"
AND p.`date_add` = "'.pSQL($parcel[1]).'"
GROUP BY d.`id_order_detail`
') as $p) {
$products_sent .= '<br />'."\r\n".$p['quantity'].' x '.$p['product_name'];
}
$carrier = new Carrier($parcel[2], (int) $order->id_lang);
if((int) $order->id_lang == 3) {
if(preg_match('/colissimo/i', $carrier->name)) {
if(in_array((int) $carrier->id, array(145, 152, 103))) {
$carrier->url .= '&language=es_ES';
}
$content_html = '<strong>Contenido del paquete:</strong>';
@ -326,26 +380,47 @@
}
$templateVars = array(
'{product_list}' => !empty($products_sent)? $content_html.$products_sent: '',
'{product_list_txt}' => !empty($products_sent)? $content_txt.strip_tags($products_sent): '',
'{followup}' => str_replace('@', trim($order->shipping_number), $carrier->url),
'{followup}' => str_replace('@', $parcel[0], $carrier->url),
'{firstname}' => $customer->firstname,
'{lastname}' => $customer->lastname,
'{id_order}' => (int)($order->id)
'{id_order}' => (int) $order->id,
'{product_list}' => !empty($products_sent)? $content_html.$products_sent: '',
'{product_list_txt}' => !empty($products_sent)? $content_txt.strip_tags($products_sent): '',
);
$title = array(
if(in_array($order->id, $status_sent)) {
$history = new OrderHistory();
$history->id_order = (int) $order->id;
$history->changeIdOrderState(4, (int) $order->id);
$history->addWithemail(TRUE, $templateVars);
} elseif(in_array($order->id, $status_partially_sent)) {
$history = new OrderHistory();
$history->id_order = (int) $order->id;
$history->changeIdOrderState(17, (int) $order->id);
$history->addWithemail(TRUE, $templateVars);
}
$subjects = array(
1 => 'Package in transit',
2 => 'Livraison en cours',
3 => 'Paquete en transito',
5 => 'Consegna in corso'
3 => 'Pedido en tránsito',
);
Mail::Send((int)($order->id_lang), 'in_transit', $title[(int)$order->id_lang], $templateVars,
$customer->email, $customer->firstname.' '.$customer->lastname, NULL, NULL, NULL, NULL,
_PS_MAIL_DIR_, true);
Mail::Send(
intval($order->id_lang),
'in_transit',
$subjects[(int) $order->id_lang],
$templateVars,
$customer->email,
$customer->firstname.' '.$customer->lastname
);
}
}
}
if(count($errors) > 0) {
mail('marion@antadis.com', '[BBB] Erreurs integration envoi Philea', serialize($errors));
}
}
$repo_archive = './archives/IN/LIVRAISON/';

View File

@ -54,7 +54,7 @@ if($magistorModule->active) {
FROM `'._DB_PREFIX_.'order_state_current` o
LEFT JOIN `'._DB_PREFIX_.'order_detail` d ON o.`id_order` = d.`id_order`
LEFT JOIN `'._DB_PREFIX_.'product_ps_cache` c ON d.`product_id` = c.`id_product`
LEFT JOIN `'._DB_PREFIX_.'philea_magistor_sent` pms ON (pms.`id_sale` = c.`id_sale` AND pms.`id_order` = o.`id_order`)
LEFT JOIN `'._DB_PREFIX_.'philea_sent` pms ON (pms.`id_sale` = c.`id_sale` AND pms.`id_order` = o.`id_order`)
WHERE o.`id_order_state` IN (2, 3, 4, 13, 17, 9, 18, 19)
AND c.`id_sale` = '.(int) $id_sale.'
AND pms.`id_order` IS NULL
@ -70,7 +70,7 @@ if($magistorModule->active) {
$exclude_orders = array();
// foreach($db->ExecuteS('
// SELECT DISTINCT `id_order`
// FROM `'._DB_PREFIX_.'philea_magistor_sent`
// FROM `'._DB_PREFIX_.'philea_sent`
// WHERE `id_sale` = '.(int) $id_sale.'
// ') as $row) {
// $exclude_orders[] = (int) $row['id_order'];
@ -259,8 +259,8 @@ if($magistorModule->active) {
$data .= str_pad( '', 50, ' ', STR_PAD_RIGHT); // INFO_RELAIS_7
$data .= str_pad( '', 50, ' ', STR_PAD_RIGHT); // INFO_RELAIS_8
if(Configuration::get('PHILEA_MAGISTOR_ASSURANCE')
&& Configuration::get('PHILEA_MAGISTOR_ASSURANCE') <= ($order->total_paid_real - $order->total_shipping)
if(Configuration::get('PHILEA_MAGISTOR_ASSURANCE')
&& Configuration::get('PHILEA_MAGISTOR_ASSURANCE') <= ($order->total_paid_real - $order->total_shipping)
&& Configuration::get('PHILEA_MAGISTOR_ASSURANCE') > 0
) {
$data .= str_pad( str_replace('.',',',($order->total_paid_real - $order->total_shipping)), 50, ' ', STR_PAD_RIGHT ); // VALEUR DE COMMANDE
@ -299,7 +299,7 @@ if($magistorModule->active) {
}
Db::getInstance()->ExecuteS('
INSERT INTO `'._DB_PREFIX_.'philea_magistor_sent`
INSERT INTO `'._DB_PREFIX_.'philea_sent`
VALUES (
'.(int) $order->id.',
'.(int) $id_sale.',