Jump to content

[Tutorial] Ajouter un champ TVA intracommunautaire obligatoire


Recommended Posts

Bonjour, j'ai cherché comment ajouter ce champ à Prestashop. En effet, il devient important dès qu'on veut vendre aux sociétés. Le fait de le rendre obligatoire implique que la boutique devient réservée aux acheteurs professionnels.

Ce tutorial est bien sur adaptable à l'ajout d'autres champs comme SIRET ou autre.

Je me suis inspiré de ce sujet afin de réaliser ce tutorial, ce dernier ne proposant par exemple pas de rendre le champ obligatoire.

Avant toute modification du code de votre boutique il est important d'en faire une sauvegarde

Nous allons éditer 4 fichiers :

/themes/prestashop/authentification.tpl – ajoute le champ dans le formulaire d'inscription
/classes/Address.php – dit au formulaire comment traiter l'information entrée par le client
/admin/tabs/AdminAddresses.php – permet au back office de récupérer les informations
/classes/PDF.php – gère la création des factures PDF.

On suppose ici que l'on souhaite ajouter le champ de TVA IC en dessous du champ Société. Vous pouvez évidemment faire un autre choix.

1. /themes/prestashop/authentification.tpl

Cherchez :



{l s='Company'}
               <input type="text" class="text" id="company" name="company" value="{if isset($smarty.post.company)}{$smarty.post.company}{/if}" />



FACULTATIF ###
si vous souhaitez en profiter pour rendre le champ Société obligatoire à la saisie,

Remplacez par :

            


{l s='Company'}
               <input type="text" class="text" id="company" name="company" value="{if isset($smarty.post.company)}{$smarty.post.company}{/if}" />
*


(il n'y a que 2 modifications : required text et l'astérisque)
FACULTATIF ###

Pour ajouter le champ TVA IC à votre formulaire, ajoutez sous le code précédent ce qui suit :



{l s='VAT number'}
               <input type="text" class="text" id="vatnumber" name="vatnumber" value="{if isset($smarty.post.vatnumber)}{$smarty.post.vatnumber}{/if}" />
*



Si vous ne souhaitez pas que ce champ soit obligatoire, retirez "required " et "*".



2. /classes/Address.php

Cherchez :

   /** @var string Company*/
   public         $company;



Remplacez par :

/** @var string Company*/
public         $company;

/** @var string VAT number*/
public         $vatnumber;





Pour rendre le champ TVA IC obligatoire (si vous ne le souhaitez pas ne faites pas cette étape):
Cherchez :

    protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city');


Ajoutez entre alias et lastname 'vatnumber', et si vous le souhaitez 'company', (pour rendre le champ société obligatoire).

Résultat :

    protected    $fieldsRequired = array('id_country', 'alias', 'vatnumber', 'lastname', 'firstname', 'address1', 'postcode', 'city');



Ce qui suit définit la taille maximale des champs du formulaire. sachant qu'un numéro de TVA intracommunautaire n'a pas le même nombre de caractères dans tous les pays il ne faut mieux pas se limiter à l'exemple français et être plus large. (j'utilise dans l'exemple 20 caractères maximum)
Cherchez :

    protected    $fieldsSize = array('alias' => 32, 'company' => 32, 'lastname' => 32, 'firstname' => 32,



Ajoutez donc "'vatnumber' => 20," après company

    protected    $fieldsSize = array('alias' => 32, 'company' => 32, 'vatnumber' => 20, 'lastname' => 32, 'firstname' => 32,



Cherchez :

 'company' => 'isGenericName',



Remplacez par :

'company' => 'isGenericName', 'vatnumber' => 'isGenericName',




Cherchez :

$fields['company'] = pSQL($this->company);



Remplacez par:

$fields['company'] = pSQL($this->company);
$fields['vatnumber'] = pSQL($this->vatnumber);

Link to comment
Share on other sites

3. /admin/tabs/AdminAddresses.php

Cherchez :

                echo ''.$this->l('Company:').'

                   <input type="text" size="33" name="company" value="'.htmlentities($this->getFieldValue($obj, 'company'), ENT_COMPAT, 'UTF-8').'" />
'.$this->l('Invalid characters:').' <>;=#{} 
';


Remplacez par :

                echo ''.$this->l('Company:').'

                   <input type="text" size="33" name="company" value="'.htmlentities($this->getFieldValue($obj, 'company'), ENT_COMPAT, 'UTF-8').'" />
'.$this->l('Invalid characters:').' <>;=#{} 

'.$this->l('VAT number:').'

                   <input type="text" size="21" name="vatnumber" value="'.htmlentities($this->getFieldValue($obj, 'vatnumber'), ENT_COMPAT, 'UTF-8').'" />
'.$this->l('Invalid characters:').' <>;=#{} 
';



(21 ou 33 car l'on ajoute 1 à la valeur maximale)

4. /classes/PDF.php

Cherchez :

            $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $delivery_address->company), 0, 'L');
           $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $invoice_address->company), 0, 'L');
           $pdf->Ln(5);



Remplacez par :

            $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $delivery_address->company), 0, 'L');
           $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $invoice_address->company), 0, 'L');
           $pdf->Ln(5);

           $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $delivery_address->vatnumber), 0, 'L');
           $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $invoice_address->vatnumber), 0, 'L');
           $pdf->Ln(5);



Ouf on a fini ! (presque)

5. Ajout du champ vatnumber dans la base MySQL
Ouvrez phpmyadmin. cliquez sur la table ps_address à gauche
dans le bas de la page Ajoutez un champ après "company" (liste déroulante)


Champ : vatnumber
Type : VARCHAR
Taille/Valeurs : 20 (le numéro que vous avez choisi)
Null : null
Valeur par défaut : NULL


et voilà !

6. Traduction

vous pouvez dès à présent savourer votre travail en testant la page d'inscription. vous remarquerez qu'il est inscrit VAT number. (en anglais)

dernière étape, la traduction !

Dans le back office, allez dans Outils, Traductions, choisissez chacun leur tour les différents choix de la liste déroulante, puis cherchez dans chaque page "vat" jusqu'à trouver tous les champs en anglais et tous les traduire.

Voilà !

bato
Link to comment
Share on other sites

Formidable pour la version 1.1, fonctionne t'il pour la version 1.2 ?
Dans le BO, le numéro de TVA n'apparait pas dans la gestion client. Est-il possible de le faire apparaitre car j'effectue la facturation via un programme différent. Merci.

Link to comment
Share on other sites

