From 0b787dd69b7d7a36d99d31b1677b811b0848615e Mon Sep 17 00:00:00 2001 From: Michael RICOIS Date: Thu, 25 Jan 2018 17:21:15 +0100 Subject: [PATCH 1/4] Comment --- .../AdminAntDropshippingtracking.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php b/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php index 1409c971..87d577c2 100644 --- a/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php +++ b/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php @@ -73,8 +73,9 @@ class AdminAntDropshippingtracking extends AdminTab } $fully_sent = false; + + // Calcul des produits déjà envoyés par LaPoste $products_sent = array(); - foreach(Db::getInstance()->ExecuteS(' SELECT d.`id_order_detail`, IF( (d.`product_quantity` - IF( @@ -87,11 +88,12 @@ class AdminAntDropshippingtracking extends AdminTab WHERE d.`id_order` = '.(int) $order->id.' GROUP BY d.`id_order_detail` ') as $quantity_remain) { - if((int) $quantity_remain['remain'] == 0) { + if ((int) $quantity_remain['remain'] == 0) { $products_sent[] = (int) $quantity_remain['id_order_detail']; } } + // Calcul des produits retourné / remboursé foreach(Db::getInstance()->ExecuteS(' SELECT d.`id_order_detail`, IF( (d.`product_quantity` - IF( @@ -104,7 +106,7 @@ class AdminAntDropshippingtracking extends AdminTab WHERE d.`id_order` = '.(int) $order->id.' GROUP BY d.`id_order_detail` ') as $quantity_remain) { - if((int) $quantity_remain['remain'] == 0) { + if ((int) $quantity_remain['remain'] == 0) { $products_sent[] = (int) $quantity_remain['id_order_detail']; } } @@ -121,7 +123,7 @@ class AdminAntDropshippingtracking extends AdminTab WHERE d.`id_order` = '.(int) $order->id.' GROUP BY d.`id_order_detail` ') as $quantity_remain) { - if((int) $quantity_remain['remain'] == 0) { + if ((int) $quantity_remain['remain'] == 0) { $products_sent[] = (int) $quantity_remain['id_order_detail']; } } @@ -138,7 +140,7 @@ class AdminAntDropshippingtracking extends AdminTab WHERE d.`id_order` = '.(int) $order->id.' GROUP BY d.`id_order_detail` ') as $quantity_remain) { - if((int) $quantity_remain['remain'] == 0) { + if ((int) $quantity_remain['remain'] == 0) { $products_sent[] = (int) $quantity_remain['id_order_detail']; } } @@ -155,7 +157,7 @@ class AdminAntDropshippingtracking extends AdminTab WHERE d.`id_order` = '.(int) $order->id.' GROUP BY d.`id_order_detail` ') as $quantity_remain) { - if((int) $quantity_remain['remain'] == 0) { + if ((int) $quantity_remain['remain'] == 0) { $products_sent[] = (int) $quantity_remain['id_order_detail']; } } @@ -201,7 +203,7 @@ class AdminAntDropshippingtracking extends AdminTab $history = new OrderHistory(); $history->id_order = (int) $order->id; - $history->changeIdOrderState(($fully_sent? Configuration::get('PS_OS_SHIPPING'): 17), (int) $order->id); + $history->changeIdOrderState(($fully_sent ? Configuration::get('PS_OS_SHIPPING') : 17), (int) $order->id); $history->id_employee = 0; $history->add(); From 8b15ef46a6eb48e952251908e5f6d98b8a8195dc Mon Sep 17 00:00:00 2001 From: Michael RICOIS Date: Tue, 30 Jan 2018 17:15:33 +0100 Subject: [PATCH 2/4] Rework for dropshipping --- .../AdminAntDropshippingtracking.php | 337 ++++++++++++------ 1 file changed, 220 insertions(+), 117 deletions(-) diff --git a/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php b/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php index 87d577c2..c2d633fc 100644 --- a/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php +++ b/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php @@ -20,10 +20,13 @@ class AdminAntDropshippingtracking extends AdminTab } } - public function _postProcess() { - if(Tools::isSubmit('submitOrderTracking') && Tools::getValue('id_sale')){ + public function _postProcess() + { + $this->_html = ''; + + if ($id_sale = Tools::getValue('id_sale')) { + // Selection des produits de la vente $errors = 0; - $id_sale = (int)Tools::getValue('id_sale'); $sale_names = array(); foreach(Db::getInstance()->ExecuteS(' SELECT c.`name`, c.`id_lang` @@ -41,42 +44,114 @@ class AdminAntDropshippingtracking extends AdminTab ') as $key => $row) { $sale_products[(int)$row['id_product']] = (int)$row['id_product']; } - - if(isset($_FILES['csvfile']) && $_FILES['csvfile']['name'] != '') { - + + $infosTrackingEnable = $infosTrackingDisable = 0; + // Fichier avec infos tracking + if (Tools::isSubmit('submitOrderTracking')) { + $infosTrackingEnable = 1; + } + // Fichier sans infos de tracking + if (Tools::isSubmit('submitOrderTrackingNull')) { + $infosTrackingDisable = 1; + } + + // Gestion du fichier CSV + $orders = array(); + if (isset($_FILES['csvfile']) && $_FILES['csvfile']['name'] != '') { + $cols = array( + 'id_order', + 'tracking_number', + 'carrier', + 'link', + ); + $i = 0; $f = fopen($_FILES['csvfile']['tmp_name'], 'r'); - fgetcsv($f, 0, ';'); - $i = 1; - - $orders = array(); - while($line = fgetcsv($f, 0, ';')) { + while ($data = fgetcsv($f, 0, ';')) { $i++; - $orders[(int) $line[0]] = array( - 'id_order' => (int) $line[0], - 'tracking_number' => trim($line[1]), - 'carrier' => $line[2], - 'link' => trim($line[3]), + if ($i == 1) { + continue; + } + + // Get Data + $num = count($data); + + // Check line integrity + if ($num != count($cols)) { + $orders = array(); + break; + } + + // Assign var + $line = array(); + for ($c=0; $c<$num; $c++) { + $name = $cols[$c]; + switch ($name) { + case 'tracking_number': + case 'link'; + $line[$name] = trim($data[$c]); + break; + default: + $line[$name] = $data[$c]; + break; + } + + } + + // Vérification des données + if ($infosTrackingDisable == 1) { + if ($line['tracking_number'] != ''){ + $orders = array(); + break; + } + if ($line['link'] != ''){ + $orders = array(); + break; + } + } + if ($infosTrackingEnable == 1) { + if ($line['tracking_number'] == ''){ + $orders = array(); + break; + } + if ($line['link'] == ''){ + $orders = array(); + break; + } + } + + // Assign orders + $orders[(int) $line['id_order']] = array( + 'id_order' => (int)$line['id_order'], + 'tracking_number' => $line['tracking_number'], + 'carrier' => $line['carrier'], + 'link' => $line['link'], ); } - if(!empty($orders)) { - foreach ($orders as $id_order => $o) { - if($id_order != 0){ - $order = new Order((int)$id_order); - if(Validate::isLoadedObject($order)) { - $order_details = array(); - foreach(Db::getInstance()->ExecuteS(' - SELECT DISTINCT `id_order_detail`, `product_name`,`product_id`, `product_attribute_id`, `product_quantity` - GREATEST(`product_quantity_return`, `product_quantity_refunded`) AS `quantity` - FROM `'._DB_PREFIX_.'order_detail` - WHERE `id_order` = '.(int) $id_order.' - ') as $key => $row) { - $order_details[(int)$row['id_order_detail']] = $row; - } - - $fully_sent = false; - - // Calcul des produits déjà envoyés par LaPoste - $products_sent = array(); - foreach(Db::getInstance()->ExecuteS(' + } + else { + $this->_html .= HelperFormBootstrap::displayErrors($this->l('Fichier manquant !')); + } + + // Traitement des commandes + if (count($orders) > 0) { + foreach ($orders as $id_order => $o) { + if ($id_order != 0) { + $order = new Order((int)$id_order); + if (Validate::isLoadedObject($order)) { + $order_details = array(); + foreach (Db::getInstance()->ExecuteS(' + SELECT DISTINCT `id_order_detail`, `product_name`,`product_id`, `product_attribute_id`, `product_quantity` - GREATEST(`product_quantity_return`, `product_quantity_refunded`) AS `quantity` + FROM `'._DB_PREFIX_.'order_detail` + WHERE `id_order` = '.(int) $id_order.' + ') as $key => $row) { + $order_details[(int)$row['id_order_detail']] = $row; + } + + $fully_sent = false; + + // Calcul des produits déjà envoyés par LaPoste + $products_sent = array(); + foreach (Db::getInstance()->ExecuteS(' SELECT d.`id_order_detail`, IF( (d.`product_quantity` - IF( d.`product_quantity_return` > 0, d.`product_quantity_return`, d.`product_quantity_refunded` @@ -88,13 +163,13 @@ class AdminAntDropshippingtracking extends AdminTab WHERE d.`id_order` = '.(int) $order->id.' GROUP BY d.`id_order_detail` ') as $quantity_remain) { - if ((int) $quantity_remain['remain'] == 0) { - $products_sent[] = (int) $quantity_remain['id_order_detail']; - } + if ((int) $quantity_remain['remain'] == 0) { + $products_sent[] = (int) $quantity_remain['id_order_detail']; } - - // Calcul des produits retourné / remboursé - foreach(Db::getInstance()->ExecuteS(' + } + + // Calcul des produits déjà envoyé Exapaq + foreach (Db::getInstance()->ExecuteS(' SELECT d.`id_order_detail`, IF( (d.`product_quantity` - IF( d.`product_quantity_return` > 0, d.`product_quantity_return`, d.`product_quantity_refunded` @@ -106,12 +181,13 @@ class AdminAntDropshippingtracking extends AdminTab WHERE d.`id_order` = '.(int) $order->id.' GROUP BY d.`id_order_detail` ') as $quantity_remain) { - if ((int) $quantity_remain['remain'] == 0) { - $products_sent[] = (int) $quantity_remain['id_order_detail']; - } + if ((int) $quantity_remain['remain'] == 0) { + $products_sent[] = (int) $quantity_remain['id_order_detail']; } - - foreach(Db::getInstance()->ExecuteS(' + } + + // Calcul des produits déjà envoyé MondialRelay + foreach (Db::getInstance()->ExecuteS(' SELECT d.`id_order_detail`, IF( (d.`product_quantity` - IF( d.`product_quantity_return` > 0, d.`product_quantity_return`, d.`product_quantity_refunded` @@ -123,12 +199,13 @@ class AdminAntDropshippingtracking extends AdminTab WHERE d.`id_order` = '.(int) $order->id.' GROUP BY d.`id_order_detail` ') as $quantity_remain) { - if ((int) $quantity_remain['remain'] == 0) { - $products_sent[] = (int) $quantity_remain['id_order_detail']; - } + if ((int) $quantity_remain['remain'] == 0) { + $products_sent[] = (int) $quantity_remain['id_order_detail']; } - - foreach(Db::getInstance()->ExecuteS(' + } + + // Calcul des produits déjà envoyé Philea + foreach (Db::getInstance()->ExecuteS(' SELECT d.`id_order_detail`, IF( (d.`product_quantity` - IF( d.`product_quantity_return` > 0, d.`product_quantity_return`, d.`product_quantity_refunded` @@ -140,12 +217,13 @@ class AdminAntDropshippingtracking extends AdminTab WHERE d.`id_order` = '.(int) $order->id.' GROUP BY d.`id_order_detail` ') as $quantity_remain) { - if ((int) $quantity_remain['remain'] == 0) { - $products_sent[] = (int) $quantity_remain['id_order_detail']; - } + if ((int) $quantity_remain['remain'] == 0) { + $products_sent[] = (int) $quantity_remain['id_order_detail']; } - - foreach(Db::getInstance()->ExecuteS(' + } + + // Calcul des produits déjà envoyé Dropshipping + foreach (Db::getInstance()->ExecuteS(' SELECT d.`id_order_detail`, IF( (d.`product_quantity` - IF( d.`product_quantity_return` > 0, d.`product_quantity_return`, d.`product_quantity_refunded` @@ -157,17 +235,21 @@ class AdminAntDropshippingtracking extends AdminTab WHERE d.`id_order` = '.(int) $order->id.' GROUP BY d.`id_order_detail` ') as $quantity_remain) { - if ((int) $quantity_remain['remain'] == 0) { - $products_sent[] = (int) $quantity_remain['id_order_detail']; - } + if ((int) $quantity_remain['remain'] == 0) { + $products_sent[] = (int) $quantity_remain['id_order_detail']; } - $remaining = array(); - $html_products_sent = ''; - foreach($order_details as $id_order_detail => $d) { - if(!in_array($id_order_detail, $products_sent) && !in_array($d['product_id'],$sale_products)) { - $remaining[] = (int)$id_order_detail; - } elseif(!in_array($id_order_detail, $products_sent) && in_array((int)$d['product_id'],$sale_products)) { - $html_products_sent .= '
'."\r\n".$d['quantity'] . 'x' . ' ' . $p['product_name']; + } + + $remaining = array(); + foreach($order_details as $id_order_detail => $d) { + // Calcul des produits restant + if (!in_array($id_order_detail, $products_sent) && !in_array($d['product_id'], $sale_products)) { + $remaining[] = (int)$id_order_detail; + } + // Marquage envoi + elseif (!in_array($id_order_detail, $products_sent) && in_array((int)$d['product_id'],$sale_products)) { + + if ($infosTrackingEnable == 1) { Db::getInstance()->ExecuteS(' INSERT INTO `'._DB_PREFIX_.'ant_dropshipping_parcel` VALUES ( @@ -180,14 +262,50 @@ class AdminAntDropshippingtracking extends AdminTab ) '); } + + if ($infosTrackingDisable == 1) { + // Supprimer tracking_number et link + Db::getInstance()->ExecuteS(' + INSERT INTO `'._DB_PREFIX_.'ant_dropshipping_parcel` + VALUES ( + '.(int) $id_order_detail.', + '.(int) $d['quantity'].', + "", + "NOTRACKING", + "", + NOW() + ) + '); + } } - - if(count($remaining) == 0) { - $fully_sent = true; - } else { - $fully_sent = false; - } - + } + + if (count($remaining) == 0) { + $fully_sent = true; + } else { + $fully_sent = false; + } + + $history = new OrderHistory(); + $history->id_order = (int) $order->id; + $history->changeIdOrderState(($fully_sent ? Configuration::get('PS_OS_SHIPPING') : 17), (int) $order->id); + $history->id_employee = 0; + $history->add(); + + Db::getInstance()->ExecuteS(' + INSERT INTO `'._DB_PREFIX_.'shipping_history` + VALUES ( + '.(int) $order->id.', + "'.pSQL($o['shipping_number']).'", + NOW(), + 0, + '.(int)$id_sale.' + ) + '); + + if ($infosTrackingEnable) { + global $_LANGMAIL; + $subject = 'Package in transit'; $customer = new Customer((int) $order->id_customer); $templateVars = array( '{followup}' => $o['link'], @@ -197,59 +315,42 @@ class AdminAntDropshippingtracking extends AdminTab '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{id_order}' => (int) $order->id, - // '{product_list}' => !empty($html_products_sent)? $content_html.$html_products_sent: '', - // '{product_list_txt}' => !empty($html_products_sent)? $content_txt.strip_tags($html_products_sent): '', ); - - $history = new OrderHistory(); - $history->id_order = (int) $order->id; - $history->changeIdOrderState(($fully_sent ? Configuration::get('PS_OS_SHIPPING') : 17), (int) $order->id); - $history->id_employee = 0; - $history->add(); - - Db::getInstance()->ExecuteS(' - INSERT INTO `'._DB_PREFIX_.'shipping_history` - VALUES ( - '.(int) $order->id.', - "'.pSQL($o['shipping_number']).'", - NOW(), - 0, - '.(int)$id_sale.' - ) - '); - - global $_LANGMAIL; - $subject = 'Package in transit'; - if(!Mail::Send(intval($order->id_lang), 'in_transit_dropshipping', ((is_array($_LANGMAIL) && key_exists($subject, $_LANGMAIL)) ? $_LANGMAIL[$subject] : $subject), $templateVars, $customer->email, $customer->firstname.' '.$customer->lastname)){ - $errors++; + if (!Mail::Send(intval($order->id_lang), 'in_transit_dropshipping', + ((is_array($_LANGMAIL) && key_exists($subject, $_LANGMAIL)) ? $_LANGMAIL[$subject] : $subject), + $templateVars, $customer->email, $customer->firstname.' '.$customer->lastname)) { + $errors++; } } } - } - if(!isset($_COOKIE['logistics_sales'])){ - setcookie('logistics_sales', $id_sale, 0, __PS_BASE_URI__); - } else { - $sales = explode('-', $_COOKIE['logistics_sales']); - if(!in_array($id_sale,$sales)){ - $sales[] = $id_sale; + + if ($errors == 0) { + $this->_html .= HelperFormBootstrap::displaySuccess($this->l('Fichier importé avec succès !')); + } else { + $this->_html .= HelperFormBootstrap::displayErrors($this->l($errors.' mails n\'ont pas pu être envoyés')); } - setcookie('logistics_sales', implode('-', $sales), 0, __PS_BASE_URI__); } - if($errors==0){ - $this->_html .= HelperFormBootstrap::displaySuccess($this->l('Fichier importé avec succès !')); - } else { - $this->_html .= HelperFormBootstrap::displayErrors($this->l($errors.' mails n\'ont pas pu être envoyés')); - } - } else { - $this->_html .= HelperFormBootstrap::displayErrors($this->l('Aucune commande trouvée, vérifier votre fichier')); } - } else { - $this->_html .= HelperFormBootstrap::displayErrors($this->l('Fichier manquant !')); + + // Cookie + if (!isset($_COOKIE['logistics_sales'])){ + setcookie('logistics_sales', $id_sale, 0, __PS_BASE_URI__); + } else { + $sales = explode('-', $_COOKIE['logistics_sales']); + if(!in_array($id_sale,$sales)){ + $sales[] = $id_sale; + } + setcookie('logistics_sales', implode('-', $sales), 0, __PS_BASE_URI__); + } + } + else { + $this->_html .= HelperFormBootstrap::displayErrors($this->l('Aucune commande trouvée, vérifier votre fichier')); } } } - public function display() { + public function display() + { global $cookie, $currentIndex; $base_link = $currentIndex . '&token='.Tools::getAdminTokenLite('AdminAntDropshippingtracking'); @@ -315,13 +416,15 @@ class AdminAntDropshippingtracking extends AdminTab
- + +
- '; + + '; $this->_html .= $helperForm->renderScript(); From 70afb97e26307da3a309b90dbf5bcbad3f9fbb83 Mon Sep 17 00:00:00 2001 From: Michael RICOIS Date: Wed, 31 Jan 2018 11:34:17 +0100 Subject: [PATCH 3/4] Column name --- .../AdminAntDropshippingtracking.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php b/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php index c2d633fc..53ee94a2 100644 --- a/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php +++ b/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php @@ -1,9 +1,10 @@ id.', - "'.pSQL($o['shipping_number']).'", + "'.pSQL($o['tracking_number']).'", NOW(), 0, '.(int)$id_sale.' @@ -394,6 +395,7 @@ class AdminAntDropshippingtracking extends AdminTab $help = '

'.$this->l('Format: id_order;tracking_number;carrier;tracking_link').'

'.$this->l('The subsequent columns and the first line are ignored.').'

+

'.$this->l('Without tracking infos, .').'

'; $input = array( 'label' => $this->l('Sale: '), From 9cadd3e8affa4d1e7120aef0701bb6117eb1b218 Mon Sep 17 00:00:00 2001 From: Michael RICOIS Date: Wed, 31 Jan 2018 12:05:57 +0100 Subject: [PATCH 4/4] Don't save shipping number in dropshipping --- .../AdminAntDropshippingtracking.php | 25 ++++++++++--------- modules/logistics/ajax.php | 10 ++++---- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php b/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php index 53ee94a2..bdfb996e 100644 --- a/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php +++ b/modules/ant_dropshippingtracking/AdminAntDropshippingtracking.php @@ -293,18 +293,19 @@ class AdminAntDropshippingtracking extends AdminTab $history->id_employee = 0; $history->add(); - Db::getInstance()->ExecuteS(' - INSERT INTO `'._DB_PREFIX_.'shipping_history` - VALUES ( - '.(int) $order->id.', - "'.pSQL($o['tracking_number']).'", - NOW(), - 0, - '.(int)$id_sale.' - ) - '); - - if ($infosTrackingEnable) { + if ($infosTrackingEnable == 1) { + + Db::getInstance()->ExecuteS(' + INSERT INTO `'._DB_PREFIX_.'shipping_history` + VALUES ( + '.(int) $order->id.', + "'.pSQL($o['tracking_number']).'", + NOW(), + 0, + '.(int)$id_sale.' + ) + '); + global $_LANGMAIL; $subject = 'Package in transit'; $customer = new Customer((int) $order->id_customer); diff --git a/modules/logistics/ajax.php b/modules/logistics/ajax.php index ffe20b7a..b4eabdc5 100644 --- a/modules/logistics/ajax.php +++ b/modules/logistics/ajax.php @@ -165,7 +165,7 @@ if(($id_order = (int) Tools::getValue('id_order')) // Image $p['id_image'] = 0; - if((int) $p['product_attribute_id'] != 0) { + if ((int) $p['product_attribute_id'] != 0) { $img = Db::getInstance()->getRow(' SELECT `id_image` FROM `'._DB_PREFIX_.'product_attribute_image` @@ -175,7 +175,7 @@ if(($id_order = (int) Tools::getValue('id_order')) $p['id_image'] = $img['id_image']; } - if($p['id_image'] == 0) { + if ($p['id_image'] == 0) { $img = Db::getInstance()->getRow(' SELECT `id_image` FROM `'._DB_PREFIX_.'image` @@ -259,12 +259,12 @@ if(($id_order = (int) Tools::getValue('id_order')) $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).')': '').' + '.(count($shipping_numbers) > 0 ? 'AND h.`shipping_number` NOT IN ('.implode(', ', $shipping_numbers).')': '').' ')) { $p['product_quantity_sent'] = $p['product_quantity'] - ( $p['product_quantity_return'] > 0 ? $p['product_quantity_return']: $p['product_quantity_refunded'] );