Page 1 sur 2
créer un échéancier
Posté : 09 oct. 2012, 16:47
par piotrowski-s
Bonjour à toutes et à tous,
j'essai de faire un script pour échelonner un montant, dans un premier temps sans intérêts,
j'ai donc ce formulaire ci:
<form action="#" method="post"><fieldset><legend>PARAMÈTRES DE L'ÉCHÉANCIER</legend>
<br />
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><label>Montant à échelonner: </label><input type="text" name="montantdu" value="<?php echo $reste ; ?>" />
€<br /><label>Type: </label><select name="echeance" class="01" id="echeance" style="width:149px" required="true">
<option></option>
<option value="1">Annuel</option>
<option value="2">Semestriel</option>
<option value="4">Trimestriel</option>
<option value="6">Bimensuel</option>
<option value="12">Mensuel</option>
</select></td>
</tr>
<tr>
<td><label>Montant d'échéance: </label><input type="text" name="montantecheance" />
€ ou<br />
<label>Nombre d'échéance: </label><input type="text" name="nombre_echeance" /><br />
<label>Départ: </label><input type="date" name="date_depart" required="true" /><br /></td>
</tr>
</table>
<input type="submit" name="enreg" value="VALIDER" /></fieldset></form>
Et donc pour le traitement j'ai pu faire ce début:
<?php
if(isset($_POST['enreg']))
{
if(empty($_POST['nombre_echeance']) AND !empty($_POST['montantecheance']))
{
$montantdu=$_POST['montantdu'];
$montantecheance=$_POST['montantecheance'];
$i=ceil($montantdu/$montantecheance);
$i2=0;
echo '<table style=\'width:100%\'><tr><td><b>Capital Principal</b></td><td><b>Date d\'échéance</b></td><td><b>Montant de l\'échéance</b></td><td><b>Capital restant dû</b></td></td></tr>';
while($i2<$i)
{
if($i2==0){$reste=$montantdu ;}else{$reste=$montantdu-$montantecheance;};
echo '<tr><td>'.$reste.'</td><td></td><td></td><td>Ceci est une échéance</td></tr>' ;
++$i2;
}
echo '</table>';
}
}
?>
Mais la je sèche en fait, dans la colone de gauche j'ai reste, et cela me déduit une échéance mais après cela ne me déduit plus rien.
Je suis un peu bloqué pourtant ça doit être simple, j'ai bien concaténé comme il se devait mais rien n'y fait.
Toute forme d'aide ou conseils sera grandement appréciée.
Bien à vous.
SP.
Re: créer un échéancier
Posté : 10 oct. 2012, 08:36
par Mazarini
Il faut faire 2 calculs :
- Si as le montant, tu l'appliques en calculant la date et le reste à payer échéance par échéance
- Si tu as le nombre de mensualité, tu en déduit le montant et tu appliques le cas précédent (j'ai un trou pour le calcul d'une échéance avec intéret, mais ca doit se retrouver)
Ca permet de calculer le montant de la dernière échéance et éventuellement sa date.
Re: créer un échéancier
Posté : 10 oct. 2012, 10:46
par piotrowski-s
Bonjour,
en fait c'est pour récupérer les variables que je bloque, car j'essai de récupérer la variable précédente a chaque itération pour faire le calcul du capital restant du en fonction du capital initila mais je bloque, en fait j'arrive a faire seuelement la première soustraction pour le reste je bloque, j'ai beau essayer de concaténer la variable avec le $i mais rien n'y fait.
Re: créer un échéancier
Posté : 10 oct. 2012, 11:03
par Mazarini
Tu initialises des tableaux :
date[0] = datePremiereEcheance - période
capitalDu[0] = capitalRestantDu
Montant[0] = montantPayé
nbEcheance = 0
while (capitalDu[nbEcheance] > 0) {
nbEcheance++
date[nbEcheance] = datePremiereEcheance[nbEcheance-1] + période
capitalDu[nbEcheance] = capitalDu[nbEcheance-1] - montantPaye + interet
Montant[nbEcheance] = montantPayé
}
Montant[nbEcheance] = Montant[nbEcheance] + capitalDu[nbEcheance]
capitalDu[nbEcheance] = 0
Tu as alors un échéancier dans 3 tableaux avec dates, capital du et un montant à payer (tu peux ajouter un tableau d'intéret)
Re: créer un échéancier
Posté : 10 oct. 2012, 11:03
par Mazarini
post en double, désolé

Re: créer un échéancier
Posté : 10 oct. 2012, 11:16
par piotrowski-s
je vais potasser tout cela, en fait je ne savais pas qu'on pouvait initialiser des tableaux sans utiliser de balises de type input. A chaque fois je faisais mes tableaux en faisant des trucs du genre
<input type='text' name='date[<?php echi $i ; ?>]['nomduchamp']'>
Merci beaucoup pour votre aide,
je vais potasser tout cela
Re: créer un échéancier
Posté : 10 oct. 2012, 11:28
par Mazarini
J'ai un doute sur ma compréhension de ton problème.
Ce que je t'ai proposé correspondait à un calcul de l'échéancier à partir d'un capital restant du et d'une mensualité. Pas à partir de la saisie d'un échéancier complet.
Le principe reste, c'est à dire de créer une "ligne" fictive pour faire le traitement avec $i-1 et $i dès le début.
Re: créer un échéancier
Posté : 10 oct. 2012, 11:31
par piotrowski-s
bien le calcul se fait a partir d'informations que j'entre, comme le nombre d'échéances ou alors le montant de l'échéance en fonction de cela je m'adapterais
Re: créer un échéancier
Posté : 10 oct. 2012, 11:35
par sirakawa
Petits détails
<?php
if(isset($_POST['enreg']))
{
$montantdu=$_POST['montantdu'];
$nombre_echeances = isset($_POST['nombre_echeance']) ? $_POST['nombre_echeance']: 1;
$montant_echeance= isset($_POST['montantecheance']) ? $_POST['montantecheance']: "";
print "<br>dû $montantdu nombre $nombre échéances montant $montant_echeance"
if(empty($nombre_echeances) // si le nombre d'échéances n'a pas été donné
{
if (!empty($_POST['montant_echeance'])//si le montant d'échéance est précisé on calcule le nombre d'échéances
{
$nombre_echeances = ceil ($montantdu / $montant_echeance);
}
else
{
print "calcul impossible : il faut préciser le nombre d'échéances ou le montant";
}
}
else //le nombre d'échéances a été donné
{
// on calcule le montant de l'échéance
}
//calcul et affichage commun
?>
Pour le calcul, il n'y a rien d'étonnant à ce qu'il délire. Puis alors, la présentation toujours aussi dégueulasse : tout sur la même ligne, il faut un démêloir pour s'y retrouver; variables aux noms d'une clarté éblouissante $i, $i2....
voici une suggestion
<?php
$nombre_echeances = 12;
$montant_du = 11237;
$chaine ="
<table style='width:100%'>
<tr>
<th>Capital Principal</th>
<th>Date d'échéance</th>
<th>Montant de l'échéance</th>
<th>Capital restant dû</th>
</tr>";
$i2=0;
$montant_echeance = round($montant_du / $nombre_echeances, 2);
$reste=$montant_du ;
while($i2 <= $nombre_echeances)
{
if ($i2 == $nombre_echeances)
{
$montnt_echeance = $reste;
$reste = 0;
}
$chaine .= "<tr>
<td>$montant_du</td>
<td>date</td>
<td>$montant_echeance</td>
<td>$reste</td></tr>'";
$reste = $reste-$montant_echeance;
$i2++;
}
$chaine .="</table>";
print "$chaine";
?>
Re: créer un échéancier
Posté : 10 oct. 2012, 11:58
par piotrowski-s
La présentation toujours aussi dégelasse? Je t'en prie, regarde le code initial il est correctement indenté. je vais poasser ton code, merci pour le conseil.
Re: créer un échéancier
Posté : 10 oct. 2012, 12:53
par sirakawa
La présentation toujours aussi dégelasse? Je t'en prie, regarde le code initial il est correctement indenté.
La preuve:
echo '<table style=\'width:100%\'><tr><td><b>Capital Principal</b></td><td><b>Date d\'échéance</b></td><td><b>Montant de l\'échéance</b></td><td><b>Capital restant dû</b></td></td></tr>';
if($i2==0){$reste=$montantdu ;}else{$reste=$montantdu-$montantecheance;};
je vais poasser ton code, merci pour le conseil.
Re: créer un échéancier
Posté : 10 oct. 2012, 15:52
par piotrowski-s
salut, merci pour ton aide.
J'ai un tout petit soucis au niveau des dates, comme en fait j'ai prévu une périodicité différente,
j'ai donc créé la fonction suivante:
function periode($var)
{
if($var=='52')
{
echo '+ $i2 week';
}
if($var=='26')
{
echo '+ ($i2 +1) week';
}
if($var=='12')
{
echo '+ $i2 month';
}
if($var=='6')
{
echo '+ ($i2 +1) month';
}
if($var=='2')
{
echo '+ ($i2 +6) month';
}
if($var=='1')
{
echo '+ ($i2 +12) month';
}
}
sauf qu'au lieu de l'interpreter en fait j'ai mis cela
$chaine .= "<tr>
<td>$montant_du</td>
<td>".$date = date("d-m-Y",strtotime(date("Y-m-d", strtotime($debut)) . " periode($pay_periodicity)"))."</td>
<td>$montant_echeance</td>
<td>$reste</td></tr>'";
$reste = $reste-$montant_echeance;
$i2++;
}
$chaine .="</table>";
et puis il affiche juste le contenu de la fonction mais elle n'est pas interprétée.
j'ai essayé en concaténant également mais rien n'y fait. bien il m'affiche cela
+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month+ ($i2 +1) month
mais il n'interprete pas j'ai essayé avec eval aussi mais rien n'y fait.
Re: créer un échéancier
Posté : 10 oct. 2012, 17:42
par sirakawa
calcule ta date avant de la mettre dans $chaine
$date_affichee = ton_calcul();
comme ça, tu pourras vérifier que ta date est juste
Avec ma façon deprocéder, il y a intérêt à faire comme ça même si ça marche autrement
Re: créer un échéancier
Posté : 11 oct. 2012, 07:57
par piotrowski-s
salut, j'ai essayé comme tu m'as dit:
du coup j'ai fais cela:
function periode($var, $i2)
{
if($var=='52')
{
echo '"+ '.$i2.' week"';
}
if($var=='26')
{
echo '"+ ('.$i2.' +1) week"';
}
if($var=='12')
{
echo '"+ '.$i2.' month"';
}
if($var=='6')
{
echo '"+ ('.$i2.' +1) month"';
}
if($var=='2')
{
echo '"+ ('.$i2.' +6) month"';
}
if($var=='1')
{
echo '"+ ('.$i2.' +12) month"';
}
}
$chaine ="
<table style='width:100%'>
<tr>
<th>Capital Principal</th>
<th>Date d'échéance</th>
<th>Montant de l'échéance</th>
<th>Capital restant dû</th>
</tr>";
$i2=0;
$montant_echeance = round($montant_du / $nombre_echeances, 2);
$reste=$montant_du ;
while($i2 <= $nombre_echeances)
{
echo $date =date("d-m-Y", strtotime($debut) .periode($pay_periodicity, $i2));
if ($i2 == $nombre_echeances)
{
$montnt_echeance = $reste;
$reste = 0;
}
$chaine .= "<tr>
<td>$montant_du</td>
<td>".$date."</td>
<td>$montant_echeance</td>
<td>$reste</td></tr>'";
$reste = $reste-$montant_echeance;
$i2++;
}
$chaine .="</table>";
print "$chaine";
}
mais cela n'interpète pas les dates en fait cela me renvoi
ca:
+ 0 month+ 1 month+ 2 month+ 3 month+ 4 month+ 5 month+ 6 month+ 7 month+ 8 month+ 9 month+ 10 month+ 11 month+ 12 month+ 13 month+ 14 month+ 15 month+ 16 month+ 17 month+ 18 month+ 19 month+ 20 month+ 21 month+ 22 month+ 23 month+ 24 month+ 25 month+ 26 month+ 27 month+ 28 month+ 29 month+ 30 month '''''''''''''''''''''''''''''''
Capital Principal Date d'échéance Montant de l'échéance Capital restant dû
6210.04 11-10-2012 207 6210.04
6210.04 11-10-2012 207 6003.04
6210.04 11-10-2012 207 5796.04
6210.04 11-10-2012 207 5589.04
Re: créer un échéancier
Posté : 11 oct. 2012, 09:27
par Mazarini
Peut être :
<?PHP
function add($date,$mois,$jour) {
$tab = date_parse_from_format('d/m/Y',$date);
$retour = date('d/m/Y', mktime(12,0,0,$tab['month']+$mois,$tab['day']+$jour,$tab['year']));
}
?>
Le 12 sert à éviter les problèmes heure été/hiver : ajout d'1jours = ajout de 23h donc perte d'1jour.
Il faut voir comment tu gères les fins de mois : 31/03 => 01/05 ou 30/04 (problème pour 28, 29, 30 et 31. Tu peux utiliser le fait que le 00/12 => 30/11.