Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2415 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Algorithme pour le calcul de % de paiements affectés à des factures

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Algorithme pour le calcul de % de paiements affectés à des factures

n°2213626
rufo
Pas me confondre avec Lycos!
Posté le 13-12-2013 à 17:34:08  profilanswer
 

Bonjour,
 
Je cherche à optimiser un algorithme qui calcule le % d'un paiement affecté à une facture. En gros, dans une BD Mysql, j'ai des factures et des paiements faits des personnes. J'ai une relation n-m entre mes factures et les paiements. Une facture peut être payée par 1 ou plusieurs paiements, 1 paiement peut être affecté à 1 ou plusieurs factures et plusieurs factures peuvent être concernées par plusieurs paiements.
 
Pour savoir si une facture est complètement payée (j'ai un flag en base pour chaque facture, 0 ou 1), je regarde si les paiements affectés à cette facture couvre le montant. Si oui, le flag de la facture passe à 1. Sauf que certains paiements peuvent être affectés à d'autres factures (suivantes ou précédentes). Du coup, je dois être capable de calculer le % d'un paiement qui est alloué à une facture en fonction de ce qui a été alloué pour ce paiement à d'autres factures. C'est donc un pb récursif.
 
Au début, je calculais ce % alloué à la volée mais quand il y a des personnes qui file jamais le bon montant pour payer une facture, je me retrouve à devoir repartir de leur première facture et leur 1er paiement et tout "remonter", ce qui se révèle lourd. J'ai donc ajouté un champ "MontantAlloue" sur la table de liaison Factures-Paiements.
 
Du coup, c'est au moment où je saisis un paiement que je calcule le % alloué. Je suis parti sur l'idée d'ordonner les factures et les paiements en fonction de leur date de création/saisie. Sauf que la personne qui saisit les paiements peut à sa guise retirer un paiement d'une facture et le mettre sur une autre. du coup, cet ordonnancement par une date ne marche plus car un paiement saisi il y a un moment peut se retrouver sur une facture récente et vice-et-versa. Ca m'oblige donc, dans certains cas, lors de la saisie d'un paiement, de devoir recalculer tous les % alloués des paiements aux factures depuis le début, ce qui se révèle long ! Et des fois, j'ai des bugs (des factures complètements payées mais leur flag est pas à 1) :cry:
 
Auriez-vous un algo suffisamment souple pour gérer ces situations et pas trop gourmand en temps de calcul, svp ?
 
Merci :jap:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 13-12-2013 à 17:34:08  profilanswer
 

n°2213639
czh
Posté le 13-12-2013 à 23:01:02  profilanswer
 

Personnellement, je ferais ça :
 
(1) table relation facture-paiement :
  - champs contenant le montant du paiement alloué à la facture
 
Lorsqu'un paiement est réparti sur une autre facture, on crée un lien de relation sur l'autre facture, et on fait varier les montants alloués des 2 relations tout en vérifiant la cohérence des montants : la somme des montants ne doit pas dépasser le montant total du paiement.
 
(2) table facture :
  - champs contenant le montant à payer de la facture
  - champs contenant le montant payé de la facture
 
Lorsqu'on modifie la relation paiement-facture, on recalcule le champs montant payé, en vérifiant que le montant payé ne dépasse jamais le montant à payer.
 
(3) table paiement :
  - champs contenant le montant du paiement
  - champs contenant le montant utilisé dans une ou plusieurs factures
 
Lorsqu'on modifie la relation paiement-facture, on recalcule le champs montant utilisé, en vérifiant que le montant utilisé ne dépasse jamais le montant du paiement.
 
Les modifications (2) et (3) ne sont pas des nécessaires, mais ce sont des optimisations qui permettent de ne pas avoir à faire de jointure pour les consultations et les vérifications de cohérence des données.
 
Les part en % se calcule par simple division entre les 2 champs montant partiel / montant total des tables facture et paiement.
Les % n'ont rien à faire en base de données, ce sont des données à calculer à l'affichage.
 
PS: De plus un %, c'est une approximation ce n'est pas une donnée fiable.


Message édité par czh le 13-12-2013 à 23:08:35
n°2213666
rufo
Pas me confondre avec Lycos!
Posté le 14-12-2013 à 16:17:14  profilanswer
 

Quand je parlais de %, on est bien d'accord que je parlais de portion d'un paiement allouée à une facture, donc un montant <= au montant du paiement.
J'ai bien une table factures-paiements avec le champ qui contient le montant du paiement alloué à la facture. Dans la table Paiements, j'ai bien le montant du paiement, et dans la table Factures, le montant de la facture + 1 flag pour dire que la facture est payée totalement.  
 
Je prends note de tes propositions d'optimisations en ajoutant un champ dans "Factures" qui indique le montant payé et dans la table "Paiements", le champ indiquant le total alloué aux factures.
 
Merci de l'idée. :)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Algorithme pour le calcul de % de paiements affectés à des factures

 

Sujets relatifs
(EXCEL) Calcul de séléction avec case à cocherCalcul des rendements d'une action au cours du temps avec vba
Outil calcul temps génération de la page serveurProblème simple de calcul
Calcul d'un orthodromie et recouvrement d'une sphère.Calcul de d'une orthodromie avec Ada
Help, Algorithme de tri sélectif VBA[EXCEL] Calcul de prono pour le foot :p
calcul de cout d'une requeteimporter des adresses de factures sous excel
Plus de sujets relatifs à : Algorithme pour le calcul de % de paiements affectés à des factures


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR