private OuvertureHebdomadaire ProchainOuvertHabituellement(DateTime date) { using (foodtruckEntities db = new foodtruckEntities()) { TimeSpan minuit = new TimeSpan(0, 0, 0); int totalSecondesDate = 24 * 60 * 60 * (int)date.DayOfWeek + (int)date.TimeOfDay.TotalSeconds; OuvertureHebdomadaire plage = (from ouverture in db.OuvertureHebdomadaire let totalSecondesOuverture = 24 * 60 * 60 * ouverture.JourSemaineId + DbFunctions.DiffSeconds(minuit, ouverture.Fin) where totalSecondesOuverture > totalSecondesDate orderby totalSecondesOuverture select ouverture).FirstOrDefault(); DateTime maintenant = DateTime.Now; if (plage == null) { plage = (from c in db.OuvertureHebdomadaire orderby c.JourSemaineId, c.Debut select c).First(); } else if (date.Date == maintenant.Date && plage.JourSemaineId == (int)maintenant.DayOfWeek && plage.Debut < maintenant.TimeOfDay) { plage.Debut = RecalculHeureDebut(date); } return(plage); } }
internal bool SupprimerOuverture(int id) { using (foodtruckEntities db = new foodtruckEntities()) { OuvertureHebdomadaire ouverture = (from p in db.OuvertureHebdomadaire where p.Id == id select p).FirstOrDefault(); db.OuvertureHebdomadaire.Remove(ouverture); if (db.SaveChanges() != 1) { return(false); } else { return(true); } } }
internal OuvertureHebdomadaire ModifierOuverture(int id, int jourId, TimeSpan debut, TimeSpan fin) { using (foodtruckEntities db = new foodtruckEntities()) { OuvertureHebdomadaire ouverture = (from p in db.OuvertureHebdomadaire where p.Id == id select p).FirstOrDefault(); OuvertureHebdomadaire chevauchement = (from p in db.OuvertureHebdomadaire where p.Id != id && p.JourSemaineId == jourId && DbFunctions.DiffMinutes(p.Debut, fin) > 0 && DbFunctions.DiffMinutes(debut, p.Fin) > 0 select p).FirstOrDefault(); if (chevauchement == null && ouverture != null) { ouverture.JourSemaineId = jourId; ouverture.Debut = debut; ouverture.Fin = fin; db.SaveChanges(); } return(chevauchement); } }
internal OuvertureHebdomadaire AjouterOuverture(int jourId, TimeSpan debut, TimeSpan fin) { using (foodtruckEntities db = new foodtruckEntities()) { OuvertureHebdomadaire chevauchement = (from p in db.OuvertureHebdomadaire where p.JourSemaineId == jourId && DbFunctions.DiffMinutes(p.Debut, fin) > 0 && DbFunctions.DiffMinutes(debut, p.Fin) > 0 select p).FirstOrDefault(); if (chevauchement == null) { OuvertureHebdomadaire ouverture = new OuvertureHebdomadaire { JourSemaineId = jourId, Debut = debut, Fin = fin, }; db.OuvertureHebdomadaire.Add(ouverture); db.SaveChanges(); } return(chevauchement); } }
internal PlageHoraireRetrait ProchainOuvert(DateTime date) { date = date.AddMinutes(int.Parse(ConfigurationManager.AppSettings["DelaiMinimumAvantRetraitCommande"])); bool faireRecherche; PlageHoraireRetrait plageHoraireRetrait; do { faireRecherche = false; OuvertureHebdomadaire prochainOuvertHabituellement = ProchainOuvertHabituellement(date); JourExceptionnel prochainOuvertExceptionnellement = ProchaineOuvertureExceptionnelle(date); JourExceptionnel prochainFermeExceptionnellement = ProchaineFermetureExceptionnelle(date); DateTime dateMinuit; int jourOuvertHabituellement = prochainOuvertHabituellement.JourSemaineId; int jourJ = (int)date.DayOfWeek; if (jourOuvertHabituellement < jourJ) { dateMinuit = date.AddDays(7 - jourJ + jourOuvertHabituellement).Date; } else { dateMinuit = date.AddDays(jourOuvertHabituellement - jourJ).Date; } if (date.Date == dateMinuit && prochainOuvertHabituellement.Debut < date.TimeOfDay) { prochainOuvertHabituellement.Debut = RecalculHeureDebut(date); } plageHoraireRetrait = new PlageHoraireRetrait(dateMinuit + prochainOuvertHabituellement.Debut, dateMinuit + prochainOuvertHabituellement.Fin); // Test avec ouverture exceptionnelle // //cas plage ouverture exceptionnelle complètement avant plage ouverture habituelle if (prochainOuvertExceptionnellement.DateDebut < plageHoraireRetrait.Dates.First() && prochainOuvertExceptionnellement.DateFin < plageHoraireRetrait.Dates.First()) { plageHoraireRetrait = new PlageHoraireRetrait(prochainOuvertExceptionnellement.DateDebut, prochainOuvertExceptionnellement.DateFin); } // cas ouverture exceptionnelle commence avant plage else if (prochainOuvertExceptionnellement.DateDebut < plageHoraireRetrait.Dates.First()) { DateTime fin = prochainOuvertExceptionnellement.DateFin > plageHoraireRetrait.Dates.Last() ? prochainOuvertExceptionnellement.DateFin : plageHoraireRetrait.Dates.Last(); plageHoraireRetrait = new PlageHoraireRetrait(prochainOuvertExceptionnellement.DateDebut, fin); } // cas ouverture exceptionnelle fini après plage else if (prochainOuvertExceptionnellement.DateDebut < plageHoraireRetrait.Dates.Last() && prochainOuvertExceptionnellement.DateFin > plageHoraireRetrait.Dates.Last()) { DateTime debut = prochainOuvertExceptionnellement.DateDebut < plageHoraireRetrait.Dates.First() ? prochainOuvertExceptionnellement.DateDebut : plageHoraireRetrait.Dates.First(); plageHoraireRetrait = new PlageHoraireRetrait(debut, prochainOuvertExceptionnellement.DateFin); } //Test avec fermeture exceptionnelle // // fermeture englobe complètement l'ouverture => recherche à nouveau des plages if (prochainFermeExceptionnellement.DateDebut <= plageHoraireRetrait.Dates.First() && prochainFermeExceptionnellement.DateFin >= plageHoraireRetrait.Dates.Last()) { faireRecherche = true; date = prochainFermeExceptionnellement.DateFin; } // fermeture à cheval sur ouverture else if (prochainFermeExceptionnellement.DateDebut <= plageHoraireRetrait.Dates.Last() && prochainFermeExceptionnellement.DateFin >= plageHoraireRetrait.Dates.First()) { DateTime debut; DateTime fin; if (prochainFermeExceptionnellement.DateFin < plageHoraireRetrait.Dates.Last()) { debut = prochainFermeExceptionnellement.DateFin; fin = plageHoraireRetrait.Dates.Last(); } else { debut = plageHoraireRetrait.Dates.First(); fin = prochainFermeExceptionnellement.DateDebut; } plageHoraireRetrait = new PlageHoraireRetrait(debut, fin); } } while (faireRecherche); return(plageHoraireRetrait); }