rufo Pas me confondre avec Lycos! | 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)
Auriez-vous un algo suffisamment souple pour gérer ces situations et pas trop gourmand en temps de calcul, svp ?
Merci ---------------
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
|