Jump to content

[OVERRIDE] [CLASS] Facture PDF améliorée pour PS1.4.x


Mellow

Recommended Posts

Petite question rapide : Peut-on faire en sorte que le PDF soit verrouillé/protégé afin d'éviter toute modification ?!

 

Oui, ce serait possible, via un script additionnel pour insérer la protection et crypter le document. Car qui dit protection dit cryptage, ce qui peut considérablement augmenter le temps nécessaire pour générer le fichier, et peut-être aussi sa taille...

 

Mais est-ce vraiment nécessaire ? Des milliers de site Prestashop (et autres...) fonctionnent depuis des années avec des factures pdf non protégés :huh:

Edited by Mellow (see edit history)
Link to comment
Share on other sites

  • 1 month later...

Bonjour Mellow,

Suite à une commande d'un client avec beaucoup d'articles, je me retrouve avec la section détail des taxes positionnée dans le pied de page (coordonnées de la société) à hauteur du numéro de page.

Est-ce un bug du fichier PDF.php de remplacement ou un bug de ma version Prestashop 1.4.3?

Link to comment
Share on other sites

Bonjour,

 

Je suppose que tu dois avoir plusieurs lignes de détails dans le pied de page, ce qui en augmente la taille en hauteur.

Il faudrait donc augmenter la marge de saut de page de la facture, qui par défaut est de 35mm

 

Au début de la fonction invoice() tu trouvera cette ligne

  	 $pdf->SetAutoPageBreak(true, 35);

Augmente le 35 en fonction de tes besoins.

 

Dans les coordonnées de la boutique, si tu as des retours à la ligne dans le champ "immatriculation", tu peux aussi réduire la taille du pied de page en les supprimant.

Link to comment
Share on other sites

  • 2 weeks later...
  • 3 weeks later...

Bonjour,

 

Je suis en train d'essayer de configurer cette classe sur une boutique de test en 1.4.4.1, j'ai essayé les différentes versions proposées mais j'ai un message d'erreur qui revient à chaque fois:

 

Fatal error: Cannot redeclare class PDF_PageGroupCore in /var/www/...../boutique/override/classes/PDF.php on line 87

 

Quelqu'un aurai une petite idée ??

Link to comment
Share on other sites

Je suis en train d'essayer de configurer cette classe sur une boutique de test en 1.4.4.1, j'ai essayé les différentes versions proposées mais j'ai un message d'erreur qui revient à chaque fois:

 

Bonjour,

D'après le message d’erreur il semblerait que tu utilise une version de remplacement dans le dossier /override/classes.

Pour PS1.4.4.x il faut copier la version de remplacement dans le dossier /classes (à la place de l'original) et ne rien mettre dans /override

 

Je n'ai pas testé sur PS1.4.4.1 mais sur 1.4.4.0 ça fonctionne très bien.

Link to comment
Share on other sites

Est t'il possible de rajouter le id client sur la facture et de le nommé N° client ?

 

Bonjour,

 

Oui, l'information est déjà présente il suffit de l'afficher.

Pour l'afficher dans l'en-tête, entre le N° de commande et la date :

Repérer ce code (dans a fonction header)

  	 $this->Cell(73, 5, self::l('Order #').' '.sprintf('%06d', self::$order->id), 0, 2, 'R');

et ajouter juste en dessous :

  	 $this->Cell(73, 5, self::l('Customer #').' '.sprintf('%06d', self::$order->id_customer), 0, 2, 'R');

 

Ensuite il faudra traduire "Customer #" par "N° Client :"

Link to comment
Share on other sites

On pourrez avoir ça en PS 1.5.x? S'il vous plait c'est très urgent.

 

Bonjour,

 

Je viens de répondre à ton message privé, mais comme je l'ai déjà dis ici, PS1.5 utilise un tout autre système pour la gestion des pdf.

Et même si en théorie ça devrait être plus facile de personnaliser les factures en 1.5, il m'est difficile de me lancer dans des modifs qui me prendraient pas mal de temps, étant donné que je n'utilise pas moi même PS1.5 :wacko:

Link to comment
Share on other sites

Salut,

 

J'utilise cette override PDF et je n'ai aucun soucis ! Je me répète mais c'est vraiment du bon boulot :D

 

Petite question, s'il on veut ajouter des mentions spécifiques tel que Les factures sont payables au comptant et les montants sont facturés nets sans escompte (...) ou encore tout le matériel vendu bénéficie de la garantie légale de conformité (...), il suffit de les écrire tel quel, dans le fichier, à l'endroit où l'on souhaite les faire apparaitre ?? Quitte à réduire la police de caractère..

 

Merci d'avance.

Link to comment
Share on other sites

Bonjour,

 

Il existe (à partir de PS1.4.7 je crois...) un champ "Texte Libre" dans le back office => commandes => factures.

Ce champ permet d'ajouter un texte relativement court et sur une seule ligne, qui sera affiché dans le footer des factures.

 

Mais tu peut aussi rajouter du texte à l'endroit que tu veux, en utilisant la syntaxe qui va bien, et en écrivant le texte en anglais pour éviter les problèmes d'accents (il faudra ensuite effectuer la traduction dans le back office)

Je crois que l'idéal c'est en fin de facture, juste après

   Hook::PDFInvoice($pdf, self::$order->id);

tu peux ajouter

   $pdf->Ln(5);
   $pdf->Cell(0, 4, self::l('Invoices are payable cash and amounts are billed net without discount'), 0, 1, 'C', 0);
   $pdf->Cell(0, 4, self::l('All material sold has the legal guarantee of conformity'), 0, 1, 'C', 0);

Link to comment
Share on other sites

@AdvanC3

 

Voici un override du template de facture invoice.tpl de PS1.5.4.0 à placer dans le dossier pdf de ton thème. Il permet l'affichage de l'écotaxe en dessous des prix des produits (sous le prix unitaire HT si le client est en affichage HT, sous le prix unitaire TTC si affichage TTC)

 

invoice.tpl.zip

(dézipper et copier invoice.tpl dans /themes/nom-du-theme/pdf/)

 

Ensuite il faudra aller dans le back office => Localisation => Traductions => Traductions des fichiers PDF, et traduire :

"include" par "dont"

"for ecotax" par "d'écotaxe"

 

Au passage je confirme que les modifications sont plus pratique sur PS1.5.x avec ce système de templates.

Edited by Mellow (see edit history)
Link to comment
Share on other sites

@AdvanC3

 

Voici un override du template de facture invoice.tpl de PS1.5.4.0 à placer dans le dossier pdf de ton thème. Il permet l'affichage de l'écotaxe en dessous des prix des produits (sous le prix unitaire HT si le client est en affichage HT, sous le prix unitaire TTC si affichage TTC)

 

invoice.tpl.zip

(dézipper et copier invoice.tpl dans /themes/nom-du-theme/pdf/)

 

Ensuite il faudra aller dans le back office => Localisation => Traductions => Traductions des fichiers PDF, et traduire :

"include" par "dont"

"for ecotax" par "d'écotaxe"

 

Au passage je confirme que les modifications sont plus pratique sur PS1.5.x avec ce système de templates.

 

MERCI!

 

C'est super!

Link to comment
Share on other sites

  • 2 weeks later...

@Mellow Je rencontre un problème d'arrondi sur des produits avec remise en %

 

Le prix unitaire en back office (page "Commande", cadre "Produits") et sur la facture pdf est différent de celui en front office.

 

Je m'explique avec plus de détails:

 

Produit au tarif de 8.95 TTC remise de 10% => 8.05 TTC front office / 8.06 TTC Prix unitaire sur back office et pdf.

 

Est-ce un bug de Prestashop v. 1.4.3 ?

Edited by Nutrinat (see edit history)
Link to comment
Share on other sites

@Nutrinat

 

Je n'ai pas pu reproduire le cas que tu mentionne, ni avec remise en % ni en valeur.

Tout au plus, il arrive parfois que le total TTC diffère de 1centime sur la facture (ça arrive aussi sur d'autres versions de PS) mais je n'ai jamais vu de différence entre front et back office .

 

La différence d'arrondi sur la facture s'explique parce qu'il y a recalcule, mais c'est rare et aléatoire, et ça n'est pas lié aux remises. Et avec le fichier d'origine on retrouve la même différence...

 

En tout cas, si le back office et la facture affichent les mêmes valeurs, il se peut que ça soit lié à ton thème...

Link to comment
Share on other sites

Bonjour,

Y'aurait t'il une manière d'insérer un texte en gras au milieu de la facture, comme "Notre boutique vous remercie de votre confiance et vous souhaite bonne réception"? Il serait placé au milieu de la facture entre le total et le pied de page (donc centré). Car je doit le faire hors prestashop pour chaque facture crée et ça m'est très pénible.

 

EDIT: Ah oui j'oubliai je suis sous presta 1.5.4. je sais que ce module n'est pas pour cette version, mais étant donné que vous êtes sur le sujet, je me dit que je pourrai peu être avoir cette réponse plus facilement.

:rolleyes:

Edited by mams13 (see edit history)
Link to comment
Share on other sites

Y'aurait t'il une manière d'insérer un texte en gras au milieu de la facture, comme "Notre boutique vous remercie de votre confiance et vous souhaite bonne réception"? Il serait placé au milieu de la facture entre le total et le pied de page (donc centré). Car je doit le faire hors prestashop pour chaque facture crée et ça m'est très pénible.

 

Bonjour,

Je crois que tu trouvera ton bonheur ici => http://www.prestasho...cture-pdf-plus/

Vas voir mon message à la fin de la page 2 du sujet, il y avait des petites choses à corriger... ;)

Link to comment
Share on other sites

Bonjour Mellow et Merci pour cette réponse, toujours aussi efficace.

 

Du coup, c'est presque parfait, j'ai simplement deux petits soucis de "mise en page" :)

 

