Addicte Posted November 29, 2021 Share Posted November 29, 2021 Salut, Je n'arrive pas sur prestahop 1.7.7.8 à afficher un moyen de paiement uniquement à partir de la 2ème commande. J'essaye de récupérer {$orders} dans payment.tpl, mais impossible. Est ce que quelqu'un sait comment voir dans payment.tpl, si le client connecté a déjà passer au moins 1 commande ? A plus :) Link to comment Share on other sites More sharing options...
Mediacom87 Posted November 29, 2021 Share Posted November 29, 2021 Bonjour, J'applique ce système pour limiter le paiement Paypal à partir de la seconde commande, ce qui limite la fraude qui était importante sur ce moyen de paiement. Pour ce faire j'ai mis en place un override du module comme ceci : <?php if (!defined('_PS_VERSION_')) { exit; } class PayPalOverride extends Paypal { public function canBeUsed() { if (Parent::canBeUsed()) { if ($this->medGetCustomerNbOrders($this->context->customer->id)) { return true; } } return false; } public function medGetCustomerNbOrders($id_customer) { $sql = 'SELECT COUNT(`id_order`) FROM `'._DB_PREFIX_.'orders` WHERE `valid` = 1 AND `id_customer` = '.(int)$id_customer .Shop::addSqlRestriction(); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql); return $result; } } Link to comment Share on other sites More sharing options...
Mediacom87 Posted November 29, 2021 Share Posted November 29, 2021 Je n'ai pas précisé que l'overide en question est sur une boutique en 1.6 donc peut être qu'il faut faire des ajustement en fonction de la version du module, du moyen de paiement et de la version de Prestashop. Link to comment Share on other sites More sharing options...
Addicte Posted November 29, 2021 Author Share Posted November 29, 2021 Merci du coup j'ai trouvé une solution dans CheckouPaymentStep : <?php /** *OVERRIDE */ class CheckoutPaymentStep extends CheckoutPaymentStepCore { private $selected_payment_option; /** * @param array $extraParams * * @return string */ public function render(array $extraParams = []) { $isFree = 0 == (float) $this->getCheckoutSession()->getCart()->getOrderTotal(true, Cart::BOTH); $paymentOptions = $this->paymentOptionsFinder->present($isFree); $conditionsToApprove = $this->conditionsToApproveFinder->getConditionsToApproveForTemplate(); $deliveryOptions = $this->getCheckoutSession()->getDeliveryOptions(); $deliveryOptionKey = $this->getCheckoutSession()->getSelectedDeliveryOption(); if (isset($deliveryOptions[$deliveryOptionKey])) { $selectedDeliveryOption = $deliveryOptions[$deliveryOptionKey]; } else { $selectedDeliveryOption = 0; } unset($selectedDeliveryOption['product_list']); $count_order = count(Order::getCustomerOrders((int)$this->getCheckoutSession()->getCart()->id_customer)); $assignedVars = [ 'is_free' => $isFree, 'nb_orders'=> $count_order, 'payment_options' => $paymentOptions, 'conditions_to_approve' => $conditionsToApprove, 'selected_payment_option' => $this->selected_payment_option, 'selected_delivery_option' => $selectedDeliveryOption, 'show_final_summary' => Configuration::get('PS_FINAL_SUMMARY_ENABLED'), ]; return $this->renderTemplate($this->getTemplate(), $extraParams, $assignedVars); } } Link to comment Share on other sites More sharing options...
Mediacom87 Posted November 29, 2021 Share Posted November 29, 2021 Bonjour, attention, votre comptage doit retourner toutes les commandes même celles qui ne sont pas valides. Link to comment Share on other sites More sharing options...
Addicte Posted November 29, 2021 Author Share Posted November 29, 2021 Je veux bloquer un mode de paiement tant que c'est la 1ère commande validée, avec cette requête ce n'est pas le cas ? Link to comment Share on other sites More sharing options...
Mediacom87 Posted November 29, 2021 Share Posted November 29, 2021 il y a 1 minute, Addicte a dit : Je veux bloquer un mode de paiement tant que c'est la 1ère commande validée, avec cette requête ce n'est pas le cas ? de mémoire j'avais dû faire la requête SQl montré dans ma première réponse justement parce que la fonction native de PrestaShop retournait toutes les commandes. C'est à tester. Link to comment Share on other sites More sharing options...
Addicte Posted November 30, 2021 Author Share Posted November 30, 2021 (edited) Merci pour l'info tu avais raison. Du coup j'ai changé la requête directement et dans le template je teste avec un if {nb_orders} Mais je ne peux pas insérer le code, le forum me le bloque 😕 Edited November 30, 2021 by Addicte (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now