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);
            }
        }
Exemplo n.º 2
0
 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);
         }
     }
 }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
        }