Ayuda con código

Tengo una página html con un formulario que tiene 4 campos: txtcredito, txtcuotas, txtvalor
cuota, txttasa.
En el archivo php que llama el formulario tengo al siguiente código:
<table width="50%" border="0" cellpadding=3>
<tbody>
<tr>
<td align="center" bgcolor="#CCCCCC">Numero Cuota
</tr>
<td align="center" bgcolor="#CCCCCC">Capital
</tr>
<td align="center" bgcolor="#CCCCCC">Valor Cuota
</tr>
<td align="center" bgcolor="#CCCCCC">Interes
</tr>
<td align="center" bgcolor="#CCCCCC">Capital Pagado
</tr>
<td align="center" bgcolor="#CCCCCC">Valor Residual
</tr>
<?php
for ($i=1;$i<=$txtcuotas;$i++)
{
$intcuota=$txtcredito*$txttasa/100;
$cappagado=$txtvalcuota-$intcuota;
$valresi=$txtcredito-$cappagado;
echo "
<tr>
<td align=left> $i</td>
";
echo "
<td align=left>$txtcredito</td>
";
echo "
<td align=left>$txtvalcuota</td>
";
echo "
<td align=left>".number_format($intcuota,0)."</td>
";
echo "
<td align=middle>".number_format($cappagado,0)."</td>
";
echo "
<td align=middle>".number_format($valresi,0)."</td>
</tr>
";
}
?>
Me genera el siguiente resultado con un capital de 2705000, 24 cuotas, valor cuota de 166000
y una tasa de 3.3611018:
1 2705000 166000 90918 75082 2629918
2 2705000 166000 90918 75082 2629918 (a partir de aquí mal)
...
24 (hasta acá me sale todo igual)
El tema es que a partir de la segunda cuota el capital debe ser menos el capital pagado.
Creo que a esto se le llama amortizar. La verdad no soy muy buena con los números. La idea es que luego esto deba guardarlo en una tabla, pero primero lo estoy haciendo con variables para entender la mecánica del código.
Respuesta
1
Realmente tendría que ver cual es la lógica de tu proyecto para poder ayudarte, Podrías preguntar aquí mismo a un experto en contabilidad o algo así ya que tu duda no es de PHP si no de métodos contables.

4 respuestas más de otros expertos

