/**
  * Writes the details of the reservation in the DB.
  * 
  * @static	true
  * @access	public
  * @param	array 	$arrData
  * @return	boolean
  * @since	1.0.0
  */
 public static function addReservationDetails($arrData, $userID, $objMailChimp, $userType = 'website_user')
 {
     //creating a new instance of the table
     $reservation = new ReservationDetails();
     $date = date_create($arrData['reservationTime']);
     $arrData['reservationTime'] = date_format($date, "h:i A");
     //initializing the data
     $reservation->reservation_status = 'new';
     $reservation->reservation_date = $arrData['reservationDate'];
     $reservation->reservation_time = $arrData['reservationTime'];
     $reservation->no_of_persons = $arrData['partySize'];
     $reservation->guest_name = $arrData['guestName'];
     $reservation->guest_email = $arrData['guestEmail'];
     $reservation->guest_phone = $arrData['phone'];
     $reservation->reservation_type = $arrData['reservationType'];
     $reservation->order_amount = 0;
     $reservation->user_id = $userID;
     $reservation->added_by = $userType;
     //setting up the variables that may be present
     if (isset($arrData['specialRequest'])) {
         $reservation->special_request = $arrData['specialRequest'];
     }
     if (isset($arrData['giftCardID'])) {
         $reservation->giftcard_id = $arrData['giftCardID'];
     }
     //get the user city for mailchimp
     if (isset($reservation->user_id)) {
         $city_name = self::getLocationOfUser($reservation->user_id);
     }
     //setting up the value of the location id as per type
     if ($arrData['reservationType'] == 'alacarte') {
         //reading the resturants detail
         $aLaCarteDetail = self::readVendorDetailByLocationID($arrData['vendorLocationID']);
         $reservation->points_awarded = $aLaCarteDetail['reward_point'];
         $reservation->vendor_location_id = $arrData['vendorLocationID'];
         $reservation->product_vendor_location_id = 0;
     } else {
         if ($arrData['reservationType'] == 'experience') {
             //reading the product detail
             $productDetail = self::readProductDetailByProductVendorLocationID($arrData['vendorLocationID']);
             $arrResult = self::readProductIdAndVendorLocation($arrData['vendorLocationID']);
             //print_r($arrResult);die;
             $reservation->points_awarded = $productDetail['reward_point'];
             $reservation->vendor_location_id = $arrResult->vendor_location_id;
             $reservation->product_id = $arrResult->product_id;
             $reservation->product_vendor_location_id = $arrData['vendorLocationID'];
         }
     }
     #saving the information into the DB
     $savedData = $reservation->save();
     if ($savedData) {
         $reservation_id = ReservationDetails::where('user_id', '=', $userID)->where('reservation_date', '=', $arrData['reservationDate'])->where('reservation_time', '=', $arrData['reservationTime'])->where('reservation_status', '!=', 'cancel')->select('id')->first();
         //Reading user detail to get membership number(GIU_Membership_ID)
         $token = $_SERVER['HTTP_X_WOW_TOKEN'];
         $userDetail = Profile::getUserProfile($token);
         if ($arrData['reservationType'] == 'alacarte') {
             $arrResponse['status'] = Config::get('constants.API_SUCCESS');
             $arrResponse['data']['reservation_id'] = $reservation_id['id'];
             $arrResponse['data']['name'] = $aLaCarteDetail['name'];
             $arrResponse['data']['url'] = URL::to('/') . '/alacarte/' . $aLaCarteDetail['vl_id'];
             $arrResponse['data']['reservationDate'] = $arrData['reservationDate'];
             $arrResponse['data']['reservationTime'] = $arrData['reservationTime'];
             $arrResponse['data']['partySize'] = $arrData['partySize'];
             $arrResponse['data']['reward_point'] = $aLaCarteDetail['reward_point'];
             //Increment the Reservation count by 1
             $reservationCount = self::incrementReservationCount($userID, $arrData['reservationType']);
             //Increment reward point in user table
             DB::table('users')->where('id', $userID)->increment('points_earned', $aLaCarteDetail['reward_point']);
             //Insert record for new reward point
             $storeRewardPoint = self::storeRewardPoint($userID, $aLaCarteDetail['reward_point'], $reservation_id['id']);
             //Reading offers detail
             $offersResult = self::getSpecialOfferDetail($arrData['vendorLocationID']);
             //for the new db structure support
             $combined_date_and_time = $arrData['reservationDate'] . ' ' . $arrData['reservationTime'];
             $newDb['attributes']['reserv_datetime'] = Carbon::createFromFormat('Y-m-d H:i A', $combined_date_and_time)->toDateTimeString();
             $newDb['attributes']['no_of_people_booked'] = $arrData['partySize'];
             $newDb['attributes']['cust_name'] = $arrData['guestName'];
             $newDb['attributes']['email'] = $arrData['guestEmail'];
             $newDb['attributes']['contact_no'] = $arrData['phone'];
             $newDb['attributes']['reserv_type'] = "Alacarte";
             //$newDb['attributes']['gift_card_id_reserv'] = $dataPost['giftCardID'];
             $newDb['attributes']['loyalty_points_awarded'] = $aLaCarteDetail['reward_point'];
             $newDb['attributes']['special_request'] = isset($arrData['specialRequest']) && !empty($arrData['specialRequest']) ? $arrData['specialRequest'] : "";
             $newDb['attributes']['experience'] = $aLaCarteDetail['name'] . ' - Ala Carte';
             $newDb['attributes']['api_added'] = "Mobile";
             $newDb['attributes']['giu_membership_id'] = $userDetail['data']['membership_number'];
             $newDb['attributes']['outlet'] = $aLaCarteDetail['location'];
             $newDb['attributes']['auto_reservation'] = "Not available";
             $newDb['attributes']['ar_confirmation_id'] = "0";
             $newDb['attributes']['alternate_id'] = 'A' . sprintf("%06d", $reservation_id['id']);
             $newDb['attributes']['reservation_status_id'] = 1;
             $newDb['userdetails']['user_id'] = $userID;
             $newDb['userdetails']['status'] = 1;
             //print_r($newDb);die;
             $reservDetails = new ReservationModel();
             $newDbStatus = $reservDetails->updateAttributes($reservation_id['id'], $newDb);
             //print_r($newDbStatus);die;
             /*TODO: Add the status of success check and include added_by and transaction_id attributes */
             //echo "alacarte success";die;
             //Mail by mailchimp
             $mailStatus = self::mailByMailChimp($arrData, $userID, $objMailChimp, $city_name);
             $zoho_data = array('Name' => $arrData['guestName'], 'Email_ids' => $arrData['guestEmail'], 'Contact' => $arrData['phone'], 'Experience_Title' => $aLaCarteDetail['name'] . ' - Ala Carte', 'No_of_People' => $arrData['partySize'], 'Date_of_Visit' => date('d-M-Y', strtotime($arrData['reservationDate'])), 'Time' => date("g:ia", strtotime($arrData['reservationTime'])), 'Alternate_ID' => 'A' . sprintf("%06d", $reservation_id['id']), 'Special_Request' => isset($arrData['specialRequest']) && !empty($arrData['specialRequest']) ? $arrData['specialRequest'] : "", 'Type' => "Alacarte", 'API_added' => 'Mobile', 'GIU_Membership_ID' => $userDetail['data']['membership_number'], 'Outlet' => $aLaCarteDetail['location'], 'AR_Confirmation_ID' => '0', 'Auto_Reservation' => 'Not available', 'Special_offer_title' => $offersResult['special_offer_title'], 'Special_offer_desc' => $offersResult['special_offer_desc'], 'Calling_option' => 'No');
             //Calling zoho api method
             $zoho_res = Self::zohoAddBooking($zoho_data);
             //Call zoho send mail method
             Self::zohoSendMail($zoho_res, $zoho_data, $reservation_id['id'], $arrData);
         } else {
             if ($arrData['reservationType'] == 'experience') {
                 $arrResponse['status'] = Config::get('constants.API_SUCCESS');
                 if (array_key_exists('addon', $arrData) && !empty($arrData['addon'])) {
                     //self::addReservationAddonDetails($reservation->id, $arrData['addon']);
                     //Reading value for addon
                     $count = $arrData['addon'];
                     if ($count == "") {
                         $arrData['addon'] = array();
                     }
                     // echo "<pre>"; print_r($dataPost);
                     $addonsText = '';
                     foreach ($arrData['addon'] as $key => $value) {
                         if ($value['qty'] > 0) {
                             //echo "prod id = ".$prod_id." , qty = ".$qty;
                             $prod_id = $value['prod_id'];
                             $addonsDetails = DB::select("SELECT attribute_value from product_attributes_text where product_id = {$prod_id} and product_attribute_id = 17");
                             //echo "<pre>"; print_r($addonsDetails);
                             $addonsText .= $addonsDetails[0]->attribute_value . " (" . $value['qty'] . ") , ";
                         }
                     }
                     /*
                     			        foreach($arrData['addon'] as $prod_id => $qty) {
                     			            if($qty > 0){
                     			                //echo "prod id = ".$prod_id." , qty = ".$qty;
                     			                $addonsDetails = DB::select("SELECT attribute_value from product_attributes_text where product_id = $prod_id and product_attribute_id = 17");
                     
                     			                //echo "<pre>"; print_r($addonsDetails);
                     			                $addonsText .= $addonsDetails[0]->attribute_value." (".$qty.") , ";
                     			            }
                     
                     }
                     */
                     $finalAddontext = isset($addonsText) && $addonsText != "" ? "Addons: " . $addonsText : " ";
                     $special_request = isset($arrData['specialRequest']) && !empty($arrData['specialRequest']) ? "Spl Req: " . $arrData['specialRequest'] : "";
                     $arrData['addons_special_request'] = $finalAddontext . " " . $special_request;
                     //---------------------------------------------------------------------------
                 } else {
                     $finalAddontext = " ";
                     $special_request = isset($arrData['specialRequest']) && !empty($arrData['specialRequest']) ? "Spl Req: " . $arrData['specialRequest'] : "";
                     $arrData['addons_special_request'] = $finalAddontext . " " . $special_request;
                 }
                 $arrResponse['data']['reservation_id'] = $reservation_id['id'];
                 $arrResponse['data']['name'] = $productDetail['name'];
                 $arrResponse['data']['url'] = URL::to('/') . '/experience/' . $productDetail['id'];
                 $arrResponse['data']['reservationDate'] = $arrData['reservationDate'];
                 $arrResponse['data']['reservationTime'] = $arrData['reservationTime'];
                 $arrResponse['data']['partySize'] = $arrData['partySize'];
                 $arrResponse['data']['reward_point'] = $productDetail['reward_point'];
                 //Increment the Reservation count by 1
                 $reservationCount = self::incrementReservationCount($userID, $arrData['reservationType']);
                 //Insert reward point in user table
                 DB::table('users')->where('id', $userID)->increment('points_earned', $productDetail['reward_point']);
                 //Insert record for new reward point
                 $storeRewardPoint = self::storeRewardPoint($userID, $productDetail['reward_point'], $reservation_id['id']);
                 $arrData['giftCardID'] = isset($arrData['giftCardID']) && !empty($arrData['giftCardID']) ? $arrData['giftCardID'] : "";
                 //for the new db structure support
                 $combined_date_and_time = $arrData['reservationDate'] . ' ' . $arrData['reservationTime'];
                 $newDb['attributes']['reserv_datetime'] = Carbon::createFromFormat('Y-m-d H:i A', $combined_date_and_time)->toDateTimeString();
                 $newDb['attributes']['no_of_people_booked'] = $arrData['partySize'];
                 $newDb['attributes']['cust_name'] = $arrData['guestName'];
                 $newDb['attributes']['email'] = $arrData['guestEmail'];
                 $newDb['attributes']['contact_no'] = $arrData['phone'];
                 $newDb['attributes']['reserv_type'] = "Experience";
                 $newDb['attributes']['gift_card_id_reserv'] = $arrData['giftCardID'];
                 $newDb['attributes']['loyalty_points_awarded'] = $productDetail['reward_point'];
                 $newDb['attributes']['special_request'] = $arrData['addons_special_request'];
                 $newDb['attributes']['experience'] = $productDetail['vendor_name'] . ' - ' . $productDetail['descriptive_title'];
                 $newDb['attributes']['api_added'] = "Mobile";
                 $newDb['attributes']['giu_membership_id'] = $userDetail['data']['membership_number'];
                 $newDb['attributes']['outlet'] = $productDetail['location'];
                 $newDb['attributes']['auto_reservation'] = "Not available";
                 $newDb['attributes']['ar_confirmation_id'] = "0";
                 $newDb['attributes']['alternate_id'] = 'E' . sprintf("%06d", $reservation_id['id']);
                 $newDb['attributes']['reservation_status_id'] = 1;
                 $newDb['userdetails']['user_id'] = $userID;
                 $newDb['userdetails']['status'] = 1;
                 $newDb['userdetails']['addons'] = isset($arrData['addon']) ? $arrData['addon'] : "";
                 $newDb['userdetails']['mobile'] = 1;
                 //print_r($newDb);die;
                 $reservDetails = new ReservationModel();
                 $newDbStatus = $reservDetails->updateAttributes($reservation_id['id'], $newDb);
                 //print_r($newDbStatus);die;
                 /*TODO: Add the status of success check and include added_by and transaction_id attributes */
                 //echo "experience success";die;
                 //Mail by mailchimp
                 $mailStatus = self::mailByMailChimp($arrData, $userID, $objMailChimp, $city_name);
                 $zoho_data = array('Name' => $arrData['guestName'], 'Email_ids' => $arrData['guestEmail'], 'Contact' => $arrData['phone'], 'Experience_Title' => $productDetail['vendor_name'] . ' - ' . $productDetail['descriptive_title'], 'No_of_People' => $arrData['partySize'], 'Date_of_Visit' => date('d-M-Y', strtotime($arrData['reservationDate'])), 'Time' => date("g:ia", strtotime($arrData['reservationTime'])), 'Alternate_ID' => 'E' . sprintf("%06d", $reservation_id['id']), 'Special_Request' => $arrData['addons_special_request'], 'Type' => "Experience", 'API_added' => 'Mobile', 'GIU_Membership_ID' => $userDetail['data']['membership_number'], 'Outlet' => $productDetail['location'], 'AR_Confirmation_ID' => '0', 'Auto_Reservation' => 'Not available', 'Calling_option' => 'No', 'gift_card_id_from_reservation' => $arrData['giftCardID']);
                 //Calling zoho api method
                 $zoho_res = Self::zohoAddBooking($zoho_data);
                 //Call zoho send mail method
                 Self::zohoSendMail($zoho_res, $zoho_data, $reservation_id['id'], $arrData);
                 //code for generating the payu hash
                 if (self::isPaidExperience($arrResult->product_id)) {
                     //its a paid product so generating the hash
                     if (!array_key_exists('total_amount', $arrData)) {
                         $arrData['total_amount'] = 0;
                     }
                     $arrPayUData = array('guestName' => $arrData['guestName'], 'reservationID' => $reservation->id, 'amount' => $arrData['total_amount'], 'shortDescription' => $productDetail['descriptive_title'], 'email' => $arrData['guestEmail'], 'userCredentials' => $arrData['userCredentials']);
                     $arrHash = Payment::getPayUHash($arrPayUData);
                     //setting up the hash value
                     $arrResponse['data']['hash'] = array('paymentHash' => $arrHash['paymentHash'], 'paymentRelatedDetailsForMobileSDKHash' => array_key_exists('paymentRelatedDetailsForMobileSDKHash', $arrHash) ? $arrHash['paymentRelatedDetailsForMobileSDKHash'] : '', 'getUserCardsHash' => array_key_exists('getUserCardsHash', $arrHash) ? $arrHash['getUserCardsHash'] : '', 'saveUserCardHash' => array_key_exists('saveUserCardHash', $arrHash) ? $arrHash['saveUserCardHash'] : '');
                 }
             } else {
                 $arrResponse['status'] = Config::get('constants.API_ERROR');
             }
         }
         return $arrResponse;
     }
     return FALSE;
 }