Extrafields sur les PDF

Bonjour,
Vous pouvez commencez par lire le wiki, lire le forum etc… et revenir avec une question précise. Si vous ne maîtrisez pas PHP préférez les modules tout faits. Ce n’est pas gratuit c’est sur mais il faut payer les développeurs. Meme les passionnés ont des factures a payer.
@+

Bonjour,
J’ai cherché sur le forum mais pas trouvé comment ajouter le nom d’un projet dans le pdf d’une facture de ce même projet.
J’ai créé un modèle sur lequel j’ai fais des essais mais je patauge:
Je souhaite l’intégrer à la suite de la description produit ?
Quelqu’un peut il me donner un coup de pouce?

Bonjour,

Je pense qu’il faut d’abord charger le projet dans l’objet facture :

$object->fetch_projet();

Et du coup les informations du projet devraient être dispos dans :

$object->projet->title;

Cdlt,

Je ne suis pas un pro du php:
voila ma démarche
j’ai d’abord ajouter

require_once(DOL_DOCUMENT_ROOT."/core/modules/project/modules_project.php");
require_once(DOL_DOCUMENT_ROOT."/projet/class/project.class.php");
require_once(DOL_DOCUMENT_ROOT."/projet/class/task.class.php");
require_once(DOL_DOCUMENT_ROOT."/core/lib/company.lib.php");
require_once(DOL_DOCUMENT_ROOT.’/core/lib/pdf.lib.php’);

au début du fichier pdf_agence.modules.php (fichier modèle pdf copié et modifié à partir du modèle crabe)
J’ai ensuite l’intention de modifier cette partie du code (ligne 270):

// Description of product line
$pdf->SetFont(’’,’’, $default_font_size - 1); // Into loop to work with multipage
$curX = $this->posxdesc-1; pdf_writelinedesc($pdf,$object,$i,$outputlangs,$this->posxtva-$curX,3,$curX,$curY,$hideref,$hidedesc,0,$hookmanager);
$pdf->SetFont(’’,’’, $default_font_size - 1); // On repositionne la police par defaut
$nexY = $pdf->GetY();

Et la je suis perdu.

Je suis parti du modèle crabe, pas eu besoin d’ajouter de require pour avoir les infos du projet.

Il faut que vous expliquiez ce que vous voulez faire plus précisément. Une facture ne peut être associée qu’à un seul projet. Vous voulez ajouter le nom du projet après chaque descriptif de ligne ? Répéter X fois le nom du projet ?

Mon objectif est d’associer le nom du projet (projet associé à la commande précédant cette facturation) à la description de ligne : Cela pour chaque ligne.

Ajoutez « $object->fetch_projet(); » au dessus de :