Il existe (à partir de PS1.4.7 je crois...) un champ "Texte Libre" dans le back office => commandes => factures.

Ce champ permet d'ajouter un texte relativement court et sur une seule ligne, qui sera affiché dans le footer des factures.

 

Ce texte se trouve pile sur l'indication " Page 1/1" Du coup, la fin de ma phrase (relativement courte) chevauche l'indication "Page 1/1".

 

Je crois que l'idéal c'est en fin de facture, juste après

   Hook::PDFInvoice($pdf, self::$order->id);

tu peux ajouter

   $pdf->Ln(5);
   $pdf->Cell(0, 4, self::l('Invoices are payable cash and amounts are billed net without discount'), 0, 1, 'C', 0);
   $pdf->Cell(0, 4, self::l('All material sold has the legal guarantee of conformity'), 0, 1, 'C', 0);

 

Tout est bien inséré au bon endroit, par contre, mes phrases étant un peu plus longues, elles sortent à gauche et à droite de la factures. Celles-ci sont donc tronquées des deux cotés. Comment mettre en place un retour à la ligne automatique dans les marges (Justifié ou dans un cadre peu importe) ?

 

Merci d'avance pour ces réponses :)

 

EDIT : Je viens de m'apercevoir que lorsque l'adresse de facturation est différente de l'adresse de livraison, celle-ci n'a pas la même police et n'est pas encadrée. En renseignant une adresse test, il m'affiche simplement le contenu, sans l'encadré :/ Est-il possible de l'encadrer tout comme l'adresse de facturation ?

 

Encore merci.

Edited by presta'luv (see edit history)
Link to comment
Share on other sites

Bonjour,

 

Pour le texte libre du footer, c'est vraiment prévu pour un texte très court, alors il faut soit raccourcir le texte soit le mettre ailleurs...

 

Et justement, pour le mettre ailleurs autant utiliser le module indiqué dans le post #125 il fait la même chose que le code que j'avais donné, avec des options en plus et sans avoir à modifier du code.

mais pour les retours à la ligne tu peux aussi remplacer

	$pdf->Cell(0, 4, self::l('texte...........'), 0, 1, 'C', 0);

par

	$pdf->MultiCell(0, 4, self::l('texte...........'), 0, 'C', 0);

 

 

 

Pour les adresses, dans la fonction generateHeaderAddresses()

