renaud2263 Posted May 10, 2016 Share Posted May 10, 2016 Bonjour à Tous, Les employés de ma boutique prennent des commandes par téléphone. De nombreux clients qui procèdent de cette façon n'ont pas d'adresse email (personnes âgées, électro-sensibles...) et j'ai donc besoin de créer des comptes sans email. Connaissez-vous le moyen de désactiver le contrôle dans le B.O pour autoriser de telles création ? Ou une autre soluce ? Je ne dois pas être le seul dans ce cas... Merci de votre aide. Link to comment Share on other sites More sharing options...
Guest Posted May 10, 2016 Share Posted May 10, 2016 vous pouvez tout simplement mettre une adresse e-mail factice du genre : [email protected] ça reste la solution la plus simple et la plus rapide, l'admnistrateur système recevra simplement des notifications comme quoi l'e-mail n'a pu être envoyé. Cordialement. Link to comment Share on other sites More sharing options...
renaud2263 Posted May 10, 2016 Author Share Posted May 10, 2016 Bonjour, oui j'ai aussi pensé à cette solution... Mais c'est pas l'idéal car nous sommes assez nombreux et il va falloir inventer des monsieur.machin1 et 2 et 2540 car sinon, le contrôle va buguer en disant que "cette adresse existe déjà"... Je cherche plutôt dans le AdminCustomerController comment désactiver ces contrôles par override. Etonnant que PS n'ait pas prévu ce réglage... Link to comment Share on other sites More sharing options...
Guest Posted May 10, 2016 Share Posted May 10, 2016 ce n'est pas étonnant.. au contraire, pour de la vente en ligne c'est l'information primordiale à renseigner : l'adresse email de contact. et [email protected] signifie : le nom et prénom de la personne, donc il sera plutôt rare d'avoir des doublons, sinon utilisez un générateur aléatoire à la place en hexadecimal, ça devrait le faire. Link to comment Share on other sites More sharing options...
renaud2263 Posted May 10, 2016 Author Share Posted May 10, 2016 Oui je comprends l'importance de l'email côté front...mais dans l'admin...pour les clients qui téléphonent car ils n'ont, par exemple, pas internet (eh oui, il y en a encore c'est pour cela que nous avons encore des catalogues papier). Doit-on pour cela ne pas pouvoir les servir ? Ca se discute. Sinon, oui, ta soluce [email protected] est bien. Merci à toi. Link to comment Share on other sites More sharing options...
renaud2263 Posted May 10, 2016 Author Share Posted May 10, 2016 Je me permets de revenir sur ce post pour une question subsidiaire...je vais utiliser la solution de Tweb mais je voudrais quand-même ajouter une instruction dans le template à l'attention des collaborateurs. Mais je ne parviens pas à identifier le template de création admin nouveaux clients. J'ai repéré theme/default/templates/controllers/customers/helpers/view/view.tpl mais ça ne parait pas être le bon...Vous pouvez m'aider ? Link to comment Share on other sites More sharing options...
renaud2263 Posted May 10, 2016 Author Share Posted May 10, 2016 Bonsoir, En français, ça donne quoi ? Je maitrise relativement bien php mais Prestashop et son organisation sont tout nouveaux pour moi. Il faut que je crée un module pour afficher le texte "Si le client n'a pas d'adresse email, merci de bla bla bla" au dessus ou à côté du champ email ? V'la l'usine à gaz... Link to comment Share on other sites More sharing options...
renaud2263 Posted May 10, 2016 Author Share Posted May 10, 2016 Je suis très touché par ta gentillesse. C'est vraiment sympa. Je souhaite juste que, côté admin, lorsque que l'on crée un client, ou une commande avec un nouveau client, le texte suivant soit affiché dans les parages du champ email : "Si le client n'a pas d'adresse email, merci d'en créer une avec [email protected]". Je ne veux pas que tout me sois mouliné, je vais m'efforcer de capter la manip pour pouvoir la reproduire et apprendre. En tout cas, merci à toi de ton aide. Link to comment Share on other sites More sharing options...
Guest Posted May 11, 2016 Share Posted May 11, 2016 Sans rire, voici une solution appropriée lorsque on ne veut pas faire n'importe quoi en modifiant le code du logiciel : Et ça marche !! Link to comment Share on other sites More sharing options...
Guest Posted May 11, 2016 Share Posted May 11, 2016 Si tu veux quand même le faire sur le code, voici une solution propre pour la version 1.6.1.4 (ne connaissant pas la version utilisée par renaud2263 ). J'utilise le "Hint", le message qui s'affiche lorsque l'on passe la souris sur le label du champ à renseigner, pour cela voici un fichier override à mettre ici : prestashop_1.6.1.4\override\controllers\admin\AdminCustomersController.php <?php class AdminCustomersController extends AdminCustomersControllerCore { public function renderForm() { /** @var Customer $obj */ if (!($obj = $this->loadObject(true))) { return; } $genders = Gender::getGenders(); $list_genders = array(); foreach ($genders as $key => $gender) { /** @var Gender $gender */ $list_genders[$key]['id'] = 'gender_'.$gender->id; $list_genders[$key]['value'] = $gender->id; $list_genders[$key]['label'] = $gender->name; } $years = Tools::dateYears(); $months = Tools::dateMonths(); $days = Tools::dateDays(); $groups = Group::getGroups($this->default_form_language, true); $this->fields_form = array( 'legend' => array( 'title' => $this->l('Customer'), 'icon' => 'icon-user' ), 'input' => array( array( 'type' => 'radio', 'label' => $this->l('Social title'), 'name' => 'id_gender', 'required' => false, 'class' => 't', 'values' => $list_genders ), array( 'type' => 'text', 'label' => $this->l('First name'), 'name' => 'firstname', 'required' => true, 'col' => '4', 'hint' => $this->l('Invalid characters:').' 0-9!<>,;?=+()@#"°{}_$%:' ), array( 'type' => 'text', 'label' => $this->l('Last name'), 'name' => 'lastname', 'required' => true, 'col' => '4', 'hint' => $this->l('Invalid characters:').' 0-9!<>,;?=+()@#"°{}_$%:' ), array( 'type' => 'text', 'prefix' => '<i class="icon-envelope-o"></i>', 'label' => $this->l('Email address'), 'name' => 'email', 'col' => '4', 'hint' => $this->l('Si le client n\'a pas d\'adresse email, merci d\'en créer une avec [email protected]'), 'required' => true, 'autocomplete' => false ), array( 'type' => 'password', 'label' => $this->l('Password'), 'name' => 'passwd', 'required' => ($obj->id ? false : true), 'col' => '4', 'hint' => ($obj->id ? $this->l('Leave this field blank if there\'s no change.') : sprintf($this->l('Password should be at least %s characters long.'), Validate::PASSWORD_LENGTH)) ), array( 'type' => 'birthday', 'label' => $this->l('Birthday'), 'name' => 'birthday', 'options' => array( 'days' => $days, 'months' => $months, 'years' => $years ) ), array( 'type' => 'switch', 'label' => $this->l('Enabled'), 'name' => 'active', 'required' => false, 'class' => 't', 'is_bool' => true, 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Enabled') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('Disabled') ) ), 'hint' => $this->l('Enable or disable customer login.') ), array( 'type' => 'switch', 'label' => $this->l('Newsletter'), 'name' => 'newsletter', 'required' => false, 'class' => 't', 'is_bool' => true, 'values' => array( array( 'id' => 'newsletter_on', 'value' => 1, 'label' => $this->l('Enabled') ), array( 'id' => 'newsletter_off', 'value' => 0, 'label' => $this->l('Disabled') ) ), 'disabled' => (bool)!Configuration::get('PS_CUSTOMER_NWSL'), 'hint' => $this->l('This customer will receive your newsletter via email.') ), array( 'type' => 'switch', 'label' => $this->l('Opt-in'), 'name' => 'optin', 'required' => false, 'class' => 't', 'is_bool' => true, 'values' => array( array( 'id' => 'optin_on', 'value' => 1, 'label' => $this->l('Enabled') ), array( 'id' => 'optin_off', 'value' => 0, 'label' => $this->l('Disabled') ) ), 'disabled' => (bool)!Configuration::get('PS_CUSTOMER_OPTIN'), 'hint' => $this->l('This customer will receive your ads via email.') ), ) ); // if we add a customer via fancybox (ajax), it's a customer and he doesn't need to be added to the visitor and guest groups if (Tools::isSubmit('addcustomer') && Tools::isSubmit('submitFormAjax')) { $visitor_group = Configuration::get('PS_UNIDENTIFIED_GROUP'); $guest_group = Configuration::get('PS_GUEST_GROUP'); foreach ($groups as $key => $g) { if (in_array($g['id_group'], array($visitor_group, $guest_group))) { unset($groups[$key]); } } } $this->fields_form['input'] = array_merge( $this->fields_form['input'], array( array( 'type' => 'group', 'label' => $this->l('Group access'), 'name' => 'groupBox', 'values' => $groups, 'required' => true, 'col' => '6', 'hint' => $this->l('Select all the groups that you would like to apply to this customer.') ), array( 'type' => 'select', 'label' => $this->l('Default customer group'), 'name' => 'id_default_group', 'options' => array( 'query' => $groups, 'id' => 'id_group', 'name' => 'name' ), 'col' => '4', 'hint' => array( $this->l('This group will be the user\'s default group.'), $this->l('Only the discount for the selected group will be applied to this customer.') ) ) ) ); // if customer is a guest customer, password hasn't to be there if ($obj->id && ($obj->is_guest && $obj->id_default_group == Configuration::get('PS_GUEST_GROUP'))) { foreach ($this->fields_form['input'] as $k => $field) { if ($field['type'] == 'password') { array_splice($this->fields_form['input'], $k, 1); } } } if (Configuration::get('PS_B2B_ENABLE')) { $risks = Risk::getRisks(); $list_risks = array(); foreach ($risks as $key => $risk) { /** @var Risk $risk */ $list_risks[$key]['id_risk'] = (int)$risk->id; $list_risks[$key]['name'] = $risk->name; } $this->fields_form['input'][] = array( 'type' => 'text', 'label' => $this->l('Company'), 'name' => 'company' ); $this->fields_form['input'][] = array( 'type' => 'text', 'label' => $this->l('SIRET'), 'name' => 'siret' ); $this->fields_form['input'][] = array( 'type' => 'text', 'label' => $this->l('APE'), 'name' => 'ape' ); $this->fields_form['input'][] = array( 'type' => 'text', 'label' => $this->l('Website'), 'name' => 'website' ); $this->fields_form['input'][] = array( 'type' => 'text', 'label' => $this->l('Allowed outstanding amount'), 'name' => 'outstanding_allow_amount', 'hint' => $this->l('Valid characters:').' 0-9', 'suffix' => $this->context->currency->sign ); $this->fields_form['input'][] = array( 'type' => 'text', 'label' => $this->l('Maximum number of payment days'), 'name' => 'max_payment_days', 'hint' => $this->l('Valid characters:').' 0-9' ); $this->fields_form['input'][] = array( 'type' => 'select', 'label' => $this->l('Risk rating'), 'name' => 'id_risk', 'required' => false, 'class' => 't', 'options' => array( 'query' => $list_risks, 'id' => 'id_risk', 'name' => 'name' ), ); } $this->fields_form['submit'] = array( 'title' => $this->l('Save'), ); $birthday = explode('-', $this->getFieldValue($obj, 'birthday')); $this->fields_value = array( 'years' => $this->getFieldValue($obj, 'birthday') ? $birthday[0] : 0, 'months' => $this->getFieldValue($obj, 'birthday') ? $birthday[1] : 0, 'days' => $this->getFieldValue($obj, 'birthday') ? $birthday[2] : 0, ); // Added values of object Group if (!Validate::isUnsignedId($obj->id)) { $customer_groups = array(); } else { $customer_groups = $obj->getGroups(); } $customer_groups_ids = array(); if (is_array($customer_groups)) { foreach ($customer_groups as $customer_group) { $customer_groups_ids[] = $customer_group; } } // if empty $carrier_groups_ids : object creation : we set the default groups if (empty($customer_groups_ids)) { $preselected = array(Configuration::get('PS_UNIDENTIFIED_GROUP'), Configuration::get('PS_GUEST_GROUP'), Configuration::get('PS_CUSTOMER_GROUP')); $customer_groups_ids = array_merge($customer_groups_ids, $preselected); } foreach ($groups as $group) { $this->fields_value['groupBox_'.$group['id_group']] = Tools::getValue('groupBox_'.$group['id_group'], in_array($group['id_group'], $customer_groups_ids)); } return AdminController::renderForm(); } } Link to comment Share on other sites More sharing options...
Guest Posted May 11, 2016 Share Posted May 11, 2016 Ha oui, j'avais oublié de préciser que pour que le fichier soit pris en compte il te faut effacer ce fichier : prestashop_1.6.1.4\cache\class_index.php il sera recrée et l'override va enfin être pris en compte. Link to comment Share on other sites More sharing options...
renaud2263 Posted May 11, 2016 Author Share Posted May 11, 2016 Enorme ! Merci beaucoup, c'est super cool. Et en plus cela m'aide beaucoup à comprendre le fonctionnement des formulaires PS ! Et donc, si je veux ajouter un champ dans ce formulaire, je passe par render_form() de cet override, en utilisant ce array ? Rien à faire au niveau html d'un template ? Merci encore et belle journée. Link to comment Share on other sites More sharing options...
Oron Posted May 11, 2016 Share Posted May 11, 2016 Bonjour à Tous, Les employés de ma boutique prennent des commandes par téléphone. De nombreux clients qui procèdent de cette façon n'ont pas d'adresse email (personnes âgées, électro-sensibles...) et j'ai donc besoin de créer des comptes sans email. Connaissez-vous le moyen de désactiver le contrôle dans le B.O pour autoriser de telles création ? Ou une autre soluce ? Je ne dois pas être le seul dans ce cas... Merci de votre aide. Bonjour Votre site se trouve sur Prestashop CLOUD ? vu le conseil : prestashop_1.6.1.4\cache\class_index.php si vous êtes sur le CLOUD vous n'avez pas accès à ce dossier, si vous avez accès c'est que vous n'êtes pas sur le CLOUD de Prestashop. Link to comment Share on other sites More sharing options...
renaud2263 Posted May 11, 2016 Author Share Posted May 11, 2016 Bonjour, non ma boutique est sur un dédié. J'ai donc accès à absolument tout. Link to comment Share on other sites More sharing options...
Guest Posted May 11, 2016 Share Posted May 11, 2016 Si vous étiez sur le cloud... j'aurai été très déçu.. OUF !! Et donc, si je veux ajouter un champ dans ce formulaire, je passe par render_form() de cet override, en utilisant ce array ? Rien à faire au niveau html d'un template ? pour ajouter un champ dans ce formulaire, ça ne vas pas être tout à fait la même procédure.. là c'est pour modifier les champs existants.. il y a un topic dédié pour l'ajout d'un champ/variable ici :> https://www.prestashop.com/forums/topic/243660-resolu-override-de-customer-et-admincustomerscontroller/ ++ et bon courage ! Link to comment Share on other sites More sharing options...
renaud2263 Posted May 11, 2016 Author Share Posted May 11, 2016 Merci à Tous ! Link to comment Share on other sites More sharing options...
Guest Posted May 11, 2016 Share Posted May 11, 2016 De rien, par contre il faudrait plutôt mettre BEST ANSWER sur la réponse que tu trouves pertinentes, en général pas ce que toi tu écris puisque tu es le demandeur, merci d'avance de choisir le post adéquat. Link to comment Share on other sites More sharing options...
renaud2263 Posted May 11, 2016 Author Share Posted May 11, 2016 Euh...le bouton Best Answer n'est dispo que sur ma dernière réponse. J'ai mis un J'aime sur ton code override Link to comment Share on other sites More sharing options...
Guest Posted May 11, 2016 Share Posted May 11, 2016 merci pour le like ! mais c'est bizarre cette histoire de bouton answer... Oron pourrait surement nous éclairer sur ça qd il en aura l'occasion. Link to comment Share on other sites More sharing options...
Mediacom87 Posted May 11, 2016 Share Posted May 11, 2016 Bonjour, pour moi le plus simple reste l'override de la fonction renderForm() déjà donné mais avec une subtilité : j'ai rajouté la génération d'une adresse email automatiquement que l'opérateur peut saisir au besoin. l'email est générer à partir du timestamp actuel et j'ai rajouter un nombre aléatoire par sécurité cela devrait éviter tout doublons dans 99% des cas array( 'type' => 'text', 'prefix' => '<i class="icon-envelope-o"></i>', 'label' => $this->l('Email address'), 'desc' => sprintf($this->l('If this clients has no email you can copy this one: %s'), time() . '-' . rand(0, 99) . '@without-email.tld'), 'name' => 'email', 'col' => '4', 'required' => true, 'autocomplete' => false ), ce qui nous donne au résultat 1 Link to comment Share on other sites More sharing options...
Guest Posted May 11, 2016 Share Posted May 11, 2016 bien joué jeckyl ! on dit merci qui ? LOL.. ok je sors Il reste plus qu'a mettre un bouton pour remplir la case au lieu du copié collé pour faire MEGA NICKEL ! Link to comment Share on other sites More sharing options...
renaud2263 Posted May 11, 2016 Author Share Posted May 11, 2016 Bonjour, pour moi le plus simple reste l'override de la fonction renderForm() déjà donné mais avec une subtilité : j'ai rajouté la génération d'une adresse email automatiquement que l'opérateur peut saisir au besoin. l'email est générer à partir du timestamp actuel et j'ai rajouter un nombre aléatoire par sécurité cela devrait éviter tout doublons dans 99% des cas array( 'type' => 'text', 'prefix' => '<i class="icon-envelope-o"></i>', 'label' => $this->l('Email address'), 'desc' => sprintf($this->l('If this clients has no email you can copy this one: %s'), time() . '-' . rand(0, 99) . '@without-email.tld'), 'name' => 'email', 'col' => '4', 'required' => true, 'autocomplete' => false ), ce qui nous donne au résultat Super intéressant ! Merci ! Du coup on pourrait imaginer une case à cocher avec un p'tit JS qui dirait: Pas d'email ? Cliquez ici et hop ! on récupère la valeur des champs firstname et lastname qui sont au dessus donc déjà remplis, et on formate une adresse bidon avec ces données puis on la colle dans le champ email ! Mais si ce code en JS n'est pas un problème, je ferais ça où ? Dans le template ? Dans l'override ? Link to comment Share on other sites More sharing options...
Recommended Posts