Bonjour à vous,
J'ai besoin de votre aide pour un petit sujet sur lequel je planche. L'ajout de champs personnalisé dans le BO sur la page commandes, et plus particulièrement la colorisation de ces champs.
Avant tout été simple, car il suffisait de faire un overide de AdminOrdersController
J'avais réussi à ajouter des personnalisations comme cela :
- Si le client choisi Chronopost, alors dans la BO l'ID de commande été badgé en bleu.
- En fonction du groupe client, la couleur change (j'ai changé le nom des groupes client pour la capture.) .
- J'avais aussi ajouté d'autre champs comme les frais de port, ou le total des réductions, les codes de réduction etc.
Mon problème :
Je suis en cours de mise à jour d'un site PrestaShop en version 1.7.8.8.
Et ce code a été déplacé dans un contrôleur Symfony dans src/PrestaShopBundle/Controller/Admin/Sell/Order
Je me suis donc appliquer a utilisé les nouveau Hook pour modifier la nouvelle page commande. sauf que je ne parviens pas a ajouté les
couleurs a certain de mes nouveau champs. ni a modifier le champs ID. pour le badgé en bleu.
Voila un petit exemple de ce que j'avais avant (en version 1.7.6.5)
Pour la requête (désolé pour la qualité mais si je fait un code Snippet) je me fait bloquer part une sécurité)
Et la modification des colonnes et champs
$this->fields_list = array( 'id_order' => array( 'title' => $this->trans('ID', array(), 'Admin.Global'), 'align' => 'text-center', 'class' => 'fixed-width-xs', 'color' => 'color3', ), ... ... /*AJOUT DU N° DE COMMANDE */ 'invoice_number' => array( 'title' => $this->l('N° Facture'), 'havingFilter' => true, ), /*AJOUT CODE PROMO*/ 'lecode' => array( 'title' => $this->l('Code Reduction'), 'havingFilter' => true, ), 'total_discounts' => array( 'title' => $this->l('Total Reduction'), ), /*AJOUT GROUPE*/ 'Groupe' => array( 'title' => $this->l('Groupe'), 'type' => 'select', 'color' => 'color2', 'list' => $this->groupes_array, 'filter_key' => 'c!id_default_group', 'filter_type' => 'int', 'order_key' => 'id_default_group', ), ...
Voilà le code que j'ai fait, je rajoute les champs un par un, pour que ce soit plus facile pour moi de voir où j'en suis et si je ne me trompe pas dans la requête (si j'ajoute tout d'un coup et qu'il y a un problème, il sera plus compliqué de savoir ce qui ne vas pas).
Pour le moment, j'ai réussi à ajouter avec succès Code Réduction et ai moitié Group client.
/** * Hook allows to modify Order grid definition since 1.7.7.0 * * @param array $params */ public function hookActionOrderGridDefinitionModifier(array $params) { if (empty($params['definition'])) { return; } $definitionCode = $params['definition']; $column = new PrestaShop\PrestaShop\Core\Grid\Column\Type\DataColumn('lecode'); $column->setName($this->l('Code Reduction')); $column->setOptions([ 'field' => 'lecode', ]); $definitionCode ->getColumns() ->addAfter( 'payment', $column ); $definitionCode->getFilters()->add( (new PrestaShop\PrestaShop\Core\Grid\Filter\Filter('lecode', Symfony\Component\Form\Extension\Core\Type\TextType::class)) ->setAssociatedColumn('lecode') ->setTypeOptions([ 'required' => false, 'translation_domain' => false, ]) ); $groupes = Group::getGroups($this->context->language->id); foreach ($groupes as $groupe) { $this->groupes_array[$groupe['name']] = $groupe['id_group']; } $definitionGroupe = $params['definition']; $column = new PrestaShop\PrestaShop\Core\Grid\Column\Type\DataColumn('Groupe'); $column->setName($this->l('Code Reduction')); $column->setOptions([ 'field' => 'Groupe', ]); $definitionGroupe ->getColumns() ->addAfter( 'lecode', $column ); $definitionGroupe->getFilters()->add( (new PrestaShop\PrestaShop\Core\Grid\Filter\Filter('Groupe', Symfony\Component\Form\Extension\Core\Type\ChoiceType::class)) ->setAssociatedColumn('Groupe') ->setTypeOptions([ 'required' => false, 'choices' => $this->groupes_array, 'translation_domain' => false, ]) ); } /** * Hook allows to modify Order query builder and add custom sql statements since 1.7.7.0 * * @param array $params */ public function hookActionOrderGridQueryBuilderModifier(array $params) { if (empty($params['search_query_builder']) || empty($params['search_criteria'])) { return; } $searchQueryBuilder = $params['search_query_builder']; $searchCriteria = $params['search_criteria']; /*--- CODE REDUCTION ---*/ $searchQueryBuilder->addSelect( 'GROUP_CONCAT(cr.`code` SEPARATOR \'\n\') as `lecode`' ); $searchQueryBuilder->leftJoin( 'o', '`' . _DB_PREFIX_ . 'order_cart_rule`', 'ocr', 'ocr.`id_order` = o.`id_order`' ); $searchQueryBuilder->leftJoin( 'ocr', '`' . _DB_PREFIX_ . 'cart_rule`', 'cr', 'cr.`id_cart_rule` = ocr.`id_cart_rule`' ); /*--- GROUPE ---*/ $searchQueryBuilder->addSelect( 'GL.`name` AS Groupe, CASE WHEN cu.`id_default_group` IN (1,2,3,10) THEN \'#A5D878\' WHEN cu.`id_default_group` IN (8,16,17,18,20,22,23,28,29,30,31,32,33,37) THEN \'#78D8CC\' WHEN cu.`id_default_group` IN (34,36) THEN \'#D8A753\' WHEN cu.`id_default_group` IN (7) THEN \'#788ED8\' WHEN cu.`id_default_group` IN (15) THEN \'#8578D8\' WHEN cu.`id_default_group` IN (11,19,21,24) THEN \'#C878D8\' END AS color2' ); $searchQueryBuilder->leftJoin( 'c', '`' . _DB_PREFIX_ . 'group_lang`', 'GL', 'GL.`id_group` = cu.`id_default_group` AND GL.`id_lang` = '.(int)$this->context->language->id ); if ('id_cart_rule' === $searchCriteria->getOrderBy()) { $searchQueryBuilder->orderBy('cr.`id_cart_rule`', $searchCriteria->getOrderWay()); } if ('Groupe' === $searchCriteria->getOrderBy()) { $searchQueryBuilder->orderBy('GL.`name`', $searchCriteria->getOrderWay()); } foreach ($searchCriteria->getFilters() as $filterName => $filterValue) { if ('lecode' === $filterName) { $searchQueryBuilder->andWhere('cr.`code` = :id_cart_rule'); $searchQueryBuilder->setParameter('id_cart_rule', $filterValue); } if ('Groupe' === $filterName) { $searchQueryBuilder->andWhere('cu.`id_default_group` = :Groupe'); $searchQueryBuilder->setParameter('Groupe', $filterValue); } } $searchQueryBuilder->groupBy('id_order'); }
Voilà donc maintenant, ce que je cherche à faire et de rappliquer les couleurs sur mes champs de groupe client
Ce qui me donne ceci.
J'ai bien mes codes (qui se concatène bien s'il y en a plusieurs) et mes groupes clients. Mais je n'ai plus de couleur pour les groupes clients et je ne parviens pas à les remettre.
Si vous pouviez m'aider sur ce sujet ?
Merci par avance pour votre aide !