bloque 3: lealtad configurable (motor de puntos con multiplicadores por servicio/categoria/sucursal/dia/nivel, niveles VIP con descuento y factor, expiracion, ajuste manual con motivo y reportes) + propinas en punto de venta con reparto entre el personal, desglose en ticket y corte, y opcion en la liquidacion de comisiones; modo clasico y propinas apagadas preservan el comportamiento actual

This commit is contained in:
2026-10-12 01:37:07 +00:00
parent 1bd4cad6a0
commit 705b5a2842
28 changed files with 2748 additions and 59 deletions

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- Vencimiento de puntos de lealtad. Con `expira_meses = 0` (default)
el método regresa sin tocar nada: cero filas nuevas. Con un plazo
configurado expira, una vez al día, los puntos no usados más
antiguos que el plazo, dejando la transacción en la bitácora. -->
<record id="cron_lealtad_expirar" model="ir.cron">
<field name="name">SKEEN Lealtad: vencer puntos caducados</field>
<field name="model_id" ref="model_skeen_monedero"/>
<field name="state">code</field>
<field name="code">model.expirar_puntos()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="active">True</field>
</record>
<!-- Recálculo diario del nivel VIP. Sin niveles configurados (default)
el método regresa sin tocar nada. -->
<record id="cron_lealtad_niveles" model="ir.cron">
<field name="name">SKEEN Lealtad: recalcular niveles VIP</field>
<field name="model_id" ref="model_res_partner"/>
<field name="state">code</field>
<field name="code">model._lealtad_recalcular_todos()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="active">True</field>
</record>
</data>
</odoo>