oui je l'ai rédigé à partir de la version 1.2
pour l'afficher dans le back office soit vous affichez la facture pdf mais un peu fastidieux ou soit vous éditez les donnees du client il devrait apparaitre dans une case.

je n'ai pas internet en ce moment je suis sur mon iphone

Link to comment
Share on other sites

Sur mes deux sites en prod V1.1 et V1.2, je viens de faire les modifications et cela fonctionne bien sauf que le numéro de TVA n'apparait pas dans la fiche client en back office, il faut ouvrir la facture pdf pour le trouver. Ce serait bien qu'il apparaisse sur la fiche client, si tu trouves la solutions, merci de nous la faire partager.

Link to comment
Share on other sites

  • 3 weeks later...

Bonjour,

je suis nouvelle venue sur ce forum, et j'explore prestashop avec avidité... et merci à tous ceux qui participent à son développement.

Très intéressant ce post, en tous cas il répond à ce que je recherche (boutique pour pro).

Je vais essayer de chercher de mon côté comment faire apparaître le num TVA dans la fiche client et dans le back-office, et je vous tiens au courant.

Par contre, il serait intéressant à l'inscription de rendre obligatoire la saisie du num. TVA seulement aux habitants de la zone Euro - les autres n'y étant pas soumis.

Pour ceux qui aiment titiller le code, j'ai essayé de faire ceci dans class/address.php, en introduisant une condition du type - je simplifie :

si la zone du pays récupéré (grâce à id_country) est égale à 1 (correspond à id_zone de l'Europe),
alors
protected $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'company', 'vatnumber', 'address1', 'postcode', 'city');
sinon
protected $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'company', 'address1', 'postcode', 'city');

mais impossible, je n'arrive même pas à créer la requète pour récupérer le id_zone, mon site bloque dès que j'ajoute le moindre code.
Cette requête de récup de la zone est par ailleurs déjà présente plus bas dans ce fichier, mais je n'arrive pas à en tirer quoi que ce soit.

Une idée ?

Link to comment
Share on other sites

Merci pour ce super TUTO ;)

2 choses ,

Concernant l'édition de la table sous phpmyadmin, aller dans requête sql et tapez :

ALTER TABLE `ps_address` ADD `vatnumber` VARCHAR( 18 ) NOT NULL DEFAULT '' AFTER `company`





J'ai trouvé ça concernant la TVA ....


ATTENTION : En ce qui concerne les opérations nationales, l’obligation de mentionner le numéro de TVA intracommunautaire du client n’est pas requise !
Il suffit de faire figurer le numéro de TVA intracommunautaire du prestataire/fournisseur.


Pour résumer, c'est le N° TVA Intracommunautaire de la boutique qui doit apparaitre ....
Link to comment
Share on other sites

Tout à fait exact pour la vente en France !

Cependant le num TVA d'un client pro est indispensable sur une facture envoyées à un client CE hors France.

Pour quelqu'un qui vend en France + CE, le mieux est, je crois, de faire apparaitre et le num. TVA du vendeur, et celui de l'acheteur sur la facture : il est préférable de faire apparaitre par défaut des infos non spécialement requises que d'en omettre certaines de nature obligatoire au niveau comptable.

Pour incorporer le num du vendeur, on peut utiliser simplement dans le back-office > Préférences > Coordonnées, le champ immatriculation.
Toutes les infos légales apparaitront ainsi en pied de page.

Pour le num client, je cherche comment l'y faire apparaitre sous l'adresse de facturation... et je vous tiens au courant, s'il y en a que ça intéresse. ;)

@ plus tard !

Link to comment
Share on other sites

Merci d'avoir confirmer.

à ce jour avec la modif proposée , le N°TVA apparait dans l'adresse de facturation, pas très top (mieux que rien ;) )

Le faire apparaitre juste audessus de l'encart commande serait TOP !!!

Voir fichier PDF.php dans classe ....

Cordialement.

Link to comment
Share on other sites

Quelle réactivité !

Oui, bonne idée, je vais essayer de jeter un oeil à ce fichier, ça m'intéresse.
Amicalement


En théorie,

Concerne cette partie de la modif :
$pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $delivery_address->company), 0, 'L');
           $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $invoice_address->company), 0, 'L');
           $pdf->Ln(5);

           $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $delivery_address->vatnumber), 0, 'L');
           $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $invoice_address->vatnumber), 0, 'L');
           $pdf->Ln(5); 



à repasser en

$pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $delivery_address->company), 0, 'L');
           $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $invoice_address->company), 0, 'L');
           $pdf->Ln(5);



Jusque là facile ;)

Maintenant reste à trouver la partie dessin du tableau et de l'encart :

et de rajouter :

           $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), 'N° de TVA:' . $delivery_address->vatnumber), 0, 'L');
           $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), 'N° de TVA:' . $invoice_address->vatnumber), 0, 'L');
           $pdf->Ln(5); 



10 correspond à la hauteur du champs, donc à changer !

la variable $width est variant, ... à adapter, c'était juste pour faire avancer ;)


Cordialement

Link to comment
Share on other sites

Comme promis, voici quelques modifications que j'ai effectuées sur mon site pour le rendre plus orienté vers la vente aux professionnels.
Comme l'a rappelé Bato, avant toute modification du code de votre boutique il est important d’en faire une sauvegarde !

Sur mon site, ça marche, je suis sur la version 1.2.4.0.
Les numéros de ligne de code notés sont seulement indicatifs et peuvent varier...


Modif sur la facture en PDF (classes/PDF.php)


(A l'attention de Stephan)
>> Ajouter le num. de TVA au dessus du bloc de la commande

remplacer (vers ligne 440)

$pdf->Ln(12);
   $pdf->SetFillColor(240, 240, 240);
   $pdf->SetTextColor(0, 0, 0);
   $pdf->SetFont(self::fontname(), '', 9);



par

/* Ajout */    
   $pdf->Ln(10);     
     $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), 'N° de TVA : ' . $delivery_address->vatnumber), 0, 'L');
     $pdf->Ln(10); 
   $pdf->SetFillColor(240, 240, 240);
   $pdf->SetTextColor(0, 0, 0);
   $pdf->SetFont(self::fontname(), '', 9);




>> Pour enlever nom et prénom dans l'adresse client (n'y reste que le nom de la société)

remplacer (vers ligne 392)

