Page 1 sur 2

multi calcul.

Posté : 14 mars 2012, 15:20
par piotrowski-s
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.

Re: multi calcul.

Posté : 14 mars 2012, 15:27
par moogli
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 ^^

@+

Re: multi calcul.

Posté : 14 mars 2012, 15:30
par piotrowski-s
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.

Re: multi calcul.

Posté : 14 mars 2012, 15:38
par Mazarini
$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

Re: multi calcul.

Posté : 14 mars 2012, 15:41
par piotrowski-s
je ne comprends pas les += ?

Re: multi calcul.

Posté : 14 mars 2012, 15:55
par Mazarini
C'est équivalent à $total_principal = $total_principal + $principal
Un peu dans le genre du $i++, un truc de fainéant.

Re: multi calcul.

Posté : 14 mars 2012, 17:36
par piotrowski-s
au niveau des echos je ne sais pas quoi afficher.

Re: multi calcul.

Posté : 14 mars 2012, 18:08
par piotrowski-s
déjà je vais remplacer
$duree par $duree= DATEDIFF(NOW(),$date_echeance)

Re: multi calcul.

Posté : 15 mars 2012, 09:18
par piotrowski-s
et après je ne sais pas encore ...

Re: multi calcul.

Posté : 16 mars 2012, 18:06
par piotrowski-s
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

Re: multi calcul.

Posté : 16 mars 2012, 19:19
par xTG
L'erreur est très explicite. La fonction requiert un objet DateTime et tu lui donnes une String. ;)

Re: multi calcul.

Posté : 17 mars 2012, 08:29
par piotrowski-s
mais pourtant date(ymd), renvoit bien une date non?

Re: multi calcul.

Posté : 17 mars 2012, 09:36
par piotrowski-s
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 ; }
 ?>

Re: multi calcul.

Posté : 17 mars 2012, 12:33
par Ryle
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().

Re: multi calcul.

Posté : 17 mars 2012, 21:19
par piotrowski-s
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 ;
 }
 ?>