private static bool CaseDispoDoitEtreGrisSiJumelageAffecteDispo(List <DisponibiliteStruct> listeCasesJumelageEtDisposCeluiInspecte, DisponibiliteStruct caseDispoStruct) { const int rencontre = 90; for (var demiHeure = -(rencontre - 30); demiHeure < rencontre; demiHeure += 30) { if (listeCasesJumelageEtDisposCeluiInspecte.Exists( x => x.Jour == caseDispoStruct.Jour && x.EstDispo == false && (x.Minutes + demiHeure) == caseDispoStruct.Minutes)) { return(true); } } return(false); }
public Dictionary <string, List <DisponibiliteStruct> > RetourneDisponibiliteJumelageUsager(int id, int idTypeInsc, int session, int idCeluiInspecte) { var listeCasesJumelageEtDisposCeluiInspecte = new List <DisponibiliteStruct>(); var caseDispoStruct = new DisponibiliteStruct(); var reqDisposCeluiInspecte = _db.Disponibilite.Where(x => x.id_Inscription == id); IQueryable <Disponibilite> reqDisposDeTousLesAutres; IQueryable <Jumelage> reqJumelagesCeluiInspecte; var listeDisposCeluiInspecte = new List <Disponibilite>(); if (idTypeInsc == IdInscriptionPourEleveAide) { reqJumelagesCeluiInspecte = _db.Jumelage.Where(eleve => eleve.id_InscEleve == id && eleve.id_Sess == session); reqDisposDeTousLesAutres = _db.Disponibilite.Where(x => x.id_Inscription != id && x.Inscription.id_TypeInscription != IdInscriptionPourEleveAide); } else { reqJumelagesCeluiInspecte = _db.Jumelage.Where(tuteur => tuteur.id_InscrTuteur == id && tuteur.id_Sess == session); reqDisposDeTousLesAutres = _db.Disponibilite.Where(x => x.id_Inscription != id && x.Inscription.id_TypeInscription == IdInscriptionPourEleveAide); } foreach (var jumelageEnRouge in reqJumelagesCeluiInspecte) { caseDispoStruct.Jour = jumelageEnRouge.p_Jour.Jour; caseDispoStruct.Minutes = jumelageEnRouge.minutes; caseDispoStruct.NomCase = caseDispoStruct.Jour + "-" + caseDispoStruct.Minutes; caseDispoStruct.NbreUsagerMemeDispo = 0; caseDispoStruct.EstDispo = false; caseDispoStruct.EstDispoMaisJumele = true; caseDispoStruct.EstDispoEtCompatible = false; caseDispoStruct.EstDispoEtCompatibleEtConsecutif = false; if (Convert.ToBoolean(!jumelageEnRouge.consecutif)) { caseDispoStruct.EstConsecutiveDonc3hrs = false; listeCasesJumelageEtDisposCeluiInspecte.Add(caseDispoStruct); } else { caseDispoStruct.EstConsecutiveDonc3hrs = false; listeCasesJumelageEtDisposCeluiInspecte.Add(caseDispoStruct); for (int k = DemiHeure; k <= DureeRencontreMinutes; k += DemiHeure) { caseDispoStruct.Minutes = jumelageEnRouge.minutes + k; caseDispoStruct.NomCase = caseDispoStruct.Jour + "-" + caseDispoStruct.Minutes; caseDispoStruct.EstConsecutiveDonc3hrs = true; listeCasesJumelageEtDisposCeluiInspecte.Add(caseDispoStruct); caseDispoStruct.EstConsecutiveDonc3hrs = true; listeCasesJumelageEtDisposCeluiInspecte.Add(caseDispoStruct); } } } if (idCeluiInspecte != 0) { listeDisposCeluiInspecte = _db.Disponibilite.Where(x => x.id_Inscription == idCeluiInspecte).ToList(); var idTypeInscTemp = _db.Inscription.Where(x => x.id_Inscription == idCeluiInspecte).Select(x => x.id_TypeInscription).FirstOrDefault(); if (idTypeInscTemp == 1) { } else { } } foreach (var disponibiliteEnVert in reqDisposCeluiInspecte) { var compteurUsagerAvecMemeDispo = 0; caseDispoStruct.EstDispoEtCompatible = false; foreach (var a in reqDisposDeTousLesAutres) { if (disponibiliteEnVert.id_Jour == a.id_Jour && disponibiliteEnVert.minutes == a.minutes) { if (!listeCasesJumelageEtDisposCeluiInspecte.Exists(x => x.Jour == a.p_Jour.Jour && x.Minutes == a.minutes)) { compteurUsagerAvecMemeDispo++; if (idCeluiInspecte != 0 && listeDisposCeluiInspecte.Exists(x => x.p_Jour.Jour == a.p_Jour.Jour && x.minutes == a.minutes) && CaseDispoDoitEtreGrisSiJumelageAffecteDispo(listeCasesJumelageEtDisposCeluiInspecte, caseDispoStruct)) { caseDispoStruct.EstDispoEtCompatible = true; caseDispoStruct.EstDispoEtCompatibleEtConsecutif = DisponbiliteEstElleConsecutiveDauMoins3Hrs(reqDisposCeluiInspecte.ToList(), listeDisposCeluiInspecte, a.id_Jour, a.minutes); } } } } caseDispoStruct.Jour = disponibiliteEnVert.p_Jour.Jour; caseDispoStruct.Minutes = disponibiliteEnVert.minutes; caseDispoStruct.NomCase = disponibiliteEnVert.p_Jour.Jour + "-" + disponibiliteEnVert.minutes; caseDispoStruct.NbreUsagerMemeDispo = compteurUsagerAvecMemeDispo; caseDispoStruct.EstDispo = true; caseDispoStruct.EstDispoMaisJumele = CaseDispoDoitEtreGrisSiJumelageAffecteDispo(listeCasesJumelageEtDisposCeluiInspecte, caseDispoStruct); listeCasesJumelageEtDisposCeluiInspecte.Add(caseDispoStruct); } var startTime = TimeSpan.FromHours(HeureDebut); const int difference = DemiHeure; const int rencontre = DureeRencontreMinutes; const int heureMax = HeureFin; var listeCasesRencontreAu30Min = new Dictionary <TimeSpan, TimeSpan>(); var listeCasesRencontreAfficher = new Dictionary <string, List <DisponibiliteStruct> >(); for (var k = 0; k < heureMax; k++) { listeCasesRencontreAu30Min.Add( startTime.Add(TimeSpan.FromMinutes(difference * k)), startTime.Add(TimeSpan.FromMinutes(difference * k + rencontre)) ); } foreach (var case30Min in listeCasesRencontreAu30Min) { var minutes = (int)case30Min.Key.TotalMinutes; var caseToutes = new DisponibiliteStruct(); var values = new List <DisponibiliteStruct>(); var dispoHeuresPresent = listeCasesJumelageEtDisposCeluiInspecte.Exists(x => x.Minutes == minutes); for (var j = (int)Semaine.Lundi; j < (int)Semaine.Samedi; j++) { if (dispoHeuresPresent) { if (listeCasesJumelageEtDisposCeluiInspecte.Exists(x => x.Jour == ((Semaine)j).ToString() && x.Minutes == minutes)) { caseToutes = listeCasesJumelageEtDisposCeluiInspecte.Find(x => x.Jour == ((Semaine)j).ToString() && x.Minutes == minutes); } else { caseToutes.Jour = ((Semaine)j).ToString(); caseToutes.Minutes = minutes; caseToutes.NomCase = caseToutes.Jour + "-" + caseToutes.Minutes; caseToutes.NbreUsagerMemeDispo = 0; caseToutes.EstDispoMaisJumele = false; caseToutes.EstDispo = false; } } else { caseToutes.Jour = ((Semaine)j).ToString(); caseToutes.Minutes = minutes; caseToutes.NomCase = caseToutes.Jour + "-" + caseToutes.Minutes; caseToutes.NbreUsagerMemeDispo = 0; caseToutes.EstDispoMaisJumele = false; caseToutes.EstDispo = false; } values.Add(caseToutes); } listeCasesRencontreAfficher.Add( $"{case30Min.Key.Hours}h{case30Min.Key.Minutes:00}-{case30Min.Value.Hours}h{case30Min.Value.Minutes:00}", values); } return(listeCasesRencontreAfficher); }
public ActionResult Index(int typeInscription, string[] jours) { int idPers = SessionBag.Current.id_Pers; ViewBag.TypeInscription = Liste.ListeTypeInscription(); var sessionActuelle = _db.Session.AsNoTracking().OrderByDescending(y => y.Annee).ThenByDescending(x => x.id_Saison).FirstOrDefault(); if (sessionActuelle != null) { var inscriptionBd = new Inscription { id_Pers = idPers, id_Sess = sessionActuelle.id_Sess, id_Statut = 1, BonEchange = false, ContratEngagement = false, TransmettreInfoTuteur = false, DateInscription = DateTime.Now, id_TypeInscription = typeInscription }; _db.Inscription.Add(inscriptionBd); } _db.SaveChanges(); if (jours != null) { var dispo = new DisponibiliteStruct(); var disponibilites = new List <DisponibiliteStruct>(); Array.Sort(jours, new AlphanumComparatorFast()); foreach (var jour in jours) { //TODO: Valider si les heures se suivent, formatter pour demander confirmation à l'utilisateur. var splitValue1 = jour.Split('-'); dispo.Minutes = int.Parse(splitValue1[1]); dispo.Jour = splitValue1[0]; disponibilites.Add(dispo); } var dispoBd = new Disponibilite(); var inscriptionEtu = _db.Inscription.FirstOrDefault(x => x.id_Pers == idPers); foreach (var m in disponibilites) { if (inscriptionEtu != null) { dispoBd.id_Inscription = inscriptionEtu.id_Inscription; } dispoBd.id_Jour = (int)Enum.Parse(typeof(Semaine), m.Jour); dispoBd.minutes = m.Minutes; _db.Disponibilite.Add(dispoBd); _db.SaveChanges(); } SessionBag.Current.id_Inscription = typeInscription; switch ((TypeInscription)typeInscription) { case TypeInscription.eleveAide: SessionBag.Current.id_TypeUsag = TypeUsagers.Eleve; return(RedirectToAction("EleveAide1")); case TypeInscription.tuteurDeCours: SessionBag.Current.id_TypeUsag = TypeUsagers.Tuteur; return(RedirectToAction("Tuteur")); case TypeInscription.tuteurBenevole: SessionBag.Current.id_TypeUsag = TypeUsagers.Tuteur; return(RedirectToAction("Benevole")); case TypeInscription.tuteurRemunere: SessionBag.Current.id_TypeUsag = TypeUsagers.Tuteur; return(RedirectToAction("Benevole")); default: return(Json(new { success = false, message = MsgErreurRemplir })); } } return(Json(new { success = false, message = MsgErreurRemplir })); }