if (!empty($delivery_address->company) OR !empty($invoice_address->company))
       {
       $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $delivery_address->company), 0, 'L');
       $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $invoice_address->company), 0, 'L');
       $pdf->Ln(5);
}

   $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $delivery_address->firstname).' '.Tools::iconv('utf-8', self::encoding(), $delivery_address->lastname), 0, 'L');
   $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $invoice_address->firstname).' '.Tools::iconv('utf-8', self::encoding(), $invoice_address->lastname), 0, 'L');
   $pdf->Ln(5);




par

if (!empty($delivery_address->company) OR !empty($invoice_address->company))
       {
       $pdf->Ln(3); // Créé un espace au dessus de l'adresse
       $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $delivery_address->company), 0, 'L');
       $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $invoice_address->company), 0, 'L');
       $pdf->Ln(5);
       }


   /*
   $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $delivery_address->firstname).' '.Tools::iconv('utf-8', self::encoding(), $delivery_address->lastname), 0, 'L');
   $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $invoice_address->firstname).' '.Tools::iconv('utf-8', self::encoding(), $invoice_address->lastname), 0, 'L');
   $pdf->Ln(5);
   */




>> Pour Ajouter "tél" et "Cell" devant les num. de téléphone

Remplacer (vers ligne 420)

    $pdf->Cell($width, 10, $delivery_address->phone, 0, 'L');
   if (!empty($delivery_address->phone_mobile))
   {
       $pdf->Ln(5);
       $pdf->Cell($width, 10, $delivery_address->phone_mobile, 0, 'L');
   }



par

$pdf->Cell($width, 10, 'Tél. '.$delivery_address->phone, 0, 'L');
   if (!empty($delivery_address->phone_mobile))
   {
       $pdf->Ln(5);
       $pdf->Cell($width, 10, 'Cell. '.$delivery_address->phone_mobile, 0, 'L');
   }



...

Link to comment
Share on other sites

Dans le Back-office, affichage des clients, ajouter le nom de la société

admin/tabs/adminCustomers.php

>> DANS LA LISTE DES CLIENTS
Nom entreprise à la place du genre (féminin/masculin), suppression de l'affichage de l'âge

remplacer (vers ligne 28 )

$this->_select = '(YEAR(NOW()) - YEAR(birthday)) as age, (
           SELECT c.date_add FROM '._DB_PREFIX_.'guest g
           LEFT JOIN '._DB_PREFIX_.'connections c ON c.id_guest = g.id_guest
           WHERE g.id_customer = a.id_customer
           ORDER BY c.date_add DESC
           LIMIT 1
       ) as connect';
