multi calcul.

Mammouth du PHP | 702 Messages

14 mars 2012, 15:20

Bonjour à tous, j'essaie de faire un script qui me permet de calculer des intérêts. Pour ça j'ai une créance, il faut savoir qu'elle est composée de plusieurs factures. Le calcul des intérêts démarre à partir de la date échue jusqu'au jour J (aujourd’hui).

A savoir, j'ai la facture n° ABC qui a pour montant principal X € et sa date échue est n-1
j'ai la facture n° DEF qui a pour montant principal Y € et sa date échue est n-1
Je voulais faire un script qui permette pour chaque facture de calculer les intérêts et d'en faire la somme pour que le tout s'affiche dans un <?php echo ?> le soucis est que je sais le faire pour chaque facture mais je ne sais pas comment faire pour tout regrouper. car les dates échue peuvent varier d'une facture à l'autre et également que les montants principaux ne sont pas les mêmes. La créance est identifiée par un numéro de dossier qui regroupe toutes les factures. chaque facture contient un id, le n° de dossier à laquelle elle se réfère, ainsi que le montant principal et la date échue. D'avance merci pour votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 mars 2012, 15:27

salut,

je suppose que toutes les infos sont un sgbd ?

si oui un group by "dossier" devrait aider ?

enfin la sans code c'est que du pif ^^

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 702 Messages

14 mars 2012, 15:30

oui c'est tout stocké dans mysql. pour le code j'ai fais ça
<?php $sql12 = 'SELECT * FROM factures WHERE n_doss=' . $_GET['n_doss'] . '';

$req7 = mysql_query ($sql12) or die ('Erreur SQL !<br>'.$sql12.'<br>'.mysql_error ()); 

while($data9 = mysql_fetch_assoc ($req7)) 

{ ?><?php } ?>
après je suis bloqué je ne sais pas comment progresser.

ViPHP
ViPHP | 2577 Messages

14 mars 2012, 15:38

$total_interet = 0;
$total_principal = 0;
$taux_interet = ?;

$sql = 'select facture, principal, echeance from table_facture where dossier = 1';
$query = mysql_query($sql);
while ($data=mysql_fetch_assoc($query))
{
   $facture = $data['facture'];
   $principal = $data['principale'];
   $echeance = $data['echeance']; // faire une convertion en date php
   $duree = calcul entre date du jour et echance cf doc PHP
   $intéret = calcul principal & duree & taux 

   $total_interet += $interet;
   $total_principal += $principal;

   echo des données avec formatage
}
echo des totaux avec formatage

Mammouth du PHP | 702 Messages

14 mars 2012, 15:41

je ne comprends pas les += ?

ViPHP
ViPHP | 2577 Messages

14 mars 2012, 15:55

C'est équivalent à $total_principal = $total_principal + $principal
Un peu dans le genre du $i++, un truc de fainéant.

Mammouth du PHP | 702 Messages

14 mars 2012, 17:36

au niveau des echos je ne sais pas quoi afficher.

Mammouth du PHP | 702 Messages

14 mars 2012, 18:08

déjà je vais remplacer
$duree par $duree= DATEDIFF(NOW(),$date_echeance)

Mammouth du PHP | 702 Messages

15 mars 2012, 09:18

et après je ne sais pas encore ...

Mammouth du PHP | 702 Messages

16 mars 2012, 18:06

j'ai essayé de remanier le script à ma sauce ^^... Mais que d'erreurs/
<?php $total_interet = 0;
$total_principal = 0;
$taux_interet = 0;
 
$sql = 'select * from factures where n_doss='.$_GET['n_doss'].'';
$query = mysql_query($sql);
while ($data=mysql_fetch_assoc($query))
{
  
   $principal = $data['montant'];
   $echeance = $data['date_echue']; 
   $duree= Date_diff(date('ymd'),$echeance);
   $interet = $principal*($nb + ($duree*$taux) - $principal);
 
}
echo $interets ;
 ?>
Si quelqu'un peut m'aider. ca serait avec grand plaisir, la il me dit.
( ! ) Warning: date_diff() expects parameter 1 to be DateTime, string given in C:\wamp\www\NEOGETCASH\GESTIONNAIRE\tableau-central.php on line 108
Call Stack
#	Time	Memory	Function	Location
1	0.0017	951984	{main}( )	..\creance.php:0
2	0.0421	1226688	include( 'C:\wamp\www\NEOGETCASH\GESTIONNAIRE\tableau-central.php' )	..\creance.php:673
3	0.0433	1231752	date_diff ( )	..\tableau-central.php:10
d'avance merci pour votre aide

ViPHP
xTG
ViPHP | 7331 Messages

16 mars 2012, 19:19

L'erreur est très explicite. La fonction requiert un objet DateTime et tu lui donnes une String. ;)

Mammouth du PHP | 702 Messages

17 mars 2012, 08:29

mais pourtant date(ymd), renvoit bien une date non?

Mammouth du PHP | 702 Messages

17 mars 2012, 09:36

j'ai remodifié tout le code... le soucis c'est qu'il me renvoit 0...
<?php 
$sql = 'select * from factures where n_doss='.$_GET['n_doss'].'';
$query = mysql_query($sql);
while ($data=mysql_fetch_assoc($query))
{
  
   $principal = $data['montant'];
   $echeance = $data['date_echue']; 
   $duree= $diff = abs(strtotime( date('Y-m-d')) - strtotime($echeance));
   $interet = (1 + 0.06);
 function puissance($x,$y)
 { 
  $resultat=0;
  for ($i=0;$i<$y;$i++)
   $resultat *= $x;
  return $resultat;
 }
 
 $ti= $principal*puissance($interet,$duree);
 echo $ti ; }
 ?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 mars 2012, 12:33

mais pourtant date(ymd), renvoit bien une date non?
Non, si tu regarde la doc, c'est bien une chaine de caractère qui est renvoyée et pas un objet de type date :
string date ( string $format [, int $timestamp = time() ] )
Retourne une date sous forme d'une chaîne, au format donné par le paramètre format, fournie par le paramètre timestamp ou la date et l'heure courantes si aucun timestamp n'est fourni. En d'autres termes, le paramètre timestamp est optionnel et vaut par défaut la valeur de la fonction time().
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 702 Messages

17 mars 2012, 21:19

finalement mon problème est presque résolu... Sauf que j'ai un dernier détail. Il faudrait que je fasses une boucle de type foreach mais je crois que ce n'est que valable pour mysql? et non pas pour php? je me trompes? le souci que j'ai c'est que je peux avoir 10000 factures avec 10000 dates d'échéances différentes et 10000 montant principaux différents. Je ne sais pas comment coder, mais en tout cas le résultat fonctionne pour une facture déjà :)
<?php 
$sql = 'select * from factures where n_doss='.$_GET['n_doss'].'';
$query = mysql_query($sql);
while ($data=mysql_fetch_assoc($query))
{
  
   $principal = $data['montant'];
   $echeance = $data['date_echue']; 
   $day= date('y-m-d');

 $s = strtotime($day)-strtotime($echeance); 
 $d = intval($s/86400)+1;   
   

   $i = (0.06);
 
$tx=  $principal*($i/360)*$d;
$i2= number_format($tx, 2, ',', ' ');
echo $i2 ;
 }
 ?>