Laetitia Bordon Posted January 21, 2021 Share Posted January 21, 2021 (edited) Bonjour à tous, J'ai rajouté des champs dans ps_customer. J'ai aussi adapté le query pour en faire ressortir 2 dans /classes/Customer.php, fonction getCustomers. Maintenant, je cherche à les afficher (les 2 champs rajoutés) dans la liste des clients du BO (cf image ci-dessous). Est-ce dans un template (où est-il) ou une autre fonction? Merci Edited March 17, 2021 by Laetitia Bordon solution trouvée (see edit history) Link to comment Share on other sites More sharing options...
Kaudaj Posted January 22, 2021 Share Posted January 22, 2021 Bonjour @Laetitia Bordon, Je ne peux que vous conseiller ce chapitre de la documentation officielle de PrestaShop : https://devdocs.prestashop.com/1.7/development/components/grid/tutorials/modify-grid-in-module/ Bonne soirée, Kaudaj. Link to comment Share on other sites More sharing options...
Laetitia Bordon Posted March 17, 2021 Author Share Posted March 17, 2021 Merci, Je me suis occupée de cela hier et j'ai trouvé où ça se passe. Je clôture le sujet Link to comment Share on other sites More sharing options...
Mediacom87 Posted March 19, 2021 Share Posted March 19, 2021 Le 17/03/2021 à 9:49 AM, Laetitia Bordon a dit : Je me suis occupée de cela hier et j'ai trouvé où ça se passe. Et accepteriez vous de partager votre découverte avec les gens qui vont être amenés à lire votre topic ? Link to comment Share on other sites More sharing options...
Laetitia Bordon Posted March 23, 2021 Author Share Posted March 23, 2021 (edited) Le "matricule" se trouve dans "vat_number" et le "service" dans "address1", tous 2 dans l'adresse : Ajouter le matricule et le service dans la liste des customers : Dans src/Core/Grid/Query/CustomerQueryBuilder.php, ajouter: * vat_number & address1 ligne 81, 196, 197 * left join avec address lignes 127 -> 132 * ajouter lastname et firstname dans la liste des champs ligne 204 sinon les filtres sur nom ou prénom ne fonctionnent pas et vous avez une erreur 500 * les filtres dans query lignes 212 -> 217 * les 2 champs en tri lignes 270 -> 274 public function getSearchQueryBuilder(SearchCriteriaInterface $searchCriteria) { $searchQueryBuilder = $this->getCustomerQueryBuilder($searchCriteria) ->select('c.id_customer, c.firstname, c.lastname, c.email, c.active, c.newsletter, c.optin') ->addSelect('c.date_add, gl.name as social_title, s.name as shop_name, c.company, adr.vat_number as vat_number, adr.address1 as address1'); ... private function getCustomerQueryBuilder(SearchCriteriaInterface $searchCriteria) { $queryBuilder = $this->connection->createQueryBuilder() ->from($this->dbPrefix . 'customer', 'c') ->leftJoin( 'c', $this->dbPrefix . 'gender_lang', 'gl', 'c.id_gender = gl.id_gender AND gl.id_lang = :context_lang_id' ) ->leftJoin( 'c', $this->dbPrefix . 'shop', 's', 'c.id_shop = s.id_shop' ) ->leftJoin( 'c', $this->dbPrefix . 'address', 'adr', 'c.id_customer = adr.id_customer AND adr.deleted = 0 AND adr.active = 1' ) ... private function applyFilters(array $filters, QueryBuilder $qb) { $allowedFilters = [ 'id_customer', 'social_title', 'firstname', 'lastname', 'email', 'active', 'newsletter', 'optin', 'date_add', 'company', 'vat_number', 'address1', ]; foreach ($filters as $filterName => $filterValue) { if (!in_array($filterName, $allowedFilters)) { continue; } if (in_array($filterName, ['active', 'newsletter', 'optin', 'id_customer', 'lastanem', 'firstname'])) { $qb->andWhere('c.`' . $filterName . '` = :' . $filterName); $qb->setParameter($filterName, $filterValue); continue; } if (in_array($filterName, ['vat_number', 'address1'])) { $qb->andWhere('adr.`' . $filterName . '` LIKE :' . $filterName); $qb->setParameter($filterName, '%' . $filterValue . '%'); continue; } ... private function applySorting(QueryBuilder $searchQueryBuilder, SearchCriteriaInterface $searchCriteria) { switch ($searchCriteria->getOrderBy()) { case 'id_customer': case 'firstname': case 'lastname': case 'email': case 'date_add': case 'company': case 'active': case 'newsletter': case 'optin': $orderBy = 'c.' . $searchCriteria->getOrderBy(); break; case 'vat_number': case 'address1': $orderBy = 'adr.' . $searchCriteria->getOrderBy(); break; Dans src/Core/Grid/Definition/Factory/CustomerGridDefinitionFactory.php, ajouter les champs dans : * getColumns() lignes 157 -> 170 * getFilters() lignes 342 -> 361 Mettre en commentaire les lignes 189 -> 208 et 366 -> 373 //Dans protected function getColumns() : ->add( (new DataColumn('vat_number')) ->setName($this->trans('VAT number', [], 'Shop.Forms.Labels')) ->setOptions([ 'field' => 'vat_number', ]) ) ->add( (new DataColumn('address1')) ->setName($this->trans('Address', [], 'Shop.Forms.Labels')) ->setOptions([ 'field' => 'address1', ]) ) ... /* je n'en n'ai pas besoin ->add( (new ToggleColumn('newsletter')) ->setName($this->trans('Newsletter', [], 'Admin.Global')) ->setOptions([ 'field' => 'newsletter', 'primary_field' => 'id_customer', 'route' => 'admin_customers_toggle_newsletter_subscription', 'route_param_name' => 'customerId', ]) ) ->add( (new ToggleColumn('optin')) ->setName($this->trans('Partner offers', [], 'Admin.Orderscustomers.Feature')) ->setOptions([ 'field' => 'optin', 'primary_field' => 'id_customer', 'route' => 'admin_customers_toggle_partner_offer_subscription', 'route_param_name' => 'customerId', ]) )*/ ... //Dans protected function getFilters() : ->add( (new Filter('vat_number', TextType::class)) ->setTypeOptions([ 'attr' => [ 'placeholder' => $this->trans('VAT number', [], 'Shop.Forms.Labels'), ], 'required' => false, ]) ->setAssociatedColumn('vat_number') ) ->add( (new Filter('address1', TextType::class)) ->setTypeOptions([ 'attr' => [ 'placeholder' => $this->trans('Address', [], 'Shop.Forms.Labels'), ], 'required' => false, ]) ->setAssociatedColumn('address1') ) ... /* ->add( (new Filter('newsletter', YesAndNoChoiceType::class)) ->setAssociatedColumn('newsletter') ) ->add( (new Filter('optin', YesAndNoChoiceType::class)) ->setAssociatedColumn('optin') )*/ Attention, si vous prenez des champs existants (comme j'ai fait), pensez à changer les traductions dans app/Resources/translations (je l'ai fait par là plutôt que par le BO). Et bien sur, si vous faites des mises à jour de module, vous risquez de devoir refaire cela. Mais comme nous fonctionnons en interne, ça ne devrait pas poser de soucis chez nous. Edited April 23, 2021 by Laetitia Bordon correction du code (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now