Descuentos progresivos

En el siguiente tutorial, explicamos cómo agregar el componente de descuentos progresivos, para poder mostrar múltiples descuentos por cantidad sobre un mismo producto.


















El código en este tutorial incluye:

  • Una tabla para mostrar los descuentos progresivos
  • El label en la imagen del producto para mostrar el máximo descuento disponible

HTML

1. En el archivo labels.tpl vamos a modificar el siguiente código para agregar el label de descuento progresivo en la imagen del producto

<div>{{ product.promotional_offer.selected_threshold.discount_decimal_percentage * 100 }}% OFF</div>
<div class="label-small p-right-quarter p-left-quarter">
  {{ "Comprando {1} o más" | translate(product.promotional_offer.selected_threshold.quantity) }}
</div>

Lo vamos a modificar por esto

{% if product.promotional_offer.parameters | length > 1 %}
  <div>
    {{ "Hasta {1}% OFF" | translate(product.promotional_offer.selected_threshold.discount_decimal_percentage * 100) }}
  </div>
  <div class="label-small p-right-quarter p-left-quarter">{{ "Comprando en cantidad" | translate }}</div>
{% else %}
  <div>{{ product.promotional_offer.selected_threshold.discount_decimal_percentage * 100 }}% OFF</div>
  <div class="label-small p-right-quarter p-left-quarter">
    {{ "Comprando {1} o más" | translate(product.promotional_offer.selected_threshold.quantity) }}
  </div>
{% endif %}

 2. En el archivo product/product-form.tpl vamos a buscar el siguiente código 

{% for threshold in product.promotional_offer.parameters %}
  <h4 class="mb-2 text-accent"><strong>
    {{ "¡{1}% OFF comprando {2} o más!" | translate(threshold.discount_decimal_percentage * 100, threshold.quantity) }}
  </strong></h4>
{% endfor %}

y reemplazarlo por este código

{% if product.promotional_offer.parameters | length > 1 %}
  {{ component('progressive-discounts-table', {
    progressive_discounts_classes: {
      title: 'text-accent mb-3',
      table: 'table mb-2',
      hidden_table: 'table-body-inverted',
      show_more_link: 'btn-link btn-link-primary mb-4',
      show_more_icon: 'icon-inline',
      hide_icon: 'icon-inline icon-flip-vertical',
      promotion_quantity: 'font-weight-light text-lowercase'
    },
    svg_sprites: false,
    custom_control_show: include("snipplets/svg/chevron-down.tpl", { svg_custom_class: "icon-inline icon-w-14 icon-md ml-2" }),
    custom_control_hide: include("snipplets/svg/chevron-up.tpl", { svg_custom_class: "icon-inline icon-w-14 icon-md ml-2" }),
  }) }}
{% else %}
  {% set threshold = product.promotional_offer.parameters[0] %}
  <h4 class="mb-2 text-accent"><strong>
    {{ "¡{1}% OFF comprando {2} o más!" | translate(threshold.discount_decimal_percentage * 100, threshold.quantity) }}
  </strong></h4>
{% endif %}


CSS

1. Agregamos el siguiente SASS de colores en style-colors.scss.tpl (o la hoja de tu diseño que tenga los colores y tipografías de la tienda). Recordá que las variables de colores y tipografías pueden variar respecto a tu diseño:

{# /* // Tables */ #}

.table{
  background-color: $main-background;
  color: $main-foreground;
  tbody{
    tr:nth-child(odd){
      background-color: rgba($main-foreground, .05);
    }
    &.table-body-inverted{
      tr:nth-child(even){
        background-color: rgba($main-foreground, .05);
      }
      tr:nth-child(odd){
        background-color: $main-background;
      }
    }
  }
  th{
    padding: 8px;
    text-align: left;
  }
}

2. Vamos a mover los estilos de la tabla del archivo static/style-async.scss.tpl al archivo static/style-critical.tpl. Si en tu diseño no usas una hoja de estilos para el CSS crítico, entonces este paso no es necesario.

Borramos este código de static/style-async.scss.tpl

{# /* // Tables */ #}

.table{
  width: 100%;
  border-collapse: collapse;
  border-spacing: 0;
  thead{
    th{
      padding: 8px;
      &:first-of-type{
        padding-left: 0;
      }
    }
  }
  td{
    padding: 8px;
    text-align: left;
  }
}

Y pegamos este en static/style-critical.tpl

{# /* // Tables */ #}

.table{
  width: 100%;
  border-collapse: collapse;
  border-spacing: 0;
}
.table thead th{
  padding: 8px;
}
.table thead th:first-of-type{
  padding-left: 0;
}
.table td{
  padding: 8px;
  text-align: left;
}

Traducciones

En este paso agregamos los textos para las traducciones en el archivo config/translations.txt 

es "Hasta {1}% OFF"
pt "Até {1}% OFF"
en "Up to {1}% OFF"
es_mx "Hasta {1}% OFF"

es "Comprando en cantidad"
pt "Comprando em quantidade"
en "Buying in quantity"
es_mx "Comprando en cantidad"

Activación

Listo, una vez que se cree un descuento progresivo en el administrador, se verán aplicados a los productos en tu tienda.