THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

Nous allons utiliser le module customer family avec différent valeurs dont une pour les professionnels étranger qui n'auront pas la tva à payer. Comment faire pour que la commande soit calculer sans TVA dans ce cas ?

Merci d'avance de votre aide.

Gilles L.

Offline


Tu peux écrire un petit module avec un listener dans lequel tu pourra faire $customer->getReseller() pour déterminer si c'est un pro ou non.

Ton listener devrait sûrement se terminer par quelque chose comme :

public static function getSubscribedEvents() {
        return array(
            TheliaEvents::AFTER_CARTADDITEM => array('after', 128),
            TheliaEvents::CART_DUPLICATE => array('duplicate', 128),
            TheliaEvents::ORDER_BEFORE_PAYMENT => array('modifyTax', 164)
        );
    }

Je te conseille de faire ton traitement sur chacun de ces events, avec du coup des fonctions after(), duplicate() et modifyTax()

J'ai un listener semblable sur l'un des sites dont je m'occupe. Tiens, je te montre la fonction pour le dernier event, ça ressemble un peu à ce que tu veux faire :

public function modifyTax(OrderEvent $event) {

        $customer = $this->request->getSession()->getCustomerUser();
        
        if ($customer) {
            $pro = $customer->getReseller();
            $country = AddressQuery::create()->filterByCustomerId($customer->getId())->findOneByIsDefault(1)->getCountryId();

            if ($pro === 1 && $country !== 64) { // Pro étranger
                $order = $event->getOrder();
                $products = OrderProductQuery::create()->filterByOrderId($order->getId());
                foreach ($products as $product) {
                    $product_tax = OrderProductTaxQuery::create()->findOneByOrderProductId($product->getId());
                    $product_tax
                        ->setAmount(0)
                        ->setPromoAmount(0)
                        ->save();
                }
            }    
        }  
    }

PS : Je ne garantis rien, je ne suis pas moi-même sûr de ce que fait cette fonction hmm


Développeur web Junior

Offline


Merci beaucoup de ta réponse cela a été bien utile !
Gildart