Files
bio-concept-pharma/web/modules/tntofficiel/libraries/TNTOfficiel_Parcel.php
2019-11-17 19:14:07 +01:00

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