205 lines
6.4 KiB
PHP
205 lines
6.4 KiB
PHP
<?php
|
|
/**
|
|
* TNT OFFICIAL MODULE FOR PRESTASHOP.
|
|
*
|
|
* @author GFI Informatique <www.gfi.world>
|
|
* @copyright 2016-2019 GFI Informatique, 2016-2019 TNT
|
|
* @license https://opensource.org/licenses/MIT MIT License
|
|
*/
|
|
|
|
require_once _PS_MODULE_DIR_.'tntofficiel/libraries/TNTOfficiel_ClassLoader.php';
|
|
|
|
class TNTOfficiel_Parcel
|
|
{
|
|
/**
|
|
* Prevent Construct.
|
|
*/
|
|
final private function __construct()
|
|
{
|
|
trigger_error(sprintf('%s() %s is static.', __FUNCTION__, get_class($this)), E_USER_ERROR);
|
|
}
|
|
|
|
/**
|
|
* Return All Status de display : depends on status -> maximum 5 status.
|
|
*
|
|
* @param $status
|
|
*
|
|
* @return array
|
|
*/
|
|
protected static function getAllStatus($status)
|
|
{
|
|
TNTOfficiel_Logstack::log();
|
|
|
|
$statusArray = array(
|
|
1 => 'Colis chez l\'expéditeur',
|
|
2 => 'Ramassage du Colis',
|
|
3 => 'Acheminement',
|
|
4 => 'Livraison en cours',
|
|
5 => 'Livré',
|
|
);
|
|
|
|
switch ($status) {
|
|
case 6:
|
|
$statusArray[5] = 'Incident';
|
|
break;
|
|
case 7:
|
|
$statusArray[5] = 'Retourné à l\'expéditeur';
|
|
break;
|
|
}
|
|
|
|
return $statusArray;
|
|
}
|
|
|
|
/**
|
|
* @param $parcel
|
|
*
|
|
* @return bool|int
|
|
*/
|
|
protected static function getStatus($parcel)
|
|
{
|
|
TNTOfficiel_Logstack::log();
|
|
|
|
$parcel = (array)$parcel;
|
|
$statusLabel = isset($parcel['shortStatus']) ? $parcel['shortStatus'] : false;
|
|
if (!$statusLabel) {
|
|
return false;
|
|
}
|
|
|
|
$arrMapping = array(
|
|
'En attente' => 1,
|
|
'--' => 2,
|
|
'En cours d\'acheminement' => 3,
|
|
'En cours de livraison' => 4,
|
|
'En agence TNT' => 4,
|
|
'Récupéré à l\'agence TNT' => 5,
|
|
'Livré' => 5,
|
|
'En attente de vos instructions' => 6,
|
|
'En attente d\'instructions' => 6,
|
|
'En attente d\'instructions' => 6,
|
|
'Incident de livraison' => 6,
|
|
'Incident intervention' => 6,
|
|
'Colis refusé par le destinataire' => 6,
|
|
'Livraison reprogrammée' => 6,
|
|
'Prise de rendez-vous en cours' => 6,
|
|
'Prise de rendez-vous en cours' => 6,
|
|
'Problème douane' => 6,
|
|
'Enlevé au dépôt' => 3,
|
|
'En Agence TNT' => 3,
|
|
'Retourné à l\'expéditeur' => 7,
|
|
);
|
|
|
|
return isset($arrMapping[$statusLabel]) ? $arrMapping[$statusLabel] : 1;
|
|
}
|
|
|
|
/**
|
|
* @param $parcel
|
|
*
|
|
* @return bool
|
|
*/
|
|
protected static function getHistory($parcel)
|
|
{
|
|
TNTOfficiel_Logstack::log();
|
|
|
|
if (!$parcel->events) {
|
|
return false;
|
|
}
|
|
|
|
$arrLabelState = array(
|
|
'request' => 'Colis chez l\'expéditeur',
|
|
'process' => 'Ramassage du colis',
|
|
'arrival' => 'Acheminement du colis',
|
|
'deliveryDeparture' => 'Livraison du colis en cours',
|
|
'delivery' => 'Livraison du colis',
|
|
);
|
|
|
|
$arrHistory = array();
|
|
$states = array(1 => 'request', 2 => 'process', 3 => 'arrival', 4 => 'deliveryDeparture', 5 => 'delivery');
|
|
$events = (array)$parcel->events;
|
|
foreach ($states as $idx => $strState) {
|
|
if ((isset($events[$strState.'Center']) || isset($events[$strState.'Date']))
|
|
&& Tools::strlen($events[$strState.'Date'])
|
|
) {
|
|
$arrHistory[$idx] = array(
|
|
'label' => (isset($arrLabelState[$strState]) ? $arrLabelState[$strState] : ''),
|
|
'date' => isset($events[$strState.'Date']) ? $events[$strState.'Date'] : '',
|
|
'center' => isset($events[$strState.'Center']) ? $events[$strState.'Center'] : '',
|
|
);
|
|
}
|
|
}
|
|
|
|
return $arrHistory;
|
|
}
|
|
|
|
/**
|
|
* Display the tracking popup.
|
|
*
|
|
* @param $intArgOrderID
|
|
*
|
|
* @return bool
|
|
*/
|
|
public static function displayTrackingPopUp($intArgOrderID)
|
|
{
|
|
TNTOfficiel_Logstack::log();
|
|
|
|
//$objContext = $this->context;
|
|
$objContext = Context::getContext();
|
|
|
|
$objPSOrder = new Order($intArgOrderID);
|
|
|
|
// Load an existing TNT carrier.
|
|
$objTNTCarrierModel = TNTOfficielCarrier::loadCarrierID($objPSOrder->id_carrier, false);
|
|
// If fail or carrier is not from TNT module.
|
|
if ($objTNTCarrierModel === null) {
|
|
return false;
|
|
}
|
|
|
|
$objTNTCarrierAccountModel = $objTNTCarrierModel->getTNTAccountModel();
|
|
// If no account available for this carrier.
|
|
if ($objTNTCarrierAccountModel === null) {
|
|
return false;
|
|
}
|
|
|
|
// Get parcels and for each parcel get its tracking data
|
|
$arrTNTParcelList = array();
|
|
|
|
// Get parcels and for each parcel get its tracking data
|
|
$arrObjTNTParcelModelList = TNTOfficielParcel::searchOrderID($intArgOrderID);
|
|
foreach ($arrObjTNTParcelModelList as $key => $objTNTParcelModel) {
|
|
$arrResponse = (array)$objTNTCarrierAccountModel->trackingByConsignment($objTNTParcelModel->parcel_number);
|
|
$arrTrackingData = '';
|
|
if (count($arrResponse) && isset($arrResponse['Parcel'])) {
|
|
$arrTrackingData = $arrResponse['Parcel'];
|
|
}
|
|
if ($arrTrackingData) {
|
|
TNTOfficielParcel::savePODURL($arrTrackingData, $objTNTParcelModel->id);
|
|
$arrTrackingData = array(
|
|
'history' => TNTOfficiel_Parcel::getHistory($arrTrackingData),
|
|
'status' => TNTOfficiel_Parcel::getStatus($arrTrackingData),
|
|
'allStatus' => TNTOfficiel_Parcel::getAllStatus(TNTOfficiel_Parcel::getStatus($arrTrackingData)),
|
|
);
|
|
}
|
|
|
|
$arrTNTParcelList[$key] = array(
|
|
'objTNTParcelModel' => $objTNTParcelModel,
|
|
'arrTrackingData' => $arrTrackingData
|
|
);
|
|
}
|
|
unset($objTNTParcelModel);
|
|
|
|
|
|
if (!(count($arrTNTParcelList) > 0)) {
|
|
return false;
|
|
}
|
|
|
|
$objContext->smarty->assign(array(
|
|
'arrTNTParcelList' => $arrTNTParcelList
|
|
));
|
|
|
|
$objContext->smarty->display(
|
|
_PS_MODULE_DIR_.TNTOfficiel::MODULE_NAME.'/views/templates/front/displayAjaxTracking.tpl'
|
|
);
|
|
|
|
return true;
|
|
}
|
|
}
|