Buen día. Había creado un post hace días de Problema al usar cron y php. Ya lo solucione del tema de cronjob. Esta vez el tema que publicare es distinto.
Resulta que estoy desarrollado un modulo de cronograma de pagos de un sistema de cursos de especialización. El sistema de pago maneja 2 tipos de estados: PENDIENTE Y CANCELADO. Las fechas de pago se están pagando en cuotas.
La condición es que faltando 3 días se debe enviar automáticamente un correo diciendo que ya falta poco para que pague el siguiente modulo y a parte también condicionar si el alumno ha pagado o a cancelado.
Ejemplo. El día 27 de este mes se vence el pago de un alumno. Se le enviara automáticamente al administrador que tal alumno tiene una deuda y así sucesivamente va suceder en el próximo mes de pago.
Esta es una imagen de como se muestra los registros del cronograma de pago.
Las tablas con las que estoy trabajando. Son 3.
He realizado este código para que se le envié al correo del administrador, pero me lo envia varias veces.
Código PHP:
Ver original// Consulto el cronograma de pago. Incluyendo la tabla alumno.
$sqlAlertaPago = "SELECT DATE_ADD(fecha_pago2, INTERVAL -2 DAY) as fecha_final,
a.id, a.nombre, a.apellido, a.email,a.bloqueo, pa. * , pc. *
FROM alumno a, pago_alumnos pa, pago_credito pc
WHERE pa.id = pc.idpago
AND pa.alumno = a.id
AND pc.status = 'PENDIENTE'";
$fechaDB = '2015-02-28';
$timeActual = time(); // Obtenemos el timestamp del momento actual; $timeVencimiento = strtotime($fechaDB); // Obtenemos timestamp de la fecha de vencimiento
// Calculamos el número de segundos que tienen esos 3 días
$segundos = 2 * 24 * 60 * 60;
// Aun no ha caducado pero faltan menos de tres días
if(($timeActual < $timeVencimiento) AND ($timeVencimiento-$timeActual < $segundos))
{
if($rowAlertaPago['status']=='PENDIENTE')
{
// Va a expirar en menos de 3 días
// procesar el envio automatico
$mail = new PHPMailer(); // defaults to using php "mail()"
$mail->From = "$rowAlertaPago[email]";
$mail->FromName = "$rowAlertaPago[nombre]";
$mail->Subject = "American Andragogy University - Alerta para el alumno ".$rowAlertaPago['nombre']."";
$msg .= 'Sr. Percy Vieira:<br />';
$msg .= 'Le recordamos que el alumno '.$rowAlertaPago['nombre'].' '.$rowAlertaPago['apellido'].' tiene una fecha pendiente de pago.<br />';
$msg .= 'Su correo del alumno es: '.$rowAlertaPago['email'].'<br />';
$msg .= 'Gracias.';
$mail->MsgHTML($msg);
$mail->IsHTML(true);
$mail->Send();
}
else if($rowAlertaPago['status']=='CANCELADO')
{
// Va a expirar en menos de 3 días
$mail = new PHPMailer(); // defaults to using php "mail()"
$mail->From = "$rowAlertaPago[email]";
$mail->FromName = "$rowAlertaPago[nombre]";
$mail->Subject = "American Andragogy University - Alerta para el alumno ".$rowAlertaPago['nombre']."";
$msg .= 'Sr. Percy Vieira:<br />';
$msg .= 'Le recordamos que el alumno '.$rowAlertaPago['nombre'].' '.$rowAlertaPago['apellido'].' ya cancelo su fecha de pago.<br />';
$msg .= 'Su correo del alumno es: '.$rowAlertaPago['email'].'<br />';
$msg .= 'Avisele al alumno para que no pierda su curso de especializacion<br />';
$msg .= 'Gracias.';
$mail->MsgHTML($msg);
$mail->IsHTML(true);
$mail->Send();
}
// Aun no ha caducado y faltan más de tres días
}
else if(($timeActual < $timeVencimiento) and ($timeVencimiento-$timeActual > $segundos))
{
// procesar el envio automatico
$mail = new PHPMailer(); // defaults to using php "mail()"
$mail->From = "$rowAlertaPago[nombre]";
$mail->FromName = "$rowAlertaPago[email]";
$mail->Subject = "American Andragogy University - Alerta para el alumno ".$rowAlertaPago['nombre']."";
$msg .= 'Sr. Percy Vieira:<br />';
$msg .= 'Le recordamos nuevamente que el alumno '.$rowAlertaPago['nombre'].' '.$rowAlertaPago['apellido'].' tiene una fecha pendiente de pago.<br />';
$msg .= 'Su correo del alumno es: '.$rowAlertaPago['email'].'<br />';
$msg .= 'Gracias.';
$mail->MsgHTML($msg);
$mail->IsHTML(true);
$mail->Send();
// Ya ha caducado, la fecha de vencimiento es anterior a la fecha actual
}
else if($timeActual > $timeVencimiento)
{
// procesar el envio automatico
$mail = new PHPMailer(); // defaults to using php "mail()"
$mail->From = "$rowAlertaPago[nombre]";
$mail->FromName = "$rowAlertaPago[email]";
$mail->Subject = "American Andragogy University - Alerta para el alumno ".$rowAlertaPago['nombre']."";
$msg .= 'Sr. Percy Vieira:<br />';
$msg .= 'Ya se le vencio la fecha de pago del alumno '.$rowAlertaPago['nombre'].' '.$rowAlertaPago['apellido'].'. Si el alumno ha pagado, omitir este mensaje.<br />';
$msg .= 'Su correo del alumno es: '.$rowAlertaPago['email'].'<br />';
$msg .= 'Gracias.';
$mail->MsgHTML($msg);
$mail->IsHTML(true);
$mail->Send();
// Otra situación
}
else
{
// Todavía no
// echo '<div class="mensaje-alerta-2"><p>Ya cancelaste tu cuota.</p></div>';
// procesar el envio automatico
$mail = new PHPMailer(); // defaults to using php "mail()"
$mail->From = "$rowAlertaPago[nombre]";
$mail->FromName = "$rowAlertaPago[email]";
$mail->Subject = "American Andragogy University - Alerta para el alumno ".$rowAlertaPago['nombre']."";
$msg .= 'Sr. Percy Vieira:<br />';
$msg .= 'Le recordamos que el alumno '.$rowAlertaPago['nombre'].' '.$rowAlertaPago['apellido'].'. Ya pago este modulo. Si el alumno ha pagado, omitir este mensaje.<br />';
$msg .= 'Su correo del alumno es: '.$rowAlertaPago['email'].'<br />';
$msg .= 'Gracias.';
$mail->MsgHTML($msg);
$mail->IsHTML(true);
$mail->Send();
}
Desde hace 2 dias estoy con esto. Espero que me puedan ayudar con mi problema.
Saludos.