remplacer

  	 if ($addressType['invoice']['addressObject']->id != $addressType['delivery']['addressObject']->id) {
		$pdf->SetXY($pdf->GetX(), $pdf->GetY() +6);
		$pdf->SetFontSize(8);
		$pdf->Cell($width -2.4, 10, self::l('Delivery address'), 0, 'L');

		$pdf->SetXY($pdf->GetX(), $pdf->GetY() -6);
		$pdf->SetFontSize(10);
		$pdf->Cell($width, 10, self::l('Invoicing address'), 0, 'L');
  	 } else {

par

  	 if ($addressType['invoice']['addressObject']->id != $addressType['delivery']['addressObject']->id) {
		$pdf->SetFontSize(10);
		$pdf->Cell($width, 10, self::l('Delivery address'), 0, 'L');
		$pdf->Cell($width, 10, self::l('Invoicing address'), 0, 'L');
  	 } else {

 

et

		   	 if ($addressType['invoice']['addressObject']->id != $addressType['delivery']['addressObject']->id) {
					$pdf->SetXY($pdf->GetX(), $pdf->GetY() +3);
					$pdf->SetFontSize(8);
					$pdf->MultiCell($width, 3, $addressType[$type]['displayed'], 0, 'L', 0);
		   	 } else {

par

		   	 if ($addressType['invoice']['addressObject']->id != $addressType['delivery']['addressObject']->id) {
					$pdf->SetFontSize(10);
					$pdf->MultiCell(94, 4, $addressType[$type]['displayed'], 0, 'L', 0);
					$tibot = $pdf->GetY() + 2;
					$pdf->SetLineWidth(0.2);
					$pdf->SetDrawColor(150, 150, 150);
					$pdf->Rect(9, $titop +1 , 93, $tibot - $titop -1);
					$pdf->SetLineWidth(0.2);
		   	 } else {

 

Les deux adresses seront maintenant encadrées

  • Like 1
Link to comment
Share on other sites

Merci Mellow c'est carrément parfait !!

 

Pour le texte libre du footer, c'est vraiment prévu pour un texte très court, alors il faut soit raccourcir le texte soit le mettre ailleurs...

 

J'ai trouvé mieux, j'étais sur une police "courrier" très large et longue. En passant en helvetica, tout est rétréci et j'ai même pu rallonger ma phrase :)

 

Encore merci, du très bon boulot !

Link to comment
Share on other sites

  • 3 weeks later...

Bonjour,

 

Problème avec ton fichier logo

 

Je pense que tu as du remplacer ton fichier logo.jpg par un png transparent renommé en .jpg

ça marche bien en général dans les navigateurs, mais FPDF reconnais que c'est un png, et comme il ne gère pas la transparence alpha ça abouti à une erreur!

C'est ce qui me semble le plus probable...

 

Tu devrais définir un logo pour les factures (logo_invoice.jpg) en t'assurant que ce soit bien un vrai jpeg !

Link to comment
Share on other sites

  • 2 weeks later...

Hé bien voila, les fichiers ont été mis à jour avec maintenant la possibilité de régler la taille de la colonne Référence (ou de ne pas l'afficher du tout)

 

Pour les versions avec CGV il y avait un problème lors de l'édition de factures multiples, chaque factures était suivi des CGV. C'est maintenant corrigé, les cgv n'apparaissent que sur les factures individuelles.

 

Bonjour,

 

je ne trouve pas où agrandir la case de référence , car j'ai un souci , les références empiètent sur le prix unitaire, la facture devient illisible, je suis sur prestashop 1.4.10 et j'ai téléchargé le premier fichier.

 

Pourriez vous m'indiquer simplement la ligne correspondante afin que je puisse faire la modification ?

 

en vous remerciant

Link to comment
Share on other sites

salut,

 

il s'agit des lignes 47 et 48

$Invoice_Ref_Col = 20; // Facture : Valeur par defaut 20

$Delivery_Ref_Col = 30; // Livraison : Valeur par defaut 30

 

moi j'ai incrémenté de 10 les 2 lignes

 

$Invoice_Ref_Col = 30; // Facture : Valeur par defaut 20

$Delivery_Ref_Col = 40; // Livraison : Valeur par defaut 30

 

 

++

Edited by hphilg (see edit history)
  • Like 1
Link to comment
Share on other sites

salut,

 

il s'agit des lignes 47 et 48

$Invoice_Ref_Col = 20; // Facture : Valeur par defaut 20

$Delivery_Ref_Col = 30; // Livraison : Valeur par defaut 30

 

moi j'ai incrémenté de 10 les 2 lignes

 

$Invoice_Ref_Col = 30; // Facture : Valeur par defaut 20

$Delivery_Ref_Col = 40; // Livraison : Valeur par defaut 30

 

 

++

 

merci beaucoup, c'est impeccable !

j'ai réglé à 50 et 60 .

:rolleyes:

  • Like 1
Link to comment
Share on other sites

Pouvez-vous m'aider SVP à ajouter la condition suivante :

 

Si aucune taxe pour le transporteur alors ne pas afficher les montants TTC sur la facture (ou transformer TTC en HT)

 

OU

 

Si le Label Taxe du Pays n'est pas activé, ne pas afficher les montants TTC sur la facture (ou transformet TTC en HT)

 

Edited by caly16 (see edit history)
Link to comment
Share on other sites

  • 2 weeks later...
  • 3 weeks later...

Bonjour

 

Je viens de passer en 1.5.4.1, et forcement cela ne fonctionne pas sur cette version. Sur 1.4 cela m'à rendu un grand service.

 

Est il possible d'avoir une version pour 1.5. Car sur le forum j'ai trouvé ceci http://www.prestashop.com/forums/topic/202942-theme-template-de-facture-prestashop-15/ mais cela et moins poussé que ta version mais dans l'attente cela me convient.

 

Merci d'avance

Link to comment
Share on other sites

bonjour et merci pour ce module qui à l'air fort bien!

Je suis en version de PS 1.8 et malheureusement, quand j'upload le fichier zip "override-classes-pdf.php.zip" dans mon fichier FTP "ma-boutique/override/classes/", rien ne change....

pouriez-vous m'éclairer?

Merci à vous

Link to comment
Share on other sites

bonjour et merci pour ce module qui à l'air fort bien!

Je suis en version de PS 1.8 et malheureusement, quand j'upload le fichier zip "override-classes-pdf.php.zip" dans mon fichier FTP "ma-boutique/override/classes/", rien ne change....

pouriez-vous m'éclairer?

Merci à vous

 

Bonjour,

Tu dois ouvrir l'archive override-classes-pdf.php.zip

à l'intérieur se trouve un dossier "override", un sous dossier "classes", et enfin un fichier "PDF.php"

C'est ce fichier PDF.php que tu dois copier dans le dossier /override/classes/ de ton FTP ;)

Link to comment
Share on other sites

Bonjour et merci de ton ide ! ;)

j'ai enfin réussi à uploader le fichier. mais sa ne me donne pas le même résultat que dans ton premier message lol.

et je ne sais pourquoi, mais les CGV et factures ne sont pas liées aux mails client..

Encore un fois, merci de ton soutien

Link to comment
Share on other sites

Qu'entends-tu exactement par "ça ne me donne pas le même résultat que dans ton premier message" ?

et "les CGV et factures ne sont pas liées aux mails client" ?

 

La facture n'est jointe qu'avec un seul mail, le mail de confirmation de commande

Et si tu veux aussi avoir les cgv avec la facture, il faudra utiliser la version de ce post => http://www.prestasho...ost__p__1057704

Link to comment
Share on other sites

Bonsoir Mellow,

Pour répondre à ta question, je n'est pas le tableau des taxes et les textes se superposes en bas de pages..

Pour les CVG et les factures, même dans le mail de confirmation de commande, elles ne sont pas jointes aux mails en PDF.

J'ai bien lu les postes sur les CVG et la facture mais malheureusement, je n'est lu aucune problématique telle la mienne ;)

Es-ce un problème de compatibilité avec la version 1.4.8?

Merci a toi

 

Link to comment
Share on other sites

Alors là effectivement ça semble être un problème particulier, en tout cas je n'avais encore jamais eu ça...

Je ne pense pas qu'il y ait une incompatibilité particulière avec PS1.4.8 (le fichier de base vient de PS1.4.9, mais plusieurs personnes rapportent ici que ça marche avec PS1.4.7...)

Peut-être une config particulière de ton installation, ou un problème d'override (c'est parfois très capricieux...)

 

La seule suggestion que je peux faire, c'est d’essayer avec la version de remplacement plutôt que l'override (en supprimant le fichier placé dans /override/classes/ et en prenant soin de sauvegarder ton fichier original dans /classes/ avant de le remplacer)

Peut-être que ça donnera un meilleur résultat...

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour Mellow,

 

J'utilise cet override qui est vraiment excellent. Suite à un nouveau procédé, j'aurai besoin (si possible à la place de la ligne "emballages cadeaux" que je n'utilise pas) d'afficher l'emballage recyclé ?!

 

J'ai bien localisé ceci :

 

if ((Configuration::get('PS_GIFT_WRAPPING') == 1) OR $order->gift) {
       $pdf->SetFont(self::fontname(), 'B', 9);
       $pdf->SetXY(109, $pdf->GetY());
       $pdf->Write(4, self::l('Gift-wrapped order:'));
       $pdf->SetFont(self::fontname(), '', 9);
       $pdf->Write(4, ' '.($order->gift ? self::l('YES') : self::l('NO')));
}

 

mais comment le remplacer pour afficher l'emballage recyclé ?

 

Merci d'avance,

Link to comment
Share on other sites

Bonjour,

 

if ((Configuration::get('PS_RECYCLABLE_PACK') == 1) OR $order->recyclable) {
$pdf->SetFont(self::fontname(), 'B', 9);
$pdf->SetXY(109, $pdf->GetY());
$pdf->Write(4, self::l('Recycled pack:'));
$pdf->SetFont(self::fontname(), '', 9);
$pdf->Write(4, ' '.($order->recyclable ? self::l('YES') : self::l('NO')));
}

 

Voila qui devrait faire l'affaire, sans oublier la traduction de "Recycled pack:" ;)

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour Mellow...et le reste de la communauté qui suit ce topic !

 

Je vais bientôt utiliser une feuille A4 intégrant une étiquette à décoller pour les coordonnées de livraison.

http://www.etiquette-integree.fr/produit/a4-avec-1-etiquette-integree-85x55mm/ que j'utiliserai à l'envers pour avoir l'étiquette en haut à droite.

 

Pour adapter la présentation de mes factures, je dois procéder à 2 modifications, que bien sûr, je ne maîtrise pas !

A savoir :

- afficher sur tous les PDF, l'adresse de facturation (à gauche) ET l'adresse de livraison (à droite).

- décaler de 1,5 cm vers la droite l'adresse de livraison pour qu'elle s'imprime sur l'étiquette à décoller.

 

Je te remercie par avance de te pencher sur mon problème quand tu auras 10 minutes, je suis presque sûr que ça ne te demandera pas beaucoup plus de temps ;)

 

Bon weekend.

Link to comment
Share on other sites

Pour adapter la présentation de mes factures, je dois procéder à 2 modifications

- afficher sur tous les PDF, l'adresse de facturation (à gauche) ET l'adresse de livraison (à droite).

- décaler de 1,5 cm vers la droite l'adresse de livraison pour qu'elle s'imprime sur l'étiquette à décoller.

 

Bonjour,

Essaye en remplacant ta fonction generateHeaderAddresses par celle ci :

 

    public static function generateHeaderAddresses(&$pdf, $order, $addressType, $patternRules, $width)
    {
        $Debut_Adresses = 40; // Ajuster pour placer les adresses à la hauteur de l'etiquette (en mm)
        $Fin_Adresses = 95; // Ajuster pour que le reste de la facture s'imprime en dessous de l'etiquette (en mm)
        
        $pdf->SetFont(self::fontname(), 'B', 10);
        foreach(array_keys($addressType) as $type) {
            $attributeName = 'id_address_'.$type;
            $addressType[$type]['addressObject'] = new Address((int)($order->$attributeName));
        }

        $pdf->SetY($Debut_Adresses);

        $pdf->SetFontSize(10);
        $pdf->Cell($width, 10, self::l('Invoicing address'), 0, 'L');
        $pdf->Cell(+15, 10, '', 0, 'L');
        // Suprimer la ligne ci-dessous pour enlever l'inscription "Adresse de livraison"
        $pdf->Cell($width -15, 10, self::l('Delivery address'), 0, 'L');
                
        $pdf->Ln(2.5);
        $pdf->SetFont(self::fontname(), '', 9);

        $maxY = 0;
        $titop = $pdf->GetY() +4;
        $pdf->setY($pdf->GetY() + 7);
        foreach(array_keys($addressType) as $type)
        {
            $currentY = $pdf->GetY();

            $attributeName = 'id_address_'.$type;
            $addressType[$type]['displayed'] = '';
            $addressType[$type]['addressFields'] = AddressFormat::getOrderedAddressFields($addressType[$type]['addressObject']->id_country);
            $addressType[$type]['addressFormatedValues'] = AddressFormat::getFormattedAddressFieldsValues(
                $addressType[$type]['addressObject'],
                $addressType[$type]['addressFields']);

            foreach ($addressType[$type]['addressFields'] as $line)
                if (($patternsList = explode(' ', $line)))
                {
                    $tmp = '';
                    foreach($patternsList as $pattern)
                        if (!in_array($pattern, $patternRules['avoid']))
                        {
                            if ($pattern == 'State:name' &&
                                Country::getIsoById(_PS_COUNTRY_DEFAULT_) == 'US')
                            {
                                $state_name = &$addressType[$type]['addressFormatedValues'][$pattern];
                                $state = new State((int)State::getIdByName($state_name));
                                if (Validate::isLoadedObject($state))
                                    $state_name = $state->iso_code;
                                else
                                    $state_name = strtoupper(substr($state_name, 0, 2));
                            }
                            $tmp .= ((isset($addressType[$type]['addressFormatedValues'][$pattern]) &&
                                !empty($addressType[$type]['addressFormatedValues'][$pattern])) ?
                                (Tools::iconv('utf-8', self::encoding(), $addressType[$type]['addressFormatedValues'][$pattern]).' ') : '');
                        }
                    $tmp = trim($tmp);
                    $addressType[$type]['displayed'] .= (!empty($tmp)) ? $tmp."\n" : '';
                }
            if ($type == 'invoice') {
                $pdf->SetFontSize(10);
                $pdf->SetX(10);
                $pdf->MultiCell(94 -15, 4, $addressType[$type]['displayed'], 0, 'L', 0);
                $tibot = $pdf->GetY() + 2;
                $pdf->SetLineWidth(0.2);
                $pdf->SetDrawColor(150, 150, 150);
                $pdf->Rect(9, $titop +1 , 93 -15, $tibot - $titop -1);
                $pdf->SetLineWidth(0.2);
            } else {
                $pdf->SetFontSize(10);
                $pdf->SetX($width +10 +15);
                $pdf->MultiCell(94 -15, 4, $addressType[$type]['displayed'], 0, 'L', 0);
                $tibot = $pdf->GetY() + 2;
                $pdf->SetLineWidth(0.2);
                // Suprimer les 3 lignes ci-dessous pour enlever l'encadrement de l'adresse de livraison
                $pdf->SetDrawColor(150, 150, 150);
                $pdf->Rect($width +9 +15, $titop +1 , 96 -15, $tibot - $titop -1);
                $pdf->SetLineWidth(0.2);
            }
            
            if ($pdf->GetY() > $maxY)
                $maxY = $pdf->GetY();

            $pdf->SetY($currentY);
            $pdf->SetX($width + 10);
        }

        if ($maxY+5 > $Fin_Adresses)
            $pdf->SetY($maxY+5);
        else
            $pdf->SetY($Fin_Adresses);

        return $addressType;
    }

 

Si la position horizontale est bonne, il n'y aura plus qu'a ajuster en hauteur...

Link to comment
Share on other sites

C'est juste PARFAIT, Mellow !

 

A nouveau, un très grand MERCI pour ton excellent travail participatif et explicatif, car tu as même pris le temps d'expliquer les points pouvant être amenés à demande de variantes ... chapeau bas !

Link to comment
Share on other sites

Bonsoir Mellow,

 

Je me joint aux autres personnes pour te remercier et te féliciter pour ton travail. Ca devient rare des gens comme toi qui se mettent au service de la communauté avec un projet qui fonctionne et qui est suivi.

 

Si je peux faire appel à tes services, j'aimerai intégrer deux petites choses dans mes factures :

 

1) les quantités en gras pour que la personne qui prépare les commandes ait plus de confort de lecture

 

2) Est-il possible que le prix à l'unité, lorsqu'il est rempli, remplace le prix unitaire ou qu'une colonne supplémentaire soit ajoutée ?

    J'ai certains articles qui sont par mètre ou par pièce.

    Idéalement j'aimerais que la mention "EUR 2,00 par mètre" comme rempli dans le BO par exemple apparaisse aussi sur la facture

    et pas seulement EUR 2,00

 

