collapse

Autor Tema: Notificar cuándo un dominio caduca y cancelar el albarán  (Leído 3130 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Conectado anthony

  • Administrador
  • *****
  • Mensajes: 1351
  • País: es
  • Karma: 25
  • Sexo: Masculino
  • HostingFAQero
    • Ver Perfil
    • Cyberneticos CPD
Supongo que a todos os ocurre, que después del último aviso de renovación de dominio que se le envía a un cliente no se le notifica que finalmente Caducó el dominio y peor aún, se queda un albarán en el sistema activo por el mismo precio de renovaicón,

Y viene el cliente listillo de turno, y quiere intentar renovar el dominio después de que haya caducado, o el mismo día que caduca, por el mismo precio. Y le dices que el dominio ya caducó por no pagarlo a tiempo, pese a las más de 10 notificacioens de aviso, y realizó el pago el mismo día que caducó o después.

Pero el dominio finalmente ni se renueva, incluso habiéndolo pagado, y en algunos casos el dominio incluso se libera y lo registra otra empresa, y el cliente se agarra a que no se le notificó de ningún problema y que ha pagado.

El script soluciona este problema y realiza lo siguiente

1º Busca dominios que caduquen en el mismo día que se ejecuta (hoy). Lo hace comparando la fecha de hoy con Expiry Date
2º Envia un email a los dueños de dicho dominios sin importar el estado del dominio (esto lo hemos decidido así por razones internas, puedes modificar el script para que solo los envíe a los estados que quieras)
3º Guarda una copia del envío en "Mis Emails" para que quede constancia del comunicado. :mrgreen:

El script:

Código: [Seleccionar]
<?

// --- Programado por Anthony Lydick de Cyberneticos CPD , editado para [url=http://www.whmcs.es]www.whmcs.es[/url] ---

$emailheader = "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN''http://www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>
<style type='text/css'>
<!--
.Estilo2 {font-family: Calibri, Verdana, Arial, Helvetica, sans-serif}
.Estilo3 {
   color: #333333;
   font-size: 10px;
   font-family: Calibri, Verdana, Arial, Helvetica, sans-serif;
}
a:link {
   color: #333333;
}
a:hover {
   color: #999999;
}
a:visited {
   color: #333333;
}
a:active {
   color: #333333;
}
.Estilo8 {
   font-family: Calibri, Verdana, Arial, Helvetica, sans-serif;
   font-size: 10px;
}
.Estilo10 {font-size: 10px; color: #333333;}
.Estilo11 {font-weight: bold; color: #FF0000;}
-->
</style>
</head>

<body>";

echo "<html>
<body>
<table width='80%'>
   <tr>
      <th align='left'>Cliente</th><th align='left'>Dominio</th><th align='left'>Estado</th><th align='left'>Expiry Date</th><th align='left'>Fecha Hoy</th><th align='left'>Caducado?</th>
   </tr>";

$connection= mysql_connect("localhost", "xxxxxxxxxx", "yyyyyyyyyyyyyyy") or die("couldn't connect to database: ".mysql_error() );
mysql_select_db("zzzzzzzzzzzzzzzzzz", $connection);

$query = "SELECT * FROM tbldomains ORDER BY domain ASC";
$result = mysql_query($query,$connection);

//echo mysql_num_rows($result);

for ($c=0; $c < mysql_num_rows($result);$c++){
   $domain = mysql_result($result,$c,"domain");
   $status = mysql_result($result,$c,"status");
   $whmcsexpirydate = mysql_result($result,$c,"expirydate");
   $userid = mysql_result($result,$c,"userid");
   $recurringamount = mysql_result($result,$c,"recurringamount");

   // get client information

   $query2 = "SELECT * FROM tblclients WHERE id = $userid";
   $result2 = mysql_query($query2,$connection);

   $clientemail = mysql_result($result2,0,"email");
   $firstname = mysql_result($result2,0,"firstname");
   $lastname = mysql_result($result2,0,"lastname");
   $companyname = mysql_result($result2,0,"companyname");

   // get today's date
   
   $hoy = date("Y-m-d");
   $hoy_formateado = date("d/m/Y");

   if ($whmcsexpirydate == $hoy){
      $correo = $emailheader."<img src = 'http://www.tudominio.com/tulogotipo.gif'><br>
      <br>
      Estimado/a $firstname $lastname ($companyname),<br>
      <br>
      <font color = '#990000'>Su dominio <b>$domain</b> ha caducado hoy, dia $hoy_formateado.</font><br>
      <br>
      <b>Le recordamos que si usted decide no restaurar este dominio, corre el riesgo de perder este dominio para siempre.</b><br>
      <br>
      Si no era su intencion dejar que este dominio caducase, o si cree que ha recibido este comunicado por error, por favor abra una incidencia con el Departamento de Dominios inmediatamente para que podamos solucionar cualquier incidencia que haya podido ocurrir. Si abre una incidencia con nuestro Departamento de Dominios, asegurese que recibe una respuesta automatizada confirmando la recepcion de su consulta y la creacion de la incidencia con su correspondiente numero de incidencia.<br>
      <br>
      Gracias por confiar en Tu Empresa,<br>
      <br>
      Atentamente,<br>
      Tu Empresa
      <font size ='1' color = '#aaaaaa'>Numero de Cliente $userid</font><br>
      <br>
      </body>
      </html>";

      $correo_stripped = "Estimado $firstname $lastname ($companyname),<br>
      <br>
      <font color = #990000>Su dominio <b>$domain</b> ha caducado hoy, dia $hoy_formateado.</font><br>
      <br>
      Le recordamos que si usted decide no restaurar este dominio, corre el riesgo de perder este dominio para siempre.<br>
      <br>
      Si no era su intencion dejar que este dominio caducase, o si cree que ha recibido este comunicado por error, por favor abra una incidencia con el Departamento de Dominios inmediatamente para que podamos solucionar cualquier incidencia que haya podido ocurrir. Si abre una incidencia con nuestro Departamento de Dominios, asegurese que recibe una respuesta automatizada confirmando la recepcion de su consulta y la creacion de la incidencia con su correspondiente numero de incidencia.<br>
      <br>
      Gracias por confiar en Tu Empresa,<br>
      <br>
      Atentamente,<br>
      <br>
      Tu Empresa<br>
      <br>
      <font size =1 color = #aaaaaa>Numero de Cliente $userid<br>
      <br>";

      echo "<tr>
            <td align='left'>$clientemail</td><td align='left'>$domain</td><td align='left'>$status</td><td align='left'>$whmcsexpirydate</td><td align='left'>$hoy_formateado</td>
            <td align='left'><font color=#990000>CADUCADO HOY</font></td>";

      mail("tuemail@tudominio.com", "Su dominio $domain ha caducado", $correo, "From: Tu Empresa <dominios@tuempresa.com>\n"."MIME-Version: 1.0\n" .   "Content-type: text/html; charset=iso-8859-1");

      mail($clientemail, "Su dominio $domain ha caducado", $correo, "From: Tu Empresa <dominios@tuempresa.com>\n"."MIME-Version: 1.0\n" .   "Content-type: text/html; charset=iso-8859-1");

// ---------------------------------------------- SCRIPT CORE ------------------------------------------------------

        $clientquery2 = "INSERT INTO tblemails (userid,subject,message,`date`,`to`) VALUES ('$userid','Su dominio $domain ha caducado','$correo_stripped','$hoy','$clientemail') ";
        $clientresult2= mysql_query($clientquery2) or die (mysql_error());

        // marcar dominio como expired
       
        $clientexpiraloquery = "UPDATE tbldomains SET status = 'Expired' WHERE domain = '$domain' LIMIT 5";
        $clientexpiraloresult= mysql_query($clientexpiraloquery) or die (mysql_error());
        $acciones.="<br>Dominio marcado como Expired en WHMCS.";

        // eliminar artículo de albarán o cancelar albarán si era lo unico en factura
       
        $invoiceitemquery = "SELECT * FROM tblinvoiceitems WHERE userid = '$userid' AND type = 'Domain' AND description LIKE '%$domain%'";
        $invoiceitemresult= mysql_query($invoiceitemquery) or die (mysql_error());

         // cycle thru invoice items
         
         for ($inv=0; $inv < mysql_num_rows($invoiceitemresult);$inv++){

            $invoiceitemid = mysql_result($invoiceitemresult,$inv,"id");
            $invoiceid = mysql_result($invoiceitemresult,$inv,"invoiceid");
   
            $invoicequery = "SELECT * FROM tblinvoices WHERE id = '$invoiceid' ";
            $invoiceresult = mysql_query($invoicequery) or die (mysql_error());
            $subtotal = mysql_result($invoiceresult,0,"subtotal");
            $totalviejo = mysql_result($invoiceresult,0,"total");
            $tax = mysql_result($invoiceresult,0,"tax");
            $taxrate = mysql_result($invoiceresult,0,"taxrate");
            $invstatus = mysql_result($invoiceresult,0,"status");

            // ----------------- solo vamos a jugar con los albaranes pendientes de pago. filtramos aquí-------
            if ($invstatus == "Unpaid"){
                // asegurarnos que era el único artículo antes de cancelar el albarán
                $invoicecheckquery = "SELECT * FROM tblinvoiceitems WHERE invoiceid = '$invoiceid' ";
                $invoicecheckresult = mysql_query($invoicecheckquery) or die (mysql_error());

                if (mysql_num_rows($invoicecheckresult) == 1) { // si era el único artículo y el total del albarán coincide con el total del valor recurrente del dominio SOLO cancelar albarán completamente, sin eliminar artículos
                    $invoiceupdatequery = "UPDATE tblinvoices SET status = 'Cancelled' WHERE id = '$invoiceid' ";
                    $invoiceupdateresult= mysql_query($invoiceupdatequery) or die (mysql_error());
                    $acciones.="<br>Se cancela albarán $invoiceid. Era el único artículo existente.";
                }
                else if (mysql_num_rows($invoicecheckresult) > 1){ // si no era el único artículo, eliminar ese artículo de albarán solamente y restar cantidad del subtotal
                    $itemremovequery = "DELETE FROM tblinvoiceitems WHERE id = '$invoiceitemid' LIMIT 1";
                    $itemremoveresult= mysql_query($itemremovequery) or die (mysql_error());
                    $acciones.="<br>Se elimina artículo $invoiceitemid del albarán $invoiceid , pero no se cancela el albarán, puesto que hay más artículos";

                    // update subtotal de factura
                    $subtotalrestado = $subtotal - $recurringamount;
                    $invoiceupdatequery2= "UPDATE tblinvoices SET subtotal = '$subtotalrestado' WHERE id = '$invoiceid' AND userid = '$userid' LIMIT 1";
                    $invoiceupdateresult2= mysql_query($invoiceupdatequery2) or die (mysql_error());
                    $acciones.="<br>Se resta $recurringamount del albarán $invoiceid que tenía cómo total antes $subtotal y ahora $subtotalrestado";

                    // update tax de factura
                    $taxratedecimal = round( ($taxrate/100), 2 ); // 18% = 0.18
                    $nuevotax = ($subtotal * $taxratedecimal);
                    $invoiceupdatequery3= "UPDATE tblinvoices SET tax = '$nuevotax' WHERE id = '$invoiceid' AND userid = '$userid' LIMIT 1";
                    $invoiceupdateresult3= mysql_query($invoiceupdatequery3) or die (mysql_error());
                    $acciones.="<br>Se recalcula el iva del albarán $invoiceid que tenía cómo iva antes $tax y ahora $nuevotax";

                    // calcular total de factura
                    $nuevototal = $subtotalrestado + $nuevotax;
                    $invoiceupdatequery4= "UPDATE tblinvoices SET total = '$nuevototal' WHERE id = '$invoiceid' AND userid = '$userid' LIMIT 1";
                    $invoiceupdateresult4= mysql_query($invoiceupdatequery4) or die (mysql_error());
                    $acciones.="<br>Se recalcula el Total del albarán $invoiceid que tenía cómo total antes $totalviejo y ahora $nuevototal";


                }
                else $acciones.="<br>Hubo un fallo.";
            } // -------------------------------- EOF Unpaid filter ----------------------------

        } // EOF cycle thru invoice items

    } // EOF procesar solo domiios que caducan hoy
    echo "</tr>"; // close row

} // EOF cycle thru domains

// ---------------------------------------------- EOF SCRIPT CORE ------------------------------------------------------

mail("tuemail@tudominio.com", "Acciones dominios caducados $hoy_formateado", $acciones, "From: Tu Empresa <dominios@tuempresa.com>\n"."MIME-Version: 1.0\n" .   "Content-type: text/html; charset=iso-8859-1");

echo "</table></body></html>";

?>
   

Instrucciones y advertencias:

- Este script viene con 0 soporte y 0 garantías. si decides usarlo, tu eres responsable de las consecuencias o beneficios que pueda producir.
- Cambia los emails al tuyo y los téxtos de Tu Empresa, etc...
- Pon tu clave de MySQL en xxxxx, yyyyyy, zzzzzzzz
- Coloca el script en un lugar seguro
- Dirígete con tu navegador a la URL del script


SUPER-IMPORTANTE: Solo ejecutar 1 vez al día.Altamente recomendado ejecutar a las 00:00 en punto.

Si quieres hacer pruebas, desactiva las llamadas que realizan cambios (UPDATE y DELETE)

 <img src="{SMILIES_PATH}/icon_exclaim.gif" alt=":!:" title="Exclamation" />  Probado con 4.4.2 , aunque debe funcionar para muchas versiones futuras a menos que WHMCS cambie la estructura de la base de datos para facturas.
« última modificación: Junio 22, 2011, 13:51 por anthony »
10 PRINT "Hello" ;
RUN
:)

Herramienta para compartir código:
http://www.copiatelo.com

Desconectado Eduardo G.

  • Usuario veterano
  • ****
  • Mensajes: 684
  • País: es
  • Karma: 12
    • Ver Perfil
Re: Notificar cuándo un dominio caduca y cancelar el albarán
« Respuesta #1 en: Mayo 13, 2011, 14:42 »
Humm.. pues es verdad, menudo problema :-)
Para que no se pudiese pagar, habría que marcar esa factura como "Cancelled", ¿no?
Planteamiento técnico:
 - Buscar dominios cuyo estado sea "Expired"
 - Buscar facturas asociadas a esos dominios cuyo estado sea "Unpaid"
 - Cambiar esas facturas a estado "Cancelled"
¿Crees que ese planteamiento es correcto? Se puede hacer una tarea que se ejecute a diario :-)
Código: [Seleccionar]
SELECT d.id, d.domain, d.status
, t.invoiceid
, i.id, i.invoicenum, i.status
FROM tbldomains d
INNER JOIN tblinvoiceitems t ON d.id = t.relid
INNER JOIN tblinvoices i ON t.invoiceid = i.id
WHERE d.status = "Expired"
AND i.status = "Unpaid"

