bato Posted August 28, 2009 Share Posted August 28, 2009 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 sauvegardeNous 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 More sharing options...
bato Posted August 28, 2009 Author Share Posted August 28, 2009 3. /admin/tabs/AdminAddresses.phpCherchez : 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.phpCherchez : $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 MySQLOuvrez phpmyadmin. cliquez sur la table ps_address à gauchedans le bas de la page Ajoutez un champ après "company" (liste déroulante) Champ : vatnumberType : VARCHARTaille/Valeurs : 20 (le numéro que vous avez choisi)Null : nullValeur par défaut : NULL et voilà !6. Traductionvous 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 More sharing options...
bato Posted August 28, 2009 Author Share Posted August 28, 2009 c'est un tuto tout frais, je me suis relu plusieurs fois mais on est jamais l'abri d'une coquille, si vous en remarquez une merci de me le faire savoir afin que ça ne fausse pas le tuto.Mercibato Link to comment Share on other sites More sharing options...
rensea Posted September 5, 2009 Share Posted September 5, 2009 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 More sharing options...
bato Posted September 5, 2009 Author Share Posted September 5, 2009 oui je l'ai rédigé à partir de la version 1.2pour 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 More sharing options...
rensea Posted September 5, 2009 Share Posted September 5, 2009 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 More sharing options...
fabbea Posted September 21, 2009 Share Posted September 21, 2009 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), alorsprotected $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 More sharing options...
stephan Posted September 22, 2009 Share Posted September 22, 2009 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 More sharing options...
fabbea Posted September 23, 2009 Share Posted September 23, 2009 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 More sharing options...
stephan Posted September 23, 2009 Share Posted September 23, 2009 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 More sharing options...
fabbea Posted September 23, 2009 Share Posted September 23, 2009 Quelle réactivité !Oui, bonne idée, je vais essayer de jeter un oeil à ce fichier, ça m'intéresse.Amicalement Link to comment Share on other sites More sharing options...
stephan Posted September 23, 2009 Share Posted September 23, 2009 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 More sharing options...
fabbea Posted September 23, 2009 Share Posted September 23, 2009 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 commanderemplacer (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éphoneRemplacer (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 More sharing options...
fabbea Posted September 23, 2009 Share Posted September 23, 2009 Dans le Back-office, affichage des clients, ajouter le nom de la sociétéadmin/tabs/adminCustomers.php>> DANS LA LISTE DES CLIENTSNom entreprise à la place du genre (féminin/masculin), suppression de l'affichage de l'âgeremplacer (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 More sharing options...
stephan Posted September 23, 2009 Share Posted September 23, 2009 Tu peux nous mettre des copies d'écrans pour nous faire envie Cordialement. Link to comment Share on other sites More sharing options...
fabbea Posted September 23, 2009 Share Posted September 23, 2009 >> FICHE CLIENT EN DETAILNom de l'entreprise en hautremplacer (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 More sharing options...
fabbea Posted September 23, 2009 Share Posted September 23, 2009 Dans le back-office,affichage des commandes, ajouter le nom de la sociétéadmin/tabs/AdminOrders.php>> DANS LA LISTE DES COMMANDESNom entreprise à côté du nom du contact, suppression du prénomremplacer (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 More sharing options...
fabbea Posted September 23, 2009 Share Posted September 23, 2009 >> FICHE CLIENT EN DETAILNom de l'entreprise en hautremplacer (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 More sharing options...
stephan Posted September 23, 2009 Share Posted September 23, 2009 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. Link to comment Share on other sites More sharing options...
stephan Posted September 23, 2009 Share Posted September 23, 2009 >> 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 More sharing options...
stephan Posted September 23, 2009 Share Posted September 23, 2009 Ta modification concernant la TVA ne fonctionne pas sur ma version ???Je regarde si cela ne provient pas de l'endroit ou elle est stoquée Invoice ou delevry (moi c'est invoice)Pourquoi l'une et pas l'autre, bizarrerie ou BUG ? Link to comment Share on other sites More sharing options...
stephan Posted September 23, 2009 Share Posted September 23, 2009 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 More sharing options...
fabbea Posted September 28, 2009 Share Posted September 28, 2009 Bonjourbon, 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 More sharing options...
gatla2 Posted December 22, 2009 Share Posted December 22, 2009 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. MmePré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 More sharing options...
gatla2 Posted December 24, 2009 Share Posted December 24, 2009 Dommage qu"il n y' a personne intéressé par mon idée ni qui peut m'aider! je compte beaucoup sur vous les collègues ! Link to comment Share on other sites More sharing options...
macabann Posted April 6, 2010 Share Posted April 6, 2010 allotres interessant comme tuto je vais essayé sur 1.3.1par 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 More sharing options...
dombal Posted April 12, 2010 Share Posted April 12, 2010 Bonjourj'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 More sharing options...
SNA Informatique Posted April 14, 2010 Share Posted April 14, 2010 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 deprivate 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 More sharing options...
SNA Informatique Posted April 20, 2010 Share Posted April 20, 2010 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 More sharing options...
Rorschach_ Posted May 31, 2010 Share Posted May 31, 2010 Super tuto merci.Je n'ai pas trouvé la modif pour la parti modification de l'adresse dans le compte client. Link to comment Share on other sites More sharing options...
France Posted July 18, 2010 Share Posted July 18, 2010 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 More sharing options...
manmachine Posted December 16, 2010 Share Posted December 16, 2010 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.21 - 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 More sharing options...
surflibre Posted January 5, 2011 Share Posted January 5, 2011 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 More sharing options...
jp77 Posted March 10, 2011 Share Posted March 10, 2011 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 More sharing options...
Tchupa Posted March 14, 2011 Share Posted March 14, 2011 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 More sharing options...
Tchupa Posted March 17, 2011 Share Posted March 17, 2011 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 More sharing options...
Tchupa Posted March 30, 2011 Share Posted March 30, 2011 Sa doit être un problème de variable non ? Link to comment Share on other sites More sharing options...
Geoff95 Posted May 6, 2011 Share Posted May 6, 2011 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 More sharing options...
Geoff95 Posted May 7, 2011 Share Posted May 7, 2011 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 More sharing options...
Gregory Roussac Posted June 16, 2011 Share Posted June 16, 2011 Bonjour à tous,Quelqu'un peut il expliquer pourquoi ce champ TVA intra communautaire est socké dans la table des adresses en PS 1.4 et non celle des clients ?Merci. Link to comment Share on other sites More sharing options...
Tchupa Posted June 16, 2011 Share Posted June 16, 2011 Je ne vois pas le champ TVA intra communautaire dans le formulaire d'inscription de la 1.4 tu peux me dire ou il est ?Merci.Cordialement tchupa. Link to comment Share on other sites More sharing options...
Gregory Roussac Posted June 16, 2011 Share Posted June 16, 2011 Bonjour,Il faut activer le module en BO et remplir la société en FO. Link to comment Share on other sites More sharing options...
Tchupa Posted June 16, 2011 Share Posted June 16, 2011 Ok ,merci mais c'est pas très intuitif pour le client le champ qui apparait seulement si tu mets le nom de la société.Par contre tu sais pas ci-celui apparait sur la facture? Link to comment Share on other sites More sharing options...
Gregory Roussac Posted June 16, 2011 Share Posted June 16, 2011 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. Link to comment Share on other sites More sharing options...
lanoix Posted July 12, 2011 Share Posted July 12, 2011 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 More sharing options...
AMS Project Posted April 17, 2012 Share Posted April 17, 2012 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 More sharing options...
AMS Project Posted May 9, 2012 Share Posted May 9, 2012 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 More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now