$genders = array(1 => $this->l('M'), 2 => $this->l('F'), 9 => $this->l('?'));
$this->fieldsDisplay = array(
'id_customer' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
'id_gender' => array('title' => $this->l('Gender'), 'width' => 25, 'align' => 'center', 'icon' => array(1 => 'male.gif', 2 => 'female.gif', 'default' => 'unknown.gif'), 'orderby' => false, 'type' => 'select', 'select' => $genders, 'filter_key' => 'a!id_gender'),
'lastname' => array('title' => $this->l('Last Name'), 'width' => 80),
'firstname' => array('title' => $this->l('First name'), 'width' => 60),
'email' => array('title' => $this->l('E-mail address'), 'width' => 120, 'maxlength' => 19),
'age' => array('title' => $this->l('Age'), 'width' => 30, 'search' => false),
'active' => array('title' => $this->l('Enabled'), 'width' => 25, 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false),
'newsletter' => array('title' => $this->l('News.'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'icon' => array(0 => 'disabled.gif', 1 => 'enabled.gif'), 'orderby' => false),
'optin' => array('title' => $this->l('Opt.'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'icon' => array(0 => 'disabled.gif', 1 => 'enabled.gif'), 'orderby' => false),
'date_add' => array('title' => $this->l('Registration'), 'width' => 60, 'type' => 'date'),
'connect' => array('title' => $this->l('Connection'), 'width' => 60, 'type' => 'datetime', 'search' => false));




par


$this->_select = '(YEAR(NOW()) - YEAR(birthday)) as age, (
       SELECT c.date_add FROM '._DB_PREFIX_.'guest g
       LEFT JOIN '._DB_PREFIX_.'connections c ON c.id_guest = g.id_guest
       WHERE g.id_customer = a.id_customer
       ORDER BY c.date_add DESC
       LIMIT 1
   ) as connect';

   // Ajout pour extraire le nom de la société
   $this->_select = '(SELECT d.company FROM '._DB_PREFIX_.'address d
       WHERE d.id_customer = a.id_customer
       LIMIT 1
   ) as company';


   $genders = array(1 => $this->l('M'), 2 => $this->l('F'), 9 => $this->l('?'));
    $this->fieldsDisplay = array(
   'id_customer' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
   'company' => array('title' => $this->l('company'), 'width' => 125),
   'lastname' => array('title' => $this->l('Last Name'), 'width' => 80),
   'firstname' => array('title' => $this->l('First name'), 'width' => 20),
   'email' => array('title' => $this->l('E-mail address'), 'width' => 90, 'maxlength' => 19),
   'active' => array('title' => $this->l('Enabled'), 'width' => 25, 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false),
   'newsletter' => array('title' => $this->l('News.'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'icon' => array(0 => 'disabled.gif', 1 => 'enabled.gif'), 'orderby' => false),
   'optin' => array('title' => $this->l('Opt.'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'icon' => array(0 => 'disabled.gif', 1 => 'enabled.gif'), 'orderby' => false),
   'date_add' => array('title' => $this->l('Registration'), 'width' => 60, 'type' => 'date'),
   'connect' => array('title' => $this->l('Connection'), 'width' => 60, 'type' => 'datetime', 'search' => false));

Link to comment
Share on other sites

>> FICHE CLIENT EN DETAIL
Nom de l'entreprise en haut

remplacer (vers ligne 123)

echo '

id.'&token;='.$this->token.'">
'.$customer->firstname.' '.$customer->lastname.'
id_gender == 2 ? 'female' : ($customer->id_gender == 1 ? 'male' : 'unknown')).'.gif" style="margin-bottom: 5px" />

email.'" style="text-decoration: underline; color: blue">'.$customer->email.'

';
Link to comment
Share on other sites

Dans le back-office,affichage des commandes, ajouter le nom de la société

admin/tabs/AdminOrders.php

>> DANS LA LISTE DES COMMANDES
Nom entreprise à côté du nom du contact, suppression du prénom

remplacer (vers la ligne 26)

    $this->_select = '
   a.id_order AS id_pdf,
   CONCAT(LEFT(c.`firstname`, 1), \'. \', c.`lastname`) AS `customer`,
   osl.`name` AS `osname`,
   os.`color`,
   IF((SELECT COUNT(so.id_order) FROM `'._DB_PREFIX_.'orders` so WHERE so.id_customer = a.id_customer AND so.valid = 1) > 1, 0, 1) as new,
   (SELECT COUNT(od.`id_order`) FROM `'._DB_PREFIX_.'order_detail` od WHERE od.`id_order` = a.`id_order` GROUP BY `id_order`) AS product_number';
   $this->_join = 'LEFT JOIN `'._DB_PREFIX_.'customer` c ON (c.`id_customer` = a.`id_customer`)
   LEFT JOIN `'._DB_PREFIX_.'order_history` oh ON (oh.`id_order` = a.`id_order`) 
   LEFT JOIN `'._DB_PREFIX_.'order_state` os ON (os.`id_order_state` = oh.`id_order_state`)
   LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = '.intval($cookie->id_lang).')';
       $this->_where = 'AND oh.`id_order_history` = (SELECT MAX(`id_order_history`) FROM `'._DB_PREFIX_.'order_history` moh WHERE moh.`id_order` = a.`id_order` GROUP BY moh.`id_order`)';

   $statesArray = array();
   $states = OrderState::getOrderStates(intval($cookie->id_lang));

   foreach ($states AS $state)
       $statesArray[$state['id_order_state']] = $state['name'];
        $this->fieldsDisplay = array(
       'id_order' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
       'new' => array('title' => $this->l('New'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'filter_key' => 'new', 'tmpTableFilter' => true, 'icon' => array(0 => 'blank.gif', 1 => 'news-new.gif'), 'orderby' => false),
       'customer' => array('title' => $this->l('Customer'), 'widthColumn' => 160, 'width' => 140, 'filter_key' => 'customer', 'tmpTableFilter' => true),
       'total_paid' => array('title' => $this->l('Total'), 'width' => 70, 'align' => 'right', 'prefix' => '', 'suffix' => '', 'price' => true, 'currency' => true),
       'payment' => array('title' => $this->l('Payment'), 'width' => 100),
       'osname' => array('title' => $this->l('Status'), 'widthColumn' => 250, 'type' => 'select', 'select' => $statesArray, 'filter_key' => 'os!id_order_state', 'filter_type' => 'int', 'width' => 200),
       'date_add' => array('title' => $this->l('Date'), 'width' => 90, 'align' => 'right', 'type' => 'datetime', 'filter_key' => 'a!date_add'),
       'id_pdf' => array('title' => $this->l('PDF'), 'callback' => 'printPDFIcons', 'orderby' => false, 'search' => false));
       parent::__construct();



par

$this->_select = '
       a.id_order AS id_pdf,
       CONCAT(LEFT(c.`firstname`, 1), \'. \', c.`lastname`) AS `customer`,
       osl.`name` AS `osname`,
       ad.`company` AS `company`,
       os.`color`,
       IF((SELECT COUNT(so.id_order) FROM `'._DB_PREFIX_.'orders` so WHERE so.id_customer = a.id_customer AND so.valid = 1) > 1, 0, 1) as new,
       (SELECT COUNT(od.`id_order`) FROM `'._DB_PREFIX_.'order_detail` od WHERE od.`id_order` = a.`id_order` GROUP BY `id_order`) AS product_number';
        $this->_join = 'LEFT JOIN `'._DB_PREFIX_.'customer` c ON (c.`id_customer` = a.`id_customer`)
        LEFT JOIN `'._DB_PREFIX_.'order_history` oh ON (oh.`id_order` = a.`id_order`) 
       LEFT JOIN `'._DB_PREFIX_.'address` ad ON (ad.`id_customer` = a.`id_customer`) 
       LEFT JOIN `'._DB_PREFIX_.'order_state` os ON (os.`id_order_state` = oh.`id_order_state`)
       LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = '.intval($cookie->id_lang).')';
       $this->_where = 'AND oh.`id_order_history` = (SELECT MAX(`id_order_history`) FROM `'._DB_PREFIX_.'order_history` moh WHERE moh.`id_order` = a.`id_order` GROUP BY moh.`id_order`)';

   $statesArray = array();
   $states = OrderState::getOrderStates(intval($cookie->id_lang));

   foreach ($states AS $state)
       $statesArray[$state['id_order_state']] = $state['name'];


    $this->fieldsDisplay = array(
   'id_order' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
   'new' => array('title' => $this->l('New'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'filter_key' => 'new', 'tmpTableFilter' => true, 'icon' => array(0 => 'blank.gif', 1 => 'news-new.gif'), 'orderby' => false),
   'company' => array('title' => $this->l('company'), 'widthColumn' => 160),
   'total_paid' => array('title' => $this->l('Total'), 'width' => 70, 'align' => 'right', 'prefix' => '', 'suffix' => '', 'price' => true, 'currency' => true),
   'payment' => array('title' => $this->l('Payment'), 'width' => 100),
   'osname' => array('title' => $this->l('Status'), 'widthColumn' => 250, 'type' => 'select', 'select' => $statesArray, 'filter_key' => 'os!id_order_state', 'filter_type' => 'int', 'width' => 200),
   'date_add' => array('title' => $this->l('Date'), 'width' => 90, 'align' => 'right', 'type' => 'datetime', 'filter_key' => 'a!date_add'),
   'id_pdf' => array('title' => $this->l('PDF'), 'callback' => 'printPDFIcons', 'orderby' => false, 'search' => false));
   parent::__construct();



...

Link to comment
Share on other sites

>> FICHE CLIENT EN DETAIL
Nom de l'entreprise en haut

remplacer (vers la ligne 425)

echo '
'.$customer->firstname.' '.$customer->lastname.' '.$this->l('#').sprintf('d', $order->id).((($currentState->invoice OR $order->invoice_number) AND count($products)) ? ' - id.'&pdf;">l('View invoice').'" title="'.$this->l('View invoice').'" />' : '').(($currentState->delivery OR $order->delivery_number) ? ' - delivery_number.'">l('View delivery slip').'" title="'.$this->l('View delivery slip').'" />' : '').' - l('Print order').'" title="'.$this->l('Print order').'" />';
echo '';



par

echo '
'.$addressDelivery->company.' '.$this->l('#').sprintf('d', $order->id).((($currentState->invoice OR $order->invoice_number) AND count($products)) ? ' - id.'&pdf;">l('View invoice').'" title="'.$this->l('View invoice').'" />' : '').(($currentState->delivery OR $order->delivery_number) ? ' - delivery_number.'">l('View delivery slip').'" title="'.$this->l('View delivery slip').'" />' : '').' - l('Print order').'" title="'.$this->l('Print order').'" />';
echo '';
echo '
Contact : '.$customer->firstname.' '.$customer->lastname.'';




et dans le bloc "informations clients"


remplacer (vers ligne 469 )

    echo '



 '.$this->l('Customer information').'
id.'&viewcustomer;&token;='.Tools::getAdminToken('AdminCustomers'.intval(Tab::getIdFromClassName('AdminCustomers')).intval($cookie->id_employee)).'"> '.$customer->firstname.' '.$customer->lastname.' ('.$this->l('#').$customer->id.')

   (email.'">'.$customer->email.')

'.$this->l('Account registered:').' '.Tools::displayDate($customer->date_add, intval($cookie->id_lang), true).'

           '.$this->l('Valid orders placed:').' '.$customerStats['nb_orders'].'

           '.$this->l('Total paid since registration:').' '.Tools::displayPrice($customerStats['total_orders'], $currency, false, false).'

';



par

echo '



 '.$this->l('Customer information').'
id.'&viewcustomer;&token;='.Tools::getAdminToken('AdminCustomers'.intval(Tab::getIdFromClassName('AdminCustomers')).intval($cookie->id_employee)).'"> '.$addressDelivery->company.' ('.$this->l('#').$customer->id.')

   (email.'">'.$customer->email.')

'.$this->l('Account registered:').' '.Tools::displayDate($customer->date_add, intval($cookie->id_lang), true).'

           '.$this->l('Valid orders placed:').' '.$customerStats['nb_orders'].'

           '.$this->l('Total paid since registration:').' '.Tools::displayPrice($customerStats['total_orders'], $currency, false, false).'

';







Maintenant le travail reste à faire pour ajouter le numéro intracommunautaire, et accessoirement le nom de l'entreprise dans le FRONT-OFFICE.

Quelqu'un s'est-il penché sur mon post #6 ? Ce serait pas mal comme fonctionnalité.

Amicalement

Link to comment
Share on other sites

Heuuu

ça m'a l'air super compliqué comme modif ?

Voilà ce que j'ai réussi à faire du module PDF :

Notez en passant :
- La bonne position Facture / Livraison en fonction du courrier ;)

- La position de la TVA Client

- La suppression de la notification Facture/Livraison en lieu et place de l'adresse (le facteur s'en fiche !)

- Le rappel du numéro de facture sous le numéro de commande (utile pour les sociétés)

- La suppression des numéros de téléphones (Le client connait les siens Pffff)

Cordialement.

12179_JWUM73gNMXKjoZ1btqW7_t

12180_KDNdx8vWuwC1ZhbV6rDh_t

12181_pKC1lFnvC64rznfEJa3X_t

Link to comment
Share on other sites



>> Pour enlever nom et prénom dans l'adresse client (n'y reste que le nom de la société)

...


Pas top de virer le nom et prénom du destinataire .... c'est mon avis ;)

Plus vite ne plus les rendre obligatoires dans la zone de saisie d'adresse de livraison.

Cordialement.
Link to comment
Share on other sites

Ok, j'ai l'impression qu'il va falloir faire un test plus compliqué:

La saisie du N° de TVA ne sa fait que lors de la partie authentification, ok ?

Après en, théorie cette adresse devient une adresse de facturation, celui qui a passé commande donc !

Donc à lui de stipuler le N° de TVA de L'adresse de facturation, le receptionnaire de la facture ! (je me répète !)

En théorie, si il souhaite faire livrer sa commande ailleurs, chez un de ses clients, ou dans un de ses sites, il ne pourra plus saisir de n° de TVA, ça tombe bien, car on s'en fiche.

En cas de problème on pourra reprendre les infos via la saisie du n* de tva dans les adresses de livraisons.

Ce qui est ballot dans ce concept, c'est que si 3 clients d'une même société souhaite enegister des commandes, ils vont devoir renseigner tois fois la m^me chose !!!

Ballot !

Bref, pour résumer, je te propose de faire un teste sur le contenant de tva :

   if (!empty($invoice_address->vatnumber))
   {
     $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), 'TVA Intracommunautaire client : ' . $invoice_address->vatnumber), 0, 'L');
   }
   if (!empty($delivery_address->vatnumber))
   {
     $pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), 'TVA Intracommunautaire client : ' . $delivery_address->vatnumber), 0, 'L');
   }



