940 lines
47 KiB
PHP
940 lines
47 KiB
PHP
<?php
|
||
if(!defined('_PS_VERSION_')) {
|
||
exit;
|
||
}
|
||
|
||
global $logistics_carriers;
|
||
/*foreach(array_map(function($value) {
|
||
return str_replace('.', '', $value);
|
||
}, array_diff(scandir(dirname(__FILE__).'/carriers'), array('.', '..'))) as $lg) {
|
||
if(is_dir(dirname(__FILE__).'/carriers/'.$lg)) {
|
||
include dirname(__FILE__).'/carriers/'.$lg.'/'.$lg.'.php';
|
||
$name = ucfirst($lg).'Carrier';
|
||
$logistics_carriers[$lg] = new $name();
|
||
}
|
||
}*/
|
||
include dirname(__FILE__).'/carriers/laposte/laposte.php';
|
||
$logistics_carriers['laposte'] = new LaposteCarrier();
|
||
|
||
include _PS_ROOT_DIR_.'/modules/privatesales/Sale.php';
|
||
|
||
|
||
class AdminLogistics extends AdminTab {
|
||
public $_html = '';
|
||
|
||
private function stripaccents($str) {
|
||
return preg_replace(
|
||
'~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml|caron);~i',
|
||
'$1',
|
||
htmlentities($str, ENT_NOQUOTES, 'UTF-8')
|
||
);
|
||
}
|
||
|
||
private function isoreplace($str) {
|
||
// ISO/CEI 646
|
||
return str_replace(array(
|
||
'Ç', 'ü', 'é', 'â', 'ä', 'à',
|
||
'å', 'ç', 'ê', 'ë', 'è', 'ï',
|
||
'î', 'ì', 'Ä', 'Å', 'É', 'æ',
|
||
'Æ', 'ô', 'ö', 'ò', 'û', 'ù',
|
||
'ÿ', 'Ö', 'Ü', '¢', '£', '¥',
|
||
'₧', 'ƒ', 'á', 'í', 'ó', 'ú',
|
||
'ñ', 'Ñ', 'ª', 'º', '¿', '⌐',
|
||
'¬', '½', '¼', '¡', '«', '»',
|
||
'░', '▒', '▓', '│', '┤', '╡',
|
||
'╢', '╖', '╕', '╣', '║', '╗',
|
||
'╝', '╜', '╛', '┐', '└', '┴',
|
||
'┬', '├', '─', '┼', '╞', '╟',
|
||
'╚', '╔', '╩', '╦', '╠', '═',
|
||
'╬', '╧', '╨', '╤', '╥', '╙',
|
||
'╘', '╒', '╓', '╫', '╪', '┘',
|
||
'┌', '█', '▄', '▌', '▐', '▀',
|
||
'α', 'ß', 'Γ', 'π', 'Σ', 'σ',
|
||
'µ', 'τ', 'Φ', 'Θ', 'Ω', 'δ',
|
||
'∞', 'φ', 'ε', '∩', '≡', '±',
|
||
'≥', '≤', '⌠', '⌡', '÷', '≈',
|
||
'°', '∙', '·', '√', 'ⁿ', '²',
|
||
'■',
|
||
), array(
|
||
chr(128), chr(129), chr(130), chr(131), chr(132), chr(133),
|
||
chr(134), chr(135), chr(136), chr(137), chr(138), chr(139),
|
||
chr(140), chr(141), chr(142), chr(143), chr(144), chr(145),
|
||
chr(146), chr(147), chr(148), chr(149), chr(150), chr(151),
|
||
chr(152), chr(153), chr(154), chr(155), chr(156), chr(157),
|
||
chr(158), chr(159), chr(160), chr(161), chr(162), chr(163),
|
||
chr(164), chr(165), chr(166), chr(167), chr(165), chr(166),
|
||
chr(167), chr(168), chr(169), chr(170), chr(171), chr(172),
|
||
chr(173), chr(174), chr(175), chr(176), chr(177), chr(178),
|
||
chr(179), chr(180), chr(181), chr(182), chr(183), chr(184),
|
||
chr(185), chr(186), chr(187), chr(188), chr(189), chr(190),
|
||
chr(191), chr(192), chr(193), chr(194), chr(195), chr(196),
|
||
chr(197), chr(198), chr(199), chr(200), chr(201), chr(202),
|
||
chr(203), chr(204), chr(205), chr(206), chr(207), chr(208),
|
||
chr(209), chr(210), chr(211), chr(209), chr(210), chr(211),
|
||
chr(212), chr(213), chr(214), chr(215), chr(216), chr(217),
|
||
chr(218), chr(219), chr(220), chr(221), chr(222), chr(223),
|
||
chr(224), chr(225), chr(226), chr(227), chr(228), chr(229),
|
||
chr(230), chr(231), chr(232), chr(233), chr(234), chr(235),
|
||
chr(236), chr(237), chr(238), chr(239), chr(240), chr(241),
|
||
chr(242), chr(243), chr(244), chr(245), chr(246), chr(247),
|
||
chr(248), chr(249), chr(250), chr(251), chr(252), chr(253),
|
||
chr(254),
|
||
), $str);
|
||
}
|
||
|
||
private function printLabel($data) {
|
||
global $cookie;
|
||
|
||
//require dirname(__FILE__).'/libs/predis/autoload.php'; // Conflicts with Prestashop autoload
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Option/OptionInterface.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Option/AbstractOption.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Command/Processor/CommandProcessingInterface.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Command/PrefixableCommandInterface.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Command/CommandInterface.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Command/AbstractCommand.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Command/PrefixableCommand.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Command/PubSubPublish.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Connection/ConnectionInterface.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Connection/SingleConnectionInterface.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Connection/AbstractConnection.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Connection/StreamConnection.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Connection/ConnectionParametersInterface.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Connection/ConnectionParameters.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Connection/ConnectionFactoryInterface.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Connection/ConnectionFactory.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Profile/ServerProfileInterface.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Profile/ServerProfile.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Profile/ServerVersion26.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Option/ClientCluster.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Option/ClientPrefix.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Option/ClientExceptions.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Option/ClientReplication.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Option/ClientConnectionFactory.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Option/ClientProfile.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Option/ClientOptionsInterface.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Option/ClientOptions.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/BasicClientInterface.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/ClientInterface.php';
|
||
require_once dirname(__FILE__).'/libs/predis/lib/Predis/Client.php';
|
||
|
||
$redis = new Predis\Client();
|
||
|
||
$redis->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 $cookie, $logistics_carriers;
|
||
|
||
if((
|
||
(int) $cookie->profile == 1 || (int) $cookie->profile == 9 || (int) $cookie->profile == 7
|
||
) && (
|
||
$delete_number = Tools::getValue('delete_number')
|
||
)) {
|
||
if($delete = (int) Tools::getValue('delete_laposte')) {
|
||
Db::getInstance()->ExecuteS('
|
||
DELETE FROM `'._DB_PREFIX_.'lapostews`
|
||
WHERE `id_order_detail` = '.$delete.'
|
||
AND `shipping_number` = "'.pSQL($delete_number).'"
|
||
');
|
||
|
||
if(!Db::getInstance()->getRow('
|
||
SELECT l.`shipping_number`
|
||
FROM `'._DB_PREFIX_.'lapostews` l
|
||
LEFT JOIN `'._DB_PREFIX_.'order_detail` d
|
||
ON l.`id_order_detail` = d.`id_order_detail`
|
||
WHERE l.`shipping_number` = "'.pSQL($delete_number).'"
|
||
AND d.`id_order` = '.(int) Tools::getValue('id_order').'
|
||
')) {
|
||
Db::getInstance()->ExecuteS('
|
||
DELETE FROM `'._DB_PREFIX_.'shipping_history`
|
||
WHERE `id_order` = '.(int) Tools::getValue('id_order').'
|
||
AND `shipping_number` = "'.pSQL($delete_number).'"
|
||
');
|
||
}
|
||
} elseif($delete = (int) Tools::getValue('delete_exapaq')) {
|
||
Db::getInstance()->ExecuteS('
|
||
DELETE FROM `'._DB_PREFIX_.'exapaqws`
|
||
WHERE `id_order_detail` = '.$delete.'
|
||
AND `shipping_number` = "'.pSQL($delete_number).'"
|
||
');
|
||
|
||
if(!Db::getInstance()->getRow('
|
||
SELECT `shipping_number`
|
||
FROM `'._DB_PREFIX_.'exapaqws`
|
||
WHERE `shipping_number` = "'.pSQL($delete_number).'"
|
||
')) {
|
||
Db::getInstance()->ExecuteS('
|
||
DELETE FROM `'._DB_PREFIX_.'shipping_history`
|
||
WHERE `id_order` = '.(int) Tools::getValue('id_order').'
|
||
AND `shipping_number` = "'.pSQL($delete_number).'"
|
||
');
|
||
}
|
||
}
|
||
|
||
$id_order_details = array();
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT `id_order_detail`
|
||
FROM `'._DB_PREFIX_.'order_detail`
|
||
WHERE `id_order` = '.(int) Tools::getValue('id_order').'
|
||
') as $row) {
|
||
$id_order_details[] = (int) $row['id_order_detail'];
|
||
}
|
||
|
||
if(!Db::getInstance()->getRow('
|
||
SELECT *
|
||
FROM `'._DB_PREFIX_.'lapostews`
|
||
WHERE `id_order_detail` IN ('.implode(', ', $id_order_details).')
|
||
')) {
|
||
Db::getInstance()->ExecuteS('
|
||
INSERT INTO `'._DB_PREFIX_.'order_history` VALUES (
|
||
DEFAULT,
|
||
'.(int) $cookie->id_employee.',
|
||
'.(int) Tools::getValue('id_order').',
|
||
'.(int) Configuration::get('PS_OS_PAYMENT').',
|
||
NOW()
|
||
)
|
||
');
|
||
|
||
Db::getInstance()->ExecuteS('
|
||
INSERT INTO `'._DB_PREFIX_.'order_state_current` VALUES (
|
||
'.(int) Tools::getValue('id_order').',
|
||
'.(int) Configuration::get('PS_OS_PAYMENT').',
|
||
NOW()
|
||
)
|
||
ON DUPLICATE KEY UPDATE
|
||
`id_order_state` = '.(int) Configuration::get('PS_OS_PAYMENT').',
|
||
`date_upd` = NOW()
|
||
');
|
||
}
|
||
|
||
Tools::redirectLink('http://'.$_SERVER['SERVER_NAME'].'/adm/index.php?tab=AdminLogistics&token='.Tools::getAdminTokenLite('AdminLogistics').'&id_order='.(int) Tools::getValue('id_order').'&mode='.Tools::getValue('mode', '').'#'.Tools::getValue('mode', ''));
|
||
}
|
||
|
||
if( (Tools::isSubmit('submitReprintShip') || Tools::isSubmit('submitReprintShip2'))
|
||
&& ((int) $cookie->profile == 1 || (int) $cookie->profile == 9 || (int) $cookie->profile == 7)
|
||
&& (
|
||
($id_order = Tools::getValue('id_order'))
|
||
&& ($products = Tools::getValue('products'))
|
||
&& ($weight = Tools::getValue('weight'))
|
||
&& ($parcel_carrier = Tools::getValue('carrier'))
|
||
)
|
||
) {
|
||
$order = new Order((int) $id_order);
|
||
if(Validate::isLoadedObject($order)) {
|
||
$parcel_carrier == 'laposte'? $weight = 0.24: TRUE;
|
||
$result = $logistics_carriers[$parcel_carrier]->registerParcel($order, $products, $weight);
|
||
if($result[0] != '') {
|
||
$this->_html .= $result[0];
|
||
return;
|
||
}
|
||
|
||
$render = $logistics_carriers[$parcel_carrier]->renderLabel($order, $weight, $result[1]);
|
||
|
||
if($render === 'pr_error') {
|
||
$this->_html .= '<p class="error">'.$this->l('Unknown delivery point').'</p><br />';
|
||
} elseif($render === 'route_error') {
|
||
$this->_html .= '<p class="error">'.$this->l('Route not found').'</p><br />';
|
||
} elseif($render !== FALSE) {
|
||
$this->printLabel($render);
|
||
|
||
$this->_html .= '<p class="conf">'.$this->l('Registration complete, label sent to printer').'</p><br />';
|
||
|
||
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_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'];
|
||
}
|
||
|
||
$logistics_carriers[$parcel_carrier]->logParcel($result[1], $products);
|
||
|
||
foreach($products as $k => $v) {
|
||
if($v > 0) {
|
||
$products_sent .= '<br />'."\r\n".$v.' x '.(isset($products_names[$k])? $products_names[$k]: '--');
|
||
}
|
||
}
|
||
|
||
$logistics_carriers[$parcel_carrier]->addOrderHistory($result[1], $order, $products_sent);
|
||
}
|
||
} else {
|
||
$this->html .= '<p class="error">'.$this->l('An error happened during the label rendering').'</p><br />';
|
||
}
|
||
}
|
||
//$this->printLabel($logistics_carriers['laposte']->renderLabel(new Order((int) $id_order), $weight, $reprint_number));
|
||
} elseif(Tools::isSubmit('submitTestLaposte')) {
|
||
$this->_html .= '<p class="conf">'.$this->l('Registration complete, label sent to printer').'</p><br />';
|
||
//$this->printLabel($logistics_carriers['laposte']->renderLabel(new Order(23336), 0.24, '6A12345123451'));
|
||
$this->printLabel($logistics_carriers['laposte']->renderLabel(new Order(223001), 0.24, '6J12345123451'));
|
||
} elseif(Tools::isSubmit('submitTestExapaq')) {
|
||
$this->_html .= '<p class="conf">'.$this->l('Registration complete, label sent to printer').'</p><br />';
|
||
$this->printLabel($logistics_carriers['exapaq']->renderLabel(new Order(23336), 0.24, array('shipping_number' => '100000000', 'exapass' => '250094100000000068')));
|
||
} elseif(Tools::isSubmit('submitShip') && ($id_order = (int) Tools::getValue('id_order'))) {
|
||
$order = new Order((int) $id_order);
|
||
|
||
$to_ship = array();
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT d.`id_order_detail`, SUM(d.`product_quantity`) AS `product_quantity`, SUM(d.`product_quantity_refunded`) AS `product_quantity_refunded`, SUM(d.`product_quantity_return`) AS `product_quantity_return`, SUM(w.`quantity`) AS `quantity_sent`
|
||
FROM `'._DB_PREFIX_.'order_detail` d
|
||
LEFT JOIN `'._DB_PREFIX_.'lapostews` w
|
||
ON d.`id_order_detail` = w.`id_order_detail`
|
||
WHERE d.`id_order` = '.$id_order.'
|
||
GROUP BY d.`id_order_detail`
|
||
') as $p) {
|
||
$to_ship[(int) $p['id_order_detail']] = $p['product_quantity'] - ($p['product_quantity_refunded'] > 0? $p['product_quantity_refunded']: $p['product_quantity_return']) - (int) $p['quantity_sent'];
|
||
}
|
||
|
||
if(Validate::isLoadedObject($order)) {
|
||
$parcel_carrier = Tools::getValue('parcel_carrier', 'laposte');
|
||
|
||
if(($weight = Tools::getValue('weight')) && ($products = Tools::getValue('shipped'))) {
|
||
$parcel_carrier == 'laposte'? $weight = 0.24: TRUE;
|
||
$total_products = 0;
|
||
foreach($products as $k => $v) {
|
||
if($v > 0) {
|
||
if($cookie->profile == 1) {
|
||
$total_products = 1;
|
||
break;
|
||
} else {
|
||
if(isset($to_ship[$k]) && $to_ship[$k] > 0 && $v <= $to_ship[$k]) {
|
||
$total_products++;
|
||
} else {
|
||
$total_products = 0;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if($total_products != 0) {
|
||
$result = $logistics_carriers[$parcel_carrier]->registerParcel($order, $products, $weight);
|
||
|
||
if($result[0] != '') {
|
||
$this->_html .= $result[0];
|
||
return;
|
||
}
|
||
|
||
$render = $logistics_carriers[$parcel_carrier]->renderLabel($order, $weight, $result[1]);
|
||
|
||
if($render === 'pr_error') {
|
||
$this->_html .= '<p class="error">'.$this->l('Unknown delivery point').'</p><br />';
|
||
} elseif($render === 'route_error') {
|
||
$this->_html .= '<p class="error">'.$this->l('Route not found').'</p><br />';
|
||
} elseif($render !== FALSE) {
|
||
$this->printLabel($render);
|
||
|
||
$this->_html .= '<p class="conf">'.$this->l('Registration complete, label sent to printer').'</p><br />';
|
||
|
||
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'];
|
||
}
|
||
|
||
$logistics_carriers[$parcel_carrier]->logParcel($result[1], $products);
|
||
|
||
foreach($products as $k => $v) {
|
||
if($v > 0) {
|
||
$products_sent .= '<br />'."\r\n".$v.' x '.(isset($products_names[$k])? $products_names[$k]: '--');
|
||
}
|
||
}
|
||
|
||
$logistics_carriers[$parcel_carrier]->addOrderHistory($result[1], $order, $products_sent);
|
||
}
|
||
} else {
|
||
$this->html .= '<p class="error">'.$this->l('An error happened during the label rendering').'</p><br />';
|
||
}
|
||
} else {
|
||
$this->_html .= '<p class="error">'.$this->l('Please enter a weight and select at least one product').'</p><br />';
|
||
}
|
||
} else {
|
||
$this->_html .= '<p class="error">'.$this->l('Please enter a weight and select at least one product').'</p><br />';
|
||
}
|
||
}
|
||
} elseif(Tools::isSubmit('submitMod') && ($id_order = (int) Tools::getValue('id_order'))) {
|
||
$product_ids = Tools::getValue('product_ids');
|
||
foreach ($product_ids as $id) {
|
||
$id_sale = Db::getInstance()->getValue('
|
||
SELECT `id_sale`
|
||
FROM `'._DB_PREFIX_.'product_ps_cache`
|
||
WHERE `id_product` = '.(int) $id
|
||
);
|
||
if (!$id_sale) {
|
||
$id_sale = 0;
|
||
}
|
||
|
||
Db::getInstance()->ExecuteS('
|
||
INSERT IGNORE INTO `'._DB_PREFIX_.'logistics_pending`
|
||
VALUES ('.(int) $id_order.','.(int) $id.','.(int) $id_sale.')
|
||
');
|
||
}
|
||
|
||
$id_order_state = Db::getInstance()->getRow('
|
||
SELECT `id_order_state`
|
||
FROM `'._DB_PREFIX_.'order_history`
|
||
WHERE `id_order`= '.(int) $id_order.'
|
||
ORDER BY `id_order_history` DESC
|
||
');
|
||
|
||
// commande en attente
|
||
if ((int)$id_order_state['id_order_state'] != 19) {
|
||
$history = new OrderHistory();
|
||
$history->id_order = (int)$id_order;
|
||
$history->id_employee = (int)($cookie->id_employee);
|
||
$history->changeIdOrderState(19, (int)($id_order));
|
||
if ($history->add()) {
|
||
$this->_html .= '<p class="conf">'.$this->l('Order status changed').'</p><br />';
|
||
} else {
|
||
$this->_html .= '<p class="error">'.$this->l('Error occured').'</p><br />';
|
||
}
|
||
} else {
|
||
$this->_html .= '<p class="conf">'.$this->l('Order in pending').'</p><br />';
|
||
}
|
||
}
|
||
}
|
||
|
||
public function display() {
|
||
global $cookie, $logistics_carriers;
|
||
|
||
/*if(!in_array($cookie->id_employee, array(1, 2, 3, 10, 68, 70, 89, 91))) {
|
||
echo 'Fonctionnalité indisponible actuellement'; return;
|
||
}*/
|
||
|
||
$unavailable_carriers = array();
|
||
|
||
foreach($logistics_carriers as $name => $class) {
|
||
if(!$class->checkavailability()) {
|
||
$unavailable_carriers[] = $name;
|
||
$this->_html .= '<p class="error">'.$class->displayName.' – '.$this->l('Webservices are unavailable at the moment, please try again later.').'</p>';
|
||
}
|
||
}
|
||
|
||
$locked_products = array();
|
||
$_locked_products = Configuration::get('LOGISTICS_LOCK');
|
||
|
||
if($_locked_products === FALSE || $_locked_products == 0 || $_locked_products == 's:8:"s:1:"0"' || empty($_locked_products)) {
|
||
$_locked_products = serialize(array());
|
||
}
|
||
foreach(unserialize($_locked_products) as $id_s) {
|
||
$_s = new Sale($id_s);
|
||
foreach($_s->getProducts() as $p) {
|
||
$locked_products[] = $p;
|
||
}
|
||
}
|
||
|
||
$sales_list = array();
|
||
if(isset($_COOKIE['logistics_sales'])) {
|
||
foreach(explode('-', $_COOKIE['logistics_sales']) as $chunk) {
|
||
$sales_list[] = (int) $chunk;
|
||
}
|
||
}
|
||
|
||
$this->_html .= '
|
||
<style type="text/css">
|
||
@import "'.__PS_BASE_URI__.'modules/logistics/styles.css?v=2";
|
||
</style>
|
||
|
||
<script type="text/javascript">
|
||
<!--
|
||
$(".qtyblock a").live("click", function(e){
|
||
$("#eaninput").focus();
|
||
});
|
||
|
||
var carriers = ';
|
||
|
||
$js_carriers = array();
|
||
foreach($logistics_carriers as $k => $v) {
|
||
$js_carriers[$k] = $v->displayName;
|
||
}
|
||
//array_walk($logistics_carriers, function($v, $k, $js_carriers) { $js_carriers[$k] = $v->displayName; }, &$js_carriers);
|
||
$this->_html .= json_encode($js_carriers);
|
||
|
||
$this->_html .= ';
|
||
|
||
var carriers_laposte = $.parseJSON("'.addslashes(json_encode(unserialize(Configuration::get('LAPOSTEWS_CARRIERS')))).'");
|
||
var carriers_exapaq = $.parseJSON("'.addslashes(json_encode(unserialize(Configuration::get('EXAPAQWS_CARRIERS')))).'");
|
||
|
||
var locked_products = $.parseJSON("'.addslashes(json_encode($locked_products)).'");
|
||
var sales_list = $.parseJSON("'.addslashes(json_encode($sales_list)).'");
|
||
|
||
var req = null;
|
||
|
||
function loadOrder(id_order, ean_focus) {
|
||
if(!(typeof id_order == "number")) {
|
||
if($("#barcodeinput:focus").length > 0) {
|
||
var bc = $("#barcodeinput").val();
|
||
if(bc.substr(0, 2) == "O-" && bc.length > 3) {
|
||
if(bc.indexOf(" ") != -1) {
|
||
id_order = parseInt(bc.substr(2).replace(" ", ""));
|
||
$("#barcodeinput").val("");
|
||
} else {
|
||
id_order = parseInt(bc.substr(2));
|
||
}
|
||
}
|
||
|
||
if(typeof id_order == "undefined") {
|
||
return;
|
||
}
|
||
} else {
|
||
id_order = parseInt($("#manualinput").val());
|
||
}
|
||
}
|
||
|
||
try {
|
||
$("#orderInfos").hide();
|
||
req.cancel();
|
||
} catch(e) {}
|
||
|
||
isRelay = 0;
|
||
lockPrint = false;
|
||
|
||
req = $.get("'.__PS_BASE_URI__.'modules/logistics/ajax.php?id_employee='.(int) $cookie->id_employee.'&token='.Tools::getValue('token').'&id_order=" + id_order, function(loaded) {
|
||
if(loaded) {
|
||
var loaded = $.parseJSON(loaded);
|
||
isRelay = $.inArray(parseInt(loaded.delivery_address.id_country), [1, 2, 3, 6, 10, 12, 13, 17, 26, 40, 148, 245]) != -1? 0: (loaded.delivery_infos_laposte? (loaded.delivery_infos_laposte.delivery_mode != \'DOM\'? 1: 0): (loaded.delivery_infos_exapaq? 2: 0));
|
||
lockPrint = false;
|
||
|
||
if(!loaded.errors) {
|
||
var content = \'\
|
||
<div class="infos">\
|
||
<strong>'.$this->l('Order ID:').'</strong> \' + loaded.order.id + \'<br />\
|
||
<strong>'.$this->l('Cart ID:').'</strong> \' + loaded.order.id_cart + \'<br />\
|
||
<strong>'.$this->l('Customer:').'</strong> \' + loaded.customer + \'<br />\
|
||
<strong>'.$this->l('Date:').'</strong> \' + loaded.order.date_add + \'<br />\
|
||
<strong>'.$this->l('Payment gateway:').'</strong> \' + loaded.order.payment + \'<br />\
|
||
<strong>'.$this->l('Order status:').'</strong> \' + loaded.status + \'<br />\
|
||
<strong>'.$this->l('Carrier:').'</strong> \' + loaded.carrier + \'<br />\
|
||
</div>\
|
||
<div class="short_infos">\
|
||
<strong>'.$this->l('Order ID:').'</strong> \' + loaded.order.id + \', <strong>'.$this->l('Carrier:').'</strong> \' + loaded.carrier + \', <strong>'.$this->l('Order status:').'</strong> \' + loaded.status + \'\
|
||
</div>\
|
||
\
|
||
<div class="addresses \' + (loaded.delivery_infos_laposte || loaded.delivery_infos_exapaq? \'span3\': \'span2\') + \'">\
|
||
\' + (loaded.delivery_infos_laposte?
|
||
\'<div class="address">\
|
||
<strong>'.$this->l('SoColissimo address').'</strong><a style="float: right;" onclick="var p = window.open(\\\'scaddressedit.php?id_cart=\' + loaded.order.id_cart + \'\\\', \\\''.$this->l('SoColissimo address update').'\\\', \\\'width=720, height=390, resizable=1, scrollbars=1\\\'); p.onunload = function() { window.location.reload(); }; return false;"><img src="../img/admin/edit.gif" alt="" /></a><br />\
|
||
\' + (loaded.delivery_infos_laposte.prcompladress? loaded.delivery_infos_laposte.prcompladress + \'<br />\': \'\') + \'\
|
||
\' + loaded.delivery_infos_laposte.prfirstname + \' \' + loaded.delivery_infos_laposte.prname + \'<br />\
|
||
\' + loaded.delivery_infos_laposte.cefirstname + \' \' + loaded.delivery_infos_laposte.cename + \'<br />\
|
||
\' + (loaded.delivery_infos_laposte.pradress1? loaded.delivery_infos_laposte.pradress1 + \'<br />\': \'\') + \'\
|
||
\' + (loaded.delivery_infos_laposte.pradress2? loaded.delivery_infos_laposte.pradress2 + \'<br />\': \'\') + \'\
|
||
\' + (loaded.delivery_infos_laposte.pradress3? loaded.delivery_infos_laposte.pradress3 + \'<br />\': \'\') + \'\
|
||
\' + (loaded.delivery_infos_laposte.pradress4? loaded.delivery_infos_laposte.pradress4 + \'<br />\': \'\') + \'\
|
||
\' + loaded.delivery_infos_laposte.przipcode + \' \' + loaded.delivery_infos_laposte.prtown + \'<br />\
|
||
\' + loaded.delivery_infos_laposte.country_name + \'<br />\
|
||
\' + (loaded.delivery_infos_laposte.cephonenumber? loaded.delivery_infos_laposte.cephonenumber + \'<br />\': \'\') + \'\
|
||
</div>\
|
||
\': (loaded.delivery_infos_exapaq?
|
||
\'<div class="address">\
|
||
<strong>'.$this->l('Exapaq address').'</strong><br />\
|
||
\' + (loaded.delivery_infos_exapaq.company? loaded.delivery_infos_exapaq.company + \'<br />\': \'\') + \'\
|
||
\' + loaded.delivery_address.firstname + \' \' + loaded.delivery_address.lastname + \'<br />\
|
||
\' + (loaded.delivery_infos_exapaq.address1? loaded.delivery_infos_exapaq.address1 + \'<br />\': \'\') + \'\
|
||
\' + (loaded.delivery_infos_exapaq.address2? loaded.delivery_infos_exapaq.address2 + \'<br />\': \'\') + \'\
|
||
\' + loaded.delivery_infos_exapaq.postcode + \' \' + loaded.delivery_infos_exapaq.city + \'<br />\
|
||
France<br />\
|
||
\' + (loaded.delivery_infos_exapaq.cephonenumber? loaded.delivery_infos_exapaq.cephonenumber + \'<br />\': \'\') + \'\
|
||
</div>\
|
||
\': \'\')) + \'\
|
||
<div class="address">\
|
||
<strong>'.$this->l('Invoice address').'</strong><br />\
|
||
\' + (loaded.invoice_address.company? loaded.invoice_address.company + \'<br />\': \'\') + \'\
|
||
\' + loaded.invoice_address.firstname + \' \' + loaded.invoice_address.lastname + \'<br />\
|
||
\' + (loaded.invoice_address.address1? loaded.invoice_address.address1 + \'<br />\': \'\') + \'\
|
||
\' + (loaded.invoice_address.address2? loaded.invoice_address.address2 + \'<br />\': \'\') + \'\
|
||
\' + loaded.invoice_address.postcode + \' \' + loaded.invoice_address.city + \'<br />\
|
||
\' + (loaded.invoice_address.country? loaded.invoice_address.country + \'<br />\': \'\') + \'\
|
||
\' + (loaded.invoice_address.phone? loaded.invoice_address.phone + \'<br />\': \'\') + \'\
|
||
\' + (loaded.invoice_address.phone_mobile? loaded.invoice_address.phone_mobile + \'<br />\': \'\') + \'\
|
||
</div>\
|
||
<div class="address\' + (loaded.invoice_address.country != \'France\'? \' foreign\': \'\') + \'">\
|
||
<strong>'.$this->l('Delivery address').'</strong><br />\
|
||
\' + (loaded.delivery_address.company? loaded.delivery_address.company + \'<br />\': \'\') + \'\
|
||
\' + loaded.delivery_address.firstname + \' \' + loaded.delivery_address.lastname + \'<br />\
|
||
\' + (loaded.delivery_address.address1? loaded.delivery_address.address1 + \'<br />\': \'\') + \'\
|
||
\' + (loaded.delivery_address.address2? loaded.delivery_address.address2 + \'<br />\': \'\') + \'\
|
||
\' + loaded.delivery_address.postcode + \' \' + loaded.delivery_address.city + \'<br />\
|
||
\' + (loaded.delivery_address.country? loaded.delivery_address.country + \'<br />\': \'\') + \'\
|
||
\' + (loaded.delivery_address.phone? loaded.delivery_address.phone + \'<br />\': \'\') + \'\
|
||
\' + (loaded.delivery_address.phone_mobile? loaded.delivery_address.phone_mobile + \'<br />\': \'\') + \'\
|
||
</div>\
|
||
</div>\';
|
||
|
||
if(loaded.france_address_error) {
|
||
content += \'<div class="warning" style="width: 888px; margin: 20px 0px;"><strong>'.addslashes($this->l('Warning: postcode and city do not seem to match.')).'</strong>\';
|
||
if(loaded.france_address_suggestions.length > 0) {
|
||
content += \'<br />'.addslashes($this->l('Suggestions:')).'<br />\';
|
||
for(var i in loaded.france_address_suggestions) {
|
||
content += loaded.france_address_suggestions[i].postcode + \' - \' + loaded.france_address_suggestions[i].city + \'<br />\';
|
||
}
|
||
}
|
||
|
||
content += \'</div>\';
|
||
}
|
||
|
||
content += \'\
|
||
<form id="button_form" method="POST" action="'.str_replace(array('&mode=&mode=', '&mode=0&mode=0', '&mode=1&mode=1'), array('&mode=', '&mode=0', '&mode=1'), preg_replace('/\&id_order=[0-9]+/', '', $_SERVER['REQUEST_URI'])).'&mode=\' + window.location.hash.replace(\'#\', \'\') + \'&id_order=\' + loaded.order.id + window.location.hash + \'">\
|
||
<div class="actions">\
|
||
<a id="button1" class="button" onclick="window.open(this.href); return false;" href="'.__PS_BASE_URI__.'adm/index.php?tab=AdminCustomers&id_customer=\' + loaded.order.id_customer + \'&viewcustomer&token='.Tools::getAdminTokenLite('AdminCustomers').'">[F4] '.$this->l('View customer').'</a>\
|
||
<a id="button2" class="button" onclick="window.open(this.href); return false;" href="'.__PS_BASE_URI__.'adm/index.php?tab=AdminOrders&id_order=\' + loaded.order.id + \'&vieworder&token='.Tools::getAdminTokenLite('AdminOrders').'">[F3] '.$this->l('View order').'</a>\
|
||
<a id="button3" class="button" onclick="window.open(this.href); return false;" href="'.__PS_BASE_URI__.'adm/pdf.php?id_order=\' + loaded.order.id + \'&pdf">[F2] '.$this->l('View invoice').'</a>\
|
||
\
|
||
<div class="form">\';
|
||
|
||
/*if($.inArray(parseInt(loaded.delivery_address.id_country), [1, 2, 3, 6, 8, 10, 12, 13, 17, 26, 40, 148, 245]) == -1) {
|
||
confirm("Impression bloquée : l\'envoi de cette commande requiert des documents douaniers");
|
||
}*/
|
||
|
||
'./*($_SERVER['REMOTE_ADDR'] != '78.226.56.137' && !in_array((int) $cookie->id_employee, array(70, 77))? 'if($.inArray(parseInt(loaded.delivery_address.id_country), [8]) == -1) {
|
||
confirm("Impression bloquée : envoi à l\'international indisponible");
|
||
}': '').*/'
|
||
|
||
if((
|
||
$.inArray(loaded.order.id_carrier, carriers_laposte) > 0
|
||
|| $.inArray(loaded.order.id_carrier, carriers_exapaq) > 0
|
||
)
|
||
&& $.inArray(parseInt(loaded.delivery_address.id_country), [1, 2, 3, 6, 8, 10, 12, 13, 17, 26, 40, 148, 245]) != -1) {
|
||
content += \'<label for="parcel_carrier">'.$this->l('Carrier').'</label><select onchange="changeCarrier();" id="parcel_carrier" name="parcel_carrier">\
|
||
';
|
||
|
||
foreach($logistics_carriers as $name => $class) {
|
||
$this->_html .= '<option value="'.$name.'">'.$class->displayName.'</option>';
|
||
}
|
||
|
||
$this->_html .= '\
|
||
</select>\';
|
||
|
||
content += \'<label for="weight">'.$this->l('Weight:').'</label> <input type="text" value="\' + /*ps_round(loaded.weight, 3)*/ \'0\' + \'" name="weight" id="weight" /> kg <input id="button4" onclick="checkPrinting(); return false;" type="submit" class="button" name="submitShip" value="[F1] '.addslashes($this->l('Register the parcel and print the label')).'">\';
|
||
}
|
||
|
||
content += \'</div></div>\
|
||
\
|
||
<table class="std table">\
|
||
<thead>\
|
||
<tr>\
|
||
<td colspan="8" style="text-align: center; padding-bottom: 2px;">\
|
||
<label style="width: auto; font-size: 12px; float: none;">'.$this->l('EAN13 entry:').'</label> <input type="text" value="" autocomplete="off" id="eaninput" onkeydown="return filterKeys(event);" onkeyup="checkEAN();" />\
|
||
</td>\
|
||
</tr>\
|
||
<tr>\
|
||
<th class="width1"></th>\
|
||
<th>'.$this->l('Product').'</th>\
|
||
<th class="width2">'.$this->l('Reference').'</th>\
|
||
<th class="width2" style="display: none;">'.$this->l('Supplier reference').'</th>\
|
||
<th class="width2" title="'.$this->l('Bought / Refunded / Sent').'">'.$this->l('Quantities').'</th>\
|
||
<th class="width2">'.$this->l('Quantity to ship').'</th>\
|
||
<th class="width2">'.$this->l('Att').'</th>\
|
||
<th class="width2"><span style="margin-right: 65px;">'.$this->l('Quantity shipped').'</span></th>\
|
||
</tr>\
|
||
</thead>\
|
||
<tbody>\';
|
||
|
||
for(var i=0; i < loaded.products.length; i++) {
|
||
content += \'\
|
||
<tr data-weight="\' + (parseFloat(loaded.products[i].product_weight) == 0.001? 0.24: loaded.products[i].product_weight) + \'" data-carrier="\' + loaded.products[i].carriers.join(\',\') + \'" rel="\' + (loaded.products[i].product_ean13? loaded.products[i].product_ean13: \'\') + \'" class="\' + (loaded.products[i].id_shipping == 2? \'fed_ship \': \'\') + ($.inArray(loaded.products[i].product_id, locked_products) != -1? \'blocked \': \'\') + ((loaded.products[i].product_quantity - (loaded.products[i].product_quantity_refunded > 0? loaded.products[i].product_quantity_refunded: loaded.products[i].product_quantity_return) - loaded.products[i].product_quantity_sent > 0) && ($.inArray(parseInt(loaded.products[i].id_sale), sales_list) != -1)? \'\': \'grey\') + (Math.max($.inArray(loaded.products[i].product_id, locked_products) != -1? \'0\': (loaded.products[i].product_quantity - (loaded.products[i].product_quantity_refunded > 0? loaded.products[i].product_quantity_refunded: loaded.products[i].product_quantity_return) - loaded.products[i].product_quantity_sent), 0) > 1? \' blue\': \'\') + \'">\
|
||
<td><img src="\' + loaded.products[i].image + \'" alt="" width="200" height="200" /></td>\
|
||
<td>\' + loaded.products[i].product_name.replace(" - ", "<br />") + \'</td>\
|
||
<td class="right">\' + (loaded.products[i].product_reference? loaded.products[i].product_reference + \'<br />\': \'\') + (loaded.products[i].product_ean13? loaded.products[i].product_ean13: \'\') + (loaded.products[i].location? \'<br /><span class="location">\' + loaded.products[i].location + \'</span>\': \'\') + \'</td>\
|
||
<td class="right" style="display: none;">\' + (loaded.products[i].product_supplier_reference? loaded.products[i].product_supplier_reference: \'\') + \'</td>\
|
||
<td class="center"><span style="opacity: .4">\' + loaded.products[i].product_quantity + \' / \' + (loaded.products[i].product_quantity_refunded > 0? loaded.products[i].product_quantity_refunded: loaded.products[i].product_quantity_return) + \' / \' + loaded.products[i].product_quantity_sent + \'</span></td>\
|
||
<td class=" center toship\' + (loaded.products[i].product_quantity - loaded.products[i].product_quantity_return - loaded.products[i].product_quantity_sent == 0? \' red\': \'\') + \'"><strong>\' + Math.max($.inArray(loaded.products[i].product_id, locked_products) != -1? \'0\': (loaded.products[i].product_quantity - (loaded.products[i].product_quantity_refunded > 0? loaded.products[i].product_quantity_refunded: loaded.products[i].product_quantity_return) - loaded.products[i].product_quantity_sent), 0) + \'</strong></td>\
|
||
<td class="center"><input type="checkbox" name="product_ids[]" value="\' + loaded.products[i].product_id + \'" \' + (loaded.products[i].is_pending>0? \'checked disabled\':\'\') + \'/></td>\
|
||
<td class="shipped">\';
|
||
|
||
if (loaded.products[i].id_shipping != 2
|
||
|| (loaded.products[i].id_shipping == 2
|
||
&& '.( ($cookie->profile == 1 || $cookie->profile == 7) ? 'true': 'false').') )
|
||
{
|
||
content += \'<input readonly="true" onchange="checkParcelCarrier($(this));" name="shipped[\' + loaded.products[i].id_order_detail + \']" type="text" value="\' + /*(loaded.products[i].id_shipping == 2? \'0\': ($.inArray(loaded.products[i].product_id, locked_products) != -1? \'0\': (loaded.products[i].product_quantity - (loaded.products[i].product_quantity_refunded > 0? loaded.products[i].product_quantity_refunded: loaded.products[i].product_quantity_return) - loaded.products[i].product_quantity_sent > 0? loaded.products[i].product_quantity - (loaded.products[i].product_quantity_refunded > 0? loaded.products[i].product_quantity_refunded: loaded.products[i].product_quantity_return) - loaded.products[i].product_quantity_sent: \'0\'))) +*/ \'0" autocomplete="off" /><span class="qtyblock"><a onclick="qtyUp($(this), \' + ($.inArray(loaded.products[i].product_id, locked_products) != -1? 0: Math.max((loaded.products[i].product_quantity - (loaded.products[i].product_quantity_refunded > 0? loaded.products[i].product_quantity_refunded: loaded.products[i].product_quantity_return) - loaded.products[i].product_quantity_sent), 0)) + \'); return false;">+</a><a onclick="qtyDown($(this)); return false;">-</a></span>\';
|
||
}
|
||
|
||
content += \'\
|
||
</td>\
|
||
</tr>\
|
||
\';
|
||
}
|
||
|
||
content += \'\
|
||
</tbody>\
|
||
<tfoot>\
|
||
<tr>\
|
||
<td colspan="5"></td>\
|
||
<td style="text-align: center;"><input type="submit" class="button" name="submitMod" value="'.$this->l('MOD').'"/></td>\
|
||
<td></td>\
|
||
</tr>\
|
||
</tfoot>\
|
||
</table>\';
|
||
|
||
if(loaded.logs.length > 0) {
|
||
content += \'<div id="shippingLogs">\
|
||
<strong>'.$this->l('Shipping logs').'</strong><br />\
|
||
<table class="logs">\
|
||
<thead>\
|
||
<tr>\
|
||
<th>'.$this->l('Date').'</th>\
|
||
<th>'.$this->l('Employee').'</th>\
|
||
<th>'.$this->l('Quantity sent').'</th>\
|
||
<th>'.$this->l('Product').'</th>\
|
||
<th>'.$this->l('Reference').'</th>\
|
||
<th>'.$this->l('Supplier reference').'</th>\
|
||
<th>'.$this->l('Shipping number').'</th>\
|
||
<th>'.$this->l('Carrier').'</th>\
|
||
'.(((int) $cookie->profile == 1 || (int) $cookie->profile == 9 || (int) $cookie->profile == 7)?
|
||
'<th></th>': '').'\
|
||
'.(((int) $cookie->profile == 1 || (int) $cookie->profile == 9 || (int) $cookie->profile == 7)?
|
||
'<th></th>': '').'\
|
||
</tr>\
|
||
</thead>\
|
||
<tbody>\';
|
||
|
||
for(var i=0; i < loaded.logs.length; i++) {
|
||
content += \'<tr>\
|
||
<td>\' + loaded.logs[i].date_add + \'</td>\
|
||
<td>\' + loaded.logs[i].firstname + \' \' + loaded.logs[i].lastname + \'</td>\
|
||
<td>\' + loaded.logs[i].quantity + \'</td>\
|
||
<td>\' + loaded.logs[i].product_name.replace(" - ", "<br />") + \'</td>\
|
||
<td>\' + loaded.logs[i].product_reference + \'</td>\
|
||
<td>\' + loaded.logs[i].product_supplier_reference + \'</td>\
|
||
<td>\' + loaded.logs[i].shipping_number + \'</td>\
|
||
<td>\' + carriers[loaded.logs[i].carrier] + \'</td>\
|
||
'.(((int) $cookie->profile == 1 || (int) $cookie->profile == 9 || (int) $cookie->profile == 7)?
|
||
'<td><a href="/adm/index.php?tab=AdminLogistics&token='.Tools::getAdminTokenLite('AdminLogistics').'&id_order=\' + loaded.order.id + \'&delete_\' + loaded.logs[i].carrier + \'=\' + loaded.logs[i].id_order_detail + \'&delete_number=\' + loaded.logs[i].shipping_number + \'">x</a></td>': '').'\
|
||
'.(((int) $cookie->profile == 1 || (int) $cookie->profile == 9 || (int) $cookie->profile == 7)?
|
||
'<td><a title="Re print" class="reprint ui-icon ui-icon-arrowthickstop-1-s" data-product="\' + loaded.logs[i].product_name.replace(" - ", "<br />") + \'" data-ref="\' + loaded.logs[i].product_reference + \'" data-id_order="\' + loaded.order.id + \'" data-carrier="\' + loaded.logs[i].carrier + \'" data-id_order_detail="\' + loaded.logs[i].id_order_detail + \'">+</a></td>': '').'\
|
||
</tr>\';
|
||
}
|
||
|
||
content += \'</tbody></table></div>\';
|
||
|
||
content += \'\
|
||
<div id="form-reprint-label">\
|
||
<form id="form_reprint" method="POST" action="'.str_replace(array('&mode=&mode=', '&mode=0&mode=0', '&mode=1&mode=1'), array('&mode=', '&mode=0', '&mode=1'), preg_replace('/\&id_order=[0-9]+/', '', $_SERVER['REQUEST_URI'])).'&mode=\' + window.location.hash.replace(\'#\', \'\') + \'&id_order=\' + loaded.order.id + window.location.hash + \'">\
|
||
<fieldset style="margin-top:30px;">\
|
||
<legend>'.$this->l('Print another Label').'</legend>\
|
||
<p> <label>'.$this->l('Product:').'</label> <span id="product-name"></span></p>\
|
||
<p> <label>'.$this->l('Ref:').'</label> <span id="product-ref"></span></p>\
|
||
<p> <label for="weight">'.$this->l('Weight:').'</label> <input type="text" value="\' + \'0\' + \'" name="weight" id="weight-reprint" /> kg </p>\
|
||
<p> <label for="products">'.$this->l('Quantity:').'</label> <input type="text" value="\' + \'1\' + \'" name="products[]" id="quantity-reprint" /></p>\
|
||
<input type="hidden" value="laposte" name="carrier" id="carrier-reprint" />\
|
||
<input type="hidden" value="0" name="id_order" id="id_order-reprint" />\
|
||
<p style="padding-left: 200px;"> <input id="button5" type="submit" class="button" name="submitReprintShip" value="'.addslashes($this->l('Register the parcel and print the label')).'"> </p>\
|
||
</fieldset>\
|
||
</form>\
|
||
\
|
||
</div>\';
|
||
|
||
content += \'\
|
||
'.(((int) $cookie->profile == 1 || (int) $cookie->profile == 9 || (int) $cookie->profile == 7)?
|
||
'<!--a id="reprint_label2" class="button" data-id_order="\' + loaded.order.id + \'">'.$this->l('Print another Label (multi products)').'</a-->': '').'\';
|
||
|
||
content += \'\
|
||
<!--div id="form-reprint-labels">\
|
||
<form id="form_reprint2" method="POST" action="'.str_replace(array('&mode=&mode=', '&mode=0&mode=0', '&mode=1&mode=1'), array('&mode=', '&mode=0', '&mode=1'), preg_replace('/\&id_order=[0-9]+/', '', $_SERVER['REQUEST_URI'])).'&mode=\' + window.location.hash.replace(\'#\', \'\') + \'&id_order=\' + loaded.order.id + window.location.hash + \'">\
|
||
<fieldset>\
|
||
<legend>'.$this->l('Print another Label - choose your products').'</legend>\
|
||
<table class="logs">\
|
||
<thead>\
|
||
<tr>\
|
||
<th>'.$this->l('Product').'</th>\
|
||
<th>'.$this->l('Reference').'</th>\
|
||
<th>'.$this->l('Quantity sent').'</th>\
|
||
<th>'.$this->l('Carrier').'</th>\
|
||
<th>'.$this->l('Quantity to send').'</th>\
|
||
</tr>\
|
||
</thead>\
|
||
<tbody>\';
|
||
for(var i=0; i < loaded.logs.length; i++) {
|
||
content += \'<tr>\
|
||
<td>\' + loaded.logs[i].product_name.replace(" - ", "<br />") + \'</td>\
|
||
<td>\' + loaded.logs[i].product_reference + \'</td>\
|
||
<td>\' + loaded.logs[i].quantity + \'</td>\
|
||
<td>\' + carriers[loaded.logs[i].carrier] + \'</td>\
|
||
<td><input name="products[\' + loaded.logs[i].id_order_detail + \']" type="text" value="0" autocomplete="off" /></td>\
|
||
</tr>\';
|
||
}
|
||
content += \'\
|
||
</tbody></table>\
|
||
<p> <label for="weight">'.$this->l('Weight:').'</label> <input type="text" value="\' + \'0\' + \'" name="weight" id="weight-reprint2" /> kg </p>\
|
||
<input type="hidden" value="laposte" name="carrier" id="carrier-reprint2" />\
|
||
<input type="hidden" value="0" name="id_order" id="id_order-reprint2" />\
|
||
<p style="padding-left: 200px;"> <input id="button6" type="submit" class="button" name="submitReprintShip2" value="'.addslashes($this->l('Register the parcel and print the label')).'"> </p>\
|
||
</fieldset>\
|
||
</form>\
|
||
\
|
||
</div-->\';
|
||
}
|
||
|
||
';
|
||
|
||
if((int) $cookie->profile == 1 || (int) $cookie->profile == 2 || (int) $cookie->profile == 7) {
|
||
$this->_html .= '
|
||
content += \'<br /><br />\';
|
||
';
|
||
|
||
foreach($logistics_carriers as $name => $class) {
|
||
$this->_html .= '
|
||
content += \'<input type="submit" class="button" name="submitTest'.ucfirst($name).'" value="'.addslashes($this->l('Print a test label')).' ('.$class->displayName.')"> \';
|
||
';
|
||
}
|
||
}
|
||
|
||
$this->_html .= '
|
||
content += \'</form>\';
|
||
|
||
|
||
$("#orderInfos").html(content);
|
||
|
||
if($.inArray(String(loaded.order.id_carrier), carriers_laposte) > 0) {
|
||
$("#parcel_carrier").val("laposte");
|
||
} else if($.inArray(String(loaded.order.id_carrier), carriers_exapaq) > 0) {
|
||
$("#parcel_carrier").val("exapaq");
|
||
}
|
||
|
||
$("#orderInfos").show();
|
||
|
||
$("#main table.std tbody").append($("#main table.std tbody tr").get().sort(function(a, b) {
|
||
return $(a).attr("class") == "grey";
|
||
}));
|
||
|
||
if(ean_focus) {
|
||
$("#eaninput").focus();
|
||
}
|
||
|
||
$(".reprint").each(function(){
|
||
$(this).click(function(e){
|
||
e.preventDefault();
|
||
|
||
$("span#product-name").text($(this).data("product"));
|
||
$("span#product-ref").text($(this).data("ref"));
|
||
$("#carrier-reprint").val($(this).data("carrier"));
|
||
$("#id_order-reprint").val($(this).data("id_order"));
|
||
$("#quantity-reprint").attr("name","products["+$(this).data("id_order_detail")+"]");
|
||
|
||
/*$("#form-reprint-labels").hide();*/
|
||
$("#form-reprint-label").show();
|
||
});
|
||
});
|
||
|
||
$("#reprint_label2").click(function(e){
|
||
e.preventDefault();
|
||
$("#id_order-reprint2").val($(this).data("id_order"));
|
||
$("#form-reprint-label").hide();
|
||
$("#form-reprint-labels").show();
|
||
});
|
||
}
|
||
}
|
||
});
|
||
}
|
||
-->
|
||
</script>
|
||
<script type="text/javascript" src="'.__PS_BASE_URI__.'modules/logistics/libs/jquery.hotkeys.js"></script>
|
||
<script type="text/javascript" src="'.__PS_BASE_URI__.'modules/logistics/libs/jquery.simplemodal.js"></script>
|
||
<script type="text/javascript" src="'.__PS_BASE_URI__.'modules/logistics/libs/jquery-ui-1.8.20.custom.min.js"></script>
|
||
<script type="text/javascript" src="'.__PS_BASE_URI__.'modules/logistics/libs/jquery.multiselect.min.js"></script>
|
||
<script type="text/javascript" src="'.__PS_BASE_URI__.'modules/logistics/libs/jquery.multiselect.filter.min.js"></script>
|
||
<script type="text/javascript" src="'.__PS_BASE_URI__.'modules/logistics/scripts.js?v=7"></script>
|
||
|
||
<!-- modal content -->
|
||
<div id="confirm">
|
||
<div class="header"><span>Erreur</span></div>
|
||
<div class="message"></div>
|
||
<div class="buttons">
|
||
<div class="no simplemodal-close">OK</div>
|
||
</div>
|
||
</div>
|
||
<!-- prompt content -->
|
||
<div id="prompt">
|
||
<div class="header"><span>Confirmation</span></div>
|
||
<div class="message"></div>
|
||
<div class="buttons">
|
||
<div class="yes simplemodal-close">Valider</div>
|
||
<div class="no simplemodal-close">Annuler</div>
|
||
</div>
|
||
</div>
|
||
<!-- preload the images -->
|
||
<div style="display:none">
|
||
<img src="'.__PS_BASE_URI__.'modules/logistics/img/confirm/header.gif" alt="" />
|
||
<img src="'.__PS_BASE_URI__.'modules/logistics/img/confirm/button.gif" alt="" />
|
||
</div>
|
||
|
||
<form action="'.__PS_BASE_URI__.'modules/logistics/select_sale.php?token='.Tools::getValue('token').'&id_employee='.(int) $cookie->id_employee.'" method="POST">
|
||
<div><select multiple="true" id="filter_id_sale" name="filter_id_sale[]" style="display: none;">
|
||
';
|
||
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT s.`id_sale`, c.`name`
|
||
FROM `'._DB_PREFIX_.'privatesale` s
|
||
LEFT JOIN `'._DB_PREFIX_.'category_lang` c
|
||
ON c.`id_category` = s.`id_category`
|
||
WHERE c.`id_lang` = 2
|
||
AND (
|
||
s.`date_end` > DATE_SUB(NOW(), INTERVAL 90 DAY)
|
||
OR s.`public` = 1
|
||
)
|
||
') as $row) {
|
||
$this->_html .= '<option value="'.(int) $row['id_sale'].'"'.(in_array((int) $row['id_sale'], $sales_list)? ' selected="selected"': '').'>'.(int) $row['id_sale'].' - '.htmlentities($row['name']).'</option>';
|
||
}
|
||
|
||
$this->_html .= '</select><input class="button" type="submit" value="Valider" style="float: right;" /><br style="clear: both" /></div>
|
||
</form>
|
||
|
||
<fieldset style="overflow: auto; position: relative; margin-top: 30px;'.($cookie->profile == 1 || count($sales_list) > 0? ' display: block;': 'display: none;').'">
|
||
<legend>'.$this->l('Order selection').'</legend>
|
||
|
||
<legend class="right" style="right: 185px;">[F11] '.$this->l('Mode:').' <a '.(Tools::getValue('mode') == 'light'? 'class="active"': '').' onclick="toggleMode(this);" href="#light">'.$this->l('light').'</a> | <a '.(Tools::getValue('mode') == 'light'? '': 'class="active"').' onclick="toggleMode(this);" href="#normal">'.$this->l('complete').'</a></legend>
|
||
|
||
<legend class="right">[F12] '.$this->l('EAN13 entry').'</legend>
|
||
|
||
<legend class="right" style="right: 400px;"><a style="cursor: pointer;" onclick="window.open(\'/modules/shippingstats/showstats.php?token='.Tools::getValue('token').'&id_employee='.(int) $cookie->id_employee.'\', \'\', \'menubar=no, status=no, width=400, height=400\');">Statistiques</a></legend>
|
||
|
||
<p style="float: left; width: 435px;">
|
||
<label for="barcodeinput" style="display: inline; float: none; width: auto;">'.$this->l('Barcode input:').'</label>
|
||
<input type="text" id="barcodeinput" value="" autocomplete="off" placeholder="'.$this->l('Click here and scan a barcode').'" style="width: 250px;" />
|
||
</p>
|
||
|
||
<p style="float: right; width: 435px; margin-top:15px">
|
||
<label for="manualinput" style="display: inline; float: none; width: auto;">'.$this->l('Manual input:').'</label>
|
||
<input type="text" id="manualinput" value="" autocomplete="off" placeholder="'.$this->l('Enter an order id here').'" style="width: 250px;" />
|
||
<p style="font-size: 11px; margin-left: 124px; float: right; clear:both; ">Saisir un id de commande puis appuyer sur ENTREE</p>
|
||
</p>
|
||
</fieldset>
|
||
|
||
<div id="orderInfos" style="display: none;"></div>
|
||
';
|
||
|
||
echo $this->_html;
|
||
}
|
||
}
|