GIFF - Facture de situation 2022

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search

Présentation du sujet pour ce GIF :

Amélioration des factures de situation

Outils de travail :

Problématique détaillée

Problème 1 - La TVA

Exemple d'une prestation de service proposée (devis) à 2500€ HT. Cette prestation sera faite en 3 fois, chaque étape donne lieux à une facture de situation notées S1, S2 et S3.

  • S1 : 25% réalisé, facture de 625€ HT, TVA collectée 125€
  • S2 : progression totale de 50%, donc facture de 625€ HT, TVA collectée 125€
  • S3 : progression totale de 100%, donc facture de 1250€ HT, TVA collectée 250€
  • Total de la TVA collectée = 500€

L'implémentation actuelle (version dolibarr 16.0.3) se présente comme ceci:

  • Affichage OK dans le détail des factures (voir capture "Situation S3")
  • Affichage OK sur les listes des factures et affichage des totaux corrects
  • Mais erreur lors du calcul de la TVA (voir les 2 captures suivantes) : Total TVA collectée : 875€


Problème 2 - Les boites "objets référents"

Nouvelle simulation, avec des produits ou services de la base article de dolibarr. Le pb se pose lorsque vous allez consulter la fiche d'un article qui se trouve sur des factures de situations.

Vous pouvez voir sur la dernière capture d'écran que les stats liées au service MOA sont fausses: elles font croire que ce produit a généré 10k€ de CA.


Problème 3 - La page Comptabilité - Liaison facture clients

Il n'y a pas de compensation de mauvais stockage des données sur cette page. Les montants sont donc faux.



Ce qui marche bien :)

Car pour celles / ceux qui utilisent les factures de situations l'implémentation actuelle permet tout de même de faire de grandes choses ! Il est donc important de noter ce qui marche - ça permet aussi de confronter éventuellement des croyances ("chez moi ça marche") avec la réalité ...

  • L'export de données en passant par l'assistant export (utilisé pour générer des tableaux de bords par la consolidation de données avec des outils externes)
    • Lot de données à exporter: Factures clients et règlements
    • Champs à exporter: Code client, Réf. facture, Total HT, Date facturation
    • -> le fichier exporté permet de faire un total des factures qui correspond à la réalité
  • La liste des factures, le total indiqué en bas de page est correct
  • .../...

Étapes prévues pour ce POC

Étape -1 - Documentation technique de la solution actuelle

Quelques informations histoire de savoir de quoi nous parlons ...

  • dans la table table llx_facture
    • situation_cycle_ref : le numéro global de cycle des factures de situations, si 100 séries de factures de situations ont déjà été gérés alors le cycle en cours sera 101. C'est un identifiant permettant de retrouver toutes les factures d'une même série.
    • situation_counter : le numéro dans le cycle en cours (1 pour S1, 2 pour S2, 3 pour S3...)
    • situation_final : Défini à 1 quand une facture de situation sera la dernière du cycle.
  • dans la table llx_facturedet
    • situation_percent: stocke le % de progression global de la ligne
    • fk_prev_id: est une clé étrangère vers llx_facturedet.rowid de la même "ligne de facture" sur la facture précédente (c'est ainsi qu'on peut calculer la "progression" entre deux factures)
Étape 0 - Définition du modèle de données

-Ajout des données dans la table des factures et/ou des lignes. Validation de ces modifications par soumissions d'une PR avec les changements sur la base de données si il y en a.

Étape 1 - Fonction migration des données dans le nouveau modèle de données

-Migration des données (si possible)

-Génération du pdf sur la base des nouvelles données

Consignes

  • Le nouveau code devra être conditionné par getDolGlobalInt('INVOICE_USE_SITUATION') == 2 (on conserve la valeur 1 utilisé pour l'ancien mode de fonctionnement).
  • Le type de facture devra être le même que le type TYPE_STANDARD (et non plus un type dédié TYPE_SITUATION). L'identification du fait que c'est une facture standard pour situation ou pas se voit déjà grâce au champ situation_cycle_ref (non défini pour une facture standard non situation et défini pour une facture standard de situation)