Example #1
0
 public InvitationBLL(Invitation invitation)
 {
     GuestID = invitation.GuestID;
     ReservationID = invitation.ReservationID;
     Accepted = invitation.Accepted;
     Grade = invitation.Grade;
     Reservation = new ReservationBLL(invitation.Reservation);
     User = new UserBLL(invitation.Guest);
 }
        public void Invite(List<int> friendsIDsList, int reservationID)
        {
            foreach (int friendID in friendsIDsList)
            {
                Invitation invitation = new Invitation() { ReservationID = reservationID, GuestID = friendID, Accepted = null };
                _context.Invitations.Add(invitation);
                
            }

            _context.SaveChanges();
        }
        public int ConfirmBookingTable(List<int> tableIndexes, int restaurantID, String date, String time, int duration, int userID, out Guest guest, out int? reservationID)
        {
            string[] split = time.Split(':');
            decimal timeDecimal = Convert.ToDecimal(split[0]);
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");

            DateTime givenDateGBFormat = Convert.ToDateTime(date);

            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

            if(givenDateGBFormat.Date == DateTime.Today.Date)
            {
                String d = DateTime.Now.Hour.ToString();
                if (Convert.ToDecimal(d) >= timeDecimal)
                {
                    guest = null;
                    reservationID = 0;
                    return 2;
                }
            }


            List<ReservationRealization> selectedReservations = new List<ReservationRealization>();

            try
            {


                if (duration == 1)
                {
                    selectedReservations = (from t in _context.Tables
                                            from r in t.ReservationRealizations
                                            where EntityFunctions.TruncateTime(r.Date) == EntityFunctions.TruncateTime(givenDateGBFormat) && r.RestaurantID == restaurantID && r.Time == timeDecimal
                                            select r).Include(r => r.Table).ToList();
                } else if (duration == 2)
                {
                    selectedReservations = (from t in _context.Tables
                                            from r in t.ReservationRealizations
                                            where EntityFunctions.TruncateTime(r.Date) == EntityFunctions.TruncateTime(givenDateGBFormat) && r.RestaurantID == restaurantID && (r.Time == timeDecimal || r.Time == timeDecimal + 1)
                                            select r).Include(r => r.Table).ToList();
                } else if (duration == 3)
                {
                    selectedReservations = (from t in _context.Tables
                                            from r in t.ReservationRealizations
                                            where EntityFunctions.TruncateTime(r.Date) == EntityFunctions.TruncateTime(givenDateGBFormat) && r.RestaurantID == restaurantID && (r.Time == timeDecimal || r.Time == timeDecimal + 1 || r.Time == timeDecimal + 2)
                                            select r).Include(r => r.Table).ToList();
                }
                else
                {
                    selectedReservations = (from t in _context.Tables
                                            from r in t.ReservationRealizations
                                            where EntityFunctions.TruncateTime(r.Date) == EntityFunctions.TruncateTime(givenDateGBFormat) && r.RestaurantID == restaurantID && r.Time == timeDecimal || r.Time == timeDecimal + 1 || r.Time == timeDecimal + 2 || r.Time == timeDecimal + 3
                                            select r).Include(r => r.Table).ToList();
                }

                foreach (ReservationRealization r in selectedReservations)
                {
                    foreach (int n in tableIndexes)
                    {
                        if (r.Table.CellNumber == n)
                        {
                            if (r.ReservationID != null)
                            {
                                guest = null;
                                reservationID = 0;

                                return 1;
                            }
                        }

                    }
                }

                Reservation reservation = new Reservation { GuestID = userID, RestaurantID = restaurantID, ReservationDate = givenDateGBFormat };
                _context.Reservations.Add(reservation);

                foreach (ReservationRealization r in selectedReservations)
                {
                    foreach (int n in tableIndexes)
                    {
                        if (r.Table.CellNumber == n)
                        {
                            r.ReservationID = reservation.ReservationID;
                        }

                    }
                }

                _context.SaveChanges();

                guest = _context.Guests.Where(g => g.UserID == userID).Include(g => g.SentFriendshipRequests).Include(g => g.RecievedFriendshipRequests).First();
                reservationID = reservation.ReservationID;

                Invitation invitation = new Invitation() { ReservationID = (int)reservationID, GuestID = userID, Accepted = true};
                _context.Invitations.Add(invitation);
                _context.SaveChanges();
                return 0;


            }
            catch(DbUpdateConcurrencyException ex)
            {
                guest = null;
                reservationID = 1;

                return 1;
            }  
        }