(RESOLU) Problème lecture ExtraFields pour modifier un template PDF

Bonjour,

Sur une facture, je désire imprimer des informations venant d’un extrafields défini pour les factures et plusieurs extrafields définis au niveau des contacts client.

Etant un peu (beaucoup) rouillé en PHP, je suis parvenu à récupérer l’extrafields pour la facture, mais quand je veux lire ceux pour les contacts, cela ne me retourne rien.

            $extrafields = new ExtraFields($db);
            $extralabels=$extrafields->fetch_name_optionals_label($object->facture);
            $object->fetch($rowid);
            $object->fetch_optionals($rowid);
            $kilometrage = $outputlangs->convToOutputCharset($object->array_options ['options_kilometrage']);  

            dol_syslog('kilometrage:'.$kilometrage,LOG_INFO);

            // load extrafields for contacts
            $extralabels=$extrafields->fetch_name_optionals_label($object->socpeople);
            $object->fetch($rowid);
            $object->fetch_optionals($rowid);
            $marque = $outputlangs->convToOutputCharset($object->array_options['options_marque']);
            $modele = $outputlangs->convToOutputCharset($object->array_options['options_modele']);
            $num_chassis = $outputlangs->convToOutputCharset($object->array_options['options_chassis']);

            dol_syslog('marque:'.$marque,LOG_INFO);
            dol_syslog('modele:'.$modele,LOG_INFO);
            dol_syslog('chassis:'.$num_chassis,LOG_INFO);

Si je me fie au log, j’ai l’impression que le deuxième fetch reexecute la même requête que pour la facture.

Merci d’avance pour votre aide.

Jérôme

Bonjour,

Un petit tour par le wiki ?
https://wiki.dolibarr.org/index.php/Add_Extrafields_on_PDF_Models#Special_Case_for_Third_party_extrafields

Merci.

Je n’avais pas compris que les attributs complémentaires sur les contacts étaient vus comme des thirdparty extrafields.

J’ai modifié mon code comme suit:

		$extrafields = new ExtraFields($db);
		$extralabels=$extrafields->fetch_name_optionals_label($object->facture);
		$object->fetch($rowid);
		$object->fetch_optionals($rowid);
		dol_syslog('SimonizCar: kilometrage:'.$object->array_options['options_kilometrage'],LOG_INFO);
		$kilometrage = $outputlangs->convToOutputCharset($object->array_options['options_kilometrage']);  

		// get extrafields for contacts
		if(is_object($object->thirdparty))
		{
			$marque = $outputlangs->convToOutputCharset($object->thirdparty->array_options['options_marque']);
			$modele = $outputlangs->convToOutputCharset($object->thirdparty->array_options['options_modele']);
			$num_chassis = $outputlangs->convToOutputCharset($object->thirdparty->array_options['options_chassis']);
			dol_syslog('SimonizCar: marque:'.$object->thirdparty->array_options['options_marque'],LOG_INFO);
			dol_syslog('SimonizCar: modele:'.$object->thirdparty->array_options['options_modele'],LOG_INFO);
			dol_syslog('SimonizCar: chassis:'.$object->thirdparty->array_options['options_chassis'],LOG_INFO);
		}
		else
		{
			dol_syslog('SimonizCar: missing thirdparty informations', LOG_INFO);
		}	

J’ai bien récupéré mon attribut ‹ options_kilometrage ›, mais rien pour les thirdparty.

J’ai fait un print_r($object->thirdparty) et je n’ai vois rien lié à mes extrafields

J’ai trouvé :slight_smile:

Les informations dont j’ai besoin était dans l’objet « Contact », pour les lire, je dois utiliser:

		$marque = $outputlangs->convToOutputCharset($object->contact->array_options['options_marque']);
		$modele = $outputlangs->convToOutputCharset($object->contact->array_options['options_modele']);
		$num_chassis = $outputlangs->convToOutputCharset($object->contact->array_options['options_chassis']);
1 « J'aime »