fase 1 productizacion: capa de configuracion (glosario multi-giro, sucursales y categorias configurables, ajustes de clinica por instancia, colores de marca, horarios, URLs de pago dinamicas) + script de provisioning de instancia nueva con datos demo + frontend consumiendo la config

This commit is contained in:
2026-10-11 05:50:18 +00:00
parent 28118ce732
commit f92018f88e
50 changed files with 4314 additions and 210 deletions

View File

@@ -12,6 +12,7 @@ import {
} from '../lib/ticketConfig';
import { odooApi } from '../services/odoo';
import { useAuth } from '../lib/auth';
import { useSucursales } from '../lib/sucursales';
// Editor del diseño del ticket (Configuración › Tickets).
//
@@ -136,6 +137,9 @@ const CLINICA_CAMPOS: { key: string; label: string; placeholder?: string }[] = [
export const TicketDesigner: FC = () => {
const config = useTicketConfig();
const { user } = useAuth();
const { sucursales } = useSucursales();
// Nombre de la sucursal predeterminada para la vista previa (antes fijo).
const sucursalMuestra = (sucursales.find((s) => s.is_default) || sucursales[0])?.name || 'Rosarito Centro';
// Restaurar el formato original queda solo para administración del sistema;
// gerencia puede editar y guardar su propio diseño.
const esAdmin = user?.role === 'admin';
@@ -504,7 +508,7 @@ export const TicketDesigner: FC = () => {
<div className="xl:sticky xl:top-4">
<p className="text-xs font-medium text-theme-muted uppercase mb-2">Vista previa</p>
<div className="rounded-2xl bg-theme-bg border border-theme-border p-4 overflow-auto max-h-[calc(100vh-8rem)]">
<TicketDoc data={MUESTRA} config={previewConfig} preview />
<TicketDoc data={{ ...MUESTRA, sucursal: sucursalMuestra }} config={previewConfig} preview />
</div>
<p className="text-[11px] text-theme-muted mt-2">
La vista previa usa una venta de ejemplo con todos los rubros. Los datos reales se toman