Merci beaucoup pour ton aide.

Link to comment
Share on other sites

Bonjour Sandra-66,

 

1) les quantités en gras pour que la personne qui prépare les commandes ait plus de confort de lecture

ça ce n'est pas très compliqué, mais au cas ou le gras ne suffirait pas pour faire ressortir les quantités tu pourra aussi les mettre en couleur

 

Dans ton fichier PDF.php repère le code suivant :

		$this->Cell($w[++$i], $lineSize, $productQuantity, 'LRB', 0, 'C');

et remplace par

		$this->SetFont(self::fontname(), 'B', 8);    // Gras
		$this->SetTextColor(255,0,0);    // Rouge (supprimer cette ligne pour laisser le texte en noir)
		$this->Cell($w[++$i], $lineSize, $productQuantity, 'LRB', 0, 'C');
		$this->SetFont(self::fontname(), '', 8);
		$this->SetTextColor(0,0,0);
Ceci mettra les quantités en gras et en rouge sur les factures et les bons de livraison

 

Si tu ne veux affecter que les bons de livraison :

		if ($delivery) {
			$this->SetFont(self::fontname(), 'B', 8);    // Gras
			$this->SetTextColor(255,0,0);    // Rouge
		}
		$this->Cell($w[++$i], $lineSize, $productQuantity, 'LRB', 0, 'C');
		$this->SetFont(self::fontname(), '', 8);
		$this->SetTextColor(0,0,0);

Pour affecter les bons de livraison et uniquement les quantités supérieurs à 1 :

		if ($delivery AND (int)$productQuantity > 1) {

A toi de choisir... ;)

 

2) Est-il possible que le prix à l'unité, lorsqu'il est rempli, remplace le prix unitaire ou qu'une colonne supplémentaire soit ajoutée ?

Malheureusement, le prix à l'unité semble être un paramètre purement informatif. Apparemment il n'est utilisé que pour l'affichage sur la fiche produit et la comparaison de produits.

En tout cas il n'est pas enregistré dans les détails de commande, donc impossible de récupérer cette information pour la facture :(

Link to comment
Share on other sites

Salut à tous,

 

juste parfaite cette nouvelle mouture des factures ! et avec les CGV en plus, c'est royale.

Par contre j'ai juste un petit souci. lorsque j'ai une facture ou un BL de plusieurs pages, la ref de la premiere ligne des pages, 2, 3, 4... se retrouve "dans les choux" en milieu de page.

quelqu'un a rencontré le problème ?

merci.

Link to comment
Share on other sites

  • 3 weeks later...

bonjour merci pour ce partage.
je souhaiterais utiliser votre technique mais je suis sous prestashop 1.5.4.1, d'après ce que vous avez écris cela n'est possible pour les versions 1.5x, avez vous une alternative pour la modification de mes factures?
je vous remercie
merci d'avance et bonne journée a tous

Edited by osmovap (see edit history)
Link to comment
Share on other sites

  • 3 weeks later...
  • 3 weeks later...

Bonjour

 

Il y a ce thème de facture pour 1.5, mais moins bien que celui qui est proposé ici.

 

voici le lien pour 1.5 : http://www.prestashop.com/forums/topic/202942-theme-template-de-facture-prestashop-15/

 

