173 lines
6.2 KiB
PHP
173 lines
6.2 KiB
PHP
<?php
|
|
/**
|
|
* NOTICE OF LICENSE
|
|
*
|
|
* This source file is subject to a commercial license.
|
|
* Use, copy, modification or distribution of this source file without written
|
|
* license agreement is strictly forbidden.
|
|
* In order to obtain a license, please contact us: simon@daig.re
|
|
* ...........................................................................
|
|
* INFORMATION SUR LA LICENCE D'UTILISATION
|
|
*
|
|
* L'utilisation de ce fichier source est soumise a une licence commerciale.
|
|
* Toute utilisation, reproduction, modification ou distribution du present
|
|
* fichier source sans contrat de licence ecrit est expressement interdite.
|
|
* Pour obtenir une licence, veuillez nous contacter a l'adresse: simon@daig.re
|
|
*
|
|
* @package La Poste Courrier suivi Tracking
|
|
* @author Agencya
|
|
* @copyright Copyright(c) 2015-2018
|
|
* @license See Readme.md
|
|
* Contact by Email : simon@daig.re
|
|
*/
|
|
|
|
if (!defined('_PS_VERSION_')) {
|
|
exit;
|
|
}
|
|
|
|
require_once _PS_MODULE_DIR_.'csuivitracking/classes/CsuiviTracking_Webservice.php';
|
|
|
|
/**
|
|
* Class CsuiviTracking_Tools
|
|
*/
|
|
class CsuiviTracking_Tools
|
|
{
|
|
public static function updateOrdersStatus($id_shop)
|
|
{
|
|
if ((string)Configuration::get('CSUIVITRACKING_API_KEY', null, $id_shop, Shop::getGroupFromShop($id_shop)) === '') {
|
|
die(Translate::getModuleTranslation('csuivitracking', 'API key missing. Please check module configuration.', 'csuivitracking'));
|
|
}
|
|
|
|
if ((bool)Configuration::get('CSUIVITRACKING_FIND_TRACKING')) {
|
|
self::fillOrdersData();
|
|
}
|
|
|
|
$update_states = (bool)Configuration::get('CSUIVITRACKING_UPDSTATES', null, $id_shop, Shop::getGroupFromShop($id_shop));
|
|
$id_list = CsuiviTrackingModel::getAll();
|
|
|
|
foreach ($id_list as $id_detail) {
|
|
$detail_suivi = new CsuiviTrackingModel((int)$id_detail['id_csuivi_tracking']);
|
|
|
|
if (!Validate::isLoadedObject($detail_suivi)) {
|
|
throw new PrestaShopException('Can\'t load CsuiviTracking object.');
|
|
}
|
|
|
|
$response = CsuiviTracking_Webservice::getTracking(Tools::strtoupper((string)$detail_suivi->tracking));
|
|
|
|
if ($response !== false && $response !== null) {
|
|
if ((string)$response->message !== $detail_suivi->status) {
|
|
$detail_suivi->status = (string)$response->message;
|
|
|
|
if ($response->date) {
|
|
$detail_suivi->date = date('Y-m-d', DateTime::createFromFormat('d/m/Y', (string)$response->date)->getTimestamp());
|
|
|
|
if (in_array((string)$response->status, array('LIVRE', 'DISTRIBUE'))) {
|
|
$detail_suivi->delivered = true;
|
|
|
|
$order = new Order($detail_suivi->id_order);
|
|
if ($update_states && $order->current_state !== _PS_OS_DELIVERED_) {
|
|
$order->setCurrentState(_PS_OS_DELIVERED_);
|
|
}
|
|
|
|
$order = null;
|
|
unset($order);
|
|
}
|
|
} else {
|
|
$detail_suivi->date = date('Y-m-d');
|
|
}
|
|
|
|
$detail_suivi->update();
|
|
}
|
|
}
|
|
|
|
$detail_suivi = null;
|
|
unset($detail_suivi);
|
|
}
|
|
}
|
|
|
|
public static function updateCsuiviCarriers()
|
|
{
|
|
$id_list = Db::getInstance()->executeS('
|
|
SELECT c.`id_carrier`
|
|
FROM `'._DB_PREFIX_.'carrier` c
|
|
WHERE c.`id_reference` IN ('.implode(', ', array_map('intval', Tools::unSerialize(Configuration::get('CSUIVITRACKING_MAPPING')))).')'
|
|
);
|
|
|
|
Configuration::updateValue('CSUIVITRACKING_CARRIERS', serialize($id_list));
|
|
}
|
|
|
|
public static function fillOrdersData()
|
|
{
|
|
$date = new DateTime();
|
|
$date->sub(new DateInterval('P1M'));
|
|
|
|
$id_list = Db::getInstance()->executeS('
|
|
SELECT o.`id_order`
|
|
FROM `'._DB_PREFIX_.'orders` o
|
|
WHERE o.`date_add` > \''.$date->format('Y-m-d H:i:s').'\'
|
|
AND o.`current_state` != '._PS_OS_DELIVERED_.'
|
|
AND o.`id_carrier` IN ('.implode(', ', array_map('intval', self::getAllCarriersId())).')
|
|
AND o.`id_order` NOT IN (SELECT id_order FROM `'._DB_PREFIX_.'csuivi_tracking`)'
|
|
);
|
|
|
|
foreach ($id_list as $id_order) {
|
|
$order = new Order((int)$id_order['id_order']);
|
|
|
|
if (Tools::version_compare(_PS_VERSION_, '1.5.5.0', '>=')) {
|
|
$order_carrier = new OrderCarrier($order->getIdOrderCarrier());
|
|
} else {
|
|
$order_carrier = new OrderCarrier(
|
|
Db::getInstance()->getValue('
|
|
SELECT `id_order_carrier`
|
|
FROM `'._DB_PREFIX_.'order_carrier`
|
|
WHERE `id_order` = '.$id_order
|
|
)
|
|
);
|
|
}
|
|
|
|
if (Validate::isLoadedObject($order_carrier)) {
|
|
$tracking = trim($order_carrier->tracking_number);
|
|
|
|
if (!CsuiviTrackingModel::getIdByOrderId($order->id)
|
|
&& (!empty($tracking)) && Tools::strlen($tracking) == 13
|
|
&& self::isCsuiviCarrier($order->id_carrier))
|
|
{
|
|
$detail_suivi = new CsuiviTrackingModel();
|
|
$detail_suivi->id_order = $order->id;
|
|
$detail_suivi->tracking = $tracking;
|
|
$detail_suivi->add();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param int $id_order_carrier
|
|
* @return bool
|
|
*/
|
|
public static function isCsuiviCarrier($id_order_carrier)
|
|
{
|
|
$carriers = Tools::unSerialize(Configuration::get('CSUIVITRACKING_CARRIERS'));
|
|
|
|
foreach ($carriers as $id_carrier) {
|
|
if ((int)$id_carrier['id_carrier'] == $id_order_carrier) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static function getAllCarriersId()
|
|
{
|
|
$csuiviCarriers = Tools::unSerialize(Configuration::get('CSUIVITRACKING_CARRIERS'));
|
|
$carrierReturn = array();
|
|
|
|
foreach ($csuiviCarriers as $id_carrier) {
|
|
$carrierReturn[] = (int)$id_carrier['id_carrier'];
|
|
}
|
|
|
|
return $carrierReturn;
|
|
}
|
|
}
|