Crear un vale de bienvenida con descuento del 20% en Prestashop 1.6

25 septiembre, 2016 |

Si te gusta, compártelo ;)

Crear un vale de bienvenida con descuento del 20%. Vista previa

En este práctico y sencillo tutorial vamos a ver cómo Crear un vale de bienvenida con un descuento del 20%, de esta forma, y a modo de estrategia de marketing, incitaremos a los usuarios a registrarse en nuestra tienda.

También incluiremos la notificación del cupón creado (con su correspondiente código) en el email que Prestashop envía automáticamente al cliente cuando crea su cuenta.

Comenzando...

Bien, comencemos. Y para ello debemos editar un archivo .php, y qué mejor que hacerlo mediante un override. Así que debemos crear un archivo en la ruta prestashop/override/controllers/front/AuthController.php.

Por si se os ha escapado, el archivo que debemos crear se llama AuthController.php

Así que, una vez creado el archivo, comencemos a insertar el siguiente contenido:

<?php

class AuthController extends AuthControllerCore
{
}

A continuación debemos insertar el siguiente método:

protected function sendConfirmationMail(Customer $customer)
{
    if (!Configuration::get('PS_CUSTOMER_CREATION_EMAIL')) {
        return true;
    }
 
    // Generar el cupón
     
    $cartRuleObj = new CartRule();
    $cartRuleObj->date_from = date('Y-m-d H:i:s');
    $cartRuleObj->date_to = date('Y-m-d H:i:s', strtotime('+1 year'));
    $cartRuleObj->name[Configuration::get('PS_LANG_DEFAULT')] = 'Cupón de bienvenida';
    $cartRuleObj->quantity = 1;
    $code = Tools::passwdGen();
    while (CartRule::cartRuleExists($code)) { // Nos aseguramos de que no haya duplicados al generar el cupón
        $code = Tools::passwdGen();
    }
    $cartRuleObj->code = $code;
    $cartRuleObj->quantity_per_user = 1;
    $cartRuleObj->reduction_percent = 20;
    $cartRuleObj->reduction_amount = 0;
    $cartRuleObj->free_shipping = 0;
    $cartRuleObj->active = 1;
    $cartRuleObj->minimum_amount = 0;
    $cartRuleObj->id_customer = $customer->id;
    $cartRuleObj->add();
 
 
    return Mail::Send(
   $this->context->language->id,
   'account',
   Mail::l('Welcome!'),
   array(
    '{firstname}' => $customer->firstname,
    '{lastname}' => $customer->lastname,
    '{email}' => $customer->email,
    '{passwd}' => Tools::getValue('passwd'),
    '{coupon}' => $code),
   $customer->email,
   $customer->firstname.' '.$customer->lastname
  );
}

Analizando el método...

Pero analicemos un poco alguna de las partes de este método.

// Generar el cupón
     
    $cartRuleObj = new CartRule();
    $cartRuleObj->date_from = date('Y-m-d H:i:s');
    $cartRuleObj->date_to = date('Y-m-d H:i:s', strtotime('+1 year'));
    $cartRuleObj->name[Configuration::get('PS_LANG_DEFAULT')] = 'Cupón de bienvenida';
    $cartRuleObj->quantity = 1;
    $code = Tools::passwdGen();
    while (CartRule::cartRuleExists($code)) { // Nos aseguramos de que no haya duplicados al generar el cupón
        $code = Tools::passwdGen();
    }
    $cartRuleObj->code = $code;
    $cartRuleObj->quantity_per_user = 1;
    $cartRuleObj->reduction_percent = 20;
    $cartRuleObj->reduction_amount = 0;
    $cartRuleObj->free_shipping = 0;
    $cartRuleObj->active = 1;
    $cartRuleObj->minimum_amount = 0;
    $cartRuleObj->id_customer = $customer->id;
    $cartRuleObj->add();

En este último fragmento podemos ver algunos parámetros que intervienen en ciertos aspectos de la creación del cupón. Por ejemplo, el de la fecha de expiración del cupón:

$cartRuleObj->date_to = date('Y-m-d H:i:s', strtotime('+1 year'));

En este caso le damos al cupón la duración de 1 año, si queremos que dure, por ejemplo, un mes escribiremos: +1 month