Je vous remercie pour cette information, grâce à vous j'ai pu l'appliquer sur mes factures.

 

Encore merci

 

Bonne journée

Edited by osmovap (see edit history)
Link to comment
Share on other sites

Bonsoir Mellow,

Je souhaitais te remercier pour mettre à disposition ce correctif fort pratique, car pour avoir tenté de comprendre le fichier pdf.php, je dois avouer que même en temps qu'informaticien (systeme et réseaux), c'est du chinois pour moi.

D'ailleurs, si tu avais une solution simple pour afficher le prix unitaire HT à la place de l'écotaxe par exemple (juste sous le PU TTC) ? La loi obligeant de le mentionner.

 

Encore merci pour le temps que tu as dû y passer.
Jérôme.

Link to comment
Share on other sites

si tu avais une solution simple pour afficher le prix unitaire HT à la place de l'écotaxe par exemple (juste sous le PU TTC) ? La loi obligeant de le mentionner.

 

Waouuu!!! me replonger dans ce code après tous ces mois et toutes ces modifs cumulées... pour moi aussi ça commence à être du chinois :wacko:

 

Mais en remplaçant la partie consacrée à l'affichage de l'écotaxe :

	// Mellow : Gestion de l'affichage de l'ecotaxe si present
	if (self::$_priceDisplayMethod != PS_TAX_EXC AND $product['ecotax'] != 0 AND $Show_Value_Ecotax == 1) {
		
		// Calcul de l'ecotaxe reelle a partir de $product['ecotax'] et $product['ecotax_tax_rate']
		$unit_ecotax = $product['ecotax'] * (1 + $product['ecotax_tax_rate'] / 100);
		
		// On ecrit d'abord une case vide pour dessiner les bordures et conserver la structure du tableau
		$beforeX = $this->GetX();
		$beforeY = $this->GetY();
		$this->Cell($w[++$i], $lineSize, ' ', 'LRB', 0, 'R');
		$afterX = $this->GetX();
		$afterY = $this->GetY();
		
		// Retour dans la case vide pour ecrire le prix unitaire (legerement plus haut)
		$this->SetXY($beforeX, $beforeY -0.9);
		$this->SetFont(self::fontname(), '', 8);               // <= Taille du texte
		$this->Cell($w[$i], $lineSize, (self::$orderSlip ? '-' : '').self::convertSign(Tools::displayPrice($unit_price, self::$currency, true)), 0, 0, 'R');
		
		// Puis ecriture de l'ecotaxe juste en dessous
		$this->SetXY($beforeX, $beforeY +1.7);
		$this->SetFont(self::fontname(), '', 5.5);              // <= Taille du texte
		$this->SetTextColor(0,150,0);                           // <= Couleur du texte
		$this->Cell($w[$i], $lineSize, '('.self::l('include').' '.self::convertSign(Tools::displayPrice($unit_ecotax, self::$currency, true)).' '.self::l('for ecotax').')', 0, 0, 'R');
		
		// Et retour en fin de case pour continuer le tableau
		$this->SetFont(self::fontname(), '', 8);
		$this->SetTextColor(0,0,0);
		$this->SetXY($afterX, $afterY);
		
	} else

Par ce code :

	// Gestion affichage du prix unitaire HT
	if (self::$_priceDisplayMethod != PS_TAX_EXC) {
		
		$Real_unit_without_tax = ($product['product_price_wt_but_ecotax'] / (1 + $product['tax_rate'] / 100)) + (float)$product['ecotax'];
		
		$beforeX = $this->GetX();
		$beforeY = $this->GetY();
		$this->Cell($w[++$i], $lineSize, ' ', 'LRB', 0, 'R');
		$afterX = $this->GetX();
		$afterY = $this->GetY();
		
		// PU TTC
		$this->SetXY($beforeX, $beforeY -0.9);
		$this->SetFont(self::fontname(), '', 8);
		$this->Cell($w[$i], $lineSize, (self::$orderSlip ? '-' : '').self::convertSign(Tools::displayPrice($unit_price, self::$currency, true)), 0, 0, 'R');
		
		// PU HT
		$this->SetXY($beforeX, $beforeY +1.7);
		$this->SetFont(self::fontname(), '', 5.5);              // <= Taille du texte
		$this->SetTextColor(0,150,0);                           // <= Couleur du texte
		$this->Cell($w[$i], $lineSize, self::convertSign(Tools::displayPrice($Real_unit_without_tax, self::$currency, true)).' '.self::l(' (tax excl.)'), 0, 0, 'R');
		
		$this->SetFont(self::fontname(), '', 8);
		$this->SetTextColor(0,0,0);
		$this->SetXY($afterX, $afterY);
		
	} else

ça devrait faire ton affaire ;)

Link to comment
Share on other sites

  • 5 weeks later...

Bien le bonjour

 

Je reviens vers toi Mellow pour savoir si tu as une idée sur un bug que je rencontre sur la génération du pdf.

 

Plutôt que de longs discours, je te laisse constater via le screen : 

bugpdf.jpg

 

Il y a eu un décalage des champs de texte au niveau de la TVA et Total.
Ca semble être apparu depuis que j'ai des articles avec un champ personnalisé. Comme si la ligne de texte supplémentaire sous le descriptif produit décalait le reste du tableau ?

 

Si tu as une idée, je t'en serais grandement reconnaissant.

 

Jérôme.

Link to comment
Share on other sites

Bonjour,

 

Je ne pense pas que ça vienne des champs personnalisés, il semble plutôt y avoir un souci avec une variable ($_priceDisplayMethod ou $Show_Vat_Value) :blink:

 

N'aurais tu pas fais d'autres modifs sur le fichiers ?

Quelle version de Prestashop utilise-tu ? Et quelle version de la modif ? (override ou remplacement de pdf.php)

Link to comment
Share on other sites

Bonjour,

 

Je ne pense pas que ça vienne des champs personnalisés, il semble plutôt y avoir un souci avec une variable ($_priceDisplayMethod ou $Show_Vat_Value) :blink:

 

N'aurais tu pas fais d'autres modifs sur le fichiers ?

Quelle version de Prestashop utilise-tu ? Et quelle version de la modif ? (override ou remplacement de pdf.php)

 

Bonsoir Mellow,

 

Je suis en 1.4.4.1 et j'utilise la version "remplacement".

Je n'ai pas modifié ton fichier, sauf sur le remplacement de l'écotaxe par le prix HT.

 

J'ai fais un test en me facturant un article qui n'a pas de personnalisation, le résultat est ok

 

pasbug.jpg

Link to comment
Share on other sites

Alors voila, ça a été moins simple que je ne pensais car les personnalisations sont gérées à part, et il a donc fallut modifier un bon bout de code.

 

Voici la modif à effectuer pour le cas général.

Pour ton cas, geforce74, il faudra dans ce nouveau code remplacer encore la partie écotaxe par le code donné précédemment

 

Dans la fonction ProdTab, remplacer :

				if (isset($customizedDatas[$product['product_id']][$product['product_attribute_id']]))
				{
					$custoLabel = '';

					foreach($customizedDatas[$product['product_id']][$product['product_attribute_id']] as $customizedData)
					{
						$customizationGroup = $customizedData['datas'];
						$nb_images = 0;

						if (array_key_exists(_CUSTOMIZE_FILE_, $customizationGroup))
							$nb_images = sizeof($customizationGroup[_CUSTOMIZE_FILE_]);

						if (array_key_exists(_CUSTOMIZE_TEXTFIELD_, $customizationGroup))
							foreach($customizationGroup[_CUSTOMIZE_TEXTFIELD_] as $customization)
								if (!empty($customization['name'])) $custoLabel .= '- '.$customization['name'].': '.$customization['value']."\n";


						if ($nb_images > 0)
							$custoLabel .= '- '.$nb_images. ' '. self::l('image(s)')."\n";

						$custoLabel .= "---\n";
					}

					$custoLabel = rtrim($custoLabel, "---\n");

					$productQuantity = (int)($product['product_quantity']) - (int)($product['customizationQuantityTotal']);
					if ($delivery)
						$this->SetX(10);
					$before = $this->GetY();
					$this->MultiCell($w[++$i], 5, Tools::iconv('utf-8', self::encoding(), $product['product_name']).' - '.self::l('Customized')." \n".Tools::iconv('utf-8', self::encoding(), $custoLabel), 'LRB');
					$lineSize = $this->GetY() - $before;
					$this->SetXY($this->GetX() + $w[0] + ($delivery ? 0 : 0), $this->GetY() - $lineSize);
					$this->Cell($w[++$i], $lineSize, $product['product_reference'], 'LRB');
					if (!$delivery)
						$this->Cell($w[++$i], $lineSize, (self::$orderSlip ? '-' : '').self::convertSign(Tools::displayPrice($unit_price, self::$currency, true)), 'LRB', 0, 'R');
					$this->Cell($w[++$i], $lineSize, (int)($product['customizationQuantityTotal']), 'LRB', 0, 'C');
					if (!$delivery)
						$this->Cell($w[++$i], $lineSize, (self::$orderSlip ? '-' : '').self::convertSign(Tools::displayPrice($unit_price * (int)($product['customizationQuantityTotal']), self::$currency, true)), 'LRB', 0, 'R');
					$this->Ln();
					$i = -1;
					$total_with_tax = $unit_with_tax * $productQuantity;
					$total_without_tax = $unit_without_tax * $productQuantity;
				}
