Jump to content

Clients sans adresse email


Recommended Posts

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

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

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

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

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

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

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... :unsure:

Link to comment
Share on other sites

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

Sans rire, voici une solution appropriée lorsque on ne veut pas faire n'importe quoi en modifiant le code du logiciel :

 

D8627.jpg

Et ça marche !!

Link to comment
Share on other sites

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

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

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

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

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

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

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

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

 

nCC6rlz.jpg

  • Like 1
Link to comment
Share on other sites

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

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

 

nCC6rlz.jpg

 

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

×
×
  • Create New...