Le risque c'est qu'il en affiche Deux .... ;-P

Cordialement.

Link to comment
Share on other sites

Bonjour

bon, j'étais occupée pendant quelques jours sur autre chose, mais me revoilà pour un petit tour sur ce post..

Pas top de virer le nom et prénom du destinataire …. c’est mon avis

Plus vite ne plus les rendre obligatoires dans la zone de saisie d’adresse de livraison.


Les propositions que je fais ne sont qu'optionnelles.
Pour ma part je préfère enlever le nom du contact sur les factures, car c'est à une entreprise que je facture, pas à un individu (sauf pour de l'entreprise uni-personnelle ou le nom du responsable peut-être important). Après, c'est bien sûr à chacun de voir ce qui lui convient le mieux.
Par contre, je le rends obligatoire dans ma zone de saisie d'adresse car dans mon back-office, il me parait important de savoir à qui j'ai affaire quand je téléphone à l'entreprise ou que j'envoie un fax... et là oui le nom d'un contact est utile pour rendre les relations commerciales quand même plus humaines.

Ta modification concernant la TVA ne fonctionne pas sur ma version ???


Ah bon ? Bizarrerie ou bug, alors ?

Ce qui est ballot dans ce concept, c’est que si 3 clients d’une même société souhaite enegister des commandes, ils vont devoir renseigner tois fois la m^me chose !!!


Dans mon idée de personnalisation du site orientée vente exclusivement aux "entreprises", je ne m'adresse pas vraiment à 3 clients INDIVIDUELS d'une même société qui commanderaient indépendamment.
Je vois plutôt mes modifs comme adaptée à de la vente à une entreprise qui n'ouvrirait qu'un seul compte client pour commander sur le site.
J'ai travaillé dans beaucoup d'entreprises et en général, même au niveau comptable, c'est plus simple de faire comme ça que d'ouvrir autant de comptes auprès d'un fournisseur qu'il y a d'employés différents qui lui passent commande. La raison en est simple : difficile dans ce cas de suivre les comptes et de savoir où on en est dans les règlements (dans une autre vie, j'ai été comptable pendant 10 ans, beurk).
La commande propre à chaque service, ça se fait bien sûr, mais vraiment dans les très grosses boites ou les administrations - avec pas mal de comptables derrière.
Enfin à ce qu'il me semble et à ce que j'ai vécu pendant 18 ans dans plusieurs boites.