Par :

				if (isset($customizedDatas[$product['product_id']][$product['product_attribute_id']]))
				{
					$custoLabel = '';

					foreach($customizedDatas[$product['product_id']][$product['product_attribute_id']] as $customizedData)
					{
						$customizationGroup = $customizedData['datas'];
						$nb_images = 0;

						if (array_key_exists(_CUSTOMIZE_FILE_, $customizationGroup))
							$nb_images = sizeof($customizationGroup[_CUSTOMIZE_FILE_]);

						if (array_key_exists(_CUSTOMIZE_TEXTFIELD_, $customizationGroup))
							foreach($customizationGroup[_CUSTOMIZE_TEXTFIELD_] as $customization)
								if (!empty($customization['name'])) $custoLabel .= '- '.$customization['name'].': '.$customization['value']."\n";


						if ($nb_images > 0)
							$custoLabel .= '- '.$nb_images. ' '. self::l('image(s)')."\n";

						$custoLabel .= "---\n";
					}

					$custoLabel = rtrim($custoLabel, "---\n");

					$productQuantity = (int)($product['product_quantity']) - (int)($product['customizationQuantityTotal']);
					if ($delivery)
						$this->SetX(10);
					$before = $this->GetY();
					$this->MultiCell($w[++$i], 6, Tools::iconv('utf-8', self::encoding(), $product['product_name']).' - '.self::l('Customized')." \n".Tools::iconv('utf-8', self::encoding(), $custoLabel), 'LRB');
					$lineSize = $this->GetY() - $before;
					$this->SetXY($this->GetX() + $w[0] + ($delivery ? 0 : 0), $this->GetY() - $lineSize);
					if ((!$delivery AND $Invoice_Ref_Col) OR ($delivery AND $Delivery_Ref_Col))
						$this->Cell($w[++$i], $lineSize, ($product['product_reference'] ? Tools::iconv('utf-8', self::encoding(), $product['product_reference']) : '--'), 'LRB');
					if (!$delivery) {
						// Mellow : Gestion de l'affichage de l'ecotaxe si present
						if (self::$_priceDisplayMethod != PS_TAX_EXC AND $product['ecotax'] != 0 AND $Show_Value_Ecotax == 1) {
							
							// Calcul de l'ecotaxe reelle a partir de $product['ecotax'] et $product['ecotax_tax_rate']
							$unit_ecotax = $product['ecotax'] * (1 + $product['ecotax_tax_rate'] / 100);
							
							// On ecrit d'abord une case vide pour dessiner les bordures et conserver la structure du tableau
							$beforeX = $this->GetX();
							$beforeY = $this->GetY();
							$this->Cell($w[++$i], $lineSize, ' ', 'LRB', 0, 'R');
							$afterX = $this->GetX();
							$afterY = $this->GetY();
							
							// Retour dans la case vide pour ecrire le prix unitaire (legerement plus haut)
							$this->SetXY($beforeX, $beforeY -0.9);
							$this->SetFont(self::fontname(), '', 8);               // <= Taille du texte
							$this->Cell($w[$i], $lineSize, (self::$orderSlip ? '-' : '').self::convertSign(Tools::displayPrice($unit_price, self::$currency, true)), 0, 0, 'R');
							
							// Puis ecriture de l'ecotaxe juste en dessous
							$this->SetXY($beforeX, $beforeY +1.7);
							$this->SetFont(self::fontname(), '', 5.5);              // <= Taille du texte
							$this->SetTextColor(0,150,0);                           // <= Couleur du texte
							$this->Cell($w[$i], $lineSize, '('.self::l('include').' '.self::convertSign(Tools::displayPrice($unit_ecotax, self::$currency, true)).' '.self::l('for ecotax').')', 0, 0, 'R');
							
							// Et retour en fin de case pour continuer le tableau
							$this->SetFont(self::fontname(), '', 8);
							$this->SetTextColor(0,0,0);
							$this->SetXY($afterX, $afterY);
							
						} else
							$this->Cell($w[++$i], $lineSize, (self::$orderSlip ? '-' : '').self::convertSign(Tools::displayPrice($unit_price, self::$currency, true)), 'LRB', 0, 'R');					
					}
					$this->Cell($w[++$i], $lineSize, (int)($product['customizationQuantityTotal']), 'LRB', 0, 'C');
					if (!$delivery) {
					
						// Mellow : Affichage TVA
						if (self::$_priceDisplayMethod != PS_TAX_EXC AND $Show_Vat_Value) {
							$this->SetFont(self::fontname(), '', 6);
							$this->Cell($w[++$i], $lineSize,  number_format($product['tax_rate'], 2, ',', ' ').' %', 'LRB', 0, 'C');
							$this->SetFont(self::fontname(), '', 8);
						}
						
						// Mellow : Affichage du prix HT (si on est en mode TTC)
						if (self::$_priceDisplayMethod != PS_TAX_EXC AND $Show_TotPrice_TaxEx == 1) {
														
							// Calcul du VRAI prix HT car nous sommes pas en affichage TTC et ce calcul n'est pas fait
							$Real_unit_without_tax = ($product['product_price_wt_but_ecotax'] / (1 + $product['tax_rate'] / 100)) + (float)$product['ecotax'];
							$Real_total_without_tax = $Real_unit_without_tax * (int)($product['product_quantity']);
							
							$beforeX = $this->GetX();
							$beforeY = $this->GetY();
							$this->Cell($w[++$i], $lineSize, ' ', 'LRB', 0, 'R');
							$afterX = $this->GetX();
							$afterY = $this->GetY();
							
							// Total TTC
							$this->SetXY($beforeX, $beforeY -0.9);
							$this->SetFont(self::fontname(), '', 8);               
							$this->Cell($w[$i], $lineSize, (self::$orderSlip ? '-' : '').self::convertSign(Tools::displayPrice($final_price, self::$currency, true)), 0, 0, 'R');
							
							// Total HT
							$this->SetXY($beforeX, $beforeY +1.7);
							$this->SetFont(self::fontname(), '', 5.5);              // <= Taille du texte
							$this->SetTextColor(140,140,140);                       // <= Couleur du texte
							$this->Cell($w[$i], $lineSize, self::convertSign(Tools::displayPrice($Real_total_without_tax, self::$currency, true)).' '.self::l(' (tax excl.)'), 0, 0, 'R');
							
							$this->SetFont(self::fontname(), '', 8);
							$this->SetTextColor(0,0,0);
							$this->SetXY($afterX, $afterY);
							
						} else
							$this->Cell($w[++$i], $lineSize, (self::$orderSlip ? '-' : '').self::convertSign(Tools::displayPrice($final_price, self::$currency, true)), 'LRB', 0, 'R');
					}
					$this->Ln();
					$i = -1;
					$total_with_tax = $unit_with_tax * $productQuantity;
					$total_without_tax = $unit_without_tax * $productQuantity;
				}
Link to comment
Share on other sites