Podemos elegir varias opciones que podemos ver en la función PHP strtotime.

Vamos a ver otras opciones de módo rápido:

1.  $cartRuleObj->quantity_per_user = 1;
2.  $cartRuleObj->reduction_percent = 20;
3.  $cartRuleObj->minimum_amount = 0;
4.  $cartRuleObj->id_customer = $customer->id;
  1. La cantidad de vales que se generarán a favor del cliente.
  2. El porcentaje de descuento del vale.
  3. La cantidad mínima del pedido para poder utilizar el vale. No hay cantidad mínima.
  4. La línea 4 se encarga de generar el vale para un solo cliente.

El siguiente fragmento es el responsable de enviar el email al cliente:

    return Mail::Send(
   $this->context->language->id,
   'account',
   Mail::l('Welcome!'),
   array(
    '{firstname}' => $customer->firstname,
    '{lastname}' => $customer->lastname,
    '{email}' => $customer->email,
    '{passwd}' => Tools::getValue('passwd'),
    '{coupon}' => $code),
   $customer->email,
   $customer->firstname.' '.$customer->lastname
  );

Y con esto terminamos el trabajo con PHP. Ahora debemos editar el archivo de email que se envía al cliente, se llama account.html.

IMPORTANTE: debemos borrar el archivo prestashop/cache/class_index.php para que todo pueda funcionar correctamente.

Editando los archivos de email...

Debemos buscar y editar el archivo prestashop/mails/es/account.html. Una vez dentro del archivo buscar la segunda coincidencia de la siguiente línea:

<table class="table" style="width:100%">

Una vez localizada la segunda coincidencia, observaremos que el primer elemento html de la tabla es una etiqueta <tr>; pues bien, debemos insertar nuestra etiqueta <tr> a continuación de la existente:

<tr>
  <td width="10" style="padding:7px 0">&nbsp;</td>
  <td class="box" style="border:1px solid #D6D4D4;background-color:#f8f8f8;padding:7px 0">
    <table class="table" style="width:100%">
      <tr>
       <td width="10" style="padding:7px 0">&nbsp;</td>
       <td style="padding:7px 0">
<font size="2" face="Open-sans, sans-serif" color="#555454">
<p style="border-bottom:1px solid #D6D4D4;margin:3px 0 7px;text-transform:uppercase;font-weight:500;font-size:18px;padding-bottom:10px">Cupón de bienvenida con descuento del 20%: {coupon}</p>

</font>
       </td>
       <td width="10" style="padding:7px 0">&nbsp;</td>
      </tr>
    </table>
  </td>
</tr>

A mí me quedaba así en Dreamweaver:

Crear un vale de bienvenida con descuento del 20%

Por último, debemos modificar el archivo account.txt que se encuentra en la misma ruta. Solo debemos insertar la siguiente línea después de esta: * Si sospecha que alguien está usando ilegalmente su cuenta, avísenos inmediatamente.

Cupón de bienvenida con descuento del 20%: {coupon}

Código final de los archivos...

AuthController.php
<?php
class AuthController extends AuthControllerCore {
 
protected function sendConfirmationMail(Customer $customer)
{
    if (!Configuration::get('PS_CUSTOMER_CREATION_EMAIL')) {
        return true;
    }
 
    // Generar el cupón
     
    $cartRuleObj = new CartRule();
    $cartRuleObj->date_from = date('Y-m-d H:i:s');
    $cartRuleObj->date_to = date('Y-m-d H:i:s', strtotime('+1 year'));
    $cartRuleObj->name[Configuration::get('PS_LANG_DEFAULT')] = 'Cupón de bienvenida';
    $cartRuleObj->quantity = 1;
    $code = Tools::passwdGen();
    while (CartRule::cartRuleExists($code)) { // Nos aseguramos de que no haya duplicados al generar el cupón
        $code = Tools::passwdGen();
    }
    $cartRuleObj->code = $code;
    $cartRuleObj->quantity_per_user = 1;
    $cartRuleObj->reduction_percent = 20;
    $cartRuleObj->reduction_amount = 0;
    $cartRuleObj->free_shipping = 0;
    $cartRuleObj->active = 1;
    $cartRuleObj->minimum_amount = 0;
    $cartRuleObj->id_customer = $customer->id;
    $cartRuleObj->add();
 
 
    return Mail::Send(
   $this->context->language->id,
   'account',
   Mail::l('Welcome!'),
   array(
    '{firstname}' => $customer->firstname,
    '{lastname}' => $customer->lastname,
    '{email}' => $customer->email,
    '{passwd}' => Tools::getValue('passwd'),
    '{coupon}' => $code),
   $customer->email,
   $customer->firstname.' '.$customer->lastname
  );
 }
}

