/// <summary>
        /// Đổi phòng
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public JsonResult ChangeRoom(int id, int CheckInID, string Note, string tdate)
        {
            DateTime _tdate;
            var      rs = new JsonRs();

            DateTime.TryParse(tdate, CultureInfo.GetCultureInfo("vi-vn"), DateTimeStyles.None, out _tdate);
            if (new CommService().checkRoomNotAvailable(id, _tdate, _tdate.AddDays(1)))
            {
                rs = JsonRs.create(-1, "Không thể đổi phòng, vì phòng này đã có người ở từ " + _tdate.ToString("dd/MM/yyyy HH:mm") + " đến " + _tdate.AddDays(1).ToString("dd/MM/yyyy HH:mm"));
            }
            else
            {
                rs = _svustomerArrive.ChangeRoom(id, CheckInID, Note, _tdate);
            }
            return(Json(rs, JsonRequestBehavior.AllowGet));
        }
        public JsonRs PaymentCheckOut(int checkinID, string Tdate, int khunggio)
        {
            var rs = new JsonRs();

            using (var db = _connectionData.OpenDbConnection())
            {
                using (var tran = db.OpenTransaction())
                {
                    try
                    {
                        DateTime dateToLeave;
                        DateTime.TryParse(Tdate, CultureInfo.GetCultureInfo("vi-vn"), DateTimeStyles.None, out dateToLeave);
                        var check = db.Select <tbl_SaleOrder>(x => x.CheckInID == checkinID).FirstOrDefault();

                        if (check != null)
                        {
                            rs.Status  = "00";
                            rs.Message = "Khách hàng này đã ghi nhận thanh toán lúc : " + check.DateCreated.GetValueOrDefault().ToString("dd/MM/yyyy mm:ss");
                            return(rs);
                        }
                        //lấy thời gian checkin
                        var checkin = db.Single <tbl_CheckIn>(x => x.Id == checkinID);
                        checkin.Leave_Date = dateToLeave;
                        checkin.KhungGio   = khunggio;
                        if (checkin.Leave_Date.Value.CompareTo(DateTime.Now.AddMinutes(10)) > 0)
                        {
                            return(JsonRs.create(-1, "Thời gian đi không thể quá thời gian hiện tại"));
                        }

                        if (checkin.Leave_Date.Value.CompareTo(checkin.Arrive_Date) <= 0)
                        {
                            return(JsonRs.create(-1, "Thời gian đi không thể nhỏ hơn hoặc bằng thời gian đến"));
                        }


                        //khi doi phong capnhat trang thai cu ve5 va them 1 thằng mới Stt=2
                        var itemcheckin = GetCustomerRoomByCheckInID(checkinID);
                        var usingroom   = db.Single <tbl_RoomUsing>(x => x.CheckInID == checkinID);
                        usingroom.status = 3;

                        //cập nhật bảng đặt phòng là đã checkout
                        /**/
                        var reservation = db.Select <tbl_Reservation_Room>().Where(e => e.BookingCode == itemcheckin.BookingCode).FirstOrDefault();
                        if (reservation != null)
                        {
                            reservation.ReservationStatus = ReservationStatus.CHECKOUT;
                            var reservationRel = db.Select <tbl_Reservation_Customer_Rel>().Where(e => e.reservationID == reservation.Id).FirstOrDefault();
                            if (reservationRel != null)
                            {
                                reservationRel.status = ReservationStatus.CHECKOUT;
                                db.Update(reservationRel);
                            }
                            db.Update(reservation);
                        }

                        #region lay lai chinh sach gia
                        var Estimate = new EstimatePrice1Service().caculatePrice(itemcheckin.SysHotelID.GetValueOrDefault(), khunggio,// itemcheckin.KhungGio.GetValueOrDefault(0),
                                                                                 itemcheckin.roomid.GetValueOrDefault(0), itemcheckin.Room_Type_ID.GetValueOrDefault(0), itemcheckin.Arrive_Date.GetValueOrDefault(),
                                                                                 dateToLeave, -1, itemcheckin.Number_People, itemcheckin.Number_Children);


                        #endregion
                        var room = db.Single <tbl_Room>(x => x.Id == usingroom.roomid);
                        room.status = 0;
                        checkin.ReservationStatus = 3;
                        if (itemcheckin == null)
                        {
                            rs.Status  = "00";
                            rs.Message = "Lỗi không tìm thấy khách hàng đang ở!";
                            return(rs);
                        }

                        //đến việc xử lý các dịch vụ
                        var product = GetListCustomerServices(checkinID);

                        ////trừ tồn kho tương ứng
                        ////tìm minibar ứng với phòng đang ở
                        //var queryStore=db.From<tbl_Store>().Where(e=>e.roomid==usingroom.roomid);
                        //var firstStore=db.Select(queryStore).FirstOrDefault();//nếu có kho

                        //if (firstStore == null)//nếu ko có kho thì trừ từ kho tổng
                        //{
                        //    firstStore = db.Select(db.From<tbl_Store>()
                        //        .Where(e => e.typeStore==1 && e.SysHotelID==comm.GetHotelId()))
                        //        .FirstOrDefault();
                        //}
                        //if (firstStore != null)//nếu  có kho thì tiến hành trừ
                        //{
                        //    //duyệt qua các sản phẩm
                        //    foreach (var oProduct in product)
                        //    {
                        //        var queryProductStore = db.From<tbl_StoreProduct>()
                        //            .Where(e => e.productid == oProduct.productid && e.storeid == firstStore.Id)
                        //            .OrderBy(e => e.quantity);
                        //        var firstProductInStore = db.Select(queryProductStore).FirstOrDefault();
                        //        if (firstProductInStore != null)
                        //        {
                        //            firstProductInStore.quantity = oProduct.Quantity - 1;
                        //            db.Update(firstProductInStore);
                        //        }
                        //    }
                        //}

                        var total     = product.Sum(x => x.TotalSale);
                        var totalroom = Estimate.Sum(x => x.price);
                        //var totalquantity = product.Sum(x => x.Quantity);

                        var saleorder = new tbl_SaleOrder()
                        {
                            SysHotelID    = itemcheckin.SysHotelID,
                            DateCreated   = DateTime.Now,
                            DatePayment   = DateTime.Now,
                            PaymentTypeID = 1,
                            TotalAmount   = total + totalroom,
                            CheckInID     = itemcheckin.CheckInID,
                            CustomerID    = itemcheckin.Id,
                            CreatorID     = 0,
                            CustomerCode  = "",
                            TypeOrder     = 1,
                            Deposit       = itemcheckin.Deposit.GetValueOrDefault(0),
                            Deduction     = itemcheckin.Deduction.GetValueOrDefault(0),
                            Discount      = itemcheckin.Discount.GetValueOrDefault(0),
                            Tax           = 0
                        };
                        db.Save(saleorder, true);
                        var list = product.Select(t => new tbl_SaleOrderDetail()
                        {
                            SysHotelID    = t.SysHotelID,
                            DateCreated   = DateTime.Now,
                            DatePayment   = DateTime.Now,
                            PaymentTypeID = 1,
                            TotalAmount   = t.TotalSale,
                            Price         = 0,
                            AmountNoTax   = 0,
                            Tax           = 0,
                            item          = "",
                            catalogitem   = "",
                            CreatorID     = 0,
                            quantity      = t.Quantity,
                            itemid        = t.productid,
                            StoreID       = 0,
                            TypeOrder     = 2, // dịch vụ bằng 2 giá phòng bằng 1
                            catalogitemid = t.productid,
                            OrderID       = saleorder.Id
                        }).ToList();


                        foreach (var price in Estimate)
                        {
                            list.Add(new tbl_SaleOrderDetail()
                            {
                                SysHotelID    = itemcheckin.SysHotelID,
                                DateCreated   = DateTime.Now,
                                DatePayment   = DateTime.Now,
                                PaymentTypeID = 1,
                                TotalAmount   = price.price,
                                Price         = price.quantiy,
                                AmountNoTax   = 0,
                                Tax           = 0,
                                item          = price.dtFrom.ToString("dd/MM/yyyy hh:mm") + "|" + price.dtTo.ToString("dd/MM/yyyy hh:mm"),
                                catalogitem   = "",
                                CreatorID     = 0,
                                quantity      = price.quantiy,
                                itemid        = price.roomid,
                                StoreID       = 0,
                                TypeOrder     = 1, // dịch vụ bằng 2 giá phòng bằng 1
                                catalogitemid = price.pricePolicyId,
                                OrderID       = saleorder.Id,
                            });
                        }
                        if (list.Count > 0)
                        {
                            db.InsertAll(list);
                        }
                        db.Update(room);
                        db.Update(usingroom);
                        db.Update(checkin);
                        tran.Commit();
                        rs.Status  = "01";
                        rs.Message = "Thanh toán thành công cho khách hàng :" + itemcheckin.CustomerName;
                        return(rs);
                    }
                    catch (Exception e)
                    {
                        rs.Status  = "00";
                        rs.Message = "Thanh toán thất bại. Vui lòng thực hiện lại!";
                        return(rs);
                    }
                }
            }
        }