// Loop on each lines
for ($i = 0 ; $i < $nblignes ; $i++)
{

Et ensuite "$object->lines[$i]->desc .= " Projet : « .$object->projet->title; » en dessous de :

$curY = $nexY;

Aucune autre modification nécessaire de mon côté

Cdlt,

Super
Ca fonctionne
Merçi :wink:

Bonjour,

J’ai remarqué que lorsque l’on ajoute un commentaire dans la description d’un produit d’une fiche de commande, ce commentaire (Voir image du champ : Test Test) ne s’ajoute pas dans le pdf généré. (modèle muscadet / version Dolibarr : 10.0.4).

Savez-vous comment est-il possible d’ajouter ce champs (Voir image du champ : Test Test

) ? (Je suppose dans le fichier pdf_muscadet.modules)

Merci d’avance pour votre aide.
Edouard

Bonjour,
Configuration/PDF ?

Frédéric

1 « J'aime »

Top, merci amipc07 !

Bonjour,

J’ai un petit soucis et je n’arrive pas a trouver la cause.

J’ai bien intégré mes extrafields sur mes PDF mais voici le soucis :
J’ai 2 extrafields « Code NACRE » un qui est ajouté lors de la création du produit et qui est donc appelé lors des commandes
Et un second qui est a saisir sur la ligne de commande en cas de saisie de ligne libre.

Le deux fonctionnent parfaitement et sont bien appelés sur le PDF mais par contre sur la ligne libre, j’ai 2 fois le "Code NACRE qui apparaît, j’ai bien celui correspondant à la ligne libre mais également, au dessus, le « code nacre » du produit précédent.

Voici un screen pour mieux visualiser le problème :

Et voici mon fichier modifié, sachant que les lignes correspondantes à mes modifications sont à partir de 611 :
pdf_cornas.modules.php (64,8 Ko)

Je me doute qu’il doit pas avoir grand chose mais j’arrive pas a trouver la cause.

Je vous remercie par avance pour l’aide.

Bonjour,

A mon avis le probléme vient de la ligne 516.
La variable $product n’est pas remise à 0 si la ligne n’est pas un produit.
Changer ça :

				// Extralabels depuis produit-service
					if ($object->lines[$i]->fk_product)
						{
							require_once (DOL_DOCUMENT_ROOT.'/product/class/product.class.php');
							$product = new Product($this->db);
							$product->fetch($object->lines[$i]->fk_product);
							$extrafields_product = new ExtraFields($this->db);
							$extralabels_product = $extrafields_product->fetch_name_optionals_label($product->table_element);
							$product->fetch_optionals($product->rowid, $extralabels_product);
						}

en ça

					// Extralabels depuis produit-service
					if ($object->lines[$i]->fk_product)
					{
						require_once (DOL_DOCUMENT_ROOT.'/product/class/product.class.php');
						$product = new Product($this->db);
						$product->fetch($object->lines[$i]->fk_product);
						$extrafields_product = new ExtraFields($this->db);
						$extralabels_product = $extrafields_product->fetch_name_optionals_label($product->table_element);
						$product->fetch_optionals($product->rowid, $extralabels_product);
					}
					else
					{
						unset ($product, extrafields_product, extralabels_product ) ;
					}

Parfait ca marche mais faut juste rajouter les $ dans unset

Encore merci beaucoup

Oui pardon :yum:

Super si ça marche !

1 « J'aime »

pas de soucis, déjà j’ai réussi par moi même a comprendre pourquoi ça marchait pas

Merci a toi

Bonsoir,
Je suis entrain de créer une copie du modèle ‹ soleil › utilisé pour la fiche d’intervention.
J’ai lu la documentation du wiki.Add_Extrafields_on_PDF_Models
Dans le nouveau modèle (‹ monsoleil ›), j’ai mis tout à jour et je rajoute un premier extrafield type Liste de sélection.
Dans la documentation pour récupérer le libellé au lieu du code il est écrit:
### Invoice Template
On the php invoice template, if you use the classical php code to print the extrafield, you will print the code (1 or 2 in our exemple) instead of printing the label (Hello Word or Hello Alone in our exemple).
To display the label instead of the code, you should replace the :
$outputlangs->convToOutputCharset($object->array_options[‹ options_my_extra ›])
by :
$extrafields->showOutputField(‹ my_extra ›, $object->array_options[‹ options_my_extra ›])
C’est ce que j’ai fait en remplaçant ‹ my_extra › par le code de l’attribut.
J’ai l’erreur suivante:
Parse error* : syntax error, unexpected ‹ $notetoshow › (T_VARIABLE), expecting ‹ ) › in /homepages/29/d504720104/htdocs/bugdepannage/htdocs/core/modules/fichinter/doc/pdf_monsoleil.modules.php on line *280

Ci-dessous le code où est l’erreur:
$tab_height_newpage = 150;
// Affichage des extrafields
$extrafields = new ExtraFields($this->db);
$extralabels=$extrafields->fetch_name_optionals_label($object->table_element);

			$object->fetch($rowid);
			$object->fetch_optionals($rowid,$extralabels);

			$pdf->writeHTMLCell (190,3, $this->posxdesc-1, $tab_top-5, $extrafields->showOutputField('typmat', $object->array_options['options_typmat'])
			
			// Display notes
			$notetoshow = empty($object->note_public) ? '' : $object->note_public;
			if ($notetoshow)

Je suis en Dolibarr v12.0.3 et PHP 7.3 .

Merci par avance pour votre aide.
JL

Bonjour,

Il manque ); à la fin de la ligne

Bonjour ,
ça marche. Merci ksar.
Belle journée.
JL

Bonjour

j’ai ajouter ces lignes sur mon modele PDF soleil, par contre sur le pdf gener il y a que les attribut et non pas le contenue, pouvez vous m’aider svp, merci d’avance

$extrafields = new ExtraFields($this->db);
$extralabels=$extrafields->fetch_name_optionals_label($object->table_element);
$object->fetch($rowid);
$object->fetch_optionals($rowid,$extralabels);

			$pdf->writeHTMLCell (60,5, 10, $tab_top, '<b>'.$extrafields->attribute_label['tdm'].'</b> : ' . $extrafields->showOutputField('tdm', $object->array_options['options_tdm']),1,1);
			$nexY = $pdf->GetY();

			$pdf->writeHTMLCell (60,5, 75, $tab_top, '<b>'.$extrafields->attribute_label['nds'].'</b> : ' . $extrafields->showOutputField('nds', $object->array_options['options_nds']),1,1);
			$nexY_tmp = $pdf->GetY();
			if ($nexY_tmp > $nexY) {
				$nexY = $nexY_tmp ;
			}
			$pdf->writeHTMLCell (60,5, 140, $tab_top, '<b>'.$extrafields->attribute_label['klm'].'</b> : ' . $extrafields->showOutputField('klm', $object->array_options['options_klm']),1,1);
			$nexY_tmp = $pdf->GetY();
			if ($nexY_tmp > $nexY) {
				$nexY = $nexY_tmp ;