2017-02-13 11:04:44 +01:00

873 lines
29 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
if(!defined('_PS_VERSION_')) {
exit;
}
global $mondialrelay_formats;
$mondialrelay_formats = array(
'FR' => chr(2).'m'.'
1e1325011800052C{SHIPPING_NUMBER128}
131110011200180{SHIPPING_NUMBER}
1X1100009400050b0480015000010001
1X1100005500050b0480035000010001
1X1100004100050b0510009000010001
1X1100002940050b0510009000010001
1X1100003450585b0200011000010001
1X1100008370050l04800001
1X1100004500050l05100001
1X1100003370050l05100001
1X1100004050585l02000001
1X1100004100210l00010090
1X1100004100350l00010090
1X1100002940210l00010090
1X1100002940350l00010090
1X1100009400051P001000110870525
1X1100009400525P001000110870051
1911S2410500065P010P010{EXP_COMPANY}
1911S2310200065P008P008{EXP_ADDR1}
1911S2309900065P008P008{EXP_ADDR2}
1911S2309600065P008P008{EXP_POSTCODE} {EXP_CITY}
1911S2408550065P010P010Destinataire
1911S2407940065P010P010{DEST_ADDR1}
1911S2307640065P006P006{DEST_ADDR2}
1911S2307370065P006P006{DEST_ADDR3}
1911S2307100065P006P006{DEST_ADDR4}
1911S2306830065P006P006{DEST_ADDR5}
1911S2406440065P010P010{DEST_POSTCODE}
1911S2306440180P010P010{DEST_CITY}
1911S2306060065P010P010{DEST_PHONE}
1911S2305700065P010P010{DEST_OTHER}
1911S2410100570P025P014{SHIPPING_1} /
1911S2410180700P020P012{SHIPPING_2}
1911S2409200570P025P014AG {SHIPPING_3}
1911S2408400570P020P012N {SHIPPING_4} -
A5
1911S2408400710P020P012{SHIPPING_5}
A2
1911S2407600570P020P012T {SHIPPING_6}
1911S2406700570P025P014{SHIPPING_7}
1911S2406750850P020P0121/1
1911S2405700570P025P014{SHIPPING_8}
1911S2404650065P007P006N'.chr(248).' exp'.chr(130).'dition
1911S2404650220P007P006Date d\'envoi
1911S2404650360P007P006Agence de collecte
1911S2304220080P007P007{EXPEDITION_NUMBER}
1911S2304220220P007P007{DATE}
1911S2304220420P007P007{AGENCY_CODE}
1911S2404180595P009P009A Encaisser
1911S2403630661P010P0100 '.chr(255).'
1Y0000003240820MONDIALR
1911S2403500080P007P006Poids (kg)
1911S2403500225P007P006Volume (L)
1911S2403500410P007P006N'.chr(248).' Colis
1911S2303060085P007P007{WEIGHT}
1911S2303060265P007P007{VOLUME}
1911S2303060430P007P0071/1
1911S2302400050P007P007{INSTRUCTIONS}
'.chr(2).'n
',
'EN' => chr(2).'m'.'
1e1325011800052C{SHIPPING_NUMBER128}
131110011200180{SHIPPING_NUMBER}
1X1100009400050b0480015000010001
1X1100005500050b0480035000010001
1X1100004100050b0510009000010001
1X1100002940050b0510009000010001
1X1100003450585b0200011000010001
1X1100008370050l04800001
1X1100004500050l05100001
1X1100003370050l05100001
1X1100004050585l02000001
1X1100004100210l00010090
1X1100004100350l00010090
1X1100002940210l00010090
1X1100002940350l00010090
1X1100009400051P001000110870525
1X1100009400525P001000110870051
1911S2410500065P010P010{EXP_COMPANY}
1911S2310200065P008P008{EXP_ADDR1}
1911S2309900065P008P008{EXP_ADDR2}
1911S2309600065P008P008{EXP_POSTCODE} {EXP_CITY}
1911S2408550065P010P010Consignee
1911S2407940065P010P010{DEST_ADDR1}
1911S2307640065P006P006{DEST_ADDR2}
1911S2307370065P006P006{DEST_ADDR3}
1911S2307100065P006P006{DEST_ADDR4}
1911S2306830065P006P006{DEST_ADDR5}
1911S2406440065P010P010{DEST_POSTCODE}
1911S2306440180P010P010{DEST_CITY}
1911S2306060065P010P010{DEST_PHONE}
1911S2305700065P010P010{DEST_OTHER}
1911S2410100570P025P014{SHIPPING_1} /
1911S2410180700P020P012{SHIPPING_2}
1911S2409200570P025P014AG {SHIPPING_3}
1911S2408400570P020P012N {SHIPPING_4} -
A5
1911S2408400710P020P012{SHIPPING_5}
A2
1911S2407600570P020P012T {SHIPPING_6}
1911S2406700570P025P014{SHIPPING_7}
1911S2406750850P020P0121/1
1911S2405700570P025P014{SHIPPING_8}
1911S2404650065P007P006No. Shipment
1911S2404650220P007P006Sending Date
1911S2404650360P007P006Connection Agency
1911S2304220080P007P007{EXPEDITION_NUMBER}
1911S2304220220P007P007{DATE}
1911S2304220420P007P007{AGENCY_CODE}
1911S2404180595P009P009C.O.D.
1911S2403630661P010P0100 '.chr(255).'
1Y0000003240820MONDIALR
1911S2403500080P007P006Weight (kg)
1911S2403500225P007P006Volume (L)
1911S2403500410P007P006No. Parcel
1911S2303060085P007P007{WEIGHT}
1911S2303060265P007P007{VOLUME}
1911S2303060430P007P0071/1
1911S2302400050P007P007{INSTRUCTIONS}
'.chr(2).'n
',
'ES' => chr(2).'m'.'
1e1325011800052C{SHIPPING_NUMBER128}
131110011200180{SHIPPING_NUMBER}
1X1100009400050b0480015000010001
1X1100005500050b0480035000010001
1X1100004100050b0510009000010001
1X1100002940050b0510009000010001
1X1100003450585b0200011000010001
1X1100008370050l04800001
1X1100004500050l05100001
1X1100003370050l05100001
1X1100004050585l02000001
1X1100004100210l00010090
1X1100004100350l00010090
1X1100002940210l00010090
1X1100002940350l00010090
1X1100009400051P001000110870525
1X1100009400525P001000110870051
1911S2410500065P010P010{EXP_COMPANY}
1911S2310200065P008P008{EXP_ADDR1}
1911S2309900065P008P008{EXP_ADDR2}
1911S2309600065P008P008{EXP_POSTCODE} {EXP_CITY}
1911S2408550065P010P010Destinario
1911S2407940065P010P010{DEST_ADDR1}
1911S2307640065P006P006{DEST_ADDR2}
1911S2307370065P006P006{DEST_ADDR3}
1911S2307100065P006P006{DEST_ADDR4}
1911S2306830065P006P006{DEST_ADDR5}
1911S2406440065P010P010{DEST_POSTCODE}
1911S2306440180P010P010{DEST_CITY}
1911S2306060065P010P010{DEST_PHONE}
1911S2305700065P010P010{DEST_OTHER}
1911S2410100570P025P014{SHIPPING_1} /
1911S2410180700P020P012{SHIPPING_2}
1911S2409200570P025P014AG {SHIPPING_3}
1911S2408400570P020P012N {SHIPPING_4} -
A5
1911S2408400710P020P012{SHIPPING_5}
A2
1911S2407600570P020P012T {SHIPPING_6}
1911S2406700570P025P014{SHIPPING_7}
1911S2406750850P020P0121/1
1911S2405700570P025P014{SHIPPING_8}
1911S2404650065P007P006N'.chr(248).' d\'exp'.chr(130).'dicion
1911S2404650220P007P006Fetcha de envio
1911S2404650360P007P006Agencia de Cobros
1911S2304220080P007P007{EXPEDITION_NUMBER}
1911S2304220220P007P007{DATE}
1911S2304220420P007P007{AGENCY_CODE}
1911S2404180595P009P009A Cobrar
1911S2403630661P010P0100 '.chr(255).'
1Y0000003240820MONDIALR
1911S2403500080P007P006Peso (kg)
1911S2403500225P007P006Volumen (L)
1911S2403500410P007P006N'.chr(248).' Paquete
1911S2303060085P007P007{WEIGHT}
1911S2303060265P007P007{VOLUME}
1911S2303060430P007P0071/1
1911S2302400050P007P007{INSTRUCTIONS}
'.chr(2).'n
',
);
class MondialrelayCarrier {
public $displayName = 'Mondial Relay';
public function checkavailability() {
return TRUE;
}
public function __toString() {
return $this->displayName;
}
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_QUOTES, 'UTF-8')
);
}
public function renderLabel($order, $weight, $shipping_data) {
global $cookie, $mondialrelay_formats;
$agencies = array(
'0637' => 'BRIVE',
'0606' => 'BORDEAUX',
'0655' => 'CAEN',
'0676' => 'CLERMONT-F',
'0221' => 'CHAMBERY',
'0603' => 'AJACCIO',
'0677' => 'DIJON',
'0662' => 'HEM',
'0688' => 'ST OUEN',
'0254' => 'LIEUSAINT',
'0300' => 'LILLE',
'0715' => 'LYON',
'0648' => 'MARSEILLE',
'0717' => 'METZ',
'0718' => 'MONTPELLIE',
'0719' => 'NANTES',
'0301' => 'NICE',
'0720' => 'MER',
'0511' => 'REIMS',
'0722' => 'RENNES',
'0729' => 'ROUEN',
'0737' => 'STRASBOURG',
'0743' => 'TOULOUSE',
'0749' => 'ORLEANS',
'0930' => 'MONTREUIL',
'0265' => 'VALENCE',
'0975' => 'DOM TOM',
'3010' => 'PORTUGAL',
'3210' => 'ASM PT',
'4010' => 'SPAIN',
'4210' => 'ASM ES',
'5010' => 'BELGIUM',
'5199' => 'MONTREUIL',
'5210' => 'BELGIQUE',
'5310' => 'BPOST BE',
'6610' => 'HERMES DE',
'6620' => 'HERMES IT',
'6630' => 'HERMES AT',
'6640' => 'HERMES UK',
'7210' => 'TNT NL',
'8210' => 'DINTEC LU',
);
$exp_company = Configuration::get('MONDIALRELAY_EXP_COMPANY');
$exp_address1 = Configuration::get('MONDIALRELAY_EXP_ADDR1');
$exp_address2 = Configuration::get('MONDIALRELAY_EXP_ADDR2');
$exp_postal = Configuration::get('MONDIALRELAY_EXP_POSTALCODE');
$exp_city = Configuration::get('MONDIALRELAY_EXP_CITY');
$exp_country = Configuration::get('MONDIALRELAY_EXP_COUNTRY');
$delivery_address = new Address((int) $order->id_address_delivery);
if(!Validate::isLoadedObject($delivery_address)) {
return FALSE;
}
$delivery_infos = Db::getInstance()->getRow('
SELECT s.*, m.`dlv_mode`
FROM `'._DB_PREFIX_.'mr_selected` s
LEFT JOIN `'._DB_PREFIX_.'mr_method` m ON s.`id_method` = m.`id_mr_method`
WHERE s.`id_order` = '.(int) $order->id.'
');
// Hack 5 numbers relay num
if (isset($delivery_infos['MR_Selected_Num']) && $delivery_infos['MR_Selected_Num'])
$delivery_infos['MR_Selected_Num'] = substr($delivery_infos['MR_Selected_Num'], -5);
if(!$delivery_infos || in_array($delivery_infos['dlv_mode'], array('LDS', 'LD1', 'HOM'))) {
$mode = $delivery_infos? $delivery_infos['dlv_mode']: 'LD1';
$shipping = array(
$delivery_address->firstname.' '.$delivery_address->lastname,
$delivery_address->company,
$delivery_address->address1,
$delivery_address->address2,
$delivery_address->postcode,
$delivery_address->city,
'',
empty($delivery_address->phone)? $delivery_address->phone_mobile: $delivery_address->phone,
trim(str_replace('|', ' ', $delivery_address->other)),
);
$dest_country = $delivery_address->id_country;
} else {
$mr_relais = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'mondialrelay_relais`
WHERE 1
AND `direction` = "'.pSQL($delivery_infos['MR_Selected_Num']).'"
AND `prpay` = "'.pSQL($delivery_infos['MR_Selected_Pays']).'"
');
$mode = $delivery_infos['dlv_mode'];
if($mode == '24R') {
if($mr_relais['narel'] == 'F') {
$mode = '24X';
} elseif($mr_relais['narel'] == 'E') {
$mode = '24L';
} else {
$mode = '24R';
}
}
$shipping = array(
$delivery_address->firstname.' '.$delivery_address->lastname,
$mr_relais['colnom'],
$mr_relais['colbat'],
str_replace(' AVENUE D', ' AV. D', str_replace(' GENERAL LECLERC', ' GAL LECLERC', $mr_relais['colrue'])),
$mr_relais['coldit'],
$mr_relais['codpos'],
$mr_relais['libbp'],
empty($delivery_address->phone_mobile)? $delivery_address->phone: $delivery_address->phone_mobile,
'',
);
$dest_country = (int) Db::getInstance()->getValue('
SELECT `id_country`
FROM `'._DB_PREFIX_.'country`
WHERE `iso_code` = "'.pSQL($delivery_infos['MR_Selected_Pays']).'"
');
}
if(mb_strlen($shipping[2]) > 22 && $shipping[3] == '') {
$shipping[3] = mb_substr($shipping[2], 22, 22);
$shipping[2] = mb_substr($shipping[2], 0, 22);
}
$format = str_replace(
array(
'{SHIPPING_NUMBER128}',
'{SHIPPING_NUMBER}',
'{EXP_COMPANY}',
'{EXP_ADDR1}',
'{EXP_ADDR2}',
'{EXP_POSTCODE}',
'{EXP_CITY}',
'{DEST_ADDR1}',
'{DEST_ADDR2}',
'{DEST_ADDR3}',
'{DEST_ADDR4}',
'{DEST_ADDR5}',
'{DEST_POSTCODE}',
'{DEST_CITY}',
'{DEST_PHONE}',
'{DEST_OTHER}',
'{SHIPPING_1}',
'{SHIPPING_2}',
'{SHIPPING_3}',
'{SHIPPING_4}',
'{SHIPPING_5}',
'{SHIPPING_6}',
'{SHIPPING_7}',
'{SHIPPING_8}',
'{EXPEDITION_NUMBER}',
'{DATE}',
'{AGENCY_CODE}',
'{WEIGHT}',
'{VOLUME}',
'{INSTRUCTIONS}',
),
array(
$shipping_data['shipping_number'],
$shipping_data['shipping_number_fmt'],
$exp_company,
$exp_address1,
$exp_address2,
$exp_postal,
$exp_city,
$shipping[0],
$shipping[1],
$shipping[2],
$shipping[3],
$shipping[4],
$shipping[5],
$shipping[6],
$shipping[7],
$shipping[8],
$shipping_data['plantri']['cppay'],
$shipping_data['plantri']['nogroup'],
$shipping_data['plantri']['modexp'],
$shipping_data['plantri']['pretri'], // N ...
$shipping_data['plantri']['navette'],
$shipping_data['plantri']['direction'], // T ...
$shipping_data['mode'],
$agencies[$shipping_data['plantri']['modexp']],
$shipping_data['expedition_number'],
date('d/m/Y'),
Db::getInstance()->getValue('
SELECT `modexp`
FROM `'._DB_PREFIX_.'mondialrelay_tri`
WHERE `cppay` = "'.pSQL(Db::getInstance()->getValue('
SELECT `iso_code`
FROM `'._DB_PREFIX_.'country`
WHERE `id_country` = '.(int) $exp_country.'
')).'"
AND `destex` = "'.pSQL($exp_postal).'"
'),
number_format((float) $shipping_data['weight'], 2, ',', ''),
'NC',
'',
),
$mondialrelay_formats[$dest_country == 6? 'ES': (in_array($dest_country, array(3, 8, 12))? 'FR': 'EN')]
);
return $format;
}
public function getShippingNumber($id_order) {
Db::getInstance()->Execute('SET AUTOCOMMIT = 0');
Db::getInstance()->Execute('START TRANSACTION');
$res = Db::getInstance()->ExecuteS('
SELECT `value`
FROM `'._DB_PREFIX_.'logistics_shipping`
WHERE `carrier` = "MONDIALRELAY"
FOR UPDATE
');
$sequence = (int) $res[0]['value'] + 1;
// LOOP SHIPPING SEQUENCE
if ($sequence < Configuration::get('MONDIALRELAY_SHIPPINGLOW') || $sequence > Configuration::get('MONDIALRELAY_SHIPPINGHIGH'))
$sequence = Configuration::get('MONDIALRELAY_SHIPPINGLOW');
// CHECK UNICITY
$last_update = Db::getInstance()->getValue('SELECT DATE_ADD(`date_upd`, INTERVAL 1 YEAR) FROM `' . _DB_PREFIX_ . 'mondialrelay_expedition_numbers` WHERE `sequence` = ' . (int) $sequence);
if ($last_update && $last_update > date('Y-m-d H:i:s')){
$content = 'Le numéro d\'expédition ' . $sequence . ' a été affecté il y a moins d\'un an.' . "\n" . 'Impossible d\'affecter un nouveau numéro d\'expédition';
mail('marion@antadis.com', '[BBB MONDIAL RELAY] Numéro d\'expédition', $content, 'Content-Type: text/plain; charset="utf-8"'."\r\n".'From: commande@bebeboutik.com'."\r\n".'Reply-To: marion@antadis.com'."\r\n".'Return-Path: marion@antadis.com'."\r\n");
return false;
}
Db::getInstance()->execute('
INSERT INTO ' . _DB_PREFIX_ . 'mondialrelay_expedition_numbers (`sequence`, `date_upd`)
VALUES (' . (int) $sequence . ', "' . pSQL(date('Y-m-d H:i:s')) . '")
ON DUPLICATE KEY UPDATE date_upd="' . pSQL(date('Y-m-d H:i:s')) . '";
');
Db::getInstance()->ExecuteS('
UPDATE `'._DB_PREFIX_.'logistics_shipping`
SET `value` = "'.(int) $sequence.'"
WHERE `carrier` = "MONDIALRELAY"
');
Db::getInstance()->Execute('COMMIT');
Db::getInstance()->Execute('SET AUTOCOMMIT = 1');
return $sequence;
}
public function registerParcel($order, $products, $weight) {
global $cookie;
$delivery_infos = Db::getInstance()->getRow('
SELECT s.*, m.`dlv_mode`
FROM `'._DB_PREFIX_.'mr_selected` s
LEFT JOIN `'._DB_PREFIX_.'mr_method` m ON (s.`id_method` = m.`id_mr_method`)
WHERE s.`id_order` = '.(int) $order->id.'
');
// Hack 5 numbers relay num
if (isset($delivery_infos['MR_Selected_Num']) && $delivery_infos['MR_Selected_Num']) {
$delivery_infos['MR_Selected_Num'] = substr($delivery_infos['MR_Selected_Num'], -5);
}
if(!$delivery_infos || in_array($delivery_infos['dlv_mode'], array('LDS', 'LD1', 'HOM'))) {
$mode = $delivery_infos? $delivery_infos['dlv_mode']: 'LD1';
$address = Db::getInstance()->getRow('
SELECT a.`postcode`, UPPER(c.`iso_code`) AS `iso_code`
FROM `'._DB_PREFIX_.'address` a
LEFT JOIN `'._DB_PREFIX_.'country` c
ON a.`id_country` = c.`id_country`
WHERE a.`id_address` = '.(int) $order->id_address_delivery.'
');
$country = $address['iso_code'];
$postcode = $address['postcode'];
$mode_tri = $mode == 'LD1' ? 'LDR': $mode;
$plantri = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'mondialrelay_tri`
WHERE `destyp` = "CP"
AND `destex` = "'.pSQL($postcode).'"
AND `cppay` = "'.pSQL($country).'"
AND (
`livmod` = "'.pSQL($mode_tri).'"
OR `livmod` = "HOM"
)
');
if(!$plantri) {
$plantri = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'mondialrelay_tri`
WHERE `destyp` = "CP"
AND `destex` = "'.pSQL(substr($postcode, 0, 2)).'"
AND `cppay` = "'.pSQL($country).'"
AND (
`livmod` = "'.pSQL($mode_tri).'"
OR `livmod` = "HOM"
)
');
}
if($plantri) {
$mode = $plantri['livmod'];
}
} else {
$mr_relais = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'mondialrelay_relais`
WHERE 1
AND `direction` = "'.pSQL($delivery_infos['MR_Selected_Num']).'"
AND `prpay` = "'.pSQL($delivery_infos['MR_Selected_Pays']).'"
');
$mode = $delivery_infos['dlv_mode'];
if($mode == '24R') {
if($mr_relais['narel'] == 'F') {
$mode = '24X';
} elseif($mr_relais['narel'] == 'E') {
$mode = '24L';
} else {
$mode = '24R';
}
}
$country = $delivery_infos['MR_Selected_Pays'];
$postcode = $delivery_infos['MR_Selected_CP'];
$plantri = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'mondialrelay_tri`
WHERE `destyp` = "RL"
AND `destex` = "'.pSQL($delivery_infos['MR_Selected_Num']).'"
AND `cppay` = "'.pSQL($country).'"
');
}
if(!$plantri) {
// TODO: error handling
return;
}
$sequence = $this->getShippingNumber((int) $order->id);
if (!$sequence){
return array('<p class="error">Unicité du numéro d\'expédition non respecté</p><br />', array());
}
$expedition_number = sprintf('%08d', $sequence);
$mr_info = Configuration::get('MR_ACCOUNT_DETAIL');
$mr_info = unserialize($mr_info);
// $shipping_number_1 = Configuration::get('MONDIALRELAY_ENSIGN_CODE').$expedition_number.'0101';
$shipping_number_1 = $mr_info['MR_CODE_MARQUE'].$expedition_number.'0101';
$control_number_1 = 11 - ((int) substr($shipping_number_1, 13, 1) * 2 + (int) substr($shipping_number_1, 12, 1) * 3 + (int) substr($shipping_number_1, 11, 1) * 4 + (int) substr($shipping_number_1, 10, 1) * 5 + (int) substr($shipping_number_1, 9, 1) * 6 + (int) substr($shipping_number_1, 8, 1) * 7 + (int) substr($shipping_number_1, 7, 1) * 2 + (int) substr($shipping_number_1, 6, 1) * 3 + (int) substr($shipping_number_1, 5, 1) * 4 + (int) substr($shipping_number_1, 4, 1) * 5 + (int) substr($shipping_number_1, 3, 1) * 6 + (int) substr($shipping_number_1, 2, 1) * 7 + (int) substr($shipping_number_1, 1, 1) * 2 + (int) substr($shipping_number_1, 0, 1) * 3) % 11;
if($control_number_1 == 10 || $control_number_1 == 11) {
$control_number_1 = 0;
}
$shipping_number_2 = $plantri['modexp'].$plantri['service'].$plantri['direction'];
$control_number_2 = 11 - ((int) substr($shipping_number_2, 9, 1) * 2 + (int) substr($shipping_number_2, 8, 1) * 3 + (int) substr($shipping_number_2, 7, 1) * 4 + (int) substr($shipping_number_2, 6, 1) * 5 + (int) substr($shipping_number_2, 5, 1) * 6 + (int) substr($shipping_number_2, 4, 1) * 7 + (int) substr($shipping_number_2, 3, 1) * 2 + (int) substr($shipping_number_2, 2, 1) * 3 + (int) substr($shipping_number_2, 1, 1) * 4 + (int) substr($shipping_number_2, 0, 1) * 5) % 11;
if($control_number_2 == 10 || $control_number_2 == 11) {
$control_number_2 = 0;
}
$shipping_number = $shipping_number_1.$control_number_1.$shipping_number_2.$control_number_2;
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'] != '90.63.178.63') {
$order->shipping_number = $shipping_number;
$order->update();
}
return array('', array(
'idrelay' => $delivery_infos? $delivery_infos['MR_Selected_Num']: '',
'shipping_number' => $shipping_number,
'shipping_number_fmt' => substr($shipping_number, 0, 2).' '.substr($shipping_number, 2, 8).' '.substr($shipping_number, 10, 4).' '.substr($shipping_number, 14, 1).' '.substr($shipping_number, 15, 4).' '.substr($shipping_number, 19, 1).' '.substr($shipping_number, 20, 5).' '.substr($shipping_number, 25, 1),
'shipping_number_c25i' => $this->isoreplace($this->c25I($shipping_number)),
'weight' => $weight,
'plantri' => $plantri,
'mode' => $mode,
'expedition_number' => $expedition_number,
));
}
private function c25I($string, $checksum=FALSE) {
if(strlen($string) == 0 || strlen($string) % 2 != 0 || !is_numeric($string)) {
return '';
}
if($checksum) {
$i = strlen($string) - 1;
$checksum = 0;
for($i=strlen($string) - 1; $i >= 0; $i -= 2) {
$checksum += (int) substr($string, $i, 1);
}
$checksum = $checksum * 3;
for($i=strlen($string) - 2; $i >= 0; $i -= 2) {
$checksum += (int) substr($string, $i, 1);
}
$string = $string.((10 - ($checksum % 10)) % 10);
}
$result = '';
for($i=0, $l=strlen($string); $i < $l; $i += 2) {
$dummy = (int) substr($string, $i, 2);
$dummy += ($dummy < 94? 33: 101);
$result .= chr($dummy);
}
return '«'.$result.'»';
}
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(174), chr(175),
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), chr(210),
), $str);
}
public function logParcel($shipping_data, $products) {
global $cookie;
foreach($products as $id_order_detail => $qty) {
if($qty > 0) {
Db::getInstance()->ExecuteS('
INSERT INTO `'._DB_PREFIX_.'mondialrelay_parcel` VALUES (
'.(int) $id_order_detail.',
'.(int) $cookie->id_employee.',
'.(int) $qty.',
"'.pSQL($shipping_data['shipping_number']).'",
"'.pSQL($shipping_data['idrelay']).'",
"'.pSQL($shipping_data['plantri']['cppay']).'",
"'.pSQL($shipping_data['plantri']['nogroup']).'",
"'.pSQL($shipping_data['plantri']['modexp']).'",
"'.pSQL($shipping_data['plantri']['pretri']).'",
"'.pSQL($shipping_data['plantri']['navette']).'",
"'.pSQL($shipping_data['plantri']['direction']).'",
"'.pSQL($shipping_data['mode']).'",
"'.pSQL($shipping_data['expedition_number']).'",
'.(float) $shipping_data['weight'].',
NOW(),
"0000-00-00 00:00:00"
)
');
}
}
}
public function __addOrderHistory($shipping_data, $order, $products_sent) {
}
public function addOrderHistory($shipping_data, $order, $products_sent) {
global $cookie;
// $MONDIALRELAY_carrier_id = unserialize(Configuration::get('MONDIALRELAY_CARRIERS'));
// $MONDIALRELAY_carrier_id = (int) array_pop($exapaq_carrier_id);
$id_carrier = (int) $order->id_carrier;
$mr_carriers = array();
foreach (Db::getInstance()->executeS('
SELECT `id_carrier`
FROM `' . _DB_PREFIX_ . 'mr_method`
ORDER BY `is_deleted` ASC') as $carrier) {
$mr_carriers = (int) $carrier['id_carrier'];
}
if (!in_array($id_carrier, $mr_carriers))
$id_carrier = $mr_carriers[0];
$carrier = new Carrier($id_carrier, (int) $order->id_lang);
$customer = new Customer((int) $order->id_customer);
if((int) $order->id_lang == 3) {
$content_html = '<strong>Contenido del paquete:</strong>';
$content_txt = 'Contenido del paquete:';
} elseif((int) $order->id_lang == 5) {
$content_html = '<strong>Contenuto del package:</strong>';
$content_txt = 'Contenuto del package:';
} else {
$content_html = '<strong>Contenu du colis :</strong>';
$content_txt = 'Contenu du colis :';
}
$templateVars = array(
'{followup}' => str_replace('@', $shipping_data['shipping_number'], $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): '',
);
$history = new OrderHistory();
$history->id_order = (int) $order->id;
$fully_sent = FALSE;
$products_sent = array();
$order_details = array();
foreach(Db::getInstance()->ExecuteS('
SELECT `id_order_detail`
FROM `'._DB_PREFIX_.'order_detail`
WHERE `id_order` = '.(int) $order->id.'
') as $row) {
$order_details[] = (int) $row['id_order_detail'];
}
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`
) - IFNULL(SUM(s.`quantity`), 0)) > 0, 1, 0
) AS `remain`
FROM `'._DB_PREFIX_.'order_detail` d
LEFT OUTER JOIN `'._DB_PREFIX_.'lapostews` s
ON s.`id_order_detail` = d.`id_order_detail`
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'];
}
}
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`
) - IFNULL(SUM(s.`quantity`), 0)) > 0, 1, 0
) AS `remain`
FROM `'._DB_PREFIX_.'order_detail` d
LEFT OUTER JOIN `'._DB_PREFIX_.'exapaqws` s
ON s.`id_order_detail` = d.`id_order_detail`
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'];
}
}
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`
) - IFNULL(SUM(s.`quantity`), 0)) > 0, 1, 0
) AS `remain`
FROM `'._DB_PREFIX_.'order_detail` d
LEFT OUTER JOIN `'._DB_PREFIX_.'mondialrelay_parcel` s
ON s.`id_order_detail` = d.`id_order_detail`
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'];
}
}
$remaining = array();
foreach($order_details as $d) {
if(!in_array($d, $products_sent)) {
$remaining[] = (int) $d;
}
}
if(count($remaining) == 0) {
$fully_sent = TRUE;
} else {
$id_sales = array();
foreach(Db::getInstance()->ExecuteS('
SELECT DISTINCT c.`id_sale`
FROM `'._DB_PREFIX_.'product_ps_cache` c
LEFT JOIN `'._DB_PREFIX_.'order_detail` d
ON c.`id_product` = d.`product_id`
WHERE d.`id_order_detail` IN ('.implode(', ', $remaining).')
') as $row) {
$id_sales[] = (int) $row['id_sale'];
}
$sent_sales = array();
foreach(Db::getInstance()->ExecuteS('
SELECT DISTINCT `id_sale`
FROM `'._DB_PREFIX_.'shipping_history`
WHERE `id_order` = '.(int) $order->id.'
AND `id_sale` IN ('.implode(', ', $id_sales).')
') as $row) {
$sent_sales[] = (int) $row['id_sale'];
}
$remaining = array();
foreach($id_sales as $s) {
if(!in_array($s, $sent_sales)) {
$remaining[] = (int) $s;
break;
}
}
$fully_sent = (count($remaining) == 0);
}
$history->changeIdOrderState(($fully_sent? Configuration::get('PS_OS_SHIPPING'): 17), (int) $order->id);
$history->id_employee = (int) $cookie->id_employee;
$history->addWithemail(TRUE, $templateVars);
global $_LANGMAIL;
// $subject = 'Package in transit';
// Mail::Send(
// intval($order->id_lang),
// 'in_transit',
// (
// (is_array($_LANGMAIL) && key_exists($subject, $_LANGMAIL))
// ? $_LANGMAIL[$subject]
// : $subject
// ),
// $templateVars,
// $customer->email,
// $customer->firstname.' '.$customer->lastname
// );
}
}