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:
@@ -1,5 +1,5 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
import { odooApi, type ClinicSettings, CLINIC_SETTINGS_DEFAULT, IMPUESTOS_DEFAULT, NOTIFICACIONES_DEFAULT, MEMBRESIAS_DEFAULT, COBRO_AUTOMATICO_DEFAULT, RESERVAS_ONLINE_DEFAULT, ANTICIPO_DEFAULT, RECURSOS_DEFAULT, COMPRAS_DEFAULT, COMISIONES_DEFAULT, LICENCIA_DEFAULT, LICENCIA_LIMITES_DEFAULT, PORTAL_CLIENTE_DEFAULT } from '../services/odoo';
|
||||
import { odooApi, type ClinicSettings, CLINIC_SETTINGS_DEFAULT, IMPUESTOS_DEFAULT, NOTIFICACIONES_DEFAULT, MEMBRESIAS_DEFAULT, COBRO_AUTOMATICO_DEFAULT, RESERVAS_ONLINE_DEFAULT, ANTICIPO_DEFAULT, RECURSOS_DEFAULT, COMPRAS_DEFAULT, COMISIONES_DEFAULT, LEALTAD_DEFAULT, PROPINAS_DEFAULT, LICENCIA_DEFAULT, LICENCIA_LIMITES_DEFAULT, PORTAL_CLIENTE_DEFAULT } from '../services/odoo';
|
||||
|
||||
// Ajustes de la clínica compartidos por la sesión (nombre, moneda e impuestos).
|
||||
// Se leen una sola vez del servidor y se avisa a quien los use cuando cambian.
|
||||
@@ -23,6 +23,8 @@ const normalizar = (settings?: Partial<ClinicSettings> | null): ClinicSettings =
|
||||
recursos: { ...RECURSOS_DEFAULT, ...(settings?.recursos || {}) },
|
||||
compras: { ...COMPRAS_DEFAULT, ...(settings?.compras || {}) },
|
||||
comisiones: { ...COMISIONES_DEFAULT, ...(settings?.comisiones || {}) },
|
||||
lealtad: { ...LEALTAD_DEFAULT, ...(settings?.lealtad || {}) },
|
||||
propinas: { ...PROPINAS_DEFAULT, ...(settings?.propinas || {}) },
|
||||
licencia: {
|
||||
...LICENCIA_DEFAULT,
|
||||
...(settings?.licencia || {}),
|
||||
|
||||
@@ -325,6 +325,8 @@ export const es: Dict = {
|
||||
'config.tabs.membresias': 'Membresías',
|
||||
'config.tabs.compras': 'Compras',
|
||||
'config.tabs.comisiones': 'Comisiones',
|
||||
'config.tabs.lealtad': 'Lealtad',
|
||||
'config.tabs.propinas': 'Propinas',
|
||||
'config.tabs.terminologia': 'Terminología',
|
||||
'config.tabs.usuarios': 'Usuarios',
|
||||
'config.tabs.roles': 'Roles',
|
||||
@@ -422,6 +424,12 @@ export const es: Dict = {
|
||||
'reports.tab.vendedores.desc': 'Ventas atribuidas por vendedor',
|
||||
'reports.tab.kpis': 'KPIs',
|
||||
'reports.tab.kpis.desc': 'No-show, ocupación y conversión',
|
||||
'reports.family.lealtad': 'Lealtad',
|
||||
'reports.family.lealtad.hint': 'Puntos y propinas',
|
||||
'reports.tab.lealtad': 'Puntos',
|
||||
'reports.tab.lealtad.desc': 'Puntos otorgados, canjeados, expirados y pasivo en pesos',
|
||||
'reports.tab.propinas': 'Propinas',
|
||||
'reports.tab.propinas.desc': 'Propinas por empleado y periodo',
|
||||
'reports.tab.exportar': 'Exportar',
|
||||
'reports.tab.exportar.desc': 'Exportar datos',
|
||||
|
||||
@@ -530,6 +538,9 @@ export const es: Dict = {
|
||||
'pos.points': 'Puntos',
|
||||
'pos.discount': 'Descuento',
|
||||
'pos.taxIncluded': ' (incluido)',
|
||||
'pos.tip': 'Propina',
|
||||
'pos.noTip': 'Sin propina',
|
||||
'pos.tipCustom': 'Propina (monto libre)',
|
||||
'pos.chargeAmount': 'Cobrar {amount}',
|
||||
'pos.chargeTitle': 'Cobrar (F9)',
|
||||
'pos.noSellPerm': 'Sin permiso para vender',
|
||||
@@ -1122,6 +1133,8 @@ export const en: Dict = {
|
||||
'config.tabs.membresias': 'Memberships',
|
||||
'config.tabs.compras': 'Purchases',
|
||||
'config.tabs.comisiones': 'Commissions',
|
||||
'config.tabs.lealtad': 'Loyalty',
|
||||
'config.tabs.propinas': 'Tips',
|
||||
'config.tabs.terminologia': 'Terminology',
|
||||
'config.tabs.usuarios': 'Users',
|
||||
'config.tabs.roles': 'Roles',
|
||||
@@ -1219,6 +1232,12 @@ export const en: Dict = {
|
||||
'reports.tab.vendedores.desc': 'Sales attributed per seller',
|
||||
'reports.tab.kpis': 'KPIs',
|
||||
'reports.tab.kpis.desc': 'No-show, occupancy and conversion',
|
||||
'reports.family.lealtad': 'Loyalty',
|
||||
'reports.family.lealtad.hint': 'Points and tips',
|
||||
'reports.tab.lealtad': 'Points',
|
||||
'reports.tab.lealtad.desc': 'Points earned, redeemed, expired and liability in pesos',
|
||||
'reports.tab.propinas': 'Tips',
|
||||
'reports.tab.propinas.desc': 'Tips per employee and period',
|
||||
'reports.tab.exportar': 'Export',
|
||||
'reports.tab.exportar.desc': 'Export data',
|
||||
|
||||
@@ -1324,6 +1343,9 @@ export const en: Dict = {
|
||||
'pos.points': 'Points',
|
||||
'pos.discount': 'Discount',
|
||||
'pos.taxIncluded': ' (included)',
|
||||
'pos.tip': 'Tip',
|
||||
'pos.noTip': 'No tip',
|
||||
'pos.tipCustom': 'Tip (custom amount)',
|
||||
'pos.chargeAmount': 'Charge {amount}',
|
||||
'pos.chargeTitle': 'Charge (F9)',
|
||||
'pos.noSellPerm': 'No permission to sell',
|
||||
|
||||
@@ -24,6 +24,8 @@ export const PERM_KEYS: string[] = [
|
||||
'compras.ver', 'compras.crear', 'compras.recibir', 'compras.pagar',
|
||||
'compras.editar', 'compras.cancelar', 'proveedores.ver', 'proveedores.editar',
|
||||
'comisiones.ver', 'comisiones.editar', 'comisiones.liquidar',
|
||||
'lealtad.ver', 'lealtad.ajustar', 'lealtad.nivel', 'lealtad.configurar',
|
||||
'propinas.ver', 'propinas.aplicar', 'propinas.configurar',
|
||||
'cobros.ver', 'cobros.administrar', 'cobros.forzar', 'cobros.cancelar',
|
||||
'config.usuarios', 'config.roles', 'config.editar', 'config.auditoria',
|
||||
'api.claves', 'webhooks.editar',
|
||||
@@ -56,6 +58,8 @@ const READ_PERM_KEYS = new Set([
|
||||
'proveedores.ver',
|
||||
'comisiones.ver',
|
||||
'cobros.ver',
|
||||
'lealtad.ver',
|
||||
'propinas.ver',
|
||||
]);
|
||||
|
||||
const DEFAULT_PERM_ROLES: Record<string, string[]> = {
|
||||
@@ -89,6 +93,8 @@ const DEFAULT_PERM_ROLES: Record<string, string[]> = {
|
||||
'compras.editar': AG, 'compras.cancelar': AG,
|
||||
'proveedores.ver': ALL, 'proveedores.editar': AG,
|
||||
'comisiones.ver': ALL, 'comisiones.editar': AG, 'comisiones.liquidar': AG,
|
||||
'lealtad.ver': ALL, 'lealtad.ajustar': AG, 'lealtad.nivel': AG, 'lealtad.configurar': AG,
|
||||
'propinas.ver': ALL, 'propinas.aplicar': MONEY, 'propinas.configurar': AG,
|
||||
'cobros.ver': ALL, 'cobros.administrar': AG,
|
||||
'cobros.forzar': ['admin', 'recepcion', 'gerencia'], 'cobros.cancelar': AG,
|
||||
'config.usuarios': AG, 'config.roles': AG, 'config.editar': AG, 'config.auditoria': AD,
|
||||
|
||||
Reference in New Issue
Block a user