Files
bio-concept-pharma/web/modules/csuivitracking/classes/CsuiviTracking_Tools.php
2019-11-17 19:14:07 +01:00

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