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