Jump to content

Afficher un moyen de paiement à partir de la 2ème commande


Recommended Posts

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

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

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

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

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...