* @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; } }