Generar cuotas diarais de pago a través de una fecha inicial!!
#1
Escrito 09 diciembre 2011 - 02:07
Ahora el problema:
*En sí estoy en medio de un sistema encargado de controlar los préstamos generados a un cliente en particular. El problema en sí, me nace ahora (y creo es el tercero que consulto!! y perdón de antemano por las molestias!!) cuando genero los Préstamos!!Todo funciona bien hasta generar las cuotas diarias que debe abonar el cliente.
En un formulario se ingresa la Fecha de Inicio y la Fecha de Finalización del Préstamo y la idea es que automáticamente me genere la cantidad de cuotas diarias, cada una con su fecha y el monto a abonar.
El monto lo calculo con intereses y todo (Y me sale bien!!)Pero cuando genero las cuotas me lío bastante, y para colmo uno de los requerimientos es que no se tenga en cuenta el día domingo!!!!!
Por ejemplo la idea es:
Si la Fecha de Inicio es hoy (09/12/2011) y la Fecha de Finalización el Siguiente Lunes (15/12/2011) me genere la siguiente tabla:
Fecha de Inicio: 09/12/2011
1° Cuota-->Sábado 10/12/2011-->Monto=20-->Abonado
2° Cuota--> Lunes 12/12/2011-->Monto=20-->No Abonó
3° Cuota-->13/12/2011-->Monto=20-->Abonado
4° Cuota-->14/12/2011-->Monto=20-->Abonado
5° Cuota-->15/12/2011-->Monto=20-->Abonado
Fecha de Finalización: 15/12/2011
Total a Abonar=100
Total Abonado=80
Cantidad Cuotas=5
Después molestaré con otras consultas, pero ahora me está matando bastante el problema comentado!!!
He pensado hacerlo con un for que me llene una tabla con las cuotas y los demás datos que calculo vía php, pero me he dado cuenta que si quiero grabar es info en una base de datos me voy a liar muchísimo más!!!
Les pido de rescate que por favor me den una mano con esto!!!!Hoy por esto me considero ya un principiante!!!!
Gracias Comunidad!!!!!
#2
Escrito 13 diciembre 2011 - 07:12
Miren he logrado una función bastante interesante donde he podido excluir los días domingos en un conteo que me toma la cantidad de cuotas!!!Pero no he logrado que el conteo comience desde una fecha inicial dada por mi!!!En el mismo me genera la cuenta pero desde la fecha actual!!!
La función es la siguiente:
$f_ini=mysql_query("SELECT f_ini FROM creditos, planes WHERE credistos.id_plan=plsnes.id_plan ORDER BY id_cred DESC LIMIT 1",$conexion);
$array_fini=mysql_fetch_assoc($f_ini);
$f_entre=$array_fini['f_entre']; //Yo acá consigo almacenar en esta variable la fecha de entrega!
$cuotas=mysql_query("SELECT cantidad FROM creditos, planes WHERE credistos.id_plan=plsnes.id_plan ORDER BY id_cred DESC LIMIT 1",$conexion);
$array_cuotas=mysql_fetch_assoc($cuotas);
$ncuotas=$array_cuotas['cantidad']; //Y acá consigo almacenar en esta variable la cantidad de cuotas!
for ($i=0;$i<$ncuotas;$i++)
{
$segundos=$segundos+86400;
$caduca = date("D", time()+$segundos);
if ($caduca=="Sun")
{
$i--;
}
else
{
$f_final = date("Y-m-d", time()+$segundos);
}
}
echo $f_final;
Mi problema es que los calculos los haces perfecto pero desde la fecha actual!!!!He probado las mil y un combinaciones para que el calculo lo genere con la fecha inicial que traigo desde la base de datos pero no lo he conseguido!!!Si alguin puede solucionar este problema porfa que me de una mano!!!!
Gracias!!!!
#3
Escrito 13 diciembre 2011 - 07:34
< ?php
$fechaInicio=strtotime("09-12-2011");
$fechaFin=strtotime"15-12-2011");
for($i=$fechaInicio; $i<=$fechaFin; $i+=86400){
echo date("d-m-Y", $i)."<br>";
}
?>
Saludos.
#4
Escrito 13 diciembre 2011 - 07:40
Por lo que creo debe ir en la siguiente línea:
$caduca = date("D",$f_entre,time()+$segundos);
Pero igual sigue sin tomarme la fecha incial!!!Es por una mala declaración en el date???
La verdad que no encuentro donde declarar que comience con la fecha de inicio!!!
#5
Escrito 13 diciembre 2011 - 07:42
Saludos.
#6
Escrito 13 diciembre 2011 - 08:02
El problema en mi función es donde poner la variable $f_entre que me indica la fecha de inicio para que la función comience el conteo desde esa fecha!!!
#7
Escrito 13 diciembre 2011 - 08:30
$f_ini=mysql_query("SELECT f_ini FROM creditos, planes WHERE credistos.id_plan=plsnes.id_plan ORDER BY id_cred DESC LIMIT 1",$conexion);
$array_fini=mysql_fetch_assoc($f_ini);
$f_entre=$array_fini['f_ini']; //Me imagino que esta es la fecha de inicio!!!
$cuotas=mysql_query("SELECT (DATE_ADD(f_ini, INTERVAL cantidad DAY) as Cuotas FROM creditos, planes WHERE credistos.id_plan=plsnes.id_plan ORDER BY id_cred DESC LIMIT 1",$conexion);
$array_cuotas=mysql_fetch_assoc($cuotas);
$fechafin=$array_cuotas['cuotas']; //Aqui conseguimos la fecha final, o sea la suma de fecha de inicio y cantidad de cuotas
for ($i=$f_entre;$i<$fechafin;$i+=86400)
{
$caduca = date("D", $i);
if ($caduca=="Sun")
{
$i--;
}
else
{
$f_final = date("Y-m-d", $i);
}
}
echo $f_final;
Prueba con esa modificacion al aire.
Saludos.
#8
Escrito 13 diciembre 2011 - 08:48
He quemado ms libros!!!
En si probando me he dado cuenta que la consulta en $fechafin no me genera ningun resultado!!!Le he tirado un echo a esta variable y no me muestra nada!!!Por ende el error está en la consulta de $fechafin..
Ahhhhhhh Ene desde ya muchisimas gracias por tanta paciencia!!!!
#9
Escrito 13 diciembre 2011 - 09:04
He hecho funcionar la funcion que me has dado!!!Lo único que le faltaba era un maldito parentesis!!!!Y voilá!!!Funciona!!!Pero sólo la consulta en la variable $fechafin!Es decir hasta ahí todo bien!!Pero cuando hago correr la función para que no me contabilice los domingos el resultado en la variable $f_final me tira basura y ya me tira una fecha errónea!!!
Ahora, por última molestia a generar!!!Cómo podría mostrar las fechas entre la de inicio y la de finalizacion en una tabla??'En sí es para que se pueda seleccionar si en esa fecha la cuota a sido abonada!!!
#10
Escrito 13 diciembre 2011 - 09:58
$conectar = mysql_connect("localhost","root","2020");
mysql_select_db("test",$conectar);
$f_ini = mysql_query("SELECT DATE_FORMAT(f_ini,'%d-%m-%Y') as inicio, DATE_FORMAT(DATE_ADD(f_ini, INTERVAL cuota DAY), '%d-%m-%Y') as final FROM tabla LIMIT 1",$conectar);
$row = mysql_fetch_assoc($f_ini);
$FechaIni = strtotime($row["inicio"]);
$FechaFin = strtotime($row["final"]);
for ($i=$FechaIni;$i<=$FechaFin;$i+=86400)
{
echo date("Y-m-d", $i).'<br />';
}
Con eso obtengo lo siguiente (10 cuotas):
2012-12-13 2012-12-14 2012-12-15 2012-12-16 2012-12-17 2012-12-18 2012-12-19 2012-12-20 2012-12-21 2012-12-22 2012-12-23
Luego vere como sacarte los dias Domingos.
Saludos.
#11
Escrito 13 diciembre 2011 - 10:08
<?php
function dia_de_semana ($dia, $mes, $ano) {
$dias = array("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado");
return $dias[date("w", mktime(0, 0, 0, $mes, $dia, $ano))];
}
$conectar = mysql_connect("localhost","root","2020");
mysql_select_db("test",$conectar);
$f_ini = mysql_query("SELECT DATE_FORMAT(f_ini,'%d-%m-%Y') as inicio, DATE_FORMAT(DATE_ADD(f_ini, INTERVAL cuota DAY), '%d-%m-%Y') as final FROM tabla LIMIT 1",$conectar);
$row = mysql_fetch_assoc($f_ini);
$FechaIni = strtotime($row["inicio"]);
$FechaFin = strtotime($row["final"]);
for ($i=$FechaIni;$i<=$FechaFin;$i+=86400)
{
$domingo = dia_de_semana(date("d", $i), date("m", $i), date("Y", $i));
if ($domingo != "Domingo")
echo date("Y-m-d", $i).'<br />';
}
?>
Resultado:
2011-12-13 2011-12-14 2011-12-15 2011-12-16 2011-12-17 2011-12-19 2011-12-20 2011-12-21 2011-12-22 2011-12-23
Veras que no incluye los domingos. Ahora, explicame eso ultimo de los abonados, es un dato en la BD?
Saludos.
#12
Escrito 13 diciembre 2011 - 03:59
Ahora el tema de abonados es el siguiente: La idea es que con estas fechas me genere un plan de cuotas que se muestre en una tabla, para yo luego guardar los datos en la base de datos, es decir, al ser cuotas diarias que se me genere la cantidad de cuotas ya especificada y cada una con su monto y la posibilidad de seleccionar si fue abonado o no..
A continuacion te dejo una imagen de mi "intento de sistema"!!
Archivos adjuntos
#13
Escrito 13 diciembre 2011 - 04:20
Como ya sabes la Fecha de Inicio y la Cantidad de Cuotas ya las tengo almacenadas en una BD, y la función para las fechas sin los domingos ya la hiciste funcionar a la perfección!!!Ahora debo generar la tabla que me muestre la cantidad de cuotas ya especificadas a pagar en cada una de estas fechas!!
En si, lo que hago es generar una solicitud de credito y con respecto a estos datos que almaceno paso a este "auto-formulario" que debo guardar con la info de las cuotas!!Esto me da la posibilidad de traer esta info todos los dias para seleccionar si Pagó o no Pagó la cuota!!!
<table width="713">
<tr>
<td height="5" colspan="4"></td>
</tr>
<tr>
<td colspan="5" class="subencabezado"></td>
</tr>
<tr>
<td colspan="5" class="encabezado" height="46">Plan Generado para el Crédito</td>
</tr>
<tr>
<td colspan="5" class="subencabezado"></td>
</tr>
<tr>
<td height="5" colspan="5" align="right"></td>
</tr>
<tr>
<td colspan="5" align="center">
<table width="711">
<tr class="subencabezado">
<td width="114" align="center">F. Inicio</td>
<td width="143" align="center">F. Vencimiento</td>
<td width="70" align="center">Cuotas</td>
<td width="192" align="center">Monto Diario*</td>
<td width="168" align="center">Monto Total*</td>
</tr>
<tr>
<td align="center"><input type="text" name="cod" size="10" value="<?php echo $reg["f_entre"];?>"/></td>
<td align="center"><input type="text" name="cod2" size="10" value="<?php echo $FechaFin;?>"/></td>
<td align="center"><input name="cod3" type="text" size="5" readonly="readonly" value="<?php echo $reg["cantidad"];?>"/></td>
<td align="center">$
<input name="cod4" type="text" size="7" readonly="readonly" value="<?php echo $reg["import_dia"];?>"/></td>
<td align="center">$
<input name="cod5" type="text" size="7" readonly="readonly" value="<?php echo $reg["total"];?>"/></td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="5" colspan="5" align="right"></td>
</tr>
<tr>
<td colspan="5" class="subencabezado"></td>
</tr>
<tr>
<td colspan="5" class="encabezado" height="46">Plan de Cuotas Generado para el Crédito</td>
</tr>
<tr>
<td colspan="5" class="subencabezado"></td>
</tr>
<tr>
<td height="5" colspan="5" align="right"></td>
</tr>
<tr>
<td colspan="5" class="subencabezado" align="right"></td>
</tr>
<tr>
<td align="center" class="subencabezado">Fecha</td>
<td align="center" class="subencabezado">Monto Diario</td>
<td align="center" class="subencabezado">Estado</td>
<td colspan="2" align="center" class="subencabezado">N° Cuota</td>
</tr>
<tr>
<td align="center"> </td>
<td align="center">$
<input name="cod6" type="text" size="10" readonly="readonly" value="<?php echo $reg["import_dia"];?>"/></td>
<td align="center">
<Select name="id_tit" style="width:170">
<option value="0">Estado de Cuota:</option>
<option value="1">A pagar</option>
<option value="2">Pagado</option>
</Select>
</td>
<td colspan="2" align="center"> </td>
</tr>
<tr>
<td colspan="5" align="right" class="subencabezado"></td>
</tr>
<tr>
<td height="10" colspan="5" align="right"></td>
</tr>
<tr>
<td colspan="5" align="right" class="subencabezado"></td>
</tr>
<tr>
<td colspan="5" align="center" class="encabezado"><input name="button" type="button" title="Volver" onClick="history.back()" value="Volver" />
||
<input name="button2" type="submit" title="Guardar" value="Guardar" /></td>
</tr>
<tr>
<td colspan="5" align="right" class="subencabezado"></td>
</tr>
</table>
Es en esta tabla donde quiero generar el Plan de Cuotas!!Para luego guardarla en mi base de datos!!!Guardaría cada una de las fechas con su monto y su estado(Pagado - No Pagado)..
Eh pensado en llenarlo con un for pero a la hora de guardar no me guardará todas las cuotas solo una nomas!!!
#14
Escrito 14 diciembre 2011 - 07:20
Saludos.
#15
Escrito 14 diciembre 2011 - 07:25
Yo despues tengo la posibilidad de acceder e ir cambiando los estados a medida que transcurren los dias...Llegada la fecha de finalización calcularé el monto total que se ha abonado...
#16
Escrito 14 diciembre 2011 - 08:27
#17
Escrito 14 diciembre 2011 - 08:36
Plan_Cuo
id
id_plan
cuota
monto
estado
En la imagen te muestro como quedaría..El tema es que me genere tantas filas como cuotas especificadas(Ah este plan le genere siete cuotas porque son las especificadas)
Archivos adjuntos
#18
Escrito 14 diciembre 2011 - 09:00
#19
Escrito 14 diciembre 2011 - 10:12
<?php
function dia_de_semana ($dia, $mes, $ano) {
$dias = array("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado");
return $dias[date("w", mktime(0, 0, 0, $mes, $dia, $ano))];
}
$conectar = mysql_connect("localhost","root","2020");
mysql_select_db("test",$conectar);
$f_ini = mysql_query("SELECT cuota, DATE_FORMAT(f_ini,'%d-%m-%Y') as inicio, DATE_FORMAT(DATE_ADD(f_ini, INTERVAL cuota DAY), '%d-%m-%Y') as final FROM tabla LIMIT 1",$conectar);
$row = mysql_fetch_assoc($f_ini);
$FechaIni = strtotime($row["inicio"]);
$FechaFin = strtotime($row["final"]);
$importe = '20.00';
?>
<table width="713">
<tr>
<td height="5" colspan="4"></td>
</tr>
<tr>
<td colspan="5" class="subencabezado"></td>
</tr>
<tr>
<td colspan="5" class="encabezado" height="46">Plan Generado para el Crédito</td>
</tr>
<tr>
<td colspan="5" class="subencabezado"></td>
</tr>
<tr>
<td height="5" colspan="5" align="right"></td>
</tr>
<tr>
<td colspan="5" align="center">
<table width="711">
<tr class="subencabezado">
<td width="114" align="center">F. Inicio</td>
<td width="143" align="center">F. Vencimiento</td>
<td width="70" align="center">Cuotas</td>
<td width="192" align="center">Monto Diario*</td>
<td width="168" align="center">Monto Total*</td>
</tr>
<tr>
<td align="center"><input type="text" name="cod" size="10" value="<?php echo Date('Y-m-d',$FechaIni);?>"/></td>
<td align="center"><input type="text" name="cod2" size="10" value="<?php echo Date('Y-m-d',$FechaFin);?>"/></td>
<td align="center"><input name="cod3" type="text" size="5" readonly="readonly" value="<?php echo $row["cuota"];?>"/></td>
<td align="center">$
<input name="cod4" type="text" size="7" readonly="readonly" value="<?php echo $importe;?>"/></td>
<td align="center">$
<input name="cod5" type="text" size="7" readonly="readonly" value="<?php echo $reg["total"];?>"/></td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="5" colspan="5" align="right"></td>
</tr>
<tr>
<td colspan="5" class="subencabezado"></td>
</tr>
<tr>
<td colspan="5" class="encabezado" height="46">Plan de Cuotas Generado para el Crédito</td>
</tr>
<tr>
<td colspan="5" class="subencabezado"></td>
</tr>
<tr>
<td height="5" colspan="5" align="right"></td>
</tr>
<tr>
<td colspan="5" class="subencabezado" align="right"></td>
</tr>
<tr>
<td align="center" class="subencabezado">Fecha</td>
<td align="center" class="subencabezado">Monto Diario</td>
<td align="center" class="subencabezado">Estado</td>
<td colspan="2" align="center" class="subencabezado">N° Cuota</td>
</tr>
<?
for ($i=$FechaIni;$i<=$FechaFin;$i+=86400)
{
$domingo = dia_de_semana(date("d", $i), date("m", $i), date("Y", $i));
if ($domingo != "Domingo") {
?>
<tr>
<td align="center"><? echo date("Y-m-d", $i); ?></td>
<td align="center">$
<input name="cod6" type="text" size="10" readonly="readonly" value="<?php echo $importe; ?>"/></td>
<td align="center">
<Select name="id_tit" style="width:170">
<option value="0">Estado de Cuota:</option>
<option value="1">A pagar</option>
<option value="2">Pagado</option>
</Select>
</td>
<td colspan="2" align="center"> </td>
</tr>
<?
}// if Not Domingo!!
} //Ciclo for
?>
<tr>
<td colspan="5" align="right" class="subencabezado"></td>
</tr>
<tr>
<td height="10" colspan="5" align="right"></td>
</tr>
<tr>
<td colspan="5" align="right" class="subencabezado"></td>
</tr>
<tr>
<td colspan="5" align="center" class="encabezado"><input name="button" type="button" title="Volver" onClick="history.back()" value="Volver" />
||
<input name="button2" type="submit" title="Guardar" value="Guardar" /></td>
</tr>
<tr>
<td colspan="5" align="right" class="subencabezado"></td>
</tr>
</table>
O es que los datos de creditos se generan de acuerdo a lo que se ingresa en la parte de arriba?
#20
Escrito 14 diciembre 2011 - 10:20
Ahora sólo me queda ver como tomar las fechas para cada cuota y grabarlas!!Ya que al hacerlas con el for no me las toma!!!!