Rendre demo non destructive
- creer Groupe Resilience sans remise a zero - corriger l avertissement sysadmin de demonstration
This commit is contained in:
parent
1ee392e25d
commit
0f69e80c77
2 changed files with 40 additions and 19 deletions
|
|
@ -5,7 +5,7 @@ import csv
|
|||
from datetime import date, datetime, time, timedelta, timezone
|
||||
from pathlib import Path
|
||||
|
||||
from sqlalchemy import text
|
||||
from sqlalchemy import select, text
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.core.database import Base
|
||||
|
|
@ -107,18 +107,30 @@ async def remettre_a_zero(db: AsyncSession) -> dict:
|
|||
|
||||
|
||||
async def initialiser_demo(db: AsyncSession) -> dict:
|
||||
await remettre_a_zero(db)
|
||||
groupe = await _premier_groupe(db)
|
||||
membres = await _membres_par_courriel(db)
|
||||
postes = await _postes_par_nom(db, groupe.id)
|
||||
litterature = await _litterature(db)
|
||||
existant = (await db.execute(select(Groupe).where(Groupe.nom == "Groupe Résilience"))).scalar_one_or_none()
|
||||
if existant:
|
||||
membres_existants = await _membres_par_courriel(db, existant.id)
|
||||
return {
|
||||
"message": "Le groupe de démonstration existe déjà. Aucune donnée existante n'a été modifiée.",
|
||||
"groupe_id": existant.id,
|
||||
"membres": len(membres_existants),
|
||||
"periode_mois": 12,
|
||||
"rencontres": 52,
|
||||
"assemblees": 12,
|
||||
}
|
||||
|
||||
groupe, sysadmin, postes, litterature = await _creer_base(
|
||||
nom_groupe="Groupe Résilience",
|
||||
adresse_local="Salle communautaire Saint-Louis, Montréal",
|
||||
)
|
||||
membres = {sysadmin.courriel: sysadmin}
|
||||
|
||||
await _ajouter_membres_demo(db, groupe, membres, postes)
|
||||
membres = await _membres_par_courriel(db)
|
||||
membres = await _membres_par_courriel(db, groupe.id)
|
||||
await _ajouter_historique_demo(db, groupe, membres, postes, litterature)
|
||||
await db.flush()
|
||||
return {
|
||||
"message": "Base remise à zéro et données de démonstration installées",
|
||||
"message": "Groupe de démonstration installé sans modifier les autres groupes",
|
||||
"groupe_id": groupe.id,
|
||||
"membres": len(membres),
|
||||
"periode_mois": 12,
|
||||
|
|
@ -127,12 +139,16 @@ async def initialiser_demo(db: AsyncSession) -> dict:
|
|||
}
|
||||
|
||||
|
||||
async def _creer_base(db: AsyncSession):
|
||||
async def _creer_base(
|
||||
db: AsyncSession,
|
||||
nom_groupe: str = "Groupe Méditation",
|
||||
adresse_local: str = "Salle communautaire, Montréal",
|
||||
):
|
||||
groupe = Groupe(
|
||||
nom="Groupe Résilience",
|
||||
nom=nom_groupe,
|
||||
district="87-16",
|
||||
region="87",
|
||||
adresse_local="Salle communautaire Saint-Louis, Montréal",
|
||||
adresse_local=adresse_local,
|
||||
jour_reunion="mardi",
|
||||
heure_reunion=time(19, 30),
|
||||
assemblee_affaires_ordre="premiere",
|
||||
|
|
@ -623,10 +639,13 @@ async def _premier_groupe(db: AsyncSession) -> Groupe:
|
|||
return result.scalar_one()
|
||||
|
||||
|
||||
async def _membres_par_courriel(db: AsyncSession) -> dict[str, Membre]:
|
||||
async def _membres_par_courriel(db: AsyncSession, groupe_id=None) -> dict[str, Membre]:
|
||||
from sqlalchemy import select
|
||||
|
||||
result = await db.execute(select(Membre))
|
||||
query = select(Membre)
|
||||
if groupe_id is not None:
|
||||
query = query.where(Membre.groupe_id == groupe_id)
|
||||
result = await db.execute(query)
|
||||
return {m.courriel: m for m in result.scalars().all()}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -150,17 +150,19 @@ export default function Profil() {
|
|||
};
|
||||
|
||||
const operationAdminBd = async (mode) => {
|
||||
const libelle = mode === 'demo' ? 'initialiser la base de démonstration' : 'remettre la base à zéro';
|
||||
const confirmation = window.prompt(`Cette action va ${libelle} et effacer les données actuelles. Tapez CONFIRMER pour continuer.`);
|
||||
const message = mode === 'demo'
|
||||
? 'Cette action va créer le groupe de démonstration "Groupe Résilience" sans effacer les groupes existants. Tapez CONFIRMER pour continuer.'
|
||||
: 'Cette action va remettre la base à zéro et effacer les données actuelles. Tapez CONFIRMER pour continuer.';
|
||||
const confirmation = window.prompt(message);
|
||||
if (confirmation !== 'CONFIRMER') return;
|
||||
setAdminBusy(true);
|
||||
setError('');
|
||||
try {
|
||||
await api.post(mode === 'demo' ? '/admin/demo' : '/admin/reset');
|
||||
alert(mode === 'demo'
|
||||
? 'Base de démonstration installée. Reconnectez-vous avec Sysadmin / 0000.'
|
||||
? 'Groupe de démonstration installé. Vous pouvez le choisir à la page de connexion.'
|
||||
: 'Base remise à zéro. Reconnectez-vous avec Sysadmin / 0000.');
|
||||
logout();
|
||||
if (mode === 'reset') logout();
|
||||
} catch (e) {
|
||||
setError(e.message);
|
||||
} finally {
|
||||
|
|
@ -365,7 +367,7 @@ export default function Profil() {
|
|||
<div>
|
||||
<h2 className="font-bold text-red-700">Administration sysadmin</h2>
|
||||
<p className="text-sm text-gray-500 mt-1">
|
||||
Ces actions effacent la base courante. Elles recréent le compte Sysadmin avec le PIN 0000.
|
||||
La remise à zéro efface la base courante. Le groupe de démonstration est ajouté séparément, sans remplacer les données existantes.
|
||||
</p>
|
||||
</div>
|
||||
<button
|
||||
|
|
@ -380,7 +382,7 @@ export default function Profil() {
|
|||
disabled={adminBusy}
|
||||
className="w-full min-h-[44px] p-3 bg-aa-blue text-white rounded-xl font-bold disabled:opacity-40"
|
||||
>
|
||||
Initialiser une BD de démonstration
|
||||
Installer le groupe de démonstration
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
|
|
|
|||
Loading…
Reference in a new issue