public static IRendezVous InitialiserPlageOuverture(PayloadPlageOuverture payload) { IRendezVous rdv = Fabrique.Get <IRendezVous>(); rdv.Sujet = $"[rdv-solidarités] - {Sanitize($"Plage d'ouverture : {string.Join(" - ", payload.Data.Motifs.Select(i => i.Name))}", SanitizeSujet)}"; rdv.Lieu = Sanitize(payload.Data.Lieu.Address, SanitizeLieu); DateTime dtd = DateTime.ParseExact(payload.Data.FirstDay, "yyyy-MM-dd", CultureInfo.InvariantCulture); DateTime dts = DateTime.ParseExact(payload.Data.StartTime, "HH:mm:ss", CultureInfo.InvariantCulture); DateTime dtf = DateTime.ParseExact(payload.Data.EndTime, "HH:mm:ss", CultureInfo.InvariantCulture); rdv.Debut = dtd.Add(new TimeSpan(dts.Hour, dts.Minute, dts.Second)); rdv.Fin = dtd.Add(new TimeSpan(dtf.Hour, dtf.Minute, dtf.Second)); Agent organisateur = payload.Data.Agent; IParticipant po = Fabrique.Get <IParticipant>(); po.Nom = Sanitize($"{organisateur.LastName} {organisateur.FirstName}", SanitizeNom).Trim(); po.Courriel = organisateur.Email.ToLowerInvariant(); rdv.Organisateur = po; rdv.Recurrence = payload.Data.Rrule; rdv.StatutAffichage = StatutAffichage.Occupe; rdv.ExternalId = payload.Data.IcalUid; return(rdv); }
private static IRendezVous InitialiserRendezVous(PayloadRendezVous payload) { IRendezVous rdv = Fabrique.Get <IRendezVous>(); switch (payload.Data.Status) { case StatusExcused: rdv.Sujet = $"EXCUSE - [rdv-solidarités] - {Sanitize(payload.Data.Motif.Name, SanitizeSujet)}"; rdv.StatutAffichage = StatutAffichage.Disponible; break; case StatusNotExcused: rdv.Sujet = $"NON EXCUSE - [rdv-solidarités] - {Sanitize(payload.Data.Motif.Name, SanitizeSujet)}"; rdv.StatutAffichage = StatutAffichage.Disponible; break; default: rdv.Sujet = $"[rdv-solidarités] - {Sanitize(payload.Data.Motif.Name, SanitizeSujet)}"; rdv.StatutAffichage = StatutAffichage.AbsentduBureau; break; } rdv.Lieu = Sanitize(payload.Data.Address, SanitizeLieu); int duration = int.Parse(payload.Data.DurationInMin, CultureInfo.InvariantCulture); rdv.Debut = DateTime.ParseExact(payload.Data.StartsAt, "yyyy-MM-dd HH:mm:ss zzz", CultureInfo.InvariantCulture); rdv.Fin = rdv.Debut.Add(new TimeSpan(0, duration, 0)); AgentRendezVous organisateur = payload.Data.Agents[0]; IParticipant po = Fabrique.Get <IParticipant>(); po.Nom = Sanitize($"{organisateur.LastName} {organisateur.FirstName}", SanitizeNom).Trim(); po.Courriel = organisateur.Email.ToLowerInvariant(); rdv.Organisateur = po; rdv.RappelMinutesAvantDebut = RappelMinutesAvantDebut; rdv.ExternalId = payload.Data.Uuid; StringBuilder sb = new StringBuilder(); if (payload.Data.Users.Count > 1) { sb.Append("Usagers concernés : <br/>"); } for (int i = 0; i < payload.Data.Users.Count; i++) { sb.Append($"Usager n°{i + 1}"); sb.Append("<ul>"); sb.Append($"{payload.Data.Users[i].ToHtml()}"); sb.Append("</ul>"); } rdv.Description = sb.ToString(); return(rdv); }
private static IList <IRendezVous> ChercherRendezVousDansLeMois(IRendezVous rendezVous) { ICritereRechercheRendezVousParExternalId crrv = Fabrique.Get <ICritereRechercheRendezVousParExternalId>(); crrv.Organisateur = rendezVous.Organisateur; crrv.DateDebutRecherche = new DateTime(rendezVous.Debut.Year, rendezVous.Debut.Month, 1); crrv.DateFinRecherche = new DateTime(rendezVous.Debut.Year, rendezVous.Debut.Month, 30); crrv.NombreMaximumResultats = NombreMaximumResultats; crrv.ExternalId = rendezVous.ExternalId; return(Fabrique.Get <IServiceExchange>().RechercherRendezVous(crrv)); }
public HttpResponseMessage NewCalendarEvent() { Log.EcrireInfo("[NewCalendarEvent] > Nouvel événement reçu"); if (Request == null) { return(HttpResponseMessageNoCache(new Reponse { Erreur = "Erreur interne", Signature = false })); } DumpRequest("NewCalendarEvent"); string message = Request.Content.ReadAsStringAsync().Result; if (string.IsNullOrEmpty(message)) { return(Request.CreateResponse(HttpStatusCode.InternalServerError, new Reponse() { Erreur = "Message vide", Signature = false })); } Log.EcrireDebug($"[NewCalendarEvent] > Message reçu : {message}"); IControleurRdvs cr = Fabrique.Get <IControleurRdvs>(); try { cr.ControlerRequest(Request, message); } catch (Exception ex) { return(Request.CreateResponse(HttpStatusCode.InternalServerError, new Reponse() { Erreur = ex.Message, Signature = false })); } try { cr.CreerRendezVous(message); } catch (Exception ex) { Log.EcrireErreur($"[NewCalendarEvent] >> Erreur >> {ex.Message}"); Log.EcrireErreur($"[NewCalendarEvent] >> Erreur >> StackTrace : {ex.StackTrace}"); return(Request.CreateResponse(HttpStatusCode.InternalServerError, new Reponse() { Erreur = ex.Message, Signature = true })); } return(HttpResponseMessageNoCache(new Reponse { Signature = true })); }
public void CreerRendezVous(string message) { // La balise Meta est commune // On désérialise sur un payload quelconque pour la récupérer Meta meta = JsonConvert.DeserializeObject <PayloadRendezVous>(message).Meta; IPayload payload; IRendezVous rendezVous; if (TypeRendezVous.Equals(meta.Model, StringComparison.Ordinal)) { payload = DeserialiserRendezVous(message); rendezVous = InitialiserRendezVous((PayloadRendezVous)payload); } else if (TypePlageOuverture.Equals(meta.Model, StringComparison.Ordinal)) { payload = DeserialiserPlageOuverture(message); rendezVous = InitialiserPlageOuverture((PayloadPlageOuverture)payload); } else { throw new NotSupportedException("Model non supporté."); } switch (meta.Event) { case Create: Log.EcrireInfo("[NewCalendarEvent] >> Nouveau rdv"); LogEvent(rendezVous); Fabrique.Get <IServiceExchange>().CreerRendezVous(rendezVous); break; case Update: Log.EcrireInfo("[NewCalendarEvent] >> mise à jour rdv"); LogEvent(rendezVous); IList <IRendezVous> lrvm = ChercherRendezVousDansLeMois(rendezVous); if (!lrvm.Any()) { throw new InvalidDataException("Aucune plage trouvée dans le mois spécifié."); } rendezVous.Id = lrvm[0].Id; // La recherche donne au moins 1 rdv de la série que je réutilise avec les nouvelles données Fabrique.Get <IServiceExchange>().ModifierRendezVous(rendezVous, true); break; case Delete: Log.EcrireInfo("[NewCalendarEvent] >> Suppression rdv"); LogEvent(rendezVous); IList <IRendezVous> lrvs = ChercherRendezVousDansLeMois(rendezVous); if (!lrvs.Any()) { throw new InvalidDataException("Aucune plage trouvée dans le mois spécifié."); } Fabrique.Get <IServiceExchange>().SupprimerRendezVous(lrvs[0], true); break; default: throw new NotSupportedException(); } }