Je souhaite calculer la rentabilité d'un dossier et/ou d'un employé en fonction de son temps passé et de la facturation. Donc deux requêtes SQL en fait.

J'ai les tables suivantes :

personnel {id, nom, prenom, etc...}
suivi {id,perso,salBase169, salBrutBase, anciennete, heure_sup, complement_differentiel,date....}
tp_prh {id, perso, prh_mode, value, date}

Avec ces trois tables, je peux calculer le prix de revient horaire d'un employé pour une date donnée (le prh étant soit fixé, soit étant dépendant du salaire horaire de l'employé)

tp {id,perso,dossier,duration,date}
facture {id,dossier,remise_type,remise,date...}
facture_detail {id,facture,qte,prix,revision,memoire...}

Avec celles-ci, et les précédentes, je peux calculer le prix de revient chantier d'un dossier, ainsi que la somme totale facturée pour le dossier (factures et acomptes).

Bon, mon souci, en fait y'en a 2, déjà le premier souci c'est que le calcul du prc est plutôt lent (une 30aine de secondes), mais bon, à la limite, c'est secondaire comme problème.

Mon principal problème vient du calcul de la rentabilité d'un dossier et/ou d'un employé.
En gros, pour un dossier donné, je dois obtenir une table de ce genre : {perso, total_facturé, prix_revient_total}
Pour le personnel, ceci : {dossier, total_facturé, prix_revient_total}

Parlons déjà des dossiers...
Chaque employé peut avoir travaillé sur un dossier et donc avoir du temps passé dans ce dossier.
Une fois le dossier facturé, chaque employé ayant travaillé dans ce dossier se voit attribuer une part de la facturation en fonction de son temps passé.
Autrement dit, si un employé a travaillé 20 heures sur un dossier qui a été travaillé 40 heures au total (tout employé confondu) alors cet employé se voit attribuer la moitié de la facture, donc 500€, par exemple, si le dossier a été facturé 1000€. Dans un tel cas, on dira que l'employé a facturé 500€ sur ce dossier.
Si ensuite, l'employé a un prix de revient horaire de 40€, alors il a coûté 800€ à l'entreprise quand il a travaillé sur ce dossier. (bosser à perte, c'est le MAL :p lol)

Jusqu'ici, rien de bien méchant. Maintenant, le souci, c'est quand on parle des acomptes.
En effet, un dossier peut-être facturé en plusieurs fois.
Dans un tel cas, le temps passé est associé à la facture la plus ancienne dont la date est supérieure ou égale à la date du temps passé.
Bref : -----F1-----TP-----F2-----F3---->
Ici, le temps passé TP est associé à la facture F2.
Du coup, notre calcul de rentabilité précédent sur le temps passé TP ne doit prendre en compte que la facture F2...

Et c'est pas fini, y'a pire
Certaines fois, il y a plusieurs personnes qui sont facturées en même temps (la même journée quoi). Dans ce cas, les factures de la même journée doivent être comptées comme une seule, c'est à dire que notre calcul de rentabilité portera sur la somme des factures d'une même journée.
Exemple : ----F1--TP--F2+F3+F4----F5---->
Le temps passé TP est associé à la somme des factures F2, F3 et F4.

Sympathique non ?