diff --git a/frontend/src/app/(app)/settings/departments/page.tsx b/frontend/src/app/(app)/settings/departments/page.tsx index a6981b4..6a6fbab 100644 --- a/frontend/src/app/(app)/settings/departments/page.tsx +++ b/frontend/src/app/(app)/settings/departments/page.tsx @@ -20,6 +20,7 @@ export default function DepartmentsPage() { const [editing, setEditing] = useState(null); const [name, setName] = useState(""); const [description, setDescription] = useState(""); + const [notificationEmail, setNotificationEmail] = useState(""); const [isActive, setIsActive] = useState(true); const [saving, setSaving] = useState(false); const [modalError, setModalError] = useState(""); @@ -55,6 +56,7 @@ export default function DepartmentsPage() { setEditing(null); setName(""); setDescription(""); + setNotificationEmail(""); setIsActive(true); setModalError(""); setShowModal(true); @@ -64,6 +66,7 @@ export default function DepartmentsPage() { setEditing(g); setName(g.name); setDescription(g.description || ""); + setNotificationEmail(g.notificationEmail || ""); setIsActive(g.isActive); setModalError(""); setShowModal(true); @@ -74,17 +77,27 @@ export default function DepartmentsPage() { setModalError("El nombre es requerido"); return; } + if (notificationEmail.trim() && !notificationEmail.includes("@")) { + setModalError("Correo de aviso inválido"); + return; + } setSaving(true); setModalError(""); try { + const notifyValue = notificationEmail.trim() || null; if (editing) { await updateGroup(editing.id, { name: name.trim(), description: description.trim() || undefined, isActive, + notificationEmail: notifyValue, }); } else { - await createGroup({ name: name.trim(), description: description.trim() || undefined }); + await createGroup({ + name: name.trim(), + description: description.trim() || undefined, + notificationEmail: notifyValue, + }); } setShowModal(false); fetchGroups(); @@ -145,6 +158,7 @@ export default function DepartmentsPage() { Nombre Descripción + Correo de aviso Estado Acciones @@ -152,13 +166,13 @@ export default function DepartmentsPage() { {loading ? ( - +
) : groups.length === 0 ? ( - +
Sin departamentos

Crea el primero para organizar los tickets

@@ -169,6 +183,16 @@ export default function DepartmentsPage() { {g.name} {g.description || "—"} + + {g.notificationEmail ? ( + + + {g.notificationEmail} + + ) : ( + "Personas del depto." + )} + {g.isActive ? ( Activo @@ -233,6 +257,19 @@ export default function DepartmentsPage() { onChange={(e) => setDescription(e.target.value)} /> +
+ + setNotificationEmail(e.target.value)} + placeholder="ej: departamentodeinformatica@norteamericano.cl" + /> +
+ Si se define, los tickets nuevos avisan a esta casilla y no a las personas del departamento. +
+
{editing && (
("/api/helpdesk/groups", { method: "POST", body: JSON.stringify(data), @@ -297,7 +302,12 @@ export async function createGroup(data: { name: string; description?: string }) export async function updateGroup( id: number, - data: { name?: string; description?: string; isActive?: boolean } + data: { + name?: string; + description?: string; + isActive?: boolean; + notificationEmail?: string | null; + } ) { return fetchApi(`/api/helpdesk/groups/${id}`, { method: "PUT",