Beispiel #1
0
        public Checkin ProcessCheckin(JToken tokenRoom, JToken tokenReg, Guest guest)
        {
            var note    = tokenRoom.Value <string>("note");
            var room_id = tokenRoom.Value <long>("room_id");
            var booking = tokenReg.Value <string>("book_no");

            var arrAt    = tokenReg.Value <DateTime>("arr_date");
            var deptAt   = tokenReg.Value <DateTime>("dep_date");
            var countAdl = tokenReg.Value <short>("adl_count");
            var countChl = tokenReg.Value <short>("chl_count");

            var dataCheckin = new Checkin()
            {
                Id          = Checkin.GenerateID(),
                ArriveAt    = arrAt,
                DepartureAt = deptAt,
                CountAdult  = countAdl,
                CountChild  = countChl,
                IdGuest     = guest.Id,
                IdRoom      = room_id,
                CheckinAt   = DateTime.Now,
                Note        = note,
            };

            using (var model = new DataContext())
                using (var trans = model.Database.BeginTransaction(IsolationLevel.ReadUncommitted))
                {
                    try
                    {
                        if (!string.IsNullOrEmpty(booking))
                        {
                            //TODO: Update booking here
                            var book = (from a in model.Bookings
                                        where a.Id == booking
                                        select a).Single();

                            book.IsCheckin = true;
                            book.IdCheckin = dataCheckin.Id;

                            model.SaveChanges();
                        }

                        var room = (from a in model.Rooms
                                    where a.Id == room_id
                                    select a).FirstOrDefault();

                        if (room != null)
                        {
                            //Change room status to Occupied
                            room.IdStatus           = 3;
                            model.Entry(room).State = EntityState.Modified;
                        }

                        //Add checkin record
                        model.CheckIn.Add(dataCheckin);
                        model.SaveChanges();

                        trans.Commit();

                        return(dataCheckin);
                    }
                    catch
                    {
                        trans.Rollback();
                        throw;
                    }
                }
        }