115 lines
3.3 KiB
PHP
Executable File
115 lines
3.3 KiB
PHP
Executable File
<?php
|
|
require 'BusinessDaysCalculator.php';
|
|
|
|
if (!class_exists('SaleDelay')) {
|
|
|
|
class SaleDelay {
|
|
|
|
public static function associateDelay($products)
|
|
{
|
|
global $cookie;
|
|
|
|
// products cart group by delay
|
|
$products_final = array();
|
|
$categories_cached = array();
|
|
$sales_cached = array();
|
|
|
|
foreach ($products as $key => $product) {
|
|
if (!isset($product['id_category_default'])) {
|
|
$product['id_category_default'] = Db::getInstance()->getValue('
|
|
SELECT `id_category_default`
|
|
FROM `ps_product`
|
|
WHERE `id_product` = '.(int)$product['product_id'] .'
|
|
');
|
|
}
|
|
|
|
if (!in_array($product['id_category_default'], $categories_cached)) {
|
|
$sale = Sale::getSaleFromCategory((int) $product['id_category_default']);
|
|
$sales_cached[(int) $product['id_category_default']] = $sale;
|
|
} else {
|
|
$sale = $sales_cached[(int) $product['id_category_default']];
|
|
}
|
|
$delay = !empty($sale->delivery_delay) ? $sale->delivery_delay : 1;
|
|
|
|
if(!isset($products_final[(int)$delay])) {
|
|
$products_final[(int)$delay] = array();
|
|
$array_delay = self::getDelay($delay, $cookie->id_lang);
|
|
|
|
$products_final[(int)$delay]['title'] = $array_delay['short_name'];
|
|
$products_final[(int)$delay]['products'] = array();
|
|
}
|
|
|
|
$products_final[(int)$delay]['products'][] = $product;
|
|
}
|
|
|
|
return $products_final;
|
|
}
|
|
|
|
public static function getDeliveryDate(array $delays, $id_lang = null, $date_calcul = null)
|
|
{
|
|
global $cookie;
|
|
if (!$date_calcul) {
|
|
$date_calcul = new DateTime();
|
|
}
|
|
if (!$id_lang) {
|
|
$id_lang = $cookie->id_lang;
|
|
}
|
|
if (empty($delays)) {
|
|
return false;
|
|
}
|
|
|
|
$delivery_date = array();
|
|
foreach ($delays as $key => $delay) {
|
|
if (!in_array($delay, array_keys($delivery_date))) {
|
|
$delivery_date[$delay] = self::getDayDelay($delay, $cookie->id_lang);
|
|
$delivery_date[$delay]['date_start'] = self::getDateWithDelay((int)$delivery_date[$delay]['value'], $date_calcul);
|
|
|
|
// exception noel
|
|
if ($delay == 5) {
|
|
$delivery_date[$delay]['date_end'] = self::getDateWithDelay((int) $delivery_date[$delay]['value'], $date_calcul);
|
|
} else {
|
|
$delivery_date[$delay]['date_end'] = self::getDateWithDelay((int) $delivery_date[$delay]['value_max'], $date_calcul);
|
|
}
|
|
}
|
|
}
|
|
return $delivery_date;
|
|
}
|
|
|
|
public static function getDateWithDelay($nb_day, $date)
|
|
{
|
|
$calculator = new BusinessDaysCalculator(
|
|
new DateTime($date->format('Y-m-d H:i:s')),
|
|
array(),
|
|
[BusinessDaysCalculator::SATURDAY, BusinessDaysCalculator::SUNDAY]
|
|
);
|
|
|
|
$calculator->addBusinessDays($nb_day);
|
|
return $calculator->getDate();
|
|
}
|
|
|
|
public static function getDayDelay($id_delay, $id_lang)
|
|
{
|
|
return Db::getInstance()->getRow('
|
|
SELECT `value`, `value_max`, `name`
|
|
FROM `ps_privatesale_delay_lang`
|
|
WHERE `id_delay` = '.(int) $id_delay.'
|
|
AND `id_lang` = '.(int) $id_lang.'
|
|
');
|
|
}
|
|
|
|
public static function getDelay($id_delay, $id_lang)
|
|
{
|
|
return Db::getInstance()->getRow('
|
|
SELECT d.`id_delay`, dl.`name`, dl.`short_name`, dl.`value`
|
|
FROM `'._DB_PREFIX_.'privatesale_delay_lang` d
|
|
LEFT JOIN `'._DB_PREFIX_.'privatesale_delay_lang` dl ON (d.`id_delay` = dl.`id_delay`)
|
|
WHERE dl.`id_lang` = '.(int) $id_lang.'
|
|
AND d.`id_delay` = '.(int) $id_delay.'
|
|
');
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|