Respuesta
1
Existen varias formas de amortizar un préstamo, y cada una tiene su propia fórmula con sus incógnitas.
¿Qué quieres hacer exactamente?
¿Es algo parecido a www.lubbus.com?
Hola, primero que nada gracias por responder...
Más que ver como amortizar, que yo lo mencione pensando que era eso, sin tener mayor conocimiento del tema, necesito apoyo en como generar el código php para obtener el segundo capital (el primer capital menos el primer capital pagado) el tercer capital (el segundo capital menos el segundo capital pagado) y así sucesivamente... No se como realizar el loop...
Espero puedas ayudarme...
Lo más cómodo es jugar con 3 variables: Capital Inicial, Capital Amortizado y Cuota.
Así, antes de entrar en el bucle inicializas las variables como corresponda. Dentro del bucle calculas la cuota y la calcula capital amortizado. Para cada iteración del bucle el capital amortizado aumentaría en una cuota, hasta llegar a la amortización completa del préstamo.
Puedes hacerlo con un while.
$capital_total = 1000;
$capital_amortizado = 0;
while ($capital_amortizado < $capital_total) {
   // Cada paso del while corresponderia a un mes, por ejemplo
   // calcular_cuota deberia permitirte calcular la cuota dependiendo del tipo de prestamo
   // aunque si es fija, no hace falta ninguna función.
   $cuota = calcular_cuota();
   $capital_amortizado += $cuota;
   echo $cuota;
   echo " - ";
   echo $capital_amortizado;
   echo "<br />";
}
Prueba y me comentas.
Evidentemente, este es un código orientativo, no se si de adapta a lo que necesitas, puesto que como te comenté, hay distintas formas de calcular la amortización de un préstamo.
La mayor dificultad te la encontrarás es la forma de calcular la cuota, puesto que esta normalmente es la suma de dos conceptos, intereses y capital amortizado, y ambos varían en función del número de meses que resten para terminar el préstamo.
Ya lo irás descubriendo.
Eres genial... adapte el código a mis necesidades y esta genial... Necesito hacer varias preguntas... pero prefiero finalizar cada una para no confundirte y yo tampoco..
Una vez más gracias...
Respuesta
1
Pruébalo así, en la parte del for cambialo por este código
...
for ($i=1;$i<=$txtcuotas;$i++)
{
$intcuota=$txtcredito*$txttasa/100;
$cappagado=$txtvalcuota-$intcuota;
$valresi=$txtcredito-$cappagado;
$txtcredito=$valresi;
Echo "
...
Eres genial... te pasaste... super... Lo ultimo para finalizar. Tengo la siguiente función que encontré para calcular la fecha de pago de cada cuota a partir de un nuevo campo del formulario al que llame txtvencim donde ingreso manualmente el vencimiento de la primera cuota, la cual necesito que sea los 30 de cada mes o el mismo día de cada mes:
function sumaDia($fecha,$dia)
{
list($day,$mon,$year) = explode('/',$fecha);
return date('d/m/Y',mktime(0,0,0,$mon,$day+$dia,$year));
}
for ($i=1;$i<=$txtcuotas;$i++)
{
echo "
<tr>
<td align=left> $i</td>
";
echo "
<td align=left>".$txtvencim."</td>
";
$txtvencim=sumaDia($txtvencim,30);
Resulta bien el problema es que me da los siguientes resultados como ej.- el vencimiento de la primera cuota 30/08/2008:
1  30/08/2008  166000 ......
2  28/09/2008  166000....
3  26/10/2008  166000...
Qués estoy haciendo mal... tienes otra forma de solucionarlo.. Muchas Gracias.
es posible que estes usando la fecha de entrada en la funcion con el dia y el mes trocados, intenta asi, en la funcion sumaDia la linea
list($day,$mon,$year) = explode('/',$fecha);
cambiala por
list($mon,$day,$year) = explode('/',$fecha);
A ver como te va
Gras por responder rápidamente. Hice el cambio que me indicaste pero para sorpresa y tomando como ejemplo la fecha de la primera cuta de 30/08/2008, la segunda cuota me aparece con fecha 08/07/2010, luego 06/09/2010...asi q como te podrás dar cuenta no me es muy útil q digamos.. je je.
Probé cambiando de orden también la linea
return date('d/m/Y',mktime(0,0,0,$mon,$day+$dia,$year)); pero obtuve resultados similares, asi q deje todo como estaba....
Encontré esta otra fórmula, me resulta bien cuando en el código indico una fecha, pero si la fecha la toma de $txtvencim me aparece un numero entero igual en todas las cuotas:
$sumar30 = 60*60*24*30; //30 dias
$nuevafecha = $txtvencim + $sumar30;
echo "
<td align=left>".date("$nuevafecha")."</td>
";
¿QUÉ HAGO? please
Para darse cuenta de el error lo mejor es que me indiques con un ejemplo claro los datos de entrada, por ejemplo, en el programa anterior que valor tiene $txtvencim, para saber que puede retornar, ¿entiendes?
Disculpa mi torpeza de no haber sido más clara... jejjejeje.
Por ejemplo para un crédito de 10 cuotas en $txtvencim (q es un campo de un formulario q representa la fecha de vencimiento de la primera cuota) ingreso 30/08/2008
Y el código anterior me genera como fecha de vencimiento para todas las cuotas el valor 2592030, cuando debería ser para cada cuota:
1 30/08/2008
2 30/09/2008
3 30/10/2008
4 30/11/2008
5 30/12/2008
6 30/01/2009
7 28/02/2009
.
.
.
Espero se me entienda y puedas ayudarme...
Entonces deja la función así:
unction sumaDia($fecha,$dia)
{
list($day,$mon,$year) = explode('/',$fecha);
return date('d/m/Y',mktime(0,0,0,$mon,30,$year));
}
Me aparece la misma fecha en todas las cuotas con el código indicado...
Prueba este código, creo que es así como lo necesitas.
<?php
ini_set('display_errors' , 1 );
error_reporting(E_ALL);
function sumaDia($fecha,$dia,$cont)
{
    list($day,$mon,$year) = explode('/',$fecha);
    echo "dia mes ano= $day,$mon, $year<br />";
    echo "mes =" . ($mon + $cont);
    if ( $mon == 2 )
    {
    }
    return date('d/m/Y',mktime(0,0,0,$mon + $cont ,0,$year));
}
//$txtvencim="2009/05/01";
$txtvencim="01/05/2009";
echo "
<table>
\n";
$txtcuotas= 12;
for ($i=1;$i<=$txtcuotas;$i++)
{
echo "
<tr>
<td align=left> $i</td>
";
$fecha=sumaDia($txtvencim,30, $i);
echo "
<td align=left>".$fecha."</td>
";
echo "
</tr>
";
}
echo "
</table>
";
?>
Genial, genial genial, eres lo máximo, estoy super contenta con el avance en el sistema y en mi aprendizaje... todo gracias a tu paciencia, voluntad y tiempo. Espero no causarte molestias con tanto pregunta..., ya que volveré... jejejeje... Un beso... hasta en un ratito más... chao.
Respuesta
1
Primero deberías tener claro el objetivo del algoritmo. Por lo que entiendo, si estás amortizando, deberías en cada vuelta del bucle, actualizar $txtcredito restándole $cappagado, una vez mostrado.
Eres genial... era un pequeño error en mi código... Gracias por tu orientación... Tango varias preguntas para ir haciendo más completo mi sistema, pero prefiero finalizar cada una antes de la siguiente, así no te confundo y yo tampoco..
Una vez más muchas gracias..
Respuesta
1
El problema es que no acumulas, quiero decir que en algún lugar (yo tpc soy muy bueno con los números sólo con el 0 y el 1) tienes que llevar un total.
$intcuota=$txtcredito*$txttasa/100;
$cappagado=$txtvalcuota-$intcuota;
$valresi=$txtcredito-$cappagado;
en alguna parte tienes que tener algo como
$valresi=$valresi-$cappagado;
Por ejemplo (no tengo idea de lo que es cada variable asi que mal te voy a indicar)
Si quieres que pruebe el código pásame un valor inicial para cada variable,
$valresi=0;
$intcuota=3;
...
Lo que sea en cada caso y luego lo que tendría que dar el programa para cada valor después del primer ciclo del bucle (tu segunda linea de resultados).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas