créer un échéancier

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : créer un échéancier

Re: créer un échéancier

par sirakawa » 11 oct. 2012, 17:46

Joli mais ligne 74 ce serait pas plutôt :
$reste = $montant_du; ?
Pour le coup de la dernière échéance, je ferais le calcul habituel en me fixant un seuil:
$seuil = $montant_echeance / diviseur qui pourrait dépendre du nombre de mensualités ; // par exemple
et si la derniere échéance est inférieure ou égale au seuil, je mets uune case à cocher : joindre les deux dernières échéances // répartir surr toutes les échéances/ ne rien faire; et je recalcule si besoin;mais je n'ai pas réfléchi au comment faire à part pour la répartitin

Re: créer un échéancier

par piotrowski-s » 11 oct. 2012, 17:08

Bon pour les dates c'est résolu,

maintenant j'ai un dernier soucis, en fait pour le calcul des intérêts c'est également bon par périodicité quelle qu'on choisi j'ai utilisé une formule analytique du type:

Cn = Co(1+nt)

Si cela vous intéresse je pourrais vous donner le script complet, cela peut toujours servir.

Donc le dernier point qui me pose soucis, car je propose deux option, ou l'on choisit la durée, (le nombre d'échéance) ou le montant de l'échéance, si l'on choisi le nombre d'échéance, il n'y a pas de problème car personne ne dira jamais je veux payer en 13.75 fois par exemple.

Mais si on choisi le montant par exemple 500 € par mois et que le montant à rembourser est de 1600 alors il va faire 3 échéances et dans restant du il va mettre les 100 € .

Ce que je voudrais c'est proposer une case à cocher avec l'option tronquer la dernière échéance et si l'on ne la tronque pas alors la dernière échéance ferait 600 € si on la tronque alors on aurait 500 € et une dernière échéance de 100 €.

Le soucis c'est qu'à partir de ce moment je suis un peu perdu, j'ai juste réussi a aller jusqu'au dernier montant restant à payer avec un solde restant du en positif.

Voici le code que j'ai fais grâce à votre aide:

http://www.phpfiddle.org/main/code/hen-vp7

Par avance merci pour votre aide.

Re: créer un échéancier

par piotrowski-s » 11 oct. 2012, 10:57

bon finalement j'ai rectifié de la sorte:
function periode($var, $i2)
	{
		if($var=='52')
		{
			return "+ ".$i2." week";
		}
		if($var=='26')
		{
			$i3=$i2+1;
			return "+ ".$i3." week";
		}
		if($var=='12')
		{
			return "+".$i2." month";
		}
		if($var=='6')
		{
			$i3=$i2+1;
			return "+ ".$i3." month";
		}
		if($var=='2')
		{
			$i3= $i2+6;
			return "+ ".$i3." month";
		}
		if($var=='1')
		{
			$i3 = $i2 + 12;
			return "+ ".$i3." month";
		}
		
		
	}
Merci à vous deux pour l'aide précieuse.

Re: créer un échéancier

par piotrowski-s » 11 oct. 2012, 10:50

en fait le problème intervient ici

return "+ (".$i2."+1) week";

d'après ce que j'ai pu voir le nombre n'est pas pris en compte car il affiche la variable +1 sans faire le calcul. Je ne sais pas trop comment concaténer le nombre pour que le calcul soit exécuté.

Re: créer un échéancier

par piotrowski-s » 11 oct. 2012, 10:09

Bonjour, malheureusement je ne peux pas utiliser le code comme ça,

pour vérifier les dates j'ai un javascript qui s'en charge onload.

En revanche j'ai essayé ainsi:
$date =date("d-m-Y", strtotime($debut).strtotime(periode($pay_periodicity, $i2)));      
et pour la fonction:
function periode($var, $i2)
	{
		if($var=='52')
		{
			return '+ '.$i2.' week';
		}
		if($var=='26')
		{
			return '+ ('.$i2.'+1) week';
		}
		if($var=='12')
		{
			return '+ '.$i2.' month';
		}
		if($var=='6')
		{
			return '+ ('.$i2.'+1) month';
		}
		if($var=='2')
		{
			return '+ ('.$i2.'+6) month';
		}
		if($var=='1')
		{
			return '+ ('.$i2.'+12) month';
		}
		
		
	}


mais ça me renvoi partout 01/01/1970

Re: créer un échéancier

par Mazarini » 11 oct. 2012, 09:45

oops, j'ai oublié le return $retour;

Re: créer un échéancier

par sirakawa » 11 oct. 2012, 09:43

Pour qu'une fonction fasse son boulot de fonction, il faut qu'elle renvoie un résultat:
<?PHP
function surface_cercle($rayon)
{
$surface  = 3.14*($rayon*$rayon);
return $surface;
}
//$rayon = $_POST['rayon'];
$rayon = 2;

$message = "La surface d'un cercle de rayon $rayon est". surface_cercle($rayon);
//ou si on a besoin plusieurs fois du même résultat
$surface = surface_cercle($rayon);

print "$message";
?>

Re: créer un échéancier

par Mazarini » 11 oct. 2012, 09:27

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.

Re: créer un échéancier

par piotrowski-s » 11 oct. 2012, 07:57

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'&eacute;ch&eacute;ance</th>
 <th>Montant de l'&eacute;ch&eacute;ance</th>
 <th>Capital restant d&ucirc;</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

par sirakawa » 10 oct. 2012, 17:42

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

par piotrowski-s » 10 oct. 2012, 15:52

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

par sirakawa » 10 oct. 2012, 12:53

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\'&eacute;ch&eacute;ance</b></td><td><b>Montant de l\'&eacute;ch&eacute;ance</b></td><td><b>Capital restant d&ucirc;</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

par piotrowski-s » 10 oct. 2012, 11:58

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

par sirakawa » 10 oct. 2012, 11:35

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'&eacute;ch&eacute;ance</th>
 <th>Montant de l'&eacute;ch&eacute;ance</th>
 <th>Capital restant d&ucirc;</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

par piotrowski-s » 10 oct. 2012, 11:31

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