Skip links
'; }function ouvrirImpression(f) { var w = window.open("", "_blank"); if (!w) return; w.document.open(); w.document.write(factureHTML(f)); w.document.close(); }function telechargerHTML(f) { var blob = new Blob([factureHTML(f)], { type: "text/html;charset=utf-8" }); var url = URL.createObjectURL(blob); var a = document.createElement("a"); a.href = url; a.download = "facture-" + (f.id != null ? f.id : "brouillon") + ".html"; document.body.appendChild(a); a.click(); a.remove(); URL.revokeObjectURL(url); }const filtered = factures.filter(function(f){ return q ? f.client.toLowerCase().indexOf(q.toLowerCase()) !== -1 : true; });return (

Créer une facture

{form.lignes.map(function(l,i){ return (
); })}
Total TTC : {totalTTC(form).toFixed(2)} €

Factures

{filtered.map(function(f){ return ( ); })}
ClientStatutTotal TTCActions
{f.client}{f.statut}{totalTTC(f).toFixed(2)} €
); }function Utilisateurs() { return (

Utilisateurs

{seedUsers.map(function(u){ return ( ); })}
NomEmailRôle
{u.name}{u.email}{u.role}
); }// App function App() { const [session, setSession] = useState(null); const [route, setRoute] = useState("dashboard"); const [missions, setMissions] = useState(seedMissionsInit); const [factures, setFactures] = useState(seedFacturesInit);if (!session) return ;return ( {route === "dashboard" ? : null} {route === "missions" ? : null} {route === "factures" ? : null} {route === "utilisateurs" ? : null} ); }// Mount const root = ReactDOM.createRoot(document.getElementById("root")); root.render();
Anydesk
Prendre RDV
Coworking
Explore
Glisse