Ce qui est ballot dans ce concept, c’est que si 3 clients d’une même société souhaite enegister des commandes, ils vont devoir renseigner tois fois la m^me chose !!!


Dans le dernier cas évoqué (commandes différentes par services par exemple) et si après tout c'est le choix de l'entreprise, alors je crains que oui. Effectivemment c'est ballot, bien d'accord avec toi !

Ma méthode, améliorable j'en suis bien consciente, essaie juste d'intégrer une notion "vente aux pros" assez légère sous Prestashop dans les actuelles versions. Peut-être que les futures versions le prendront davantage en compte ?

Malheureusement je fais juste un site pour des amis qui vont vendre de la photo pro uniquement à des agences de comm, j'ai très peu de temps pour ça et pour pousser davantage ma réflexion là-dessus. Mais grâce à ce post j'ai pu avancer, merci notamment à Bato et Stephan.






Quelqu’un s’est-il penché sur mon post #6 ? Ce serait pas mal comme fonctionnalité.
ça m’a l’air super compliqué comme modif ?



Pour quelqu'un qui maitrise la prog. objet et les classes en php - c'est pas mon cas snif - je ne pense pas.

Dans Address.php, au dessous de

private static $_idZones = array();
   private static $_idCountries = array();



1/ il faut introduire une requête qui récupère la zone depuis l'id_country.

2/ Si l'id_zone correspond à l'Europe alors

/** On rend obligatoire le champ Company, et pour l'Europe le champ vatnumber */
protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'company', 'vatnumber', 'address1', 'postcode', 'city');



3/ Sinon

/** On rend obligatoire le champ Company */
protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'company', 'address1', 'postcode', 'city');



Mais bon c'est tellement facile que je n'y arrive pas ! sic.

Amicalement,

Link to comment
Share on other sites

  • 2 months later...

Bonjour,
Tout d'abord Bravo pour votre Tutorial, vraiment c'est bien fait , sinon j'ai une autre idée que je veux bien savoir si c'est bien possible de la réaliser ,
le client à l'inscription aurra le choix entre un particulier ou bien une entreprise !
si le client coche entreprise alors il aurra un champ :
-Nom de la STE*
-Code TVA de la STE*
-Nom du contact de la STE*
-Prénom du contact de la STE*
-Adresse de la STE *
-Mot de passe : *
-Adresse Mail*
si le client coche particulier alors il aura les champs classique :
Civilité M. Mme
Prénom *
Nom *
E-mail *
Mot de passe *
Date de naissance

les Mêmes options dans le Back office si on veux ajouter un client "particulier ou entreprise .
merci de m'aider à faire ce modifs

Link to comment
Share on other sites

  • 3 months later...

allo
tres interessant comme tuto je vais essayé sur 1.3.1

par contre j'ai inclue un choix dans mon authentification.tpl : public ou professionnel. comment faire pour que le bloc company qui comprend "nom de société, Siret, TVA IC, telephone" n'apparaissent que si professionnel est coché ?

merci

Link to comment
Share on other sites

Bonjour
j'ai suivi l'excellent tuto pour ajouter un champ TVA : pas de difficulté.
Sauf dans le back office : l'info n'est pas récupérée (ni dans la base de donnée par la même occasion).
J'ai lu que cette question a été posée déjà, mais n'ai pas vu la réponse.
Merci de vos lumières !

Link to comment
Share on other sites

Quelqu’un s’est-il penché sur mon post #6 ? Ce serait pas mal comme fonctionnalité.

ça m’a l’air super compliqué comme modif ?

Pour quelqu’un qui maitrise la prog. objet et les classes en php – c’est pas mon cas snif – je ne pense pas.

Dans Address.php, au dessous de

private static $_idZones = array();
private static $_idCountries = array();

1/ il faut introduire une requête qui récupère la zone depuis l’id_country.

2/ Si l’id_zone correspond à l’Europe alors
/** On rend obligatoire le champ Company, et pour l'Europe le champ vatnumber */
protected $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'company', 'vatnumber', 'address1', 'postcode', 'city');

3/ Sinon
/** On rend obligatoire le champ Company */
protected $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'company', 'address1', 'postcode', 'city');

Mais bon c’est tellement facile que je n’y arrive pas ! sic.

Amicalement,


J'aimerai bien réussir également à installer cette fonctionnalité. Quelqu'un y est-il arrivé?
Link to comment
Share on other sites

J'ai pu contourner un peu le problème en utilisant le champ DNI de la version 1.3 et en sélectionnant un par un les pays de la zone UE (BO>transports>pays)

Il suffit de faire modifier le critère de validation dans validate.php du champ pour l'adapter au format de numéro TVA.
Par contre, je n'arrive pas à rendre obligatoire ce champ sans provoquer un souci pour les pays qui n'ont pas à saisir ce champ à l'inscription, lors de la gestion dans le back-office

le champ dni peut être incorporé facilement sur la fiche client admin>tabs>admincustomers.php vers la ligne 427 après la ligne

'.$this->l('Customer').'



'.$this->l('N° TVA:').' 

                   <input type="text" size="20" name="dni" value="'.htmlentities($this->getFieldValue($obj, 'dni'), ENT_COMPAT, 'UTF-8').'" style="text-transform: uppercase;" /> 
'.$this->l('Invalid characters:').' !<>,;?=+()@#"�{}_$%: 





Bref besoin d'aide pour trois choses:

- permettre le caractère obligatoire du champ dni pour la zone ue , sans que ce le soit pour les autres pays

- ajouter le champ société sur la fiche clients dans le BO

- ajouter le numéro de TVA (issu du champ dni) sur la facture

Link to comment
Share on other sites

  • 1 month later...
  • 1 month later...

Bonjour,

Perso, tout ce que je voulais faire est d'ajouter le champs Compagnie lors de l'inscription et que celui ci ne soit pas obligatoire.

J'ai donc ajouté dans identity.tpl cette ligne

    

{l s='Company'}
               <input type="text" class="text" id="company" name="company" value="{if isset($smarty.post.company)}{$smarty.post.company}{/if}" />



Dans authentication.tpl le bout de code pour la compagnie

    {l s='Your personal information'}


{l s='Company'}
               <input type="text" class="text" id="company" name="company" value="{if isset($smarty.post.company)}{$smarty.post.company}{/if}" />



