'use client'; export const dynamic = 'force-dynamic'; import React, { useState, useRef } from 'react'; import { Card } from 'primereact/card'; import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; import { InputSwitch } from 'primereact/inputswitch'; import { Button } from 'primereact/button'; import { Toast } from 'primereact/toast'; import { Tag } from 'primereact/tag'; import { Divider } from 'primereact/divider'; import { Message } from 'primereact/message'; interface NotificationRule { id: string; nom: string; description: string; type: 'info' | 'warning' | 'success' | 'error'; evenement: string; actif: boolean; categorie: string; } const NotificationsAutomatiquesPage = () => { const toast = useRef(null); const [rules, setRules] = useState([ { id: '1', nom: 'Nouveau chantier créé', description: 'Notification envoyée lors de la création d\'un nouveau chantier', type: 'success', evenement: 'chantier.created', actif: true, categorie: 'Chantiers' }, { id: '2', nom: 'Chantier terminé', description: 'Notification envoyée lorsqu\'un chantier est marqué comme terminé', type: 'success', evenement: 'chantier.completed', actif: true, categorie: 'Chantiers' }, { id: '3', nom: 'Dépassement de budget', description: 'Alerte envoyée lorsque le budget d\'un chantier est dépassé', type: 'warning', evenement: 'budget.exceeded', actif: true, categorie: 'Budget' }, { id: '4', nom: 'Retard de chantier', description: 'Notification envoyée lorsqu\'un chantier est en retard', type: 'warning', evenement: 'chantier.delayed', actif: true, categorie: 'Chantiers' }, { id: '5', nom: 'Phase terminée', description: 'Notification envoyée lorsqu\'une phase de chantier est terminée', type: 'success', evenement: 'phase.completed', actif: false, categorie: 'Phases' }, { id: '6', nom: 'Nouveau client', description: 'Notification envoyée lors de l\'ajout d\'un nouveau client', type: 'info', evenement: 'client.created', actif: true, categorie: 'Clients' }, { id: '7', nom: 'Stock faible', description: 'Alerte envoyée lorsque le stock d\'un matériel est faible', type: 'warning', evenement: 'stock.low', actif: true, categorie: 'Stock' }, { id: '8', nom: 'Erreur système', description: 'Notification envoyée en cas d\'erreur système critique', type: 'error', evenement: 'system.error', actif: true, categorie: 'Système' }, { id: '9', nom: 'Facture créée', description: 'Notification envoyée lors de la création d\'une facture', type: 'info', evenement: 'facture.created', actif: false, categorie: 'Facturation' }, { id: '10', nom: 'Paiement reçu', description: 'Notification envoyée lors de la réception d\'un paiement', type: 'success', evenement: 'paiement.received', actif: true, categorie: 'Facturation' } ]); const toggleRule = (ruleId: string) => { setRules(rules.map(rule => { if (rule.id === ruleId) { const newActif = !rule.actif; toast.current?.show({ severity: newActif ? 'success' : 'info', summary: newActif ? 'Activée' : 'Désactivée', detail: `La règle "${rule.nom}" a été ${newActif ? 'activée' : 'désactivée'}`, life: 3000 }); return { ...rule, actif: newActif }; } return rule; })); }; const activerTout = () => { setRules(rules.map(rule => ({ ...rule, actif: true }))); toast.current?.show({ severity: 'success', summary: 'Succès', detail: 'Toutes les notifications automatiques ont été activées', life: 3000 }); }; const desactiverTout = () => { setRules(rules.map(rule => ({ ...rule, actif: false }))); toast.current?.show({ severity: 'info', summary: 'Désactivé', detail: 'Toutes les notifications automatiques ont été désactivées', life: 3000 }); }; const typeBodyTemplate = (rowData: NotificationRule) => { const getSeverity = (type: string) => { switch (type) { case 'info': return 'info'; case 'warning': return 'warning'; case 'success': return 'success'; case 'error': return 'danger'; default: return 'info'; } }; const getIcon = (type: string) => { switch (type) { case 'info': return 'pi-info-circle'; case 'warning': return 'pi-exclamation-triangle'; case 'success': return 'pi-check-circle'; case 'error': return 'pi-times-circle'; default: return 'pi-info-circle'; } }; return ( ); }; const statusBodyTemplate = (rowData: NotificationRule) => { return ( ); }; const actionBodyTemplate = (rowData: NotificationRule) => { return ( toggleRule(rowData.id)} tooltip={rowData.actif ? 'Désactiver' : 'Activer'} /> ); }; const categorieBodyTemplate = (rowData: NotificationRule) => { const getCategorieColor = (categorie: string) => { switch (categorie) { case 'Chantiers': return 'info'; case 'Budget': return 'warning'; case 'Phases': return 'success'; case 'Clients': return 'info'; case 'Stock': return 'warning'; case 'Système': return 'danger'; case 'Facturation': return 'success'; default: return 'info'; } }; return ( ); }; const header = (
Règles de notifications automatiques
); const activeCount = rules.filter(r => r.actif).length; const totalCount = rules.length; return (

Notifications Automatiques

Configurez les notifications automatiques envoyées lors d'événements spécifiques

Configuration des notifications automatiques
{activeCount} règle{activeCount > 1 ? 's' : ''} activée{activeCount > 1 ? 's' : ''} sur {totalCount}
} className="mb-4" />
Informations sur les notifications automatiques
Événements de chantiers
  • Création de nouveau chantier
  • Chantier terminé
  • Retard détecté
Événements de budget
  • Dépassement de budget
  • Seuil d'alerte atteint
Événements de stock
  • Stock faible
  • Rupture de stock
Événements système
  • Erreurs critiques
  • Mises à jour importantes
); }; export default NotificationsAutomatiquesPage;