Conectado anthony

  • Administrador
  • *****
  • Mensajes: 1351
  • País: es
  • Karma: 25
  • Sexo: Masculino
  • HostingFAQero
    • Ver Perfil
    • Cyberneticos CPD
Re: Notificar cuándo un dominio caduca y cancelar el albarán
« Respuesta #2 en: Mayo 13, 2011, 15:03 »
El código entero ya lo tengo hecho ;)
10 PRINT "Hello" ;
RUN
:)

Herramienta para compartir código:
http://www.copiatelo.com

Conectado anthony

  • Administrador
  • *****
  • Mensajes: 1351
  • País: es
  • Karma: 25
  • Sexo: Masculino
  • HostingFAQero
    • Ver Perfil
    • Cyberneticos CPD
Re: Notificar cuándo un dominio caduca y cancelar el albarán
« Respuesta #3 en: Mayo 13, 2011, 15:12 »
Código movido a post principal
10 PRINT "Hello" ;
RUN
:)

Herramienta para compartir código:
http://www.copiatelo.com

Conectado anthony

  • Administrador
  • *****
  • Mensajes: 1351
  • País: es
  • Karma: 25
  • Sexo: Masculino
  • HostingFAQero
    • Ver Perfil
    • Cyberneticos CPD
Re: Notificar cuándo un dominio caduca y cancelar el albarán
« Respuesta #4 en: Mayo 13, 2011, 15:21 »
Movido post al principio.
10 PRINT "Hello" ;
RUN
:)

