import type { FC } from 'react'; import { useEffect, useState } from 'react'; import { Save, Megaphone } from 'lucide-react'; import { Button, Input, toast } from './ui'; import { odooApi, CAMPANAS_DEFAULT, type ClinicSettings, type CampanasSettings, } from '../services/odoo'; interface Props { settings: ClinicSettings; onSaved: (settings: ClinicSettings) => void; } const Toggle: FC<{ label: string; checked: boolean; onChange: (v: boolean) => void; ayuda?: string }> = ({ label, checked, onChange, ayuda }) => ( ); // Configuración → Campañas: bloque `campanas`. Apagado (default) no aparece la // sección, no corre el cron y no se envía nada. const CampanasPanel: FC = ({ settings, onSaved }) => { const [form, setForm] = useState(settings.campanas || CAMPANAS_DEFAULT); const [saving, setSaving] = useState(false); useEffect(() => setForm(settings.campanas || CAMPANAS_DEFAULT), [settings.campanas]); const set = (k: K, v: CampanasSettings[K]) => setForm((prev) => ({ ...prev, [k]: v })); const guardar = async () => { setSaving(true); try { const res = await odooApi.putClinicSettings({ campanas: { ...form }, motivo: 'Configuración de campañas', }); if (res.status === 'success') { onSaved(res.settings); toast.success('Configuración de campañas guardada'); } } catch (err) { const msg = (err as { response?: { data?: { message?: string } } })?.response?.data?.message; toast.error(msg || 'No se pudo guardar la configuración de campañas'); } finally { setSaving(false); } }; return (

Campañas por segmentos

Apagado (default) no existe la sección Campañas, no corre ningún proceso y no se envía nada. Encendido, aparecen las pantallas de Campañas y Segmentos.

set('activo', v)} ayuda="Muestra la sección Campañas y habilita el proceso automático cada 5 minutos." /> set('exigir_consentimiento', v)} ayuda="Un paciente sin consentimiento nunca recibe una campaña (los avisos de cita sí siguen)." />
set('envios_por_minuto', Number(e.target.value) || 1)} /> set('pausar_tras_errores', Number(e.target.value) || 1)} /> set('ventana_atribucion_dias', Number(e.target.value) || 1)} /> set('hora_envio', e.target.value)} />
); }; export default CampanasPanel;