Du coup j'ai remarqué qu'il y avait aussi un défaut d'affichage lorsque le client est en affichage hors taxe.

 

Pour corriger ça, au début de la même fonction ProdTab remplacer :

			if($Show_Vat_Value) $w[] = 10; else $w[] = 15; 
			if($Show_Vat_Value) $w[] = 10;
			if($Show_Vat_Value) $w[] = 25; else $w[] = 30;
Par :

			if(self::$_priceDisplayMethod != PS_TAX_EXC AND $Show_Vat_Value) $w[] = 10; else $w[] = 15; 
			if(self::$_priceDisplayMethod != PS_TAX_EXC AND $Show_Vat_Value) $w[] = 10;
			if(self::$_priceDisplayMethod != PS_TAX_EXC AND $Show_Vat_Value) $w[] = 25; else $w[] = 30;

Je corrigerais après les fichiers à télécharger...

Link to comment
Share on other sites

Bonjour Mellow.

Je sais pas comment tu t'y retrouves dans tout ça.

J'ai remplacé par le nouveau code, puis remis la partie concernant le prix unitaire HT, tout est rentré dans l'ordre.

Merci beaucoup

Pas de souci, c'est vrai que j'ai de plus en plus de mal m'y retrouver, mais quand il y a un bug on se doit de faire le maximum pour apporter une correction.

Par contre je suis étonné que personne n'ai remarqué ça avant, la personnalisation ne doit pas être très utilisé...

Link to comment
Share on other sites

Bonjour Mellow

Ta personnalisation sera t'elle un jour compatible prestashop 1.5. car sur le forum j'en ai trouvé une, mais moins bien que la tienne.

Sur 1.4 j'utilisais ta méthode que j'ai du me séparer a contre coeur .

Bonjour Le Cathar,

 

Honnêtement je ne compte pas pour le moment me lancer dans les mêmes modifs pour PS1.5.

En fait, je n'ai rien contre la version 1.5, mais simplement le site que j'ai fais n'a pas vraiment besoin des fonctionnalités qu'elle apporte. Et ce serait encore un gros boulot pour re rajouter les customisations que j'ai du faire.

 

Avec l'annonce de PS1.6 peut-être que d'ici quelques mois je me pencherais la dessus, ne serait-ce que pour éviter d'avoir 2 versions de retard (et aussi pour le nouveau thème full responsive...)

Mais pour le moment je préfère vraiment ne rien promettre

  • Like 1
Link to comment
Share on other sites

Pas de souci, c'est vrai que j'ai de plus en plus de mal m'y retrouver, mais quand il y a un bug on se doit de faire le maximum pour apporter une correction.

Par contre je suis étonné que personne n'ai remarqué ça avant, la personnalisation ne doit pas être très utilisé...

 

Je partage ta philosophie.

La personnalisation est surtout pratique dans le sens où je ne gère pas de stock, je fabrique à la demande, donc les déclinaisons m'arrangent pas toujours, alors que la personnalisation m'évite d'avoir à faire des listes, c'est le client qui tape ce qu'il veut (pour les couleurs entre autre). 

Encore merci.

Link to comment
Share on other sites

Bonjour Mellow

 

Penses-tu qu'il soit possible de rajouter un astérisque après le nom d'un produit lié à un "supplier".

Sur ma boutique, j'ai détourné le groupe "supplier" en labels biologiques. Certains produits en disposent et d'autres non.

 

Voilà ce que cela devrait donner:

 

Article 1*

Article 2*

Article 3

Article 4*

Link to comment
Share on other sites

Bonjour Mellow

Penses-tu qu'il soit possible de rajouter un astérisque après le nom d'un produit lié à un "supplier".

Sur ma boutique, j'ai détourné le groupe "supplier" en labels biologiques. Certains produits en disposent et d'autres non.

Bonjour Nutrinat,

 

J'allais te répondre que ce n'est pas possible, étant donné que ni le "supplier" ni le "manufacturer" ne sont enregistré dans les détails des commandes...

 

Mais en fait il y a peut-être une solution assez simple :

Je suppose que tu n'utilise pas la référence fournisseur du produit ? (puisque tu as détourné l'utilisation des fournisseurs...)

Et il se trouve que la référence fournisseur est enregistré dans les détails de la commande.

 

Alors il te suffit de mettre * comme référence fournisseur aux produits disposants du label bio, et ensuite de rajouter la référence fournisseur à la suite du nom du produit dans la facture :

Remplacer toutes les occurrences de

Tools::iconv('utf-8', self::encoding(), $product['product_name'])
par

Tools::iconv('utf-8', self::encoding(), $product['product_name']." ".$product['product_supplier_reference'])

Et tu pourrais même définir plusieurs niveaux dans ton label (*, **, ***, etc...) ;)

 

Par contre, je ne sais pas à quel autre endroit dans Prestashop cette référence fournisseur est susceptible d'apparaitre (mais un * à la place d'une case vide, ça ne devrait pas poser trop de problème....)

Link to comment
Share on other sites

Merci beaucoup Mellow! B)

Toujours aussi rapide, serviable et d'une grande efficacité. Cela devient rare!

 

Une dernière question.

J'aimerai rajouter un court message du genre "* Produit certifié bio...." dans le footer de la facture collé à la phrase "une version électronique est conservée..."

 Au fait est-ce que cette phrase doit d'un point de vue légal y figurer?

Sinon pourquoi ne pas la remplacer.

Link to comment
Share on other sites

Bonjour,