account.txt

[{shop_url}] 

Hola {firstname} {lastname},

Gracias por crear una cuenta de cliente en {shop_name}. 

Estos son sus datos de acceso:

DIRECCIÓN EMAIL: {email}

CONTRASEÑA: {passwd}    

Consejos de Seguridad:

* Mantenga los datos de su cuenta en un lugar seguro.

* No comparta los detalles de su cuenta con otras personas.

* Cambie su clave regularmente.

* Si sospecha que alguien está usando ilegalmente su cuenta,
avísenos inmediatamente.

Cupón de bienvenida con descuento del 20%: {coupon}

Ahora podrá realizar pedidos en nuestra tienda: {shop_name}
[{shop_url}] 

{shop_name} [{shop_url}] creado por
PrestaShop(tm) [http://www.prestashop.com/] 
He omitido el archivo account.html porque es más complejo y en cada versión de Prestashop podría varíar, por lo tanto, es mejor insertar solo el código necesario.

Y con esto termina este tutorial, espero que lo hayáis comprendido y que os funcione correctamente.

12 comentarios:

  1. Hola, perdona mi ignorancia pero el archivo AuthController.php ya lo tengo, quiere decir esto que el código lo tengo que añadir a continuación de la última línea del que yo tengo? de nuevo te pido disculpas si mi pregunta es muy tonta.
    Saludos.

    ResponderEliminar
    Respuestas
    1. Hola, no te preocupes. Lo que pasa que no habrás leído todo el texto. Debes crear el archivo AuthController.php en la ruta prestashop/override/controllers/front
      Y ahí pegas todo el código. Y luego borras el archivo class_index.php
      La ruta de este archivo está en el artículo.

      Eliminar
  2. Muchas gracias por tu pronta respuesta.Ayyy si no fuera por gente como tú.

    ResponderEliminar
  3. Funciona perfectamente, muchas gracias.

    ResponderEliminar
  4. Hola,buenos días, hice unas modificaciones que me pedían que hiciera, al igual que éste tuyo, un archivo llamado AuthController.php. Mi pregunta es que si quiero seguir éste manual ¿como lo tengo que hacer al tener ya una archivo llamado igual? muchas gracias por tu contestación.
    Saludos.

    ResponderEliminar
    Respuestas
    1. Hola, te refieres al archivo del directorio override? Si es así, introduce en tu archivo solamente el código de la función. La definición de la clase no.

      Eliminar
  5. Muchas gracias, en el caso de este ¿que tengo que introducir? es que soy muy torpe. Gracias.

    ResponderEliminar
    Respuestas
    1. Todo el código que está en el segundo recuadro negro de arriba.

      Eliminar
  6. Mas rápido imposible, muy amable. Muchas gracias.

    ResponderEliminar
  7. Hola, nuevamente a molestarte. He seguido al pie de la letra tu manual para crear el vale de descuento y todo me va bien pero al enviar el mensaje de bienvenida no envía ningún número de cupón solo envía la palabra "{COUPON}", quedando así: "CUPÓN DE BIENVENIDA CON DESCUENTO DEL 20%: {COUPON}" lo estoy probando en local ¿que estaré haciendo mal? un saludo.

    ResponderEliminar
    Respuestas
    1. Hola, la verdad es que no sé porque no te funciona, ya que el código está probado y funciona. A no ser que sea por típicas causas como vaciar la caché, forzar compilación o por el navegador. ¿Qué versión de Prestashop utilizas?

      Eliminar
  8. Hola, utilizo la 1.6.1.8, utilizo el chrome y probaré con otros navegadores. Vacié la caché e hice multitud de pruebas, así que seguiré probando de diferentes maneras y te comento. Gracias por tu atención. Un saludo.

    ResponderEliminar