[Dolibarr 3.0] Avoir le montant des factures/devis sur les boites d’accueil

Note importante avant de commencer:

  • Je ne suis pas un expert du PHP et de ses subtilités. Pas plus que du code de Dolibarr. Donc on peut sans doute faire plus simple/ plus propre/ plus beau/ plus court/ plus clinquant/ plus rapide/ …
  • Ça fonctionne. Je ne demandais rien d’autre au code. Et ça fonctionne comme je le veux.
  • Ça n’a été testé que sur dolibarr-3.0.0 stable depuis avril 2011. Aucune garantie que ça fonctionne pour vous ou sur votre installation. Prenez les précautions d’usage avant de tout casser (sauvegarde des fichiers, BDD, travail sur une installation de test, etc)
  • Aucune assistance ne sera donnée. Les astuces ci dessous vous sont données brutes. Ensuite, voyez sur les forums de PHP ou de Dolibarr pour le reste. Ce n’est pas un manque de volonté de vous aider, mais un manque de compétence avoué. Je bricole en PHP, mais ce n’est pas mon métier.

Mise à jour:
Sur Dolibarr 3.6 (je ne sais pas pour les autres versions) les fichiers à modifier se trouvent dans /htdocs/core/boxes.
Le reste des modifications est identique.

Genèse

Lorsque j’ai un client au téléphone, ou par  courrier, il n’utilise jamais le numéro de devis ou de facture. Ça n’est pas naturel pour lui. En général, on me donne le montant. Exemple: « oublions le devis de 2412.35, mais on va faire celui de 1200. J’ai envoyé la facture de 360 à la compta, …. »

Ça a du vous arriver, si vous êtes dans la même situation professionnelle que moi.

Sauf qu’avec Dolibarr, quand vous avez la liste des documents sur le tableau de bord, vous n’avez pas sous les yeux tous les devis et toutes les factures. En effet, il faut aller sur la fiche client pour voir les détails de chaque document (les 4 derniers).

Tout va bien client par client. Mais j’ai des clients qui font gérer leur secrétariat par la même société, donc j’ai un seul interlocuteur pour plusieurs clients, et il est plus difficile de sauter d’un client à l’autre.

Et puis ce petit hack permet de diminuer le nombre de clics pour arriver sur la bonne facture ou sur le bon devis.

Pour les propositions commerciales (devis):

Modifier le fichier htdocs/includes/boxes/box_propales.php

ligne 73: modifier de

$sql.= " p.rowid, p.ref, p.fk_statut, p.datep as dp, p.datec, p.fin_validite, p.date_cloture";

à

$sql.= " p.rowid, p.ref, p.fk_statut, p.datep as dp, p.datec, p.fin_validite, p.date_cloture, p.total";

ensuite, à partir de la ligne 121, modifier comme suit (ajout d’un bloc de code et renumérotation des suivants):


$this->info_box_contents[$i][4] = array('td' => 'align="right"',
'text' => dol_trunc(number_format($objp->total, 2, ',', ' '),40)."€",
'url' => DOL_URL_ROOT."/comm/propal.php?id=".$objp->rowid);

$this->info_box_contents[$i][5] = array('td' => 'align="right"',
'text' =>dol_print_date($datec,'day'));

$this->info_box_contents[$i][6] = array('td' => 'align="right" width="18"',
'text' => $propalstatic->
LibStatut($objp->fk_statut,3));

Les dernières factures client modifiées:

Modifier le fichier htdocs/includes/boxes/box_factures.php ligne 75: modifier de

$sql = "SELECT f.rowid as facid, f.facnumber, f.type, f.amount, f.datef as df";

à

$sql = "SELECT f.rowid as facid, f.facnumber, f.type, f.amount, f.datef as df, f.total_ttc";

à partir de la ligne 128, modifier comme suit (ajout du premier bloc et renumérotation des blocs suivants):

$this->info_box_contents[$i][4] = array('td' => 'align="right"',
'text' => dol_trunc(number_format($objp->total_ttc, 2, ',', ' '),40)."€",
'url' => DOL_URL_ROOT."/compta/facture.php?facid=".$objp->facid);

$this->info_box_contents[$i][5] = array('td' => 'align="right"',
'text' => dol_print_date($datec,'day'),);

$this->info_box_contents[$i][6] = array('td' => 'align="right" width="18"',
'text' => $facturestatic->LibStatut($objp->paye,$objp->fk_statut,3));

Les dernières factures client impayées

Même chose que ci dessus, à adapter au fichier htdocs/includes/boxes/box_factures_imp.php

Résultat

N’utilisant pas dolibarr pour les factures fournisseurs, si vous voulez faire la même chose, il vous suffit de modifier les fichiers adéquats dans le dossier htdocs/includes/boxes/ de votre instalation dolibarr

Le total des factures

Maintenant qu’on a les montants de chaque facture, ce serait bien d’en avoir le total, en particulier pour les factures client impayées. C’est quand même pratique de savoir « l’argent qu’on a dehors » quand l’argent qu’on a dedans vient à manquer.

Attention: Le total ne sera calculé que sur la limite d’affichage des factures dans la boite d’information. Si vous avez choisi d’afficher 10 factures seulement dans cette boite, même si vous avez 50 factures impayées, le total sera effectué sur les 10 factures seulement affichées!

On va modifier à nouveau le fichier htdocs/includes/boxes/box_factures_imp.php .

On ajoute ligne 41 une variable qui va cumuler le total à chaque facture rencontrée

var $impayes;

Dans le bloc de code qu’on a ajouté pour avoir le montant, on ajoute une ligne (la dernière ci dessous, j’ai mis tout le bloc de code pour repérage facile dans le code)

$this->info_box_contents[$i][4] = array('td' => 'align="right"',
'text' => dol_trunc(number_format($objp->total_ttc, 2, ',', ' '),40),
'text2' => " €",
'url' => DOL_URL_ROOT."/compta/facture.php?facid=".$objp->facid);
$impayes += number_format($objp->total_ttc, 2, '.', ' ');

Cette ligne va cumuler le total des factures, et il ne reste plus qu’à afficher le total en bas du bloc des factures. Afin d’être logique, le total sera sous la colonne des montants. Il faudra donc donner des éléments vides à l’array de construction pour placer le total au bon endroit. Ce qui se fait avec le code suivant:

.....
$i++;
}
// code à ajouter ///////
$this->info_box_contents[$i][0] = array('td' => 'align="left" width="16"',);

$this->info_box_contents[$i][1] = array('td' => 'align="left"',);

$this->info_box_contents[$i][2] = array('td' => 'align="left" width="16"',);

$this->info_box_contents[$i][3] = array('td' => 'align="left"',);

$this->info_box_contents[$i][4] = array('td' => 'align="right"',
'text' => dol_trunc($impayes,40),
'text2' => " €",);
// fin de code à ajouter /////
if ($num==0) $this->info_box_contents[$i][0] = array('td' => 'align="center"','text'=>$langs->trans("NoUnpaidCustomerBills"));
.....

Repérez vous grâce à la ligne $i++ pour placer le reste après, avant la ligne if ($num==0) …

Résultat final

Conclusion

J’utilise ces modifications depuis plusieurs jours sans aucun soucis, et j’avoue que c’est bien plus pratique que l’affichage de base de Dolibarr.
Notez que vous devrez ré-appliquer ces modifications après chaque mise à jour de Dolibarr.

Vous pouvez aussi télécharger les fichiers modifiés que je met à votre disposition et les copier dans votre installation de Dolibarr.