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:
@@ -29,8 +29,10 @@ from odoo.http import request, Response
|
||||
from odoo.addons.skeen_citas.clinic_settings import (
|
||||
get_settings as get_clinic_settings,
|
||||
get_reservas_online,
|
||||
get_lealtad,
|
||||
brand_dict,
|
||||
)
|
||||
from odoo.addons.skeen_monedero.lealtad import nivel_por_codigo as lealtad_nivel_por_codigo
|
||||
from odoo.addons.skeen_citas.glosario import resolve as resolver_glosario
|
||||
from odoo.addons.skeen_whatsapp.controllers import public_booking as _pb
|
||||
|
||||
@@ -797,7 +799,9 @@ class SkeenPortalPublicoController(http.Controller):
|
||||
monedero = request.env['skeen.monedero'].sudo().search(
|
||||
[('partner_id', '=', partner.id)], limit=1)
|
||||
points = monedero.points if monedero else 0
|
||||
mxn = float(points) * 1.0 # 1 punto = $1 MXN
|
||||
cfg_lea = get_lealtad(request.env)
|
||||
valor = float(cfg_lea.get('valor_punto') or 1.0) # clásico: 1 pt = $1
|
||||
mxn = float(points) * valor
|
||||
rate = 0.0
|
||||
try:
|
||||
rate = request.env['skeen.tipo.cambio'].sudo().get_current_rate()
|
||||
@@ -815,12 +819,20 @@ class SkeenPortalPublicoController(http.Controller):
|
||||
'descripcion': tx.description or '',
|
||||
'referencia': tx.reference or '',
|
||||
})
|
||||
nivel = lealtad_nivel_por_codigo(cfg_lea, partner.lealtad_nivel_codigo)
|
||||
return _json({
|
||||
'status': 'success',
|
||||
'points': points,
|
||||
'equivalent_mxn': round(mxn, 2),
|
||||
'equivalent_usd': usd,
|
||||
'rate': rate or None,
|
||||
'valor_punto': valor,
|
||||
'nivel': ({
|
||||
'codigo': nivel['codigo'],
|
||||
'nombre': nivel['nombre'],
|
||||
'descuento_pct': nivel.get('descuento_pct') or 0.0,
|
||||
'color': nivel.get('color') or '',
|
||||
} if nivel else None),
|
||||
'movimientos': movimientos,
|
||||
})
|
||||
except Exception as exc:
|
||||
|
||||
Reference in New Issue
Block a user