Ir al contenido


Foto

Generar cuotas diarais de pago a través de una fecha inicial!!


  • Por favor identifícate para responder
28 respuestas en este tema

#1 Fedevergara

Fedevergara

    Advanced Member

  • Miembros
  • PipPipPip
  • 56 mensajes

Escrito 09 diciembre 2011 - 02:07

Liado nuevamente!!!Maldigo el momento en que acepte este sistema!!!Eso sí, aprendí mucho, y ese es el beneficio!!
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!!:D 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!!!!!
  • 0

#2 Fedevergara

Fedevergara

    Advanced Member

  • Miembros
  • PipPipPip
  • 56 mensajes

Escrito 13 diciembre 2011 - 07:12

Buen Día Gente!!!Sigo con el mismo problema!!!Y encima veo que nadie me ha tirado una mano!!!
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!!!!
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 diciembre 2011 - 07:34

Hola fede, en ningun lado veo que asignas la fecha de inicio. Mas o menos el for debes hacerlo de esta manera:

< ?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.
  • 0

#4 Fedevergara

Fedevergara

    Advanced Member

  • Miembros
  • PipPipPip
  • 56 mensajes

Escrito 13 diciembre 2011 - 07:40

Es verdad Ene!!Pasa puse el ejemplo genérico!!!
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!!!
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 diciembre 2011 - 07:42

Revisa la respuesta #2, te puse un ejemplo de mas o menos como deberias hacer el for ;)

Saludos.
  • 0

#6 Fedevergara

Fedevergara

    Advanced Member

  • Miembros
  • PipPipPip
  • 56 mensajes

Escrito 13 diciembre 2011 - 08:02

El tema Ene es que yo no tengo una fecha de finalización, la calculo con la función teniendo en cuenta la fecha de entrega, la cantidad de cuotas y la no utilización de días domingos, que son mas o menos los requerimientos del sistema..Probando de la manera en que me has indicado se me congela el sistema hasta tirarme información basura...

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!!!



  • 0

#7 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

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.
  • 0

#8 Fedevergara

Fedevergara

    Advanced Member

  • Miembros
  • PipPipPip
  • 56 mensajes

Escrito 13 diciembre 2011 - 08:48

Ene el $f_final no me muestra nada!!!!
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!!!!
  • 0

#9 Fedevergara

Fedevergara

    Advanced Member

  • Miembros
  • PipPipPip
  • 56 mensajes

Escrito 13 diciembre 2011 - 09:04

Eneeeeee!!!La verdad quisiera ser como vos!!!!!
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!!!
  • 0

#10 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 diciembre 2011 - 09:58

Por que no lo hacemos mas corto y utilizamos la potencia del motor de la BD?

$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):



delphi
  1. 2012-12-13
  2. 2012-12-14
  3. 2012-12-15
  4. 2012-12-16
  5. 2012-12-17
  6. 2012-12-18
  7. 2012-12-19
  8. 2012-12-20
  9. 2012-12-21
  10. 2012-12-22
  11. 2012-12-23



Luego vere como sacarte los dias Domingos.

Saludos.

  • 0

#11 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 diciembre 2011 - 10:08

Bueno listo mi estimado:

<?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:



delphi
  1. 2011-12-13
  2. 2011-12-14
  3. 2011-12-15
  4. 2011-12-16
  5. 2011-12-17
  6. 2011-12-19
  7. 2011-12-20
  8. 2011-12-21
  9. 2011-12-22
  10. 2011-12-23



Veras que no incluye los domingos. Ahora, explicame eso ultimo de los abonados, es un dato en la BD?

Saludos.
  • 0

#12 Fedevergara

Fedevergara

    Advanced Member

  • Miembros
  • PipPipPip
  • 56 mensajes

Escrito 13 diciembre 2011 - 03:59

Funciona a la perfección!!!!La verdad Ene siempre lo mejor!!!

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


  • 0

#13 Fedevergara

Fedevergara

    Advanced Member

  • Miembros
  • PipPipPip
  • 56 mensajes

Escrito 13 diciembre 2011 - 04:20

Espero me entiendas Ene.

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">&nbsp;</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">&nbsp;</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" />
&nbsp;||&nbsp;
<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!!!
  • 0

#14 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 14 diciembre 2011 - 07:20

A ver si entendi, de donde saco el monto diario? o es que lo coloca el usuario?, el estado abonado o no se coloca manualmente?, mostrar esos datos en un formulario para luego ingresarlo en una tabla de BD?.

Saludos.
  • 0

#15 Fedevergara

Fedevergara

    Advanced Member

  • Miembros
  • PipPipPip
  • 56 mensajes

Escrito 14 diciembre 2011 - 07:25

Claro Ene!!El Monto Diario ya esta guardado en la base de datos!El estado debe ser ingresado manualmente..Toda la info generada para cada una de las cuotas debe ser guardada en la base de datos...Es por eso que deseo generar esta tabla con la cantidad de cuotas ya especificada y cada una de sus fechas..

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...
  • 0

#16 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 14 diciembre 2011 - 08:27

A ver, el code que te pase es para mostrar o para ingresar??.
  • 0

#17 Fedevergara

Fedevergara

    Advanced Member

  • Miembros
  • PipPipPip
  • 56 mensajes

Escrito 14 diciembre 2011 - 08:36

El tema de las fechas??Ah eso lo utilizo para generar las fechas que se muestran al lado de monto diario..La idea es que todo me lo muestre en la tabla..después guardaré en una tabla:

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


  • 0

#18 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 14 diciembre 2011 - 09:00

La verdad es que no puedo ver las imagenes debido a mi proxy :(
  • 0

#19 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 14 diciembre 2011 - 10:12

Algo como esto:?

<?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">&nbsp;</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" />
                  &nbsp;||&nbsp;
                  <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?
  • 0

#20 Fedevergara

Fedevergara

    Advanced Member

  • Miembros
  • PipPipPip
  • 56 mensajes

Escrito 14 diciembre 2011 - 10:20

Ene!!!Es eso lo que hice!!!Me muestra a la perfección!!!

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!!!!


  • 0




IP.Board spam blocked by CleanTalk.