Cette phrase est éditable dans la traduction des fichier PDF en backoffice (je crois qu'elle est en deux parties...)
Sinon il existe aussi ce module http://www.prestashop.com/forums/topic/154980-module-gratuit-facture-pdf-plus/

version corrigé ici http://www.prestashop.com/forums/topic/154980-module-gratuit-facture-pdf-plus/?p=1229360

pour rajouter du texte libre dans la facture

 

Pour ce qui est de la législation je ne sais pas du tout, mais à mon avis ça n'a rien d'obligatoire (l'obligation c'est de fournir une facture, pas de mettre une copie à disposition...)
 

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour Mellow

 

Est-ce qu'on peut utiliser cette fonction avec la nouvelle TVA française qui va être mis en place début janvier, soit : 20% ?

 

Je suis toujours sous prestashop 1.4.4.0, si je veux l'utiliser, quelles sont les modifications que je dois apporter ?

 

J'en profite pour te souhaiter de bonnes fêtes de fin d'année.

 

Merci de m'éclairer sur cette question. 

 

J'aurai également avoir à nouveau ton regard sur mon site, car j'ai apporté quelques améliorations ....

 

Cordialement

 

Shooping

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour Shooping,

 

Les valeurs affichées sur la facture sont fonction des valeurs configurées dans Prestashop au moment de la commande. Ils sont sauvegardés avec les détails de la commande.

Donc les changements de TVA ou d'écotaxe seront répercutés sur les prochaines factures, sans rien changer aux factures déjà existante.

 

Pour PS1.4.4 il faut télécharger l'archive remplacement-classes-PDF.php.zip et en extraire PDF.php à copier dans ton dossier "/classes" en remplacement du fichier existant. Après il y aura quelques traductions à rajouter en back office. (voir premier message du sujet, tout y est expliqué...)

 

Merci pour les voeux, bonne année 2014 à toi

 

  • Like 1
Link to comment
Share on other sites

Bonjour Shooping,

 

Les valeurs affichées sur la facture sont fonction des valeurs configurées dans Prestashop au moment de la commande. Ils sont sauvegardés avec les détails de la commande.

Donc les changements de TVA ou d'écotaxe seront répercutés sur les prochaines factures, sans rien changer aux factures déjà existante.

 

Pour PS1.4.4 il faut télécharger l'archive remplacement-classes-PDF.php.zip et en extraire PDF.php à copier dans ton dossier "/classes" en remplacement du fichier existant. Après il y aura quelques traductions à rajouter en back office. (voir premier message du sujet, tout y est expliqué...)

 

Merci pour les voeux, bonne année 2014 à toi

 

 

 

Bonjour Mellow,

 

 

Merci pour ta réponse, je regarderai ça de plus près, quand j'aurai réussi à régler le reste.

 

N'hésite pas à me contacter sur mon site, car ici je ne peux plus t'envoyer de mp. 

 

Cordialement

 

Shooping

 

Link to comment
Share on other sites

Bonjour,

 

J'utilise depuis peu votre modification pour la présentation des factures qui est nettement plus agréable que celle par défaut.

Serait-il possible d'ajouter la photo des articles vendus sur la facture ?

J'ai bien testé les modifications proposées sur http://www.prestashop.com/forums/topic/110162-solved-add-image-to-pdf-invoice/page-2 mais cela ne fonctionne pas avec le système d'image de la version 1.4.11.

 

Cordialement,

Hobbes

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

 

Je partage avec vous cette surcharge de la classe PDF.php qui permet d'avoir des factures et des bons de livraison avec une présentation un peu plus soignée que les originaux générés par Prestashop 1.4

 

Les modifications ont été faites à partir du fichier PDF.php de PS 1.4.9.0, ça devrait aussi fonctionner avec la plupart des versions 1.4.x, MAIS PAS AVEC PS1.5

 

Les changements sont les suivants :

  • Gain de place
  • Agrandissement du logo (passage de 18mm à 24mm de hauteur)
  • Déplacement de la date et du n° de commande en haut à droite (sous le n° de facture)
  • Mise en forme des adresses, et ajout d'un cadre autour de l'adresse de facturation
  • Affichage d'une seule adresse de facturation et de livraison (si identique)
  • Replacement des infos Transporteur, Méthode de paiement, Date d'expédition, Emballage cadeau
  • Ajout d'un quadrillage sur la liste des produits
  • Petites modifications dans le pied de page (ponctuation, infos vendeur en gras)
Nouvelles modifs :
  • Ajout d'une couleur sur le total TTC pour qu'il soit plus visible
  • Relookage et centrage du tableau des taxes (c'était un peu confus...)
  • Un peu plus d'espace entre en-tête et adresses, et entre adresse et liste de produit
  • Possibilité d'afficher l'écotaxe (si présent) sous le prix unitaire de chaque produit
  • Possibilité d'afficher le prix total HT pour chaque ligne produit
  • Possibilité d'afficher une colonne TVA dans la liste des produits
  • Possibilité d'afficher le total des taxes de la commande (entre total HT et total TTC)
Les options ci dessus sont configurable dans la fonction InitCustomValues() au début du fichier
  • Recadrage du tableau produit des bons de livraison au même format que celui des factures
  • Correction d'un bug d'affichage des adresses sur les bons de retour
  • [Edit 18/01/2013]
  • Ajout de la possibilité d'afficher ou non la colonne référence (et d'en régler la taille)
Il s'agit d'une surcharge, donc à placer dans "votre-boutique/override/classes/"

override-classes-PDF.php.zip 10.5KB 257 downloads

attachicon.gifoverride-classes-PDF.php.zip (MAJ 13/12/2013)

 

Pour ceux qui ont des difficultés avec l'override (notamment PS 1.4.4, 1.4.3) voici aussi une version de remplacement de la classe pdf, avec les mêmes modifs. A copier donc dans "votre-boutique/classes/" en prenant soin d'effectuer d'abord une sauvegarde du fichier original. (et sans utiliser le fichier override)

remplacement-classes-PDF.php.zip 13.23KB 140 downloads

attachicon.gifremplacement-classes-PDF.php.zip (MAJ 13/12/2013)

 

(MAJ 13/12/2013)

Correction d'erreurs d'affichage avec les produits personnalisés et avec les clients en affichage hors taxe.

 

Une fois le fichier mis en place, il faudra également vous rendre dans votre back office (Outils => Traductions => Traduction des fichiers PDF) et traduire les chaines suivantes :

Date: -> Date :

Delivery address -> Adresse de livraison

Invoicing address -> Adresse de facturation

Invoicing and delivery address -> Adresse de facturation et de livraison

Gift-wrapped order: -> Emballage cadeau :

YES -> OUI

NO -> NON

include -> dont

for ecotax -> d'écotaxe

VAT -> TVA

 

Et pendant que vous y êtes vous pouvez aussi (si ce n'est pas déjà fait) corriger une petite coquille :

"Numéro d'identification fiscale :" au lieu de "Numéro d'indentification fiscale:"

 

Voila, ce n'est pas une révolution mais je trouve que le résultat est un peu plus "pro" que l'original...

 

Voici en exemple une facture "full options" <_<

attachicon.gifFacture_améliorée_PS1.4.pdf

 

Si vous voulez ajouter vos CGV à la suite de vos factures, vous pouvez utiliser les versions présentées ici : http://www.prestasho...ost__p__1057704

 

 

 

Bonjour,

 

Auriez-vous un update de tout ça pour la version 1.5.6.2 ??

 

Merci d'avance.

  • Like 1
Link to comment
Share on other sites

Bonjour Mellow

 

Ta personnalisation sera t'elle un jour compatible prestashop 1.5. car sur le forum j'en ai trouvé une, mais moins bien que la tienne.

Sur 1.4 j'utilisais ta méthode que j'ai du me séparer a contre coeur .

 

Bonjour,

 

Pourriez-vous me donner le lien de cette personnalisation compatible pour la version 1.5 ?

 

Merci d'avance.

  • Like 1
Link to comment
Share on other sites

  • 1 month later...
  • 2 months later...
  • 2 months later...
  • 1 month later...
  • 1 month later...

Bonjour

 

Je deterre un peu ce post car j'y ai lu beaucoup de choses très intéressantes et au moins ici, il y a des réponses aux questions posées.

 

Contrairement à FINK (post #148) je ne veux pas inverser les blocks adresses, mais juste décaler celui de gauche (livraison)

Vendant également sur Delcampe, ces étiquettes pourront servir pour mes deux boutiques.

 

Merci pour votre aide

 

 

 

factur10.jpg

Edited by numismeuros (see edit history)
Link to comment
Share on other sites

  • 1 month later...

Cherche le commentaire "Couleur texte Total TTC"
et juste en dessous, remplace
   

 $pdf->Cell($width, 0, self::l('Total').' '.(self::$_priceDisplayMethod == PS_TAX_EXC ? self::l(' (tax excl.)') : self::l(' (tax incl.)')).' : ', 0, 0, 'R');
     $pdf->Cell(0, 0, (self::$orderSlip ? '-' : '').self::convertSign(Tools::displayPrice((self::$_priceDisplayMethod == PS_TAX_EXC ? $priceBreakDown['totalWithoutTax'] : $priceBreakDown['totalWithTax']), self::$currency, true)), 0, 0, 'R');par
    

 $pdf->SetFontSize(12);    /* nouvelle taille de police */
     $pdf->Cell($width, 0, self::l('Total').' '.(self::$_priceDisplayMethod == PS_TAX_EXC ? self::l(' (tax excl.)') : self::l(' (tax incl.)')).' : ', 0, 0, 'R');
     $pdf->Cell(0, 0, (self::$orderSlip ? '-' : '').self::convertSign(Tools::displayPrice((self::$_priceDisplayMethod == PS_TAX_EXC ? $priceBreakDown['totalWithoutTax'] : $priceBreakDown['totalWithTax']), self::$currency, true)), 0, 0, 'R');
     $pdf->SetFontSize(8);    /* retour à la taille initiale */

chez moi ça ne change rien.

Link to comment
Share on other sites

Breton, donc tétu et tenace, j'ai enfin trouvé la solution.

Dans PDF.php, chercher la ligne

$pdf->Cell($width, 10, self::l('Invoicing and delivery address'), 0, 'L');

et la transformer en

  • 1 : supprimer la phrase
  • 2 : traduire la phrase
$pdf->Cell($width, 10, self::l(''), 0, 'L');
$pdf->Cell($width, 10, self::l('Adresses de livraison et de facturation'), 0, 'L');

Procéder de la même façon pour les autres traductions

Link to comment
Share on other sites

  • 2 weeks later...

déterrage de post

 

Je viens de tomber sur ce sujet super exactement ce qu il me faut par contre est-il possible d'avoir les 2 n° de téléphone, sur la facture par défaut c'est 1 seul, mais si les clients utilisent 2 n° cela serait pas mal de les trouver sur la facture.

 

 

Par avance merci

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