public ResultOfType <IList <CalendrierPatientDataModel> > GetCalendrierParPraticienForPatientParSemaine( string praticien, string dateSelected) { try { Logger.LogInfo("GetCalendrierParPraticienForPatientParSemaine : Start. "); IList <CalendrierPatientDataModel> calendriersPatientList = new List <CalendrierPatientDataModel>(); int i = 0; while (i < 7) { DateTime today; DateTime.TryParseExact(dateSelected, "dd/MM/yyyy", _cultureFr, DateTimeStyles.None, out today); DateTime yesterday = today.AddDays(-1); if (yesterday.CompareTo(DateTime.Now) > 0) { today = yesterday; i++; dateSelected = today.ToShortDateString(); var data = GetCalendrierParPraticienForPatient(praticien, dateSelected); if (data != null && data.Data != null) { var calendrierPatientDataModel = new CalendrierPatientDataModel { DateCourante = data.Data.DateCourante, HeureCalendrier = data.Data.HeureCalendrier, Jour = data.Data.Jour }; calendriersPatientList.Add(calendrierPatientDataModel); } } else { return (new Return <IList <CalendrierPatientDataModel> >().Error() .As(EStatusDetail.NotFound) .AddingGenericError( null, "Vous ne pouvez pas revenir vers la semaine précédente car la date est inférieur.") .WithDefaultResult()); } } var calendrierPatientDataModels = calendriersPatientList.Reverse().ToList(); Logger.LogInfo("GetCalendrierParPraticienForPatientParSemaine : End. "); return(new Return <IList <CalendrierPatientDataModel> >().OK().WithResult(calendrierPatientDataModels)); } catch (Exception ex) { throw; } }
public ResultOfType <IList <CalendrierPatientDataModel> > GetCalendrierParPraticienForPatientParSem( string praticien, string dateSelected) { try { Logger.LogInfo("GetCalendrierParPraticienForPatientParSem : Start. "); IList <CalendrierPatientDataModel> calendriersPatientList = new List <CalendrierPatientDataModel>(); for (int i = 0; i < 7; i++) { DateTime today; DateTime.TryParseExact(dateSelected, "dd/MM/yyyy", _cultureFr, DateTimeStyles.None, out today); DateTime tomorrow = today.AddDays(1); today = tomorrow; dateSelected = today.ToShortDateString(); var data = GetCalendrierParPraticienForPatient(praticien, dateSelected); if (data != null && data.Data != null) { var calendrierPatientDataModel = new CalendrierPatientDataModel { DateCourante = data.Data.DateCourante, HeureCalendrier = data.Data.HeureCalendrier, Jour = data.Data.Jour }; calendriersPatientList.Add(calendrierPatientDataModel); } } Logger.LogInfo("GetCalendrierParPraticienForPatientParSem : End ."); return(new Return <IList <CalendrierPatientDataModel> >().OK().WithResult(calendriersPatientList)); } catch (Exception ex) { throw; } }
/// <summary> /// C'est une méthode permettant d'afficher les disponibilités d'un medecin coté patient /// </summary> /// <param name="praticien"></param> /// <param name="dateSelected"></param> /// <returns></returns> public ResultOfType <CalendrierPatientDataModel> GetCalendrierParPraticienForPatient(string praticien, string dateSelected) { try { Logger.LogInfo("GetCalendrierParPraticienForPatient : Start. "); //nous avant la configuration du médecin qui construit la premiere liste //puis on tranche de la liste les créneaux non disponible if (string.IsNullOrEmpty(praticien)) { return (new Return <CalendrierPatientDataModel>().Error() .As(EStatusDetail.BadRequest) .AddingGenericError( null, "L'email du praticien est null.").WithDefaultResult()); } if (string.IsNullOrEmpty(dateSelected)) { return (new Return <CalendrierPatientDataModel>().Error() .As(EStatusDetail.BadRequest) .AddingGenericError( null, "La date courante est null.").WithDefaultResult()); } ConfigurationPraticien configurationPraticien = _configurationPraticienRepository.GetAll().FirstOrDefault(c => c.Praticien.Email == praticien); if (configurationPraticien == null) { return (new Return <CalendrierPatientDataModel>().Error() .As(EStatusDetail.BadRequest) .AddingGenericError( null, "Aucune configuration effectué pour le compte en compte.Veuillez contacter l'administrateur de AlloTabib pour établir une première configuration.") .WithDefaultResult()); } IList <Creneaux> creneauxConfig = _creneauRepository.GetAll() .Where(cr => cr.Praticien.Email.Equals(praticien) && cr.CurrentDate.Equals(dateSelected)) .ToList(); IList <string> heures = new List <string>(); int decalage = configurationPraticien.DecalageMinute; var jourFerie = _jourFerieRepository.GetAll() .FirstOrDefault(x => x.JourFerieNom.Contains(dateSelected) && x.Praticien.Email.Equals(praticien)); DateTime dateCast; DateTime.TryParseExact(dateSelected, "dd/MM/yyyy", _cultureFr, DateTimeStyles.None, out dateCast); string day = DateTimeFormatInfo.CurrentInfo.GetDayName(dateCast.DayOfWeek); CalendrierPatientDataModel data = new CalendrierPatientDataModel(); if (jourFerie != null || day.Equals(DayOfWeek.Sunday.ToString())) { //Do the cast for the date data = new CalendrierPatientDataModel { HeureCalendrier = null, DateCourante = dateSelected.Substring(0, 5), Jour = day }; //On doit pas afficher ce jour la dans le cas d'un patient return(new Return <CalendrierPatientDataModel>().OK().WithResult(data)); } else { //si il n'a aucun créneau dans cette date on affiche toute les disponibilité tous le calendrier au patient //if (creneauxConfig == null) //{ if (configurationPraticien.MinuteDebutMatin != null && configurationPraticien.HeureDebutMatin != null && configurationPraticien.MinuteFinMatin != null && configurationPraticien.HeureFinMatin != null) { int minute = int.Parse(DeleteZero(configurationPraticien.MinuteDebutMatin)); int heure = int.Parse(DeleteZero(configurationPraticien.HeureDebutMatin)); int minuteFinMatin = int.Parse(DeleteZero(configurationPraticien.MinuteFinMatin)); int heureFinMatin = int.Parse(DeleteZero(configurationPraticien.HeureFinMatin)); string startTimeMatin = string.Concat(AddZero(heure.ToString()), ":", AddZero(minute.ToString())); AjouterDisponibilitePraticien(heure, heureFinMatin, minute, minuteFinMatin, heures, startTimeMatin, decalage); heures.RemoveAt(heures.Count - 1); } if (configurationPraticien.MinuteDebutMidi != null && configurationPraticien.HeureDebutMidi != null) { int minuteAp = int.Parse(DeleteZero(configurationPraticien.MinuteDebutMidi)); int heureAp = int.Parse(DeleteZero(configurationPraticien.HeureDebutMidi)); int minuteFinAp = int.Parse(DeleteZero(configurationPraticien.MinuteFinMidi)); int heureFinAp = int.Parse(DeleteZero(configurationPraticien.HeureFinMidi)); string startTimeMidi = string.Concat(AddZero(heureAp.ToString()), ":", AddZero(minuteAp.ToString())); AjouterDisponibilitePraticien(heureAp, heureFinAp, minuteAp, minuteFinAp, heures, startTimeMidi, decalage); heures.RemoveAt(heures.Count - 1); } //On doit traiter le cas des rendez vous if (creneauxConfig != null && creneauxConfig.ToList().Count > 0) { //ici on doit enlever des heurs les rendez vous prix foreach (Creneaux cre in creneauxConfig) { //vérifier si ce creneaux est lié à un rdv var rdv = _rendezvousRepository.GetAll().FirstOrDefault(r => r.Creneaux.Id.Equals(cre.Id)); if (rdv != null) { if (rdv.Statut.Equals("R")) //Si le rendez vous a été rejeté alors il sera libéré { if (heures.IndexOf(cre.HeureDebut) != -1) { if (cre.Status.Equals("ND".ToString())) { heures.Remove(cre.HeureDebut); } } } } if (heures.IndexOf(cre.HeureDebut) != -1) { if (cre.Status.Equals("ND".ToString())) { heures.Remove(cre.HeureDebut); } } } } DateTime.TryParseExact(dateSelected, "dd/MM/yyyy", _cultureFr, DateTimeStyles.None, out dateCast); day = DateTimeFormatInfo.CurrentInfo.GetDayName(dateCast.DayOfWeek); //Do the cast for the date data = new CalendrierPatientDataModel { HeureCalendrier = heures, DateCourante = dateSelected, Jour = day }; } Logger.LogInfo("GetCalendrierParPraticienForPatient : End ."); return(new Return <CalendrierPatientDataModel>().OK().WithResult(data)); } catch (Exception ex) { return (new Return <CalendrierPatientDataModel>().Error() .As(EStatusDetail.BadRequest) .AddingGenericError( null, "Erreur de récupération du jours.").WithDefaultResult()); } }