Extrafields sur les PDF

Bonjour à tous,

Je découvre Dolibarr et malgré mes recherches sur le forum et dans la documentation, je n’ai pas trouvé la réponse à ma question. Je vous sollicite donc.

J’explique mon cas : Je suis en train d’utiliser les module Projets pour créer un listing de véhicules (pour un garage automobile). Chaque véhicule est associé à un Tiers, le propriétaire, sachant qu’un Tiers peut avoir plusieurs véhicules. J’ai donc ajouté des ExtraFields dans le module Projets tels que Marque, Modèle, N° d’immatriculation… Hors, j’aimerais que ces informations apparaissent quand je crée le PDF d’un devis ou d’une facture.
J’ai bien trouvé comment afficher les ExtraFields des modules Propal ou Facture mais pas ceux d’une autre table de la base.

J’aimerais donc savoir s’il est possible de récupérer les données de champs ExtraFields saisis dans le module Projets afin de les faire apparaitre dans un devis ou une facture associé au projet en question.

Merci.

Bonjour,

Voir cette page : https://wiki.dolibarr.org/index.php/Add_Extrafields_on_PDF_Models

Il faudra adapter le paragraphe « produit » par « projet » : https://wiki.dolibarr.org/index.php/Add_Extrafields_on_PDF_Models#Special_Case_for_Product_extrafields_on_Invoice_Line

Merci ksar !

Par contre, j’ai déjà pas mal cherché et j’ai déjà consulté ces deux pages sans trouver ce que je cherchais : la première est la manip pour ajouter des ExtraFileds mais dans un même module (ExtraFields Facture dans PDF Facture) et pour la deuxième, mes ExtraFields ne sont pas des « lignes » et je n’ai pas su comment adapter les lignes de commande.

Soit vous cherchez, soit vous payer quelqu’un pour le faire :wink:

Ça ne résoud ps vraiment mon problème… Donc c’est possible à faire ?
Je ne m’y connais pas trop en PHP, disons que j’arrive à bidouiller. Je vais creuser la question.
Merci quand même pour la réponse. :slightly_smiling_face:

Oui c’est possible à faire

1 « J'aime »

Bon alors, j’ai beau chercher et tester, je n’arrive pas à afficher mon extrafield ‹ immat › sur mon devis. Je suis arrivée à ça :arrow_down: mais ça ne fonctionne pas et je ne comprends pas pourquoi alors que j’arrive à afficher un extrafield du module Propale dans mon devis. Il y a un problème au niveau de la récupération de la table « Projet » mais où ?
J’ai bien ajouté les lignes
require_once DOL_DOCUMENT_ROOT.’/core/class/extrafields.class.php’;
require_once DOL_DOCUMENT_ROOT.’/projet/class/project.class.php’;

puis :

$project = new Project($this->db);
$object->fetch($project->rowid);
$object->fetch_optionals($project->rowid, $extralabels_project);

$extrafields_project = new ExtraFields($this->db);
$extralabels_project = $extrafields_project->fetch_name_optionals_label($project->table_element);

$project->fetch_optionals($project->rowid, $extralabels_project); // identique à la ligne objet au-dessus (?)
				
$pdf->SetFont('', '', $default_font_size + 2);
$pdf->SetTextColor(0, 0, 0);	
$pdf->writeHTMLCell (190, 3, $this->posxdesc-1, $tab_top-1, $outputlangs->convToOutputCharset($project->array_options['options_immat']), 0, 1); //remplacer par la valeur du champ
$nexY = $pdf->GetY();
$height_note = $nexY - $tab_top;

Bonjour

vous devriez utiliser « $project->id » au lieu de « $project->rowid »
car dans le source project.class.php (version 11.0.3), c’est bien le champ id qui est affecté
image
Bonne continuation

Merci @pcbleu,
Je suis allée voir dans project.class.php et en effet « rowid » est devenu « id » j’en ai profité pour mettre Dolibarr à jour vers la version 11.0.3.

Par contre, j’ai beau retourner le code dans tous les sens, je m’y pers entre « project » et « projet ». J’ai ausi essayé d’apres le tuto de Patas Monkey mais rien à faire… Je sens que je vais abandonner mon idée et faire plus simple car mes connaissances en PHP sont largement insuffisantes.

Merci à vous deux @ksar et @pcbleu.

Bonjour :smiley:

