protected void Button1_Click(object sender, EventArgs e)
        {
            IUserComponent userservice = new UserComponent();
            IBookingComponent bookingservice = new BookingComponent();
            User user = new User();
            Booking booking = new Booking();

            //booking.UserID = ((User)Session["UserSession"]).ID;
            booking.UserID = ((User)Session["UserSession"]).ID;
            booking.RoomID = int.Parse(DropDownList1.SelectedValue);
            booking.StartDate = clnstart.SelectedDate;
            booking.EndDate = clnEnd.SelectedDate;
           // booking.refNum = lblBookingID.Text;
            try
            {

                bookingservice.AddBooking(booking);
                lblBookingID.Text = "You have successfully booked room your refrence number is " + "<b>" + booking.RefNum + "</b>";


            }
            catch (Exception ex)
            {
                
                throw ex;
            }

        }
        private void ViewBookingDetail()
        {
            Booking book = new Booking();

            book.RefNum = txtRefNum.Text.Trim();

            BookingComponent serv = new BookingComponent();

            serv.ViewBooking(ref book);
            lblID.Text = book.ID.ToString();

            calStartDate.SelectedDate = book.StartDate;
            calEndDate.SelectedDate = book.EndDate;
            ddlRoom.SelectedValue = book.RoomID.ToString();

            foreach (AssetBooking asset in book.AssetBookings)
            {

                for (int i = 0; i < lstAssetList.Items.Count; i++)
                {
                    if (asset.AssetID == int.Parse(lstAssetList.Items[i].Value))
                    {
                        lstSelectedAsset.Items.Add(lstAssetList.Items[i]);
                        lstAssetList.Items.RemoveAt(i);

                        break;
                    }
                }

            }

        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            IUserComponent us = new UserComponent();
            IBookingComponent bookingservice = new BookingComponent();
            User myuser = new User();
           // Booking booking = new Booking();
            myuser.LoginID = txtloginid.Text;
            myuser.Password = txtpassword.Text;
            
            try
            {   
                if (us.Login(myuser))
                {
                    Session["UserSession"] = myuser;

                    Response.Redirect("InsertBooking.aspx");


                }
                else
                {
                    lblstatus.Text = "Login fail.";
                }
              
            }
            catch (Exception ex)
            {
                
                lblstatus.Text = ex.Message;
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
          //  IUserService userservice = new UserService();
            IBookingComponent bookingservice = new BookingComponent();
         //   User user = new User();
            Booking booking = new Booking();
            try
            {
              
                //booking.ID = int.Parse(lblID.Text);
                //booking.RoomID = (int.Parse)(txtroomid.Text);
                //booking.StartDate = DateTime.Parse(txtstartdate.Text);
                //booking.EndDate = DateTime.Parse(txtenddate.Text);
                booking.RefNum = txtrefnum.Text;
                bookingservice.ViewBooking(ref booking);
                txtroomid.Text = booking.RoomID.ToString();
                txtstartdate.Text = booking.StartDate.ToString();
                txtenddate.Text = booking.EndDate.ToString();
                

               // lblstatus.Text = "Your Booking has been update!" + booking.RefNum;
               
                
                    
                
 
            }
            catch (Exception)
            {
                
                throw;
            }
        }
        public IEnumerable<Booking> GetBookings(DateTime start, DateTime end, int userId, int roomId, bool isCanceled)
        {
            IBookingComponent component = new BookingComponent();

            var bookings = component.GetListByFilters(start, end, userId, roomId, isCanceled);

            return bookings;
        }
        private void RefreshGridView()
        {

            User user = (User)Session["UserSession"];
            IBookingComponent bookingservice = new BookingComponent();
            GridView1.DataSource = bookingservice.GetUserOwnBooking(user.ID);
            GridView1.DataBind();
        }
        protected void btnviewbooking_Click(object sender, EventArgs e)
        {
            //IUserService userservice = new UserService();
            //IBookingService bookingservice = new BookingService();
            //User user = new User();
            //Booking booking = new Booking();
            //booking.RefNum = txtrefnum.Text;
            //try
            //{
            //    bookingservice.ViewBooking(ref booking);
            //    lblID.Text = booking.ID.ToString();
            //    lblLoginID.Text = user.LoginID;
            //   txtroomid.Text = booking.RoomID.ToString();
            //    txtstartdate.Text = booking.StartDate.ToString();
            //    txtenddate.Text = booking.EndDate.ToString();
            //}
            //catch (Exception ex)
            //{
            //    if (IsPostBack)
            //    {
            //        lblstatus.Text = ex.Message;
            //    }
            //}
            IBookingComponent bookingservice = new BookingComponent();
            //   User user = new User();
            Booking booking = new Booking();
            try
            {

                //booking.ID = int.Parse(lblID.Text);
                //booking.RoomID = (int.Parse)(txtroomid.Text);
                //booking.StartDate = DateTime.Parse(txtstartdate.Text);
                //booking.EndDate = DateTime.Parse(txtenddate.Text);
                booking.RefNum = txtrefnum.Text;
                bookingservice.ViewBooking(ref booking);
                txtroomid.Text = booking.RoomID.ToString();
                txtstartdate.Text = booking.StartDate.ToString();
                txtenddate.Text = booking.EndDate.ToString();


                // lblstatus.Text = "Your Booking has been update!" + booking.RefNum;





            }
            catch (Exception)
            {

                throw;
            }
           
           
        }
        public bool CancelBooking(Booking booking)
        {
            IBookingComponent component = new BookingComponent();

            try
            {
                component.CancelBooking(booking);
            }
            catch(Exception e)
            {
                throw new FaultException(e.Message);
            }
            return true;
        }
 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
 {
     try
     {
         using (IBookingComponent bookingservice = new BookingComponent())
         {
             Booking booking = new Booking();
             booking.ID = int.Parse(GridView1.DataKeys[Int32.Parse(e.CommandArgument.ToString())].Value.ToString());
             bookingservice.CancelBooking(booking);
             lblID.Text = "Your Booking has been cnaceled";
             RefreshGridView();
            
         }
     }
     catch (Exception ex)
     {
         
         throw new Exception (ex.Message);
     }
 }
        public Booking SaveBooking(Booking booking)
        {
            IBookingComponent component = new BookingComponent();

            try
            {
                component.Save(booking);
            }
            catch (RoomClashException e)
            {
                var fault = new RoomClashFault() { Clashes = e.Clashes };
                throw new FaultException<RoomClashFault>(fault);
            }
            catch (AssetClashException e)
            {
                var fault = new AssetClashFault() { Clashes = e.Clashes };
                throw new FaultException<AssetClashFault>(fault);
            }
            catch (Exception e)
            {
                throw new FaultException(e.Message);
            }
            return booking;
        }
 public IEnumerable<string> getBookedItem(Booking booking)
 {
     IBookingComponent component = new BookingComponent();
     var clashes = component.getBookedItem(booking);
     return clashes;
 }
 public IEnumerable<Booking> CheckAssetAvailability(Booking booking)
 {
     IBookingComponent component = new BookingComponent();
     var clashes = component.CheckAssetAvailability(booking);
     return clashes;
 }
        protected void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                BookingComponent bookServ = new BookingComponent();

                Booking detail = new Booking();

                detail.ID = 0;
                detail.IsCanceled = false;
                //detail.UserID = 3;
                detail.UserID = 3;
                detail.StartDate = calStartDate.SelectedDate;
                detail.EndDate = calEndDate.SelectedDate;

                if (ddlRoom.SelectedIndex > 0)
                    detail.RoomID = int.Parse(ddlRoom.SelectedValue);

                if (lstSelectedAsset.Items.Count > 0)
                {
                    //detail.AssetBooked = new List<AssetBooking>();

                    foreach (ListItem selectedItem in lstSelectedAsset.Items)
                    {
                        AssetBooking bookAsset = new AssetBooking();
                        bookAsset.Status = true;
                        bookAsset.AssetID = int.Parse(selectedItem.Value);

                        detail.AssetBookings.Add(bookAsset);
                    }
                }

                bookServ.Save(detail);

                lblMessage.Text = "Booking created successful, your reference number is <b>" + detail.RefNum + "</b>"; 
            }
            catch (Exception ex)
            {
                lblMessage.Text = "Fail to create booking. " + ex.Message;
            }
        }
 protected void Page_Load(object sender, EventArgs e)
 {
     IBookingComponent bookservice = new BookingComponent();
     GridView1.DataSource = bookservice.GetList();
     GridView1.DataBind();
 }
        protected void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                BookingComponent bookServ = new BookingComponent();

                Booking detail = new Booking();

                detail.ID = int.Parse(lblID.Text);
                detail.IsCanceled = false;
                //detail.UserID = 3;
                detail.UserID = 3;
                detail.RefNum = txtRefNum.Text.Trim();
                detail.StartDate = calStartDate.SelectedDate;
                detail.EndDate = calEndDate.SelectedDate;

                if (ddlRoom.SelectedIndex > 0)
                    detail.RoomID = int.Parse(ddlRoom.SelectedValue);
                else
                    detail.RoomID = 0;

                if (lstSelectedAsset.Items.Count > 0)
                {
                    //detail.AssetBooked = new List<AssetBooking>();

                    foreach (ListItem selectedItem in lstSelectedAsset.Items)
                    {
                        AssetBooking bookAsset = new AssetBooking();
                        bookAsset.Status = true;
                        bookAsset.AssetID = int.Parse(selectedItem.Value);

                        detail.AssetBookings.Add(bookAsset);
                    }
                }

                bookServ.Save(detail);
                lblMessage.Text = "Update successful";
            }
            catch (Exception)
            {
                lblMessage.Text = "Update fail";
            }
        }
 protected void btncancel_Click(object sender, EventArgs e)
 {
     IBookingComponent bookingservice = new BookingComponent();
     Booking booking = new Booking();
     try
     {
         booking.ID = int.Parse(lblID.Text);
         bookingservice.CancelBooking(booking);
         lblstatus.Text = "Your Booking has been successfully canceled.";
     }
     catch (Exception)
     {
         
         throw;
     }
 }