Herramienta para compartir código:
http://www.copiatelo.com

Conectado anthony

  • Administrador
  • *****
  • Mensajes: 1351
  • País: es
  • Karma: 25
  • Sexo: Masculino
  • HostingFAQero
    • Ver Perfil
    • Cyberneticos CPD
Re: Notificar cuándo un dominio caduca y cancelar el albarán
« Respuesta #5 en: Mayo 13, 2011, 15:23 »
Vamos, esto te lo hace todo, tipo Juan Palomo  :lol:

¿Que os parece?
10 PRINT "Hello" ;
RUN
:)

Herramienta para compartir código:
http://www.copiatelo.com

Desconectado Héctor Ros

  • Usuario habitual
  • ***
  • Mensajes: 228
  • País: es
  • Karma: 15
  • Sexo: Masculino
    • Ver Perfil
    • SERED
Re: Notificar cuándo un dominio caduca y cancelar el albarán
« Respuesta #6 en: Mayo 13, 2011, 17:11 »
Eeee, Me Gusta  :cry: Así que tardare a poderlo probar)

Gracias !  :mrgreen:
« última modificación: Mayo 13, 2011, 17:23 por hectorros »

Desconectado GoRhY

  • Usuario aficionado
  • **
  • Mensajes: 96
  • Karma: 10
    • Ver Perfil
