Skip to content

Module JEMA - inscriptions, capacite, rappels

JEMA (Journees Europeennes des Metiers d'Art) est le coeur fonctionnel du site : des artisans ouvrent leur atelier, les visiteurs s'inscrivent en ligne a des creneaux horaires.

Structure de noeuds

Les inscriptions sont stockees comme contenu Umbraco (pas de table SQL custom), sous chaque artisan JEMA (jemaCraftsman) :

jemaCraftsman                     (porte nbPlaces)
└── registrationDayJema           (un jour ; nom "Jour - JJ.MM.AAAA", propriete date en ticks)
    └── registrationTimeSlotJema  (un creneau ; nom "HH:mm - HH:mm", timestampStart/End, nbRegistrations)
        └── participantJema        (un inscrit : firstName, lastName, email, phone, language, nbParticipants)

Le contexte editorial : jemaPage (reference l'jemaEdition courante via CurrentJemaEdition, avec jemaStartDate/jemaEndDate), pages par ville (cityJemaPage, localisationJemaPage), categories et lieux.

Inscription en ligne (JemaRegistrationController)

Controllers/JemaRegistrationController.cs, action Submit (POST JSON, modele JemaRegistrationRequestRecord) :

  1. Valide la langue (fr/de/it ; sinon message d'erreur en en), le ModelState, et Participants > 0.
  2. Charge l'artisan par ArtisanId et verifie ContentType.Alias == "jemaCraftsman".
  3. GetOrCreateDay : retrouve ou cree le registrationDayJema correspondant a la date (compare les ticks de date).
  4. ParseTimeRange + GetOrCreateTimeSlot : retrouve ou cree le registrationTimeSlotJema (compare timestampStart/timestampEnd).
  5. Capacite : refuse si nbRegistrations + Participants > nbPlaces (message CraftsmanPage.RegistrationJema.Error.TimeSlotFull).
  6. Incremente nbRegistrations, sauve + publie le creneau.
  7. CreateParticipant : cree le participantJema sous le creneau.
  8. Mails (EmailService) : confirmation au visiteur (toujours) ; confirmation a l'artisan uniquement si on est entre jemaStartDate et jemaEndDate de l'edition courante (IsWithinJemaEventPeriod).

Etat du code (a surveiller) : action en [IgnoreAntiforgeryToken] // TEMP, TODO sur la verification de disponibilite reelle du creneau et l'anti-robot. A traiter comme provisoire.

Validation / derivation a la sauvegarde (JemaScheduleChangeNotificationHandler)

Handler ContentSavingNotification (Notifications/JemaScheduleChangeNotificationHandler.cs), enregistre dans Program.cs :

  • registrationDayJema : le nom doit matcher ... - JJ.MM.AAAA. Derive la date dans date (ticks). Format invalide -> CancelOperation.
  • registrationTimeSlotJema : le nom doit matcher HH:mm [-/–] HH:mm. Derive timestampStart/timestampEnd (ticks). Refuse si fin <= debut.

Si tu modifies ces doctypes ou leurs alias de propriete, mets a jour ce handler et JemaRegistrationController (qui lit/ecrit les memes alias). JemaDurationCalculationHandler complete le calcul de durees a la sauvegarde.

Mails JEMA (EmailService)

Methodes dediees, via le SMTP JEMA (JemaSmtpOptions, isJema: true), templates Razor embarques :

  • SendConfirmJemaRegistrationToUserAsync -> GenericJemaRegistrationConfirmation.cshtml (visiteur).
  • SendConfirmJemaRegistrationToCraftsmanAsync -> meme template (artisan ; resout les emails des relatedCraftsman). En staging/dev, redirige vers une adresse de test.
  • SendJemaReminderEmailAsync -> JemaReminderCraftsman.cshtml (rappel artisan, CSV des inscrits en piece jointe).
  • SendJemaReminderEmailToVisitorAsync -> JemaReminderVisitor.cshtml (rappel visiteur).

Les sujets/contenus proviennent de la composition jemaRegistrationConfirmationEmailSettings (multilingue, lecture Value<...>(alias, culture)), avec tokens {donnees}, {prenom}, {nom}, {nom-complet}, {email}, {ville}. Le visuel d'en-tete depend de la langue (JEMA_{FR|DE|IT|EN}.png).

Rappels automatiques (JemaEmailReminderJob + JemaReminderService)

  • Job Quartz JemaEmailReminderJob, cron 0 0 9 * * ? (09:00 quotidien), enregistre dans Program.cs.
  • Ne s'execute qu'en production (return immediat en Development/Staging).
  • Appelle JemaReminderService.SendRemindersAsync(false) puis (true) (rappels generaux puis JEMA du jour).
  • Fichier CSV des inscrits localise : inscrits.csv / registrations.csv / anmeldungen.csv / iscritti.csv.

Corbeille JEMA

Controllers/JemaTrashApiController.cs : API d'administration des noeuds JEMA (outillage interne).

Contributors

No contributors

Changelog

No recent changes