Modèle facture perso HS suite migration 2.7 - 3.2

Bonjour à toutes et tous,
J’utilise la V2.7.0 en prod depuis sa sortie et j’avais créé un modèle de facture personnalisé à partir du modèle crabe existant. J’avais donc 3 modèles, à savoir « oursin », « crabe » et « perso ». Tout allait bien, jusqu’à la migration ce jour vers la V3.2.0. « crabe » et « oursin » fonctionnent, « perso » est dispo dans le menu déroulant de choix de modèle de facture à générer, mais quand je sélectionne « perso » j’obtiens le message d’erreur suivant :
Fatal error: Class ‹ pdf_perso › not found in /data/www/monsite.fr/htdocs/core/modules/facture/modules_facture.php on line 224

Les fichiers « pdf_crabe.modules.php » « pdf_oursin.modules.php » et « pdf_perso.modules.php » sont bien présents dans htdocs/core/modules/facture/doc/ et aussi dans /htdocs/includes/modules/facture

Quel est le problème?
D’avance merci à celui qui prendra le temps de me répondre.

Bonjour,

Précision suite à mon message d’avant-hier.
Je viens de remarquer que dans la configuration du module Factures, modèle de documents de factures, apparait le message d’erreur suivant : Fatal error: Cannot redeclare class pdf_oursin in /data/www/monsite.fr/htdocs/core/modules/facture/doc/pdf_perso.modules.php on line 1029
De plus il n’y a qu’un modèle affiché :
Nom : oursin
Modèle de facture PDF complet (modèle alternatif)
Il n’y a pas le modèle crabe ni mon modèle perso qui fonctionnait sous la V2.7.0.
Suis membre de l’association Dolibarr et je serais heureux de trouver rapidement solution à ce problème de facture.
Merci.

il est recommandé de sauvegarder le fichier /conf/conf.php et le répertoires « documents » si il se trouve dans htdocs, puis de sauvegarder vos différents modèles personnalisés. Ensuite il est recommandé de supprimer les fichiers et de les remplacer par la nouvelle version, puis de restaurer conf.php et le répertoire documents si il se trouvait dans htdocs (si en dehors le laisser en dehors !)
en ce qui concerne les modèles de documents, jusqu’à la version 3.1 ils se trouvaient dans « /includes/modules/… », à partir de la 3.2 ils se trouvent dans « /core/modules/… »
Alors soit il faut les placer à nouveau dans ce nouveau répertoire et supprimer ceux présent dans « /includes/modules/… »
Soit créer un répertoire nommé « custom » à la racine web de dolibarr et créer une nouvelle arborescence identique aux différents chemin des modèles dolibarr:

/custom/core/modules/facture/doc/

ce répertoire custom permet de concentrer tout ce qui vient de l’extérieur en un même répertoire (modules externes, modèles personnalisés, etc…), plus facile à sauvegarder lors d’une mise à jour de dolibarr.

exemple pour un module externe:

au lieu de le mettre à la racine web:

/htdocs/multicompany/

on le place dans :

/htdocs/custom/multicompany/

ensuite il est nécessaire d’activer ce répertoire en décommentant 2 lignes dans conf.php qui se rapportent à ce répertoire « custom »
si les lignes ne sont pas présentes il faut les rajouter comme ceci:

vous devez avoir ces 2 lignes (les chemins sont pour l’exemple et seront différents chez vous):

$dolibarr_main_url_root='http://localhost';
$dolibarr_main_document_root='/var/www/dolibarr/htdocs';

vous devez rajouter ces 2 lignes :

$dolibarr_main_url_root_alt='http://localhost/custom';
$dolibarr_main_document_root_alt='/var/www/dolibarr/htdocs/custom';

:happy: Merci Régis d’avoir pris le temps de me répondre. J’avais remarqué ce changement de chemin pour les modèles de documents, mais étant modeste amateur et quasi nul en php je ne savais résoudre seul ce problème. Je vais suivre tes consignes et te tiens au courant.

:unhappy: Bonjour Régis, bonjour à tous,
En suivant tes consignes, j’arrive en effet à créer un nouveau modèle de facture que je place dans un répertoire htdocs/custom/core/modules/facture/doc et il est visible et je peux le sélectionner comme oursin et crabe. Mais quand je veux ouvrir mon modèle de facture personnalisé créé sous Dolibarr 2.7.0 j’obtiens toujours un message d’erreur Fatal error: Cannot redeclare class Product in /data/www/monsite.fr/htdocs/product.class.php on line 2695

Après des heures de recherche et de réflexion, j’ai édité et comparé les modèles crabe de la V3.2.1 et de la 2.7.0 je ne retrouve pas dans la V3.2.1 la ligne $libelleproduitservice=pdf_getlinedesc($fac->lignes[$i],$outputlangs,1);
J’avais rajouté le 1 en fin de ligne pour ne pas inclure les références de produits en début de chaque ligne de facture. Comment faire cela dans le fichier pdf_crabe.modules.php de la version 3.2.1?
Par avance merci.

Bonjour,

Difficile d’obtenir des informations, même en tant que développeur…
J’ai aussi le même problème, avec une migration récente de la 3.1 vers la 3.2, et mes modèles de facture ainsi que mes tweaking persos (dans modSociete.class.php par ex) sont squeezés.
Ce que je constate, c’est que Dolibarr est passé de la vieille méthode de construction des classes à la méthode plus moderne (c’est à dire utiliser la fonction __construct() au lieu d’utiliser une méthode qui porte le même nom que la classe).
Donc dans vos modèles de facture ou autre que vous avez crée à partir des modèles existants, il faut modifier dans un premier temps le nom du constructeur :
Par exemple, vers la ligne 54 de votre modèle de facture, vous devez avoir un

function pdf_nomDuModele($db)

à renommer en

function __construct($db)

Pour mon cas, ça ne suffit toujours pas, parce que ce n’est pas le fichier /core/modules/facture/modules_facture.php qui est appelé (je suppose que c’est celui ci qui devrait l’etre)
mais c’est /includes/modules/facture/modules_facture.php

Je continue mes recherches, mais Regis si tu passes par là et si tu pouvais m’orienter :happy:

j’ai déjà eu le soucis, quand on effectue une mise à jour, les anciens dossiers restent présent ce qui peu conduire à des résultats … troublant

Bonjour avez vous pu résoudre ce pb?

j’ai aussi ce méssage quand je vais dans les modules
Modèle de document de factures

Fatal error: Cannot redeclare class Product in :\dolibarr\www\dolibarr\htdocs\product.class.php on line 2695

Merci par avance