Surcharger un fichier natif par un fichier provenant d'un module (+ BONUS récupération ROWID llx_facture_fourn_det)

Bonjour bonjour communauté de dolibarr !

Développant depuis plusieurs mois sur Dolibarr, je suis en train de développer un module qui modifie l’export comptable !

Nous avons un fichier natif où une fonctionnalité est présente mais non fonctionnelle, le fichier htdocs/accountancy/journal/purchasesjournal.php possède une fonctionnalité pour envoyer en BDD le rowid de llx_facture_fourn_det lors de l’enregistrement en comptabilité (niveau achat fournisseur).
Pour que cela fonctionne il faut modifier le code (en bas de poste → le code à modifier pour les potentiels intéressés) mais j’aimerai développer cela sous forme de module afin de le déployer puis rapidement sur d’autres Dolibarr.

Donc ce que je cherche à faire :

  • Lors de l’activation du module je souhaiterai que le fichier purchasejournal.php soit remplacé par mon fichier modifié purchasejournal.php afin que je puisse « débloquer » cette fonctionnalité simplement en activant mon module.

En bref : Comment surcharger un fichier par un autre en passant par un module (sans modifier le code de base de Dolibarr ?

Depuis quelque temps je me penche sur le système de hook/trigger mais je suis assez perdu à ce niveau, du fait que je ne trouve pas la doc très clair (pour ma part) et que sur les forums les développeurs Dolibarr cherche surtout à injecter des hook dans des modèles PDF.

ASTUCE :
/home/dolibacasable/public_html/htdocs/accountancy/journal/purchasesjournal.php

Ligne 216 et 217 → Décommenter les lignes
//$line = new SupplierInvoiceLine($db);
//$line->fetch($obj->fdid);

Ligne 227 → Décommenter la ligne
//$tabfac[$obj->rowid][« fk_facturefourndet »] = $obj->fdid;

Ensuite faite une recherche du mot « det » (Ctrl + F) :
Remplacer toutes les valeurs 0 par $val[« fk_facturefourndet »] dans
$bookkeeping->fk_docdet = 0;

Cela devrait ressembler à ça :
$bookkeeping->fk_docdet = $val[« fk_facturefourndet »];

Merci à vous pour le temps que vous prendrez pour mon sujet,
Bonne journée,
Paul

Bonjour,

Oui, un peu comme ça : FIX missing fk_docdet in accountancy by aspangaro · Pull Request #669 · Easya-Solutions/dolibarr · GitHub

La fonction a été retiré en v16 alors que plusieurs modules se basent dessus.

Avant il suffisait d’utiliser la constante suivante pour activer la fonctionnalité : ACCOUNTANCY_ENABLE_FKDOCDET

Maintenant, il faut la constante + le patch, ce qui est embêtant.

Un conseil pour vos problèmes de substitution, cherchez : dolibarr_module_pagessubstitution

Bonne journée

1 « J'aime »

Bonjour Aspangaro-Easya,

Merci pour ta réponse rapide !
Je ne savais pas qu’il y avait cette fonction de disponible !
Oui un peu dans le même style mais il faut bien penser à modifier la valeur « 0 » car sinon à chaque enregistrement fk_docdet restera à 0.

Je vais me renseigner sur dolibarr_module_pagessubstitution.
Merci et bonne journée :slight_smile:

Je prends connaissance de votre module, j’ai 2 questions à poser :

1- Je cite :
« Vous devez mettre les pages à substituer dans ce répertoire ‹ /home/dolibacasable/public_html/htdocs/pagessubstitution/substitutions › en gardant la même arborescence (ex: ‹ societe/soc.php ›). »

Faut-il que je reproduise la structure complète du module ? avec tous les autres fichiers ou simplement le fichier concerné dans mon cas : accountancy/journal/purchasejournal.php

2 - Je cite :
« Pour qu’il soit pris en compte vous devez remplacer la ligne incluant le fichier ‹ main.inc.php › (ex: « require ‹ …/main.inc.php ›; ») par : »

Si mon fichier ne contient pas de main.inc.php le fichier peut-il quand même avoir sa page de substitution ?

Un grand merci pour m’avoir redirigé vers ce module

Bonjour,

Simplement le fichier que vous souhaitez remplacer et il faut remplacer son main.inc qui se trouve en général tout en haut par la séquence proposé dans la configuration du module pagessubstitutions.

Ensuite, il faut activer la page a remplacer dans la configuration du module (celle ci ayant dû apparaître après la 1ere action) et c’est parti.

Bonne journée

J’ai suivi toutes les étapes mais mon fichier de substitution ne prend pas le relais, j’ai mis un echo sur la page remplaçante pour savoir quelle page est chargée mais après les manipulations le echo n’apparait pas.

Pour mieux comprendre ma configuration :

  • Version Dolibarr : 18.0.2

  • Chemin du fichier de substitution : /home/dolibacasable/public_html/htdocs/pagessubstitution/substitutions/accountancy/journal/purchasesjournal.php

  • Chemin du fichier de base :
    /home/dolibacasable/public_html/htdocs/accountancy/journal/purchasesjournal.php

  • La page purchasesjournal.php est bien activée via le module pagesubstitution

  • echo « Page de Substitution »; rajouté à la fin de mon code pour pouvoir l’identifier si elle apparait

Merci du temps que tu m’accordes pour pallier ce problème

Bonjour,

Voici le module compilé avec le bon fichier.

Il suffit de se rendre sur la page comme d’habitude (Compta > Achats), l’URL devrait être celui de la page de substitution.

module_pagessubstitution-4.0.2.zip (73,6 Ko)

Bonne journée,

Bonjour Aspangaro,

J’ai essayé de supprimer les anciens fichiers que j’avais et de les remplacer par le zip que tu viens tout juste de m’envoyer.
Mais aucune différence j’essai de mettre des echo sur les pages de substitutions pour être sur que le fichier chargé est celui que je nécessite mais rien y fait les pages originelles sont chargés. J’ai regarder tous les paramètres mais impossible à résoudre, j’ai aussi chercher un error.log, sans succès.

Je te sollicite une dernière fois, est-ce normal que le module ne fonctionne pas sur mon dolibarr en 18.0.2 ?

Bonjour,

Non ce n’est pas normal.

C’est car le module doit être dans le dossier custom. On doit avoir htdocs/custom/pagessubstitution/

Bonne journée

Après vérification sur une instance dolibarr en 17.0.2, le module fonctionne. J’en conclus que le module n’est pas compatible avec la dernière version de dolibarr.

Une idée de si le module va avoir une version compatible avec la 18.0.2 ? Sinon j’essaies de rendre le module compatible

Bonjour,

Testé sur une version 14.0.5/15.0.2/16.0.1/17.0.3/18.0.3/19.0 beta, strictement aucun problème. On déploie le module, on active la page dans l’admin et ça remplace.

Désolé je peux pas faire mieux…

Bonne journée,

Après un test sur une autre instance en 18.0.1 j’ai réussi à obtenir le résultat que j’attendais, surement un problème avec mon instance en 18.0.2…

Merci de l’aide que tu m’as apporté,
Bonne journée

Bonjour,

Votre module fonctionne parfaitement pour la plupart des pages.

Je veux remplacer /htdocs/core/class/html.form.class.php, mais ce n’est pas possible avec le module.

Existe-t-il une solution pour remplacer ce fichier ?

Salutations

Bonjour,

Non pas possible mais un hooks permet de surcharger une fonction si cela ne convient pas.

Bonne journée,