Jump to content

Interdire l'ajout panier à une certaine heure du jour


Slim Komalo

Recommended Posts

Bonjour,

 

1- j'ai une boutique en ligne dans la restauration, j'aimerais ajouter des règles pour ne pas ajouter au panier des produits après 22h, et aussi ne pas passer une commande après cette heure.

2- comme bonus, j'ai aussi une catégorie de plats qui ne sont livrés que le matin  :)

 

Merci à vous.

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour à tous,

 

j'ai trouvé une solution pour ça, il faut surcharger cartcontroller pour ajouter une exception en fonction du jour de la semaine et de l'heure actuelle sur le serveur.

sous override/controllers/front/ ajouter une fichier CartController.php qui contient le code de surcharge de l'action du bouton d'ajout du produit au panier (voir code ci dessous), l'idée que j'ai trouvé est d'ajouter le mot "midi" dans le champs meta_description des catégories que je veux qu'ils soient vendus seulement à midi,

et je teste :

 * si le jour de la semaine est dimanche ou

 * si l'heure est hors des horaires de la livraison ou

 * si la catégorie du produit qu'on veut ajouter au panier contient le mot "midi" dans son meta_description

 

alors on affiche un popup d'alerte au visiteur.

<?php

class CartController extends CartControllerCore
{
    public static function isValidProductForCurrentTime($prodId)
    {
        $meta_desc = 'N/A';
        $heure_deb_midi = 10;
        $heure_fin_midi = 14;
        $heure_deb_soir = 10;
        $heure_fin_soir = 22;
        $array_vacances_midi = array("Sun", "Sat");
        $array_vacances_week = array("Sun"); 
        $current_hour = (int)date("H");
        $current_day = date('D');
        $my_errors = 0;
        if (in_array($current_day, $array_vacances_week)) {
            $my_errors = Tools::displayError('Nous sommes désolés...<br>Commande indisponible les Dimanches.', $htmlentities = true);
        } 
        elseif (($current_hour < $heure_deb_soir) || ($current_hour > $heure_fin_soir)) {
            $my_errors = Tools::displayError('Nous sommes désolés...<br>Commande disponible seulement<br>
                entre ' .$heure_deb_soir .'h et ' .$heure_fin_soir .'h.', $htmlentities = true);
        } 
        else {
            $sql = 'SELECT
                a.`id_product`, b.`name` AS `name`, `reference`, a.`price` AS `price`, sa.`active` AS `active`, cl.`meta_description` AS `meta_desc`, 
                shop.`name` AS `shopname`, a.`id_shop_default`, cl.`name` AS `name_category`,  sa.`active`, IF(sav.`quantity`<=0, 1, 0) AS `badge_danger`
                FROM `ps_product` a 
                LEFT JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1)
                LEFT JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product` AND sav.`id_product_attribute` = 0
                AND sav.id_shop = 1  AND sav.id_shop_group = 0 )  JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default)
                    LEFT JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default)
                    LEFT JOIN `ps_shop` shop ON (shop.id_shop = a.id_shop_default)
                    LEFT JOIN `ps_image_shop` image_shop ON (image_shop.`id_product` = a.`id_product` AND image_shop.`cover` = 1 AND image_shop.id_shop = a.id_shop_default)
                    LEFT JOIN `ps_image` i ON (i.`id_image` = image_shop.`id_image`)
                    LEFT JOIN `ps_product_download` pd ON (pd.`id_product` = a.`id_product` AND pd.`active` = 1) 
                 WHERE a.`id_product` = '.$prodId;

            if ($row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql)) {
                    $meta_desc = $row['meta_desc'];
            }
            if ((strpos(strtolower($meta_desc), 'midi') !== FALSE) && 
                (in_array($current_day, $array_vacances_midi) || ($current_hour < $heure_deb_midi) || ($current_hour > $heure_fin_midi))) {
                $my_errors = Tools::displayError('Nous sommes désolés...<br>
                    Produit selectionné est disponible pour commande<br>
                    tous les jours entre ' .$heure_deb_midi .'h et ' .$heure_fin_midi .'h.<br>
                    Indisponible les Samedis et Dimanches.', $htmlentities = true);
            } 
        }

        return $my_errors;
    }

    protected function processChangeProductInCart()
    {
        $ret_errors = CartController::isValidProductForCurrentTime($this->id_product);
        if (!empty($ret_errors)) 
            $this->errors[] = $ret_errors;

        return parent::processChangeProductInCart();
    }

}

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...