Je n'ai rien ajouté dans la base de donnée puisque compagnie existe déjà.

J'ai bien les champs qui apparaissent dans le front office sauf que lorsque je click sur Mes informations personnelles le nom de la compagnie que j'avais inscrit n'est pas là.


Qu'est-ce que j'ai fait de pas correct ou qu'est ce que j'ai oublié?

Une fois que ce nom restera affiché dans les informations personnelles est ce que le nom de la compagnie va s'imprimer automatiquement sur la facture en pdf du côté Facturation ou bien je vais devoir ajouter quelque chose?



Un gros merci de votre aide

Link to comment
Share on other sites

  • 4 months later...

Hello,

Ce sujet est un peu vieux , mais je vous fait profiter de mon expérience.
Je viens d'ajouter la gestion de la TVA intracom sur une version 1.3.2

1 - j'ai préféré ajouter ces infos au niveau du client ( class customer , table customer ) plutôt qu'au niveau des adresses (pour moi 1 client = 1 société et 1 numéro de TVA intracom )

2 - j'ai également ajouté une vérification sur le numéro de TVA via l'API soap de europa.eu

pour ca il faut 2 modifs dans la class Customer ( ou celle qui gère votre champ TVA intracom )

ajouté une clé au tableau $fieldsValidate ( propriété de la classe )

protected     $fieldsValidate = array(
    'secure_key' => 'isMd5',
    'lastname'   => 'isName',
    'firstname'  => 'isName',
    'email'      => 'isEmail',
    'passwd'     => 'isPasswd',
    'id_gender'  => 'isUnsignedId',
    'birthday'   => 'isBirthDate',
    'newsletter' => 'isBool',
    'optin'      => 'isBool',
    'active'     => 'isBool',
    'dni'        => 'isDni',
    // ajout du check sur le num de TVA
    'vatnumber'  => 'isVatNumber',
  );




ensuite ajouter cette méthode static à la classe Validate.php

 /**
  * Check the validity of a VAT intracom number against
  * europa.eu registry
  *
  * @param string $data
  * @return boolean
  */
 static public function isVatNumber($data)
 {
   $wdsl = 'http://ec.europa.eu/taxation_customs/vies/services/checkVatService?wsdl';

   $value   = preg_replace("/[^A-Z0-9]/","", strtoupper($data));
   $country = substr($value,0,2);
   $VAT     = substr($value, 2,strlen($value)-2);


   try {
     $soapClient = new SoapClient($wdsl);

     $params = array('countryCode' => $country,
                     'vatNumber'   => $VAT);

     $info = $soapClient->checkVat($params);
     if( $info->valid == 1 ) {
       return true;
     } 
   } catch (SoapFault $fault) {
     // a vous de voir comment vous voulez gérer le cas d'une erreur Soap
     // ici on ne fait rien  ca renvois false, ce qui peut être bloquant pour l'inscription
   }

   return false;

 }



bien sur pour que cela fonctionne vous devez avoir la librairie php_soap installé sur votre serveur.

Voilà en espérant que ca aidera certains d'entre vous.

Link to comment
Share on other sites

  • 3 weeks later...

Bonjour,

Ce hack soulève un autre problème plus important : http://www.prestashop.com/forums/viewthread/13996/discussion_generale/tva_pour_les_autres_pays_que_la_france/

Après divers recherche, je me suis rendu compte que le noyau du CMS finissait complètement déchiré, impliquant donc une probable impossibilité de faire suivre ces scripts dans les futures versions de PS.
J'ai fini par contacter PS France pour soulever le problème (Aout 2010).
On m'a répondu que la version 1.4 incluait cet oublie primordiale pour la stabilité du site (vente à l'étranger du moins)
Je me suis donc installer leur V1.4 bêta, et je ne vois toujours pas l'évolution.

Sur la base de ces tutos, peut-être faudrait-il envisager de créer un module complet?
Et attendre la version 1.4 pour être sur d'envisager cette dev spécifique.

Dans mon cas j'ai été obligé de créer un module devis (celui de J.Breux ne fonctionnait pas) pour mon client car cette fonctionnalité était primordiale pour sa vente de produits en B to B.
Donc site non fini depuis bientôt 6 mois à cause de broutilles que je ne veux pas gérer, car le principe d'un CMS est qu'il évolue pour améliorer ses bugs et fonctionnalités en utilisant des modules ou autres.
Donc j'ai planté mon client plus ou moins, qui attend une version stable de PS, tout comme je lui ai conseillé.
J'aurais pu aussi avoir en retour un procès au fesses, mais ces détails n'avaient pas été spécifiés lors de la signature du contrat, et mon client est vraiment quelqu'un de relax.

Tout récemment et par obligations, je me suis mis à Magento qui traite depuis longtemps ce type de problèmes.
Il intègre par défaut une palette de transporteurs (ups fedex chrono..), modules de paiement type Atos gratuits, gère le truc de TVA intra et le pro ou pas (configuration dans le back).
Il est vrai que beaucoup de fonctionnalité de ce CMS qui ne sont pas présentent par défaut, se retrouvent payante sur le store, et c'est bien dommage.
C'est leur politique pour rassurer le client, le développeur, la boite de com.
De plus, le nombre de réglages ont tendance à faire peur et on se demande dès fois comment tout ca peut tenir.
Gros mangeur de mémoire.

Prestashop à de l'avenir, il est a 2 doigts d'exploser, reste à voir ces détails.

Link to comment
Share on other sites

  • 2 months later...

bonjour a tous
cette modification pour faire apparaitre le nom de la company sur le BO order est tres bien, par contre me pose un probleme.
J'ai ajouter le nom company sans supprimer le prenom du client :

en ajoutant :

ligne 29 : ad.`company` AS `company`,

et aussi ligne 49 : 'company' => array('title' => $this->l('company'), 'widthColumn' => 160),

mais gros probleme cela multiplie les lignes de numéro commande et les commandes en affichage.

comment corriger ce probleme ?
Meri d'avance

Link to comment
Share on other sites

Bonjour voilà je rencontre un problème j'ai ajouter la tva intracom a la gestion de mes clients ainsi que lors de leur inscription, il ne me reste plus qu'a l'afficher sur la facture pdf mais moi j'ai opter pour le customer.php donc le tuto ici présent ne fonctionne pas dans mon cas et je suis très loin de maitriser la class fpdf .

Quelqu'un pourrait -il m'aider ?

En vous remerciant.

Cordialement Tchupa.

Link to comment
Share on other sites

