Détail du message 26734.9

Message numéro 9 dans le sujet Ajout de champs personnalisés compte client.

  • 26734.9 en réponse à 26734.8 écrit par Steven Hartz

    18/03/2011 15:12


    Alexandre Simon
    Titre : Développeur RBS Change
    Rang : Expert
    Bonjour,

    Les étapes sont :
    1. Ajout du champ numClient sur le document customer/customer
    2. Prise en charge du champ numClient dans le formulaire de création
    3. Prise en charge du champ numClient lors de la sauvegarde

    1. Ajout du champ numClient sur le document customer/customer

    - On crée un module (numclient comme vous l'avez fait précédemment) : changedev.php add-document numclient folder
    - On crée un document customer dedans, qui étend et remplace l'original en ajoutant le champ "numClient" :
    changedev.php create-document numclient customer
    Edition modules/numclient/persistentdocument/customer.xml :

    <?xml version="1.0" encoding="utf-8"?>
    <document xmlns="http://www.rbs.fr/schema/change-document/1.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.rbs.fr/schema/change-document/1.0 http://www.rbschange.fr/static/schema/change-document/1.0.xsd"
            model-version="1.0" extend="modules_customer/customer" inject="true">
            <properties>
                    <add name="numClient" type="String" />
            </properties>
    </document>


    changedev.php add-document numclient customer

    2. Prise en charge du champ numClient dans le formulaire de création

    - Surcharge du gabarit Order-Block-IdentifyStep-New.all.all.html dans override/ :
    cp modules/order/templates/Order-Block-IdentifyStep-New.all.all.html override/modules/order/templates/
    - On place un champ de saisie pour numClient :
    <li><input change:textinput="name numClient" size="30" label="Numéro client" /></li>

    3. Prise en charge du champ numClient lors de la sauvegarde

    La sauvegarde des données de ce formulaire est faite dans la méthode executeCreateAccount() du bloc order_BlockIdentifyStepAction; cette méthode ne prévoit actuellement pas de point d'extension => on la redéfinit.

    - Création d'une classe contenant la nouvelle implémentation de executeCreateAccount(). On copie l'originale et on rajoute la gestion du champ numClient :

    class numclient_SaveNumClient
    {
            /**
             * @param f_mvc_Request $request
             * @param f_mvc_Response $response
             * @param order_IdentifyStepBean $identifyStep
             * @return String
             */
            public function executeCreateAccount($request, $response, order_IdentifyStepBean $identifyStep)
            {
                    $website = website_WebsiteModuleService::getInstance()->getCurrentWebsite();
                    $customer = customer_CustomerService::getInstance()->createNewCustomer($website->getId(), $identifyStep->newemail, $identifyStep->firstname, $identifyStep->lastname, $identifyStep->newpassword);
                    if ($customer !== null)
                    {
                            if ($request->hasNonEmptyParameter("numClient"))
                            {
                                    $customer->setNumClient($request->getParameter("numClient"));
                                    $customer->save();
                            }
                            $user = $customer->getUser();
                            $cartInfo = $this->getCurrentCart();
                            $cartInfo->setMergeWithUserCart(false);
                            users_UserService::getInstance()->authenticateFrontEndUser($user);
                            $cartInfo->setCustomerId($customer->getId());
                            $cartInfo->setUserId($user->getId());
                            $cartInfo->save();
                            $this->redirectToNextStep();
                    }
                    $errMsg = f_Locale::translate('&modules.order.document.identifystepbean.CreateAccount-error;');
                    $this->addError($errMsg);
                    $request->setAttribute('identifyStep', $identifyStep);
                    return $this->getCreateAccountInputViewName();
    }


    - Insertion de la nouvelle méthode sur le bloc :
    Dans config/aop.xml :

    <?xml version="1.0" encoding="UTF-8"?>
    <aop>
            <before pointcut="order_BlockIdentifyStepAction::executeCreateAccount"
                    class="numclient_SaveNumClient"  method="executeCreateAccount" />
    </aop>
    


    Suivi de : change.php compile-aop


    Vous pouvez retrouver l'ensemble des fichiers dans l'archive numclient.tgz
 
1377 membres
Aucun membre connecté