bebeboutik/modules/philea_magistor/script/recept_expedition.php

529 lines
31 KiB
PHP
Raw Normal View History

<?php
2016-12-06 10:07:54 +01:00
// $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
// $_SERVER['HTTP_HOST'] = 'www.bebeboutik.com';
2016-09-28 10:41:39 +02:00
include('../../../config/settings.inc.php');
include('../../../config/config.inc.php');
include( dirname(__FILE__) . '/../philea_magistor.php');
global $regex_file_in;
$regex_file_in = '@^CRE(.*)\.(BAL|DAT)@';
@ini_set('display_errors', 'on');
$magistorModule = new philea_magistor();
//$id_shipping = 4; // PHILEA
$CRE = array(
'OP_CODE' => array(1,10),
'CODE_SOC' => array(11,20),
'NO_CLIENT' => array(31,8),
'N_CDE' => array(39,50),
'NO_COLIS' => array(89,50),
'NO_TRACKING' => array(139,50),
'NO_EXPEDITION' => array(189,50),
'DATE_EXPED' => array(239,8),
'TRANSPORTEUR' => array(247,50),
2016-09-28 18:11:07 +02:00
'CODE_ART' => array(297, 50),
2016-09-28 10:41:39 +02:00
'QTE' => array(347, 10),
);
$tab_conversion_carrier = philea_magistor::getTabState();
$socol_to_magistor = array(
'DOM' => 'SOCOLMDSS',
'DOS' => 'SOCOLMDS',
'RDV' => 'SOCOLMRDV',
'CIT' => 'SOCOLCITY',
'BPR' => 'SOCOLMBP',
'CDI' => 'SOCOLMBP',
'A2P' => 'SOCOLMC',
'ACP' => 'SOCOLMBP',
);
$mr_to_magistor = array(
'24R' => 'MRMDSS', // Point relais
'DRI' => 'MRMDS', // Colis drive
'LD1' => 'MRMRDV', // Domicile RDC (1 pers)
'LDS' => 'MRCITY', // Domicile spé (2 pers)
'HOM' => 'MRMBP', // Domicile spé
);
$format = $CRE;
if($magistorModule->active) {
2016-12-06 10:07:54 +01:00
//require_once('connection_ftp.php');
2016-09-28 10:41:39 +02:00
@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())) {
$datFile = $fileinfo->getPath() . '/' . preg_replace( '@BAL$@', 'DAT', $fileinfo->getFilename() );
if(file_exists($datFile)) {
$content = file_get_contents($datFile);
$lines = preg_split('@\n@',$content);
2016-09-28 18:11:07 +02:00
$id_order_details = array();
$shipping_numbers = array();
$parcel_carrier = array();
2016-09-28 10:41:39 +02:00
if(!empty($lines)) {
2016-12-05 10:13:27 +01:00
$details = array();
2016-09-28 10:41:39 +02:00
foreach( $lines as $line ) {
2016-09-28 18:11:07 +02:00
2016-09-28 10:41:39 +02:00
$data = array();
foreach($format as $field=>$value) {
$data[] = substr($line, ($value[0]-1), $value[1]);
}
if(!isset($data[2]) || (isset($data[2]) && !$data[2])){
continue;
}
$id_sale = 0;
$id_order = (string) $data[3];
if(substr($id_order, 0, 2) == 'OP') {
$id_order = explode('-', $id_order);
if(count($id_order) < 2) {
continue;
}
$id_sale = (int) str_replace('OP', '', $id_order[0]);
$id_order = (int) $id_order[1];
} else {
$id_order = (int) $id_order;
}
2016-12-06 10:07:54 +01:00
$details[(int)$id_order] = array();
2016-09-28 18:11:07 +02:00
$code_art = explode("_", trim($data[9]));
2016-09-28 10:41:39 +02:00
if(count($code_art)>1) {
list($id_product, $id_attribute) = $code_art;
} else {
$id_product = $code_art[0];
$id_attribute = 0;
}
2016-12-06 10:07:54 +01:00
if(!isset($details[(int)$id_order][$id_product.'_'.$id_attribute])) {
$details[(int)$id_order][$id_product.'_'.$id_attribute] = array(
'shipping_numbers' => array(),
'quantity' => 0
);
2016-12-05 10:13:27 +01:00
}
2016-12-06 10:07:54 +01:00
$details[(int)$id_order][$id_product.'_'.$id_attribute]['quantity'] += (int) trim($data[10]);
$details[(int)$id_order][$id_product.'_'.$id_attribute]['shipping_numbers'][] = array(
'number' => trim($data[5]),
'date' => pSQL(substr($data[7], 0, 4).'-'.substr($data[7], 4, 2).'-'.substr($data[7], 6, 2).' 18:00:00')
);
2016-12-05 10:13:27 +01:00
2016-12-06 10:07:54 +01:00
$order = new Order((int) $id_order);
$order_details[(int)$id_order] = array();
foreach(Db::getInstance()->ExecuteS('
SELECT `id_order_detail`, `product_id`, `product_attribute_id`, `product_quantity` - GREATEST(`product_quantity_return`, `product_quantity_refunded`) AS `quantity`
2016-09-28 10:41:39 +02:00
FROM `'._DB_PREFIX_.'order_detail`
WHERE `id_order` = '.(int) $id_order.'
2016-12-06 10:07:54 +01:00
') as $key => $row) {
2016-09-28 10:41:39 +02:00
$sent = (int) Db::getInstance()->getValue('
SELECT SUM(`quantity`)
FROM `'._DB_PREFIX_.'philea_parcel`
2016-12-06 10:07:54 +01:00
WHERE `id_order_detail` = '.(int) $row['id_order_detail'].'
2016-09-28 10:41:39 +02:00
');
2016-12-06 10:07:54 +01:00
if(Pack::isPack((int)$row['product_id'])) {
$items = Pack::getSimplePack($row['product_id']);
foreach($items as $item) {
if(!isset($order_details[$id_order][$item['id_product_item'].'_0'])) {
$order_details[$id_order][$item['id_product_item'].'_0'] = array(
'id_order_details' => array(),
'quantity_to_sent' => 0
2016-09-28 10:41:39 +02:00
);
}
2016-12-06 10:07:54 +01:00
$order_details[$id_order][$item['id_product_item'].'_0']['quantity_to_sent'] += (($row['quantity'] - $sent) * $item['quantity']);
$order_details[$id_order][$item['id_product_item'].'_0']['id_order_details'][] = $row['id_order_detail'];
2016-09-28 10:41:39 +02:00
}
} else {
2016-12-06 10:07:54 +01:00
if(!isset($order_details[$id_order][$row['product_id'].'_'.$row['product_attribute_id']])) {
$order_details[$id_order][$row['product_id'].'_'.$row['product_attribute_id']] = array(
'id_order_details' => array(),
'quantity_to_sent' => 0
);
2016-09-28 10:41:39 +02:00
}
2016-12-06 10:07:54 +01:00
$order_details[$id_order][$row['product_id'].'_'.$row['product_attribute_id']]['quantity_to_sent'] += ($row['quantity'] - $sent);
$order_details[$id_order][$row['product_id'].'_'.$row['product_attribute_id']]['id_order_details'][] = $row['id_order_detail'];
2016-09-28 10:41:39 +02:00
}
}
2016-12-06 10:07:54 +01:00
} // end foreach lines
} // end if lines
2016-09-28 10:41:39 +02:00
}
}
}
}
}
2016-12-06 10:07:54 +01:00
echo '<pre>';var_dump($details,$order_details);echo '</pre>';die();
// 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_id` = '.(int) $id_product.'
// AND `product_attribute_id` = '.(int) $id_attribute.'
// ')) {
// $sent = (int) Db::getInstance()->getValue('
// SELECT SUM(`quantity`)
// FROM `'._DB_PREFIX_.'philea_parcel`
// WHERE `id_order_detail` = '.(int) $detail['id_order_detail'].'
// ');
// $to_send = (int) $detail['quantity'] - $sent;
// 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').'"
// )
// ');
// $id_order_details[] = (int) $detail['id_order_detail'];
// $shipping_numbers[] = '"'.pSQL(trim($data[5])).'"';
// // GET CARRIER ID
// $carrier_found = false;
// $id_active_carrier = false;
// $id_inactive_carrier = false;
// 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 ($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;
// if(isset($id_carrier) && $id_carrier) {
// $parcel_carrier[(int) $id_order.'|'.trim($data[5])] = $id_carrier;
// } else { // MISSING CARRIER
// $errors[] = array(
// $data[3],
// $data[8], // carrier name
// $data[9], // code article productId_attributeId
// $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',
// );
// }
// } else {
// // TOO MUCH
// $errors[] = array(
// $data[3],
// $data[8],
// $data[9],
// $data[10],
// $data[5],
// $data[7],
// 'wrong_quantities',
// );
// }
// } else {
// // NOT FOUND
// $errors[] = array(
// $data[3],
// $data[8],
// $data[9],
// $data[10],
// $data[5],
// $data[7],
// 'product_not_found',
// );
// }
// }
// $id_order_details = array_unique($id_order_details);
// $shipping_numbers = array_unique($shipping_numbers);
// if(count($id_order_details) > 0) {
// $id_orders = array();
// $orders_infos = array();
// foreach(Db::getInstance()->ExecuteS('
// 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) $row['id_order'].',
// "'.pSQL($row['shipping_number']).'",
// "'.pSQL($row['date_add']).'",
// '.(int) $parcel_carrier[(int) $row['id_order'].'|'.$row['shipping_number']].',
// 0
// )
// ');
// $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']]);
// }
// $id_orders = array_unique($id_orders);
// $products = Db::getInstance()->ExecuteS('
// 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).')
// ');
// $sent_sales = array();
// foreach(Db::getInstance()->ExecuteS('
// 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()->ExecuteS('
// 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()->ExecuteS('
// 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 LIMIT 1
// ') != 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 LIMIT 1
// '), array(4, 17, 9, 19))) {
// $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()->ExecuteS('
// 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)) {
// $carrier->url .= '&language=es_ES';
// }
// $content_html = '<strong>Contenido del paquete:</strong>';
// $content_txt = 'Contenido del paquete:';
// } else {
// $content_html = '<strong>Contenu du colis :</strong>';
// $content_txt = 'Contenu du colis :';
// }
// $templateVars = array(
// '{followup}' => str_replace('@', $parcel[0], $carrier->url),
// '{firstname}' => $customer->firstname,
// '{lastname}' => $customer->lastname,
// '{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): '',
// );
// $order->shipping_number = $parcel[0];
// $order->update();
// 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 => 'Pedido en tránsito',
// );
// 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 Recept expe Philea', serialize($errors));
// }
// mail('marion@antadis.com', '[BBB] Recept expe Philea', $datFile);
// }
// $repo_archive = './archives/IN/LIVRAISON/';
// $repo_paths = array(date('Y'), date('m'));
// foreach ($repo_paths as $repo_path) {
// $repo_archive .= $repo_path . '/';
// if (!file_exists($repo_archive))
// mkdir($repo_archive);
// }
// copy($datFile, $repo_archive . preg_replace( '@BAL$@', 'DAT', $fileinfo->getFilename() ));
// unlink($inFolder.$fileinfo->getFilename());
// unlink($datFile);
// }
// }
// }
// }
// }
// echo 'fin';