Bonjour, je me permet de reposter car je n'ai toujours pas résolu mon problème, j'essaie d'afficher la tva intracom et le siret dans ma facture pdf j'ai donc ajouter ces lignes dans la facture à l'endroit qui convient, c'est à dire la ou je veux qu'ils apparaissent.

Mais petit soucis l'emplacement est correctement à l'édition de la facture mais les numéros ne s'affiche pas c'est vide!

/* ajout tva intracom */
$pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), 'N° de TVA:' . $delivery_address->vatnumber), 0, 'L');
$pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), 'N° de siret:' . $invoice_address->siret), 0, 'L');
$pdf->Ln(5); 



Ai je fais une erreur, aurais je oublier quelque chose?

En vous remerciant.

Cordialement Tchupa.

Link to comment
Share on other sites

  • 2 weeks later...
  • 1 month later...

Salut,

J'ai rajouté le champs company en obligatoire, chose qui fonctionne niquel, ensuite j'ai tenté d'ajouté le champs company dans l'onglet Client dans la BO, seulement lorsque je fait une recherche dans se champs (avec l'outil du filtre), j'ai une erreur SQL (Requête SQL invalide), il est impératif pour moi de pouvoir faire une recherche dans ce champs.

Voici mon code dans le fichier AdminCustomers.php:

       $this->_select = '(YEAR(CURRENT_DATE)-YEAR(`birthday`)) - (RIGHT(CURRENT_DATE, 5)            SELECT c.date_add FROM '._DB_PREFIX_.'guest g
           LEFT JOIN '._DB_PREFIX_.'connections c ON c.id_guest = g.id_guest
           WHERE g.id_customer = a.id_customer
           ORDER BY c.date_add DESC
           LIMIT 1
       ) as connect';

       // Ajout pour extraire le nom de la société
       $this->_select = '(SELECT d.company FROM '._DB_PREFIX_.'address d
           WHERE d.id_customer = a.id_customer
           LIMIT 1
       ) as company';

        $this->fieldsDisplay = array(
       'id_customer' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
       'lastname' => array('title' => $this->l('Last Name'), 'width' => 80),
       'firstname' => array('title' => $this->l('First name'), 'width' => 60),
       'company' => array('title' => $this->l('Company'), 'length' => 21),
       'age' => array('title' => $this->l('Age'), 'width' => 30, 'search' => false),
       'active' => array('title' => $this->l('Enabled'), 'width' => 25, 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false),
       'newsletter' => array('title' => $this->l('News.'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'icon' => array(0 => 'disabled.gif', 1 => 'enabled.gif'), 'orderby' => false),
       'date_add' => array('title' => $this->l('Registration'), 'width' => 60, 'type' => 'date'),
       'connect' => array('title' => $this->l('Connection'), 'width' => 60, 'type' => 'datetime', 'search' => false));



J'ai viré les champs email, gender et optinqui ne me sont pas utiles.


Merci d'avance pour l'aide.

Cordialement.

Link to comment
Share on other sites

Salut,

Bon bin j'ai trouvé la réponse à mon soucis, il faut donc rajouté ce bout de code à la ligne << 'company' => array >> etc...

'filter_key' => 'company', 'tmpTableFilter' => true




ce qui donne donc:

'company' => array('title' => $this->l('Company'), 'length' => 21, 'filter_key' => 'company', 'tmpTableFilter' => true),




Voilà, je le met ici au cas où ça puisse aider certaines personnes

Link to comment
Share on other sites

  • 1 month later...
  • 4 weeks later...
Non je ne sais pas, ma question etait d'ordre structurel. Pourquoi stocker ce champ dans les adresses. Une société = un numero de tva, hors un client peut avoir plusieurs adresses.

Merci.


Mais un client n'es pas spécialement = à une société. Tu pourrais très bien effectuer des commandes en ton nom propre ET en celui de ton entreprise (c'est mon cas). Ou en ton nom propre et en celui de ton employeur (un ami...). Quel intérêt? Ha ben ca si Prestashop savait gérer la TVA intra communautaire correctement, ca aurait vraiment son intérêt. J'explicite: en mon nom propre, quand je commande en France, je paye la TVA française. Si je commande au nom de mon entreprise, non. Maintenant il y a certaines boutiques (genre... du lettrage/stickers) ou tu ne peux pas tout faire rentrer dans tes frais, car certains produits sont d'office pour un usage non professionnel.
Link to comment
Share on other sites

  • 9 months later...

bonjour a tous

cette modification pour faire apparaitre le nom de la company sur le BO order est tres bien, par contre me pose un probleme.

J'ai ajouter le nom company sans supprimer le prenom du client :

 

en ajoutant :

 

ligne 29 : ad.`company` AS `company`,

 

et aussi ligne 49 : 'company' => array('title' => $this->l('company'), 'widthColumn' => 160),

 

mais gros probleme cela multiplie les lignes de numéro commande et les commandes en affichage.

 

comment corriger ce probleme ?

Meri d'avance

 

Bonjour,

 

Je reviens sur ce problème après pas mal de temps, mais y a-t-il eu une solution, car j'ai le même problème.

 

Merci

Link to comment
Share on other sites

  • 4 weeks later...

Bonjour,

 

Je fais revivre le sujet car j'ai essayé d'utiliser tout ce joli code pour afficher le nom de l'entreprise dans le module "Blockuserinfo" en haut des pages… mais après plusieurs essais je comprends vraiment rien. Voila le code ajouter le php :

 

public function hookTop($params)
{
 $this->_select = '(SELECT d.company FROM '._DB_PREFIX_.'address d
    WHERE d.id_customer = a.id_customer
    LIMIT 1
   ) as company';

 if (!$this->active)
  return;
 global $smarty, $cookie, $cart, $company ;
 $smarty->assign(array(
  'cart' => $cart,
  'company' => $company,
  'cart_qties' => $cart->nbProducts(),
  'logged' => $cookie->isLogged(),
  'customerName' => ($cookie->logged ? $cookie->customer_firstname.' '.$cookie->customer_lastname : false),
  'firstName' => ($cookie->logged ? $cookie->customer_firstname : false),
  'lastName' => ($cookie->logged ? $cookie->customer_lastname : false),
  'order_process' => Configuration::get('PS_ORDER_PROCESS_TYPE') ? 'order-opc' : 'order'
 ));
 return $this->display(__FILE__, 'blockuserinfo.tpl');
}

 

et dans le tpl :

  <span>{$company} - {$cookie->customer_firstname} {$cookie->customer_lastname}</span>

 

Voilà si quelqu'un arrive à me le corriger se serait cool…

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...