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.
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.
Ç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.
Bon alors, j’ai beau chercher et tester, je n’arrive pas à afficher mon extrafield ‹ immat › sur mon devis. Je suis arrivée à ça 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;
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é
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.
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
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
[…] 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…
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.
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);