avez-vous essayé d’afficher ou de faire un dump dans le fichier des logs
je n’avais pas remarqué l’anomalie de votre source
$project = new Project($this->db);
$object->fetch($project->rowid);
$object->fetch_optionals($project->rowid, $extralabels_project);

le fetch que vous faites est sur un valeur égale à zéro - ça ne peut rien donner en résultat
l’id que vous passez à la fonction fetch doit avoir une valeur qui dépend de ce que vous avez à faire présenter dans le pdf

Bonne continuation

Bonjour,

Tel que vous le faites cela ne peut pas marcher.
Essayez un :

$project = new Project($this->db);
$project ->fetch($object->project_id);
$object->fetch_optionals($project->rowid, $extralabels_project);

$extrafields_project  = new ExtraFields($this->db);
$extrafields_project  = $extrafields_project  ->fetch_name_optionals_label($project ->table_element);

$project->fetch_optionals($project->rowid, $extralabels_project);

Il faut au préalable verifier que

$object->project_id 

Existe.

Pour cela faire un test en faisant un

var_dump($object);

Bonjour

J’ai suivi le tutoriel Add Extrafields on PDF Models - Dolibarr ERP CRM Wiki mais il n’y a rien de mentionné a propos d’une modification à apporter à ce niveau-là. Je me doute qu’il y a un soucis au niveau du chargement de la table mais je ne sais pas où ni comment corriger.
Je vais continuer à chercher. Merci encore à vous deux :smiley:

Voilà ce que ça donne :

[…]
Modules/Applications: user, syslog, categorie, agenda, facture, fournisseur, societe, service, blockedlog, debugbar, propal, expensereport, comptabilite, banque, prelevement, product, mailing, fckeditor, projet
Type gestionnaire de base de données: mysqli
Requête dernier accès en base en erreur: SELECT rowid, modele, immat, circulation, vin FROM llx_projet_extrafields WHERE fk_object =
Code retour dernier accès en base en erreur: DB_ERROR_SYNTAX
Information sur le dernier accès en base en erreur: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‹  › at line 1
[…]

Donc mes ExtraFields « modele », « immat », « circulation », « vin » sont bien récupérés mais contiennent une erreur. J’ai essayé de les supprimer et d’en créer d’autres avec d’autres noms (au cas où il y aurait un conflit avec une commande existante) mais le message d’erreur est le même.
Je vais continuer à potasser…
:thinking: :open_book: :books:

Bonjour,

Je pense que la question doit être assez récurrente pas je ne trouve pas la solution.
Je souhaite intégrer dans mes pdf de propals, commandes et factures les extrafields des produits. J’utilise déjà ODT2PDF mais je cherche à passer sur les pdf directement.

Pour le tuto de Patatas Monkeys aucun problème, mais c’est uniquement les extrafields de la propal, de la commande ou de la facture.

https://patas-monkey.com/index.php/en/guides-utilisateur-2/tutoriels-divers/Ajouter-un-extrafield-sur-un-pdf/

J’ai essayer d’utiliser ce code de Ksar
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);

//On devrait pouvoir utiliser les extrafields produit comme cela 
$product-\>array_options['options_xxxxxxxxx'];

}

Mais j’ai une erreur sur la ligne $extralabels_product = $extrafields_product->fetch_name_optionals_label($product->table_element);

Un solution à me proposer?

Quelle est l’erreur ?

celles ci:
Parse error: syntax error, unexpected ‹ $extralabelsline_product › (T_VARIABLE) in /var/www/html/dolibarr/htdocs/core/modules/propale/doc/pdf_azur.modules.php on line 488

Visiblement vous avez un probléme mais pas dans le code que j’ai transmit

Il n’y a pas de variable extralabelsline_product dans mon code

Edit : J’ai compris il manque le ; dans la ligne du dessus :cheer:

parfait encore un fois merci Ksar! :wink:

Par contre ensuite je n’arrive toujours pas à afficher l’extrafields.

c’est bien cela qu’il faut que je mette?
$pdf->MultiCell (0,5, $outputlangs->convToOutputCharset($product->array_options [‹ options_XXX ›]),0,‹ L ›);

[code]
$pdf->MultiCell (0,5, $outputlangs->convToOutputCharset($product->array_options[‹ options_mon_super_extrafield ›] ),0,‹ L ›);[/code

Parfait ! Merci Ksar :happy: