import React, { useState, useEffect } from 'react'; import { api } from '../stores/api'; import PageHeader from '../components/PageHeader'; import SuccessCheck from '../components/SuccessCheck'; export default function RedigerPV() { const [reunions, setReunions] = useState([]); const [pvList, setPvList] = useState([]); const [reunionId, setReunionId] = useState(''); const [contenu, setContenu] = useState(''); const [decisions, setDecisions] = useState([]); const [loading, setLoading] = useState(true); const [success, setSuccess] = useState(false); const [viewPv, setViewPv] = useState(null); const [error, setError] = useState(''); useEffect(() => { Promise.all([ api.get('/presences/reunions'), api.get('/pv/'), ]).then(([r, p]) => { setReunions(r); setPvList(p); setLoading(false); }).catch(() => setLoading(false)); }, []); const ajouterDecision = () => { setDecisions([...decisions, { sujet: '', decision: '', proposeur: '', secondeur: '', statut: 'en_attente' }]); }; const updateDecision = (idx, field, value) => { const copy = [...decisions]; copy[idx][field] = value; setDecisions(copy); }; const supprimerDecision = (idx) => { setDecisions(decisions.filter((_, i) => i !== idx)); }; const handleSubmit = async () => { if (!reunionId) { setError('Sélectionnez une réunion d\'affaires'); return; } if (!contenu.trim()) { setError('Le contenu du PV est obligatoire'); return; } setError(''); try { const validDecisions = decisions.filter((d) => d.sujet.trim()); await api.post('/pv/', { reunion_id: reunionId, contenu: contenu.trim(), decisions: validDecisions.length > 0 ? validDecisions : null, }); setSuccess(true); } catch (e) { setError(e.message); } }; if (success) return ; // Vue lecture d'un PV existant if (viewPv) { return (

Procès-verbal

{viewPv.date_reunion ? new Date(viewPv.date_reunion).toLocaleDateString('fr-CA') : ''}

Rédigé par {viewPv.redacteur_prenom}

{viewPv.approuve && ( Approuvé )}
{viewPv.contenu}
{viewPv.decisions && viewPv.decisions.length > 0 && (

Décisions

{viewPv.decisions.map((d, i) => (

{d.sujet}

{d.decision}

{d.proposeur && `Proposé par ${d.proposeur}`} {d.secondeur && `, secondé par ${d.secondeur}`}

))}
)}
); } return (
{/* PV existants */} {pvList.length > 0 && (

PV récents

{pvList.slice(0, 5).map((p) => ( ))}
)} {/* Nouveau PV */}

Nouveau procès-verbal