/*
  On Click Event for the Edit Employee Button Click
  */
 protected void EditEmployeeProfile_Click(object sender, EventArgs e)
 {
     if (IsValid)
     {
         /*
          Depending on the UserId we update the value in the UserAccount Table
          */
         PlanetFitnessDataContext _dataContext = new PlanetFitnessDataContext();
         String _userAccountId = Session["ProfileId"].ToString();
         var _userAccount = (from userAccountData in _dataContext.UserAccounts
                             where userAccountData.UserAccountID_in.Equals(_userAccountId)
                             select userAccountData).FirstOrDefault();
         _userAccount.FirstName_vc = FirstName.Text;
         _userAccount.LastName_vc = LastName.Text;
         _userAccount.Address_vc = Address.Text;
         _userAccount.PhoneNumber_vc = PhoneNumber.Text;
         _userAccount.EmailId_vc = Email.Text;
         _userAccount.DOB_date = Convert.ToDateTime(DateOfBirthOne.Text);
         try
         {
             _dataContext.SubmitChanges();
             Response.Redirect("/Employee/EmployeeProfile?editProfile=true");
         }
         catch (Exception exception)
         {
             ErrorMessage.Text = "Something went wrong..Please try again.";
             Console.WriteLine(exception);
         }
     }
 }
 /*
  OnClick Event to handle Delete Button in Grid
  */
 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
 {
     /*
      Depending on the value in the session we delete the particular Slot and update the Bill Amount
      */
     var _userId = Convert.ToInt32(Session["UserId"]);
     PlanetFitnessDataContext _dataContext = new PlanetFitnessDataContext();
     var _slotInformationId = Convert.ToInt32(GridView1.Rows[e.RowIndex].Cells[7].Text.Trim());
     var _slotId = Convert.ToInt32(GridView1.Rows[e.RowIndex].Cells[6].Text.Trim());
     var _member = (from member in _dataContext.Members where member.FK_UserAccount_Member_in.Equals(_userId) select member).FirstOrDefault();
     var _deleteQuery = (from slotInformation in _dataContext.SlotInformations where slotInformation.SlotInformationID_in.Equals(_slotInformationId) select slotInformation).FirstOrDefault();
     var _updateQuery = (from slot in _dataContext.Slots where slot.SlotID_in.Equals(_slotId) select slot).FirstOrDefault();
     _updateQuery.AvailableSlots_in = _updateQuery.AvailableSlots_in + 1;
     _member.BillAmount_de = _member.BillAmount_de - Decimal.Parse("20.55");
     try
     {
         _dataContext.SlotInformations.DeleteOnSubmit(_deleteQuery);
         _dataContext.SubmitChanges();
         Response.Redirect("/Member/BookingInformation?bookingStatus=false");
     }
     catch (Exception exception)
     {
         ErrorMessage.Text = "Something went wrong..Please try again.";
         Console.WriteLine(exception);
     }
 }
 /*
  On Click event to Make Payment Button Click
  */
 protected void MakePayment_Click(object sender, EventArgs e)
 {
     /*
      Only Perform some action if form is validated and is valid
      */
     if (IsValid)
     {
         var _expDate = "";
         var _expYear = "";
         decimal _amount = 0;
         /*
          Check for validity of the Year and month Values
          */
         if (ExpiryDate.Text != "")
         {
             if (ExpiryDate.Text.Length == 1)
                 _expDate = '0' + ExpiryDate.Text;
             else
                 _expDate = ExpiryDate.Text;
         }
         if (ExpiryDateYear.Text != "")
         {
             _expYear = ExpiryDateYear.Text.Substring(2, 2);
         }
         /*
          Check for validity of Bill Amount
          */
         try
         {
             _amount = Decimal.Parse(Amount.Text);
         }
         catch (Exception exception)
         {
             ErrorMessage.Text = "Should be a decimal value";
             Console.WriteLine(exception);
         }
         PlanetFitnessDataContext _dataContext = new PlanetFitnessDataContext();
         var _userId = Convert.ToInt32(Session["UserId"]);
         var _validAmount = (from member in _dataContext.Members where member.FK_UserAccount_Member_in.Equals(_userId) select member).FirstOrDefault().BillAmount_de;
         /*
         Check whether Bill Amount is valid that is less than or equal to Actual Bill Amount
         */
         var _compare = Decimal.Compare(_amount, _validAmount);
         label1.Text = _compare.ToString();
         if (_compare > 0)
         {
             ErrorMessage.Text = "Amount should be less than amount to be paid";
         }
         else
         {
             var _query = (from cardDetails in _dataContext.CardDetails
                           where cardDetails.CardNo_in.Equals(CardNumber.Text)
                           && cardDetails.ExpDate_vc.Equals(_expDate + "/" + _expYear)
                           && cardDetails.FK_Member_CardDetails_in.Equals((from member in _dataContext.Members
                                                                           where member.FK_UserAccount_Member_in.
                                                                           Equals(Session["UserId"].ToString())
                                                                           select member).FirstOrDefault().MemberID_in)
                           select cardDetails);
             var _memberDetails = (from member in _dataContext.Members
                                   where member.FK_UserAccount_Member_in.
                                   Equals(Session["UserId"].ToString())
                                   select member).FirstOrDefault();
             if (_query.Count() != 0)
             {
                 _memberDetails.BillAmount_de = Math.Abs(_validAmount - _amount);
                 _dataContext.SubmitChanges();
                 Response.Redirect("/Member/PaymentSuccessful");
             }
             else
             {
                 ErrorMessage.Text = "Card Details Should be Valid";
             }
         }
     }
 }
        /*
         On Click Event for Edit Slot Button
         */
        protected void EditSlot_Click(object sender, EventArgs e)
        {
            /*
             Only if the form is validated and is valid
             */
            if (IsValid)
            {
                PlanetFitnessDataContext _dataContext = new PlanetFitnessDataContext();
                var _startTime = StartTime.Text;
                var _endTime = EndTime.Text;
                var _slotId = SlotId.Text;
                var _flag = false;
                var _query = (from slots in _dataContext.Slots where slots.SlotID_in.Equals(_slotId) select slots).FirstOrDefault();
                var _slotInformation = (from slotInformation in _dataContext.SlotInformations where slotInformation.FK_Slot_SlotInformation_in.Equals(_slotId) select slotInformation);
                /*
                 If slot being changed is booke dalready it cannot be changed
                 */
                if (Convert.ToInt32(_startTime) < Convert.ToInt32(_endTime))
                {
                    if (_slotInformation.Count() != 0)
                    {
                        ErrorMessage.Text = "Slot has already been booked cannot change the slot";
                    }
                    /*
                     Check if the time values entered is between 8 A.M and 8 P.M
                     */
                    else
                    {
                        if ((Convert.ToInt32(_startTime) < 8) || (Convert.ToInt32(_startTime) > 20))
                            ErrorMessage.Text = "Start Time should be between 8 A.M and 8 P.M";
                        else if ((Convert.ToInt32(_endTime) < 8) || (Convert.ToInt32(_endTime) > 20))
                            ErrorMessage.Text = "End Time should be between 8 A.M and 8 P.M";
                        else if ((Convert.ToInt32(_startTime) - Convert.ToInt32(_endTime)) >= 0)
                            ErrorMessage.Text = "End Time should be greater than Start Time";
                        /*
                         * Convert time to 12 hours format and add A.M or P.M
                         */
                        else
                        {
                            if (Convert.ToInt32(_startTime) > 8 && Convert.ToInt32(_startTime) < 12)
                            {
                                _startTime = _startTime + " A.M";
                                _flag = true;
                            }
                            else if (Convert.ToInt32(_startTime) >= 12 && Convert.ToInt32(_startTime) <= 20)
                            {
                                if (Convert.ToInt32(_startTime) != 12)
                                    _startTime = (Convert.ToInt32(_startTime) - 12).ToString();
                                _startTime = _startTime + " P.M";
                                _flag = true;
                            }
                            if (Convert.ToInt32(_endTime) > 8 && Convert.ToInt32(_endTime) < 12)
                            {
                                _endTime = _endTime + " A.M";
                                _flag = true;
                            }
                            else if (Convert.ToInt32(_endTime) >= 12 && Convert.ToInt32(_endTime) <= 20)
                            {
                                if (Convert.ToInt32(_endTime) != 12)
                                    _endTime = (Convert.ToInt32(_endTime) - 12).ToString();
                                _endTime = _endTime + " P.M";
                                _flag = true;
                            }
                            /*
                             If all the values are valid then update the slot
                             */
                            if (_flag)
                            {
                                _query.AvailableSlots_in = Convert.ToInt32(Availability.Text);
                                _query.StartTime_vc = _startTime;
                                _query.EndTime_vc = _endTime;
                                _query.NumberOfSlots_in = Convert.ToInt32(Availability.Text);
                                _query.FK_Trainer_Slot_in = Convert.ToInt32(Trainer.SelectedValue);
                                try
                                {
                                    _dataContext.SubmitChanges();
                                    Response.Redirect("/Employee/EditSlot?editSlot=true");
                                }
                                catch (Exception exception)
                                {
                                    ErrorMessage.Text = "Something went wrong..Please try again.";
                                    Console.WriteLine(exception);
                                }
                            }

                        }
                    }
                }
                else
                {
                    ErrorMessage.Text = "Start Time should be greater than End Time";
                }
            }
        }
 /*
  On selecting a Radio Button we Book the Slot
  */
 protected void RowSelector_CheckedChanged(object sender, EventArgs e)
 {
     for (int i = 0; i < GridView1.Rows.Count; i++)
     {
         RadioButton rb = (RadioButton)(GridView1.Rows[i].Cells[0].FindControl("radioButton1"));
         /*
          We Check among all the Grid Rows which is checked
          */
         if (rb.Checked == true)
         {
             /*
              We fetch the values from the Grid and insert in the SlotInformation Table and update slot Table
              */
             var _slotId = GridView1.Rows[i].Cells[1].Text;
             var _trainerName = GridView1.Rows[i].Cells[5].Text.Trim();
             var _acivityName = GridView1.Rows[i].Cells[2].Text.Trim();
             rb.Checked = false;
             PlanetFitnessDataContext _dataContext = new PlanetFitnessDataContext();
             UserAccount _userAccount = new UserAccount();
             SlotInformation slotInformation = new SlotInformation();
             Trainer trainer = new Trainer();
             int _userID = Convert.ToInt32(Session["UserId"]);
             var _member = (from member in _dataContext.Members where member.FK_UserAccount_Member_in.Equals(_userID) select member).FirstOrDefault();
             var _query = (from user in _dataContext.UserAccounts where user.UserName_vc.Equals(_trainerName) select user).FirstOrDefault().UserAccountID_in;
             var _queryActivity = (from activity in _dataContext.Activities where activity.Activity_vc.Equals(_acivityName) select activity).FirstOrDefault().ActivityID_in;
             var _querySlot = (from slot in _dataContext.Slots where slot.SlotID_in.Equals(_slotId) select slot).FirstOrDefault();
             _querySlot.AvailableSlots_in = _querySlot.AvailableSlots_in - 1;
             _member.BillAmount_de = _member.BillAmount_de + Decimal.Parse("20.55");
             slotInformation.FK_Slot_SlotInformation_in = Convert.ToInt32(_slotId);
             slotInformation.FK_Member_SlotInformation_in = _member.MemberID_in;
             slotInformation.FK_Activity_SlotInformation_in = _queryActivity;
             try
             {
                 _dataContext.SlotInformations.InsertOnSubmit(slotInformation);
                 _dataContext.SubmitChanges();
                 Response.Redirect("/Member/BookingInformation?bookingStatus=true");
             }
             catch (Exception exception)
             {
                 ErrorMessage.Text = "Something went wrong..Please try again.";
                 Console.WriteLine(exception.InnerException);
             }
         }
     }
 }
 /*
  On Click Event when a Add Slot Button is Clicked
  */
 protected void AddSlot_Click(object sender, EventArgs e)
 {
     /*
      Only if the form is validated and is valid then perform some action
      */
     if (IsValid)
     {
         /*
          Get Start and End Time with out Minutes
          */
         var _startTime = StartTime.Text.Split(':')[0];
         var _endTime = EndTime.Text.Split(':')[0];
         var _flag = false;
         if (_startTime.IndexOf('0') == 0)
             _startTime = _startTime.Substring(1);
         else if (_endTime.IndexOf('0') == 0)
             _endTime = _endTime.Substring(1);
         /*
          verify the Time is between 8 A.M and 8 P.M
          */
         if ((Convert.ToInt32(_startTime) < 8) || (Convert.ToInt32(_startTime) > 20))
             ErrorMessage.Text = "Start Time should be between 8 A.M and 8 P.M";
         else if ((Convert.ToInt32(_endTime) < 8) || (Convert.ToInt32(_endTime) > 20))
             ErrorMessage.Text = "End Time should be between 8 A.M and 8 P.M";
         else if ((Convert.ToInt32(_startTime) - Convert.ToInt32(_endTime)) >= 0)
             ErrorMessage.Text = "End Time should be greater than Start Time";
         /*
          Convert the time to 12 hours format and flag if it is valid
          */
         else
         {
             if (Convert.ToInt32(_startTime) > 8 && Convert.ToInt32(_startTime) < 12)
             {
                 _startTime = _startTime + " A.M";
                 _flag = true;
             }
             else if (Convert.ToInt32(_startTime) >= 12 && Convert.ToInt32(_startTime) <= 20)
             {
                 if (Convert.ToInt32(_startTime) != 12)
                     _startTime = (Convert.ToInt32(_startTime) - 12).ToString();
                 _startTime = _startTime + " P.M";
                 _flag = true;
             }
             if (Convert.ToInt32(_endTime) > 8 && Convert.ToInt32(_endTime) < 12)
             {
                 _endTime = _endTime + " A.M";
                 _flag = true;
             }
             else if (Convert.ToInt32(_endTime) >= 12 && Convert.ToInt32(_endTime) <= 20)
             {
                 if (Convert.ToInt32(_endTime) != 12)
                     _endTime = (Convert.ToInt32(_endTime) - 12).ToString();
                 _endTime = _endTime + " P.M";
                 _flag = true;
             }
         }
         /*
           If a Valid Activity adnd Trainer are selected
          */
         if (Activity.SelectedValue != "" && Trainer.SelectedValue != "")
         {
             /*
              And if time is valid Then insert the values to Database
              */
             if (_flag)
             {
                 PlanetFitnessDataContext _dataContext = new PlanetFitnessDataContext();
                 Slot _slot = new Slot();
                 _slot.NumberOfSlots_in = Convert.ToInt32(Availability.Text);
                 _slot.AvailableSlots_in = Convert.ToInt32(Availability.Text);
                 _slot.FK_Activity_Slot_in = Convert.ToInt32(Activity.SelectedValue);
                 _slot.FK_Trainer_Slot_in = (from userAccount in _dataContext.UserAccounts
                                             join trainer in _dataContext.Trainers on
                                             userAccount.UserAccountID_in equals trainer.FK_UserAccount_Trainer_in
                                             where userAccount.UserAccountID_in.Equals(Trainer.SelectedValue)
                                             select trainer).FirstOrDefault().TrainerID_in;
                 _slot.StartTime_vc = _startTime;
                 _slot.EndTime_vc = _endTime;
                 _dataContext.Slots.InsertOnSubmit(_slot);
                 _dataContext.SubmitChanges();
                 Response.Redirect("/Employee/AddSlot?slotAdded=true");
             }
         }
         else
         {
             ErrorMessage.Text = "Select a valid Activity and Trainer";
         }
     }
 }