コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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));
        }
コード例 #4
0
ファイル: RdvController.cs プロジェクト: rdv-solidarites/Rdvs
        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
            }));
        }
コード例 #5
0
        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();
            }
        }