/bin/bash: indent: command not found
/**
* Prestatill Drive - Click & Collect
*
* Drive Module & Click & Collect for Prestashop
*
* @author La Boîte à Balises lbab.fr contact@lbab.fr
* @copyright 2013-2018 La Boîte à Balises
* @license La Boîte à Balises
*/
require_once _PS_MODULE_DIR_ . 'ineat_exceptional_hours/classes/ExceptionalHours.php';
require_once _PS_MODULE_DIR_ . 'ineat_delivery_restriction/classes/DeliveryRestriction.php';
require_once _PS_MODULE_DIR_ . 'prestatilldrive/classes/PrestatillDriveVacation.php';
class PrestatillDriveCreneau extends ObjectModel
{
public $id_creneau;
public $id_store;
public $id_week;
public $id_day;
public $id_order;
public $id_cart;
public $cause;
public $hour;
public $day;
public static $definition = array(
'table' => 'prestatill_drive_creneau',
'primary' => 'id_creneau',
'multilang' => false,
'fields' => array(
'id_week' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'id_day' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'id_store' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'id_order' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'id_cart' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'cause' => array('type' => self::TYPE_STRING, 'validate' => 'isCatalogName', 'size' => 128),
'hour' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml'),
'day' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
),
);
public function __construct($id = null, $id_lang = null)
{
parent::__construct($id, $id_lang);
}
public static function getAllCreneauByIdCart($id_cart)
{
$request = 'SELECT id_creneau FROM '._DB_PREFIX_.'prestatill_drive_creneau WHERE id_cart = '.(int)$id_cart ;
$result = Db::getInstance()->getRow($request);
return $result;
}
/*
* Récupérer un id_creneau à partir de la commande (id_order)
*/
public static function getCreneauByIdOrder($id_order = 0)
{
$request = 'SELECT id_creneau FROM '._DB_PREFIX_.'prestatill_drive_creneau WHERE id_order = '.(int)$id_order ;
$result = Db::getInstance()->getRow($request);
if (!empty($result)) {
return new PrestatillDriveCreneau((int)$result['id_creneau']);
}
return false;
}
public static function updateCartCreneau($id_creneau, $id_cart)
{
$cart = new Cart((int)$id_cart);
if (Validate::isLoadedObject((int)$id_cart)) {
$cart->id_creneau = (int)$id_creneau;
$cart->update();
}
}
public static function updateOrdersCreneau($id_creneau, $id_order, $id_cart)
{
$creneau = new PrestatillDriveCreneau((int)$id_creneau);
if (Validate::isLoadedObject($creneau)) {
if ($creneau->id_cart == (int)$id_cart) {
$creneau->id_order = (int)$id_order;
$creneau->update();
}
$order = new Order((int)$id_order);
if (Validate::isLoadedObject($order)) {
$order->delivery_date = $creneau->day.' '.$creneau->hour;
$order->update();
}
}
}
public static function updateStoreByIdcreneau($id_store, $id_creneau)
{
setlocale(LC_TIME, 'fr_FR.utf8');
$date = date("Y-m-d");
if ($id_creneau == 0) {
$creneau = new PrestatillDriveCreneau();
$creneau->id_cart = (int)Context::getContext()->cart->id;
$creneau->day = $date;
$creneau->save();
} else {
$creneau = new PrestatillDriveCreneau((int)$id_creneau);
}
if (Validate::isLoadedObject($creneau)) {
$creneau->id_store = (int)$id_store;
$creneau->update();
return true;
}
}
public static function updateOrdersState($id_order, $id_state)
{
$order = new Order((int)$id_order);
if (Validate::isLoadedObject($order)) {
$order->id_state = (int)$id_state;
$order->update();
}
}
public static function countOrder($delivery_date)
{
$request = 'SELECT COUNT(id_order) FROM '._DB_PREFIX_.'orders WHERE delivery_date = "'.$delivery_date.'"';
$result = Db::getInstance()->executeS($request);
return $result;
}
public static function getReservedCreneau($id_store)
{
$delivery_day = date('Y-m-d');
$request = 'SELECT id_week, id_day, day, hour FROM '._DB_PREFIX_.'prestatill_drive_creneau WHERE day >= "'.$delivery_day.'" AND id_order > 0 AND id_store ='.(int)$id_store;
$result = Db::getInstance()->executeS($request);
$table = array();
if(!empty($result))
{
foreach($result as $res)
{
if(!isset($table[$res['day']." ".$res['hour']]))
$table[$res['day']." ".$res['hour']] = 0;
$table[$res['day']." ".$res['hour']] += 1;
}
return $table;
}
return $result;
}
public static function countCreneau($date, $date_fin)
{
$request = 'SELECT COUNT(hour), id_week, id_day, day, hour FROM '._DB_PREFIX_.'prestatill_drive_creneau WHERE day >= "'.pSQL($date).'" AND day <= "'.pSQL($date_fin).'" GROUP BY id_week, id_day, day, hour HAVING COUNT(hour) >= 100000;';
$result = Db::getInstance()->executeS($request);
return $result;
}
// BEGIN OVERRIDE
public static function getNbOrdersForAllSlots(?String $minimumDate = null)
{
$slots = [];
$query = (new DbQuery())
->select('delivery_date, COUNT(id_order) AS nbOrders')
->from('orders')
->groupBy('delivery_date')
;
if ($minimumDate !== null) {
$query->where('delivery_date >= \'' . pSQL($minimumDate) . '\'');
}
$orders = Db::getInstance()->executeS($query);
foreach ($orders as $order) {
$slots[$order['delivery_date']] = $order['nbOrders'];
}
return $slots;
}
public static function getAvailableSlotsByStore(int $storeId): array
{
$limitedTimeDelivery = Context::getContext()->cart->hasLimitedTimeProductDelivery();
$table = PrestatillDriveConfiguration::initTable($storeId, $limitedTimeDelivery);
if (empty($table)) return [];
$vacationDates = [];
foreach ($table['vacations'] as $vacation) {
$vacationDates[$vacation['vacation_start']] = $vacation['vacation_start'];
$vacationDates[$vacation['vacation_end']] = $vacation['vacation_end'];
if ($vacation['vacation_start'] !== $vacation['vacation_end']) {
$vacationPeriod = new DatePeriod(
new DateTime($vacation['vacation_start']),
new DateInterval('P1D'),
new DateTime($vacation['vacation_end'])
);
foreach ($vacationPeriod as $vacationDay) {
$vacationDates[$vacationDay->format('Y-m-d')] = $vacationDay->format('Y-m-d');
}
}
}
$daysOpen = $table['open'];
$startSlot = (new DateTime())->add(new DateInterval('PT' . $table['creneau_carence'] . 'M'));
$nbOrdersForAllSlots = self::getNbOrdersForAllSlots($startSlot->format('Y-m-d H:i:s'));
$daysWithExceptionalHours = ExceptionalHours::getDaysWithExceptionalHoursByStoreId($storeId);
$daysWithDeliveryRestriction = DeliveryRestriction::getDaysWithRestrictionFromCart(Context::getContext()->cart);
if ($storeId == (int) Configuration::get('GLOBALCONFIG_PARIS_STORE') || $storeId == (int) Configuration::get('GLOBALCONFIG_PARIS_BRETAGNE_STORE')) {
$displayOnlyTheWeekEnd = DeliveryRestriction::cartContainsProductsOnlyAvailableTheWeekEnd(Context::getContext()->cart, true);
} else {
$displayOnlyTheWeekEnd = false;
}
if (!$displayOnlyTheWeekEnd) {
$displayOnlyTheWeekEnd = DeliveryRestriction::cartContainsProductsOnlyAvailableTheWeekEnd(Context::getContext()->cart);
}
$displayOnlyForChristmasParis = $storeId == (int) Configuration::get('GLOBALCONFIG_PARIS_BRETAGNE_STORE')
&& DeliveryRestriction::cartContainsProductsOnlyAvailableForTheChrismasOnParis(Context::getContext()->cart)
;
$days = [];
foreach ($table['days'] as $day) {
$days[$day['dateen']] = [
'date' => $day['dateen'],
'presentedDate' => $day['date'],
'dayId' => $day['id_day'],
'slots' => [],
];
if ($displayOnlyForChristmasParis && !in_array($day['dateen'], ['2025-12-20', '2025-12-21', '2025-12-24', '2025-12-31'])) {
continue;
}
if (
(!isset($daysOpen[$day['id_day']]) && !isset($daysWithExceptionalHours[$day['dateen']]))
|| isset($vacationDates[$day['dateen']])
|| isset($daysWithDeliveryRestriction[$day['dateen']])
// Uniquement pour paris noel car ça tombe en semaine
|| $displayOnlyTheWeekEnd && ('2025-12-31' !== $day['dateen'] && '2025-12-24' !== $day['dateen'] && $day['id_day'] != 6 && $day['id_day'] != 7)
) continue;
$openingDateAm = new DateTime($day['dateen'] . ' ' .
($daysWithExceptionalHours[$day['dateen']]['hour_open_am'] ?? $daysOpen[$day['id_day']]['hour_open_am'])
);
$closingDateAm = new DateTime($day['dateen'] . ' ' .
($daysWithExceptionalHours[$day['dateen']]['hour_close_am'] ?? $daysOpen[$day['id_day']]['hour_close_am'])
);
$slots = self::getSlotsBetweenDates($openingDateAm, $closingDateAm, $table['increment'], $startSlot, $nbOrdersForAllSlots);
$openingDatePm = new DateTime($day['dateen'] . ' ' .
($daysWithExceptionalHours[$day['dateen']]['hour_open_pm'] ?? $daysOpen[$day['id_day']]['hour_open_pm'])
);
$closingDatePm = new DateTime($day['dateen'] . ' ' .
($daysWithExceptionalHours[$day['dateen']]['hour_close_pm'] ?? $daysOpen[$day['id_day']]['hour_close_pm'])
);
$slots = array_merge($slots, self::getSlotsBetweenDates($openingDatePm, $closingDatePm, $table['increment'], $startSlot, $nbOrdersForAllSlots));
$days[$day['dateen']]['slots'] = $slots;
}
return $days;
}
public static function getSlotsBetweenDates(
DateTime $start,
DateTime $end,
int $interval,
DateTime $minimunStartSlot,
array $nbOrdersForAllSlots): array
{
$slots = [];
while ($start < $end) {
$slotStart = $start->format('H:i:s');
$slotStartDateTime = $start->format('Y-m-d H:i:s');
// Uniquement pour noel
$hourSlot = $start->format('i') === '00' ? $start->format('Y-m-d H:30:s') : $start->format('Y-m-d H:00:s');
$start->add(new DateInterval('PT' . $interval . 'M'));
if ($start <= $minimunStartSlot) continue;
if (isset($nbOrdersForAllSlots[$slotStartDateTime])
&& $nbOrdersForAllSlots[$slotStartDateTime] >= (int) Configuration::get('PRESTATILL_DRIVE_NB_DISPO')) continue;
// Uniquement pour noel
if (isset($nbOrdersForAllSlots[$slotStartDateTime]) && isset($nbOrdersForAllSlots[$hourSlot])) {
if ($nbOrdersForAllSlots[$slotStartDateTime] + $nbOrdersForAllSlots[$hourSlot] >= (int) Configuration::get('PRESTATILL_DRIVE_NB_DISPO')) continue;
}
$slots[] = [
'presentedSlot' => $slotStart . ' - ' . ($start < $end ? $start->format('H:i:s') : $end->format('H:i:s')),
'hour' => $slotStart,
'datetime' => $slotStartDateTime,
];
}
return $slots;
}
// END OVERRIDE
}
Confiture Abricots et Amandes (230g) - Méert
Confiture Abricots et Amandes (230g)
Confiture d'abricots et d'amandes
Confiture d'abricots et d'amandes m...
Plus de détails
Retrait chez Méert
Lille - Roubaix - Paris
Gratuit
Colissimo Domicile sans signature
Livraison entre 2 et 4 jours hors week-end
Colissimo Domicile avec signature
Livraison à domicile contre signature
ChronoFresh
Livraison en Frais à domicile en 24h/48h
Détails du produit
Confiture d'abricots et d'amandes
Confiture d'abricots et d'amandes maison pour vous régaler aux petits-déjeuners ou aux goûters.
Pot de 230g | Expédition en France et en Europe
Raffinement & gourmandise
Les confitures Méert sont élaborées dans nos ateliers de façon artisanale et selon une recette traditionnelle . Les fruits que nous utilisons sont exclusivement d'origine française . La plupart sont issus de l'agriculture biologique . Nos confitures sont garanties sans conservateurs .
Vous pourriez aussi aimer