Skip to content

Regles de gestion & contraintes

Inscriptions JEMA

  • Une inscription cree (ou reutilise) une arborescence de noeuds sous l'artisan JEMA : registrationDayJema (jour) -> registrationTimeSlotJema (creneau) -> participantJema (inscrit).
  • Le nom des noeuds jour/creneau est contraint et valide a la sauvegarde par JemaScheduleChangeNotificationHandler :
    • Jour : Jour - JJ.MM.AAAA (ex. Mercredi - 01.12.2025) ; la date est derivee dans la propriete date (ticks).
    • Creneau : HH:mm - HH:mm (tiret ou demi-cadratin) ; derive timestampStart/timestampEnd (ticks), et l'heure de fin doit etre apres l'heure de debut.
    • Un format invalide annule la sauvegarde (CancelOperation).
  • Capacite : chaque artisan JEMA a un nombre de places nbPlaces. Le creneau garde nbRegistrations. Une inscription est refusee si nbRegistrations + participants > nbPlaces.
  • Le nombre de participants demande doit etre strictement positif.
  • La langue d'inscription doit etre fr, de ou it (sinon erreur, message en en).
  • Mails de confirmation : un mail est envoye au visiteur ; un mail est aussi envoye a l'artisan uniquement si on est dans la periode de l'evenement JEMA (entre jemaStartDate et jemaEndDate de l'edition courante).
  • A noter (etat du code) : JemaRegistrationController.Submit est en [IgnoreAntiforgeryToken] // TEMP et porte des TODO (verification de la disponibilite reelle du creneau, anti-robot). A traiter comme provisoire.

Rappels JEMA (job Quartz)

  • Job JemaEmailReminderJob, cron 0 0 9 * * ? (tous les jours a 09:00).
  • Le job ne s'execute qu'en production (court-circuit en Development/Staging).
  • Envoie deux series de rappels via JemaReminderService.SendRemindersAsync (visiteurs et artisans), avec un export CSV des inscrits en piece jointe (nom de fichier localise : inscrits.csv / registrations.csv / anmeldungen.csv / iscritti.csv).
  • En staging/dev, les mails artisan de test sont rediriges vers une adresse Spektrum (garde-fou code).

Formulaires & mail

  • Anti-spam : honeypot MiddleName. S'il est rempli, la soumission est ignoree (log + redirect) sans envoi.
  • Tout formulaire passe par FormSurfaceController<TModel> (validation ModelState, TempData["FormSuccess"], redirect).
  • Les destinataires/sujet/contenu proviennent de la composition emailSettings de la page courante (IEmailSettings).
  • Deux SMTP distincts : principal (formulaires de contact) et JEMA (inscriptions/rappels).
  • Hors production, les sujets sont prefixes [DEV] ou [STAGING].

Multilingue

  • 4 langues : fr (defaut), de, it, en. Document types Culture-variants.
  • Tout texte d'interface passe par le dictionnaire Umbraco, jamais en dur.

SEO

  • Meta-titre construit en Nom – Suffixe (SeoHelpers.BuildMetaTitle).
  • Meta-description de fallback : derivee du contenu (strip HTML, decode, normalise, troncature au mot, ~150 caracteres) quand aucune description explicite (SeoHelpers.BuildMetaDescription). Travail lie aux branches seo-fallback-artisan-metier.

Cookies / marketing

  • GTM/GA4 et autres scripts marketing ne se chargent qu'apres consentement explicite (cookiesConsent.js / vanilla-cookieconsent).

Securite

  • Backoffice : TwoFactor TOTP (Google Authenticator), mot de passe >= 15 caracteres, pas de login concurrents.
  • Dashboard JEMA accessible via un token chiffre + verification d'autorisation (voir ../modules/dashboard.md).

Contenu & fichiers generes - ne pas editer

  • src/Web/umbraco/Models (ModelsBuilder SourceCodeAuto).
  • src/Web/wwwroot/css|js (Vite).
  • ImportApiController / ImportCsvSrc : outillage interne [Obsolete], ne pas reutiliser en production.

Contributors

No contributors

Changelog

No recent changes