Re: Notificar cuándo un dominio caduca y cancelar el albarán
« Respuesta #7 en: Mayo 13, 2011, 17:23 »
Mola, a ver si lo podemos implementar este fin de semana :)

Desconectado Eduardo G.

  • Usuario veterano
  • ****
  • Mensajes: 684
  • País: es
  • Karma: 12
    • Ver Perfil
Re: Notificar cuándo un dominio caduca y cancelar el albarán
« Respuesta #8 en: Mayo 13, 2011, 18:20 »
Cita de: "cyberneticos"
  c) Si no lo es, elimina el artículo del albarán, y resta el valor de la renovación del total, pero no lo cancela.
Bien visto

Conectado anthony

  • Administrador
  • *****
  • Mensajes: 1351
  • País: es
  • Karma: 25
  • Sexo: Masculino
  • HostingFAQero
    • Ver Perfil
    • Cyberneticos CPD
Re: Notificar cuándo un dominio caduca y cancelar el albarán
« Respuesta #9 en: Mayo 13, 2011, 18:31 »
El poder de la programación  :ugeek:
10 PRINT "Hello" ;
RUN
:)

Herramienta para compartir código:
http://www.copiatelo.com

Desconectado internia

  • Recien llegado
  • *
  • Mensajes: 4
  • Karma: 10
    • Ver Perfil
    • http://www.internia.es
