Jump to content

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


Addicte
 Share

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 :)

Share this post


Link to post
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;
    }
}

 

Share this post


Link to post
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);
    }
}

 

Share this post


Link to post
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.

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More