/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::cartContainsProductsOnlyAvailableTheWeekEnd(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 } Pudding de Noël Méert - Méert

Pudding de Noël Méert

Pudding maison aux fruits confits, rhum Pour 4 à 6 pers Présence de... Plus de détails

Prix : ( x 19,00 €)

Disponibilité du produit : Uniquement du 01/12/2025 au 31/12/2025.

Détails du produit

Pudding maison aux fruits confits, rhum

Pour 4 à 6 pers

Présence de : gluten, œuf, lait, alcool