Re: Notificar cuándo un dominio caduca y cancelar el albarán
« Respuesta #10 en: Mayo 14, 2011, 00:58 »
Tiene una pinta genial...
Vamos a probarlo a ver que tal funciona...  ;)

Conectado anthony

  • Administrador
  • *****
  • Mensajes: 1351
  • País: es
  • Karma: 25
  • Sexo: Masculino
  • HostingFAQero
    • Ver Perfil
    • Cyberneticos CPD
Re: Notificar cuándo un dominio caduca y cancelar el albarán
« Respuesta #11 en: Mayo 14, 2011, 14:23 »
Ahh, se me olvidó comentar (para los que no saben programar || no se dieron cuenta), este script añade una copia del email enviado en "Mis Emails". Así el cliente no puede decir que no le enviamos la notificación.

:)

Está todo pensado ,eh ?
10 PRINT "Hello" ;
RUN
:)

Herramienta para compartir código:
http://www.copiatelo.com

Nino

  • Visitante
Re: Notificar cuándo un dominio caduca y cancelar el albarán
« Respuesta #12 en: Mayo 14, 2011, 16:43 »
Buen Addon :)

Estas echo un fiera Anthony :=)

Conectado anthony

  • Administrador
  • *****
  • Mensajes: 1351
  • País: es
  • Karma: 25
  • Sexo: Masculino
  • HostingFAQero
    • Ver Perfil
    • Cyberneticos CPD
Re: Notificar cuándo un dominio caduca y cancelar el albarán
« Respuesta #13 en: Mayo 14, 2011, 22:10 »
Gracias Nino :)
10 PRINT "Hello" ;
RUN
:)

Herramienta para compartir código:
http://www.copiatelo.com

Conectado anthony

  • Administrador
  • *****
  • Mensajes: 1351
  • País: es
  • Karma: 25
  • Sexo: Masculino
  • HostingFAQero
    • Ver Perfil
    • Cyberneticos CPD
Re: Notificar cuándo un dominio caduca y cancelar el albarán
« Respuesta #14 en: Mayo 20, 2011, 15:00 »
ATENCION !!!!!  BUG Nº1 descubierto  :mrgreen:  :mrgreen:  :mrgreen:
10 PRINT "Hello" ;
RUN
:)

Herramienta para compartir código:
http://www.copiatelo.com

 


* Ayudanos a crecer


* Temas recientes


* ¿Quién esta en línea?

  • Punto Visitantes: 24
  • Punto Oculto(s): 0
  • Punto Usuarios: 3
  • Punto Usuarios en Línea:


HostingFAQ está alojado en Cyberneticos CPD