static function _validate_cart_rental($data)
 {
     if (is_array($data) && count($data)) {
         $result = ValidateWooCheckout::_get_order_rental($data['rental_id'], $data['check_in'], $data['check_out']);
         $total_rental = intval(get_post_meta($data['rental_id'], 'rental_number', true));
         if ($total_rental <= 0) {
             $total_rental = 0;
         }
         for ($i = $data['check_in']; $i <= $data['check_out']; $i = strtotime('+1 day', $i)) {
             $number_room = 0;
             $number_room_cart = 1;
             if (is_array($result) && count($result)) {
                 foreach ($result as $item) {
                     if ($i >= intval($item['check_in_timestamp']) && $i <= intval($item['check_out_timestamp'])) {
                         $number_room += 1;
                     }
                 }
                 if ($number_room_cart + $number_room > $total_rental) {
                     $free_room = $total_rental - $number_room;
                     $_SESSION['flash_validate_checkout'] = '<p class="bg-danger" style="padding: 10px 5px">' . sprintf(__('This <b>%s</b> rental has only %s rental(s) available on <b>%s</b>.', ST_TEXTDOMAIN), get_the_title($data['rental_id']), $free_room, date(TravelHelper::getDateFormat(), $i)) . '</p>';
                     return false;
                 }
             } else {
                 if ($number_room_cart > $total_rental) {
                     $_SESSION['flash_validate_checkout'] = '<p class="bg-danger" style="padding: 10px 5px">' . sprintf(__('This <b>%s</b> rental has only %s rental(s) available on <b>%s</b>.', ST_TEXTDOMAIN), get_the_title($data['rental_id']), $total_rental, date(TravelHelper::getDateFormat(), $i)) . '</p>';
                     return false;
                 }
             }
         }
     }
     return true;
 }
 public function _before_checkout_process()
 {
     global $woocommerce;
     $cart_url = $woocommerce->cart->get_cart_url();
     $_SESSION['flash_validate_checkout'] = '';
     $cart = WC()->cart->get_cart();
     $cart_hotel = ValidateWooCheckout::get_cart_data($cart, 'st_hotel');
     $validate_hotel = ValidateWooCheckout::check_validate_hotel($cart_hotel);
     if (!$validate_hotel) {
         $data = array('result' => 'failure', 'messages' => '<div class="error-checkout mb20">' . $_SESSION['flash_validate_checkout'] . '<a href="' . $cart_url . '">' . __('Back to Cart page.', ST_TEXTDOMAIN) . '</a></div>', 'refresh' => 'false', 'reload' => 'false');
         $_SESSION['flash_validate_checkout'] = '';
         echo json_encode($data);
         die;
     }
     $cart_rental = ValidateWooCheckout::get_cart_data($cart, 'st_rental');
     $validate_rental = ValidateWooCheckout::check_validate_rental($cart_rental);
     if (!$validate_rental) {
         $data = array('result' => 'failure', 'messages' => '<div class="error-checkout mb20">' . $_SESSION['flash_validate_checkout'] . '<a href="' . $cart_url . '">' . __('Back to Cart page.', ST_TEXTDOMAIN) . '</a></div>', 'refresh' => 'false', 'reload' => 'false');
         $_SESSION['flash_validate_checkout'] = '';
         echo json_encode($data);
         die;
     }
     $cart_tour = ValidateWooCheckout::get_cart_data($cart, 'st_tours');
     $validate_tour = ValidateWooCheckout::check_validate_tour($cart_tour);
     if (!$validate_tour) {
         $data = array('result' => 'failure', 'messages' => '<div class="error-checkout mb20">' . $_SESSION['flash_validate_checkout'] . '<a href="' . $cart_url . '">' . __('Back to Cart page.', ST_TEXTDOMAIN) . '</a></div>', 'refresh' => 'false', 'reload' => 'false');
         $_SESSION['flash_validate_checkout'] = '';
         echo json_encode($data);
         die;
     }
     $cart_holiday = ValidateWooCheckout::get_cart_data($cart, 'st_holidays');
     $validate_holiday = ValidateWooCheckout::check_validate_holiday($cart_holiday);
     if (!$validate_holiday) {
         $data = array('result' => 'failure', 'messages' => '<div class="error-checkout mb20">' . $_SESSION['flash_validate_checkout'] . '<a href="' . $cart_url . '">' . __('Back to Cart page.', ST_TEXTDOMAIN) . '</a></div>', 'refresh' => 'false', 'reload' => 'false');
         $_SESSION['flash_validate_checkout'] = '';
         echo json_encode($data);
         die;
     }
     $cart_activity = ValidateWooCheckout::get_cart_data($cart, 'st_activity');
     $validate_activity = ValidateWooCheckout::check_validate_activity($cart_activity);
     if (!$validate_activity) {
         $data = array('result' => 'failure', 'messages' => '<div class="error-checkout mb20">' . $_SESSION['flash_validate_checkout'] . '<a href="' . $cart_url . '">' . __('Back to Cart page.', ST_TEXTDOMAIN) . '</a></div>', 'refresh' => 'false', 'reload' => 'false');
         $_SESSION['flash_validate_checkout'] = '';
         echo json_encode($data);
         die;
     }
     $cart_cars = ValidateWooCheckout::get_cart_data($cart, 'st_cars');
     $validate_cars = ValidateWooCheckout::check_validate_car($cart_cars);
     if (!$validate_cars) {
         $data = array('result' => 'failure', 'messages' => '<div class="error-checkout mb20">' . $_SESSION['flash_validate_checkout'] . '<a href="' . $cart_url . '">' . __('Back to Cart page.', ST_TEXTDOMAIN) . '</a></div>', 'refresh' => 'false', 'reload' => 'false');
         $_SESSION['flash_validate_checkout'] = '';
         echo json_encode($data);
         die;
     }
 }
 static function check_validate_hotel($data)
 {
     if (is_array($data) && count($data)) {
         foreach ($data as $key => $val) {
             $room_id = $key;
             $hotel_id = get_post_meta($room_id, 'room_parent', true);
             $allow_full_day = get_post_meta($hotel_id, 'allow_full_day', true);
             if (!$allow_full_day || $allow_full_day == '') {
                 $allow_full_day = 'on';
             }
             $total_room = intval(get_post_meta($key, 'number_room', true));
             if ($total_room <= 0) {
                 $total_room = 0;
             }
             $result = ValidateWooCheckout::_get_order_hotel($key, $val['min'], $val['max']);
             for ($i = intval($val['min']); $i <= intval($val['max']); $i = strtotime('+1 day', $i)) {
                 $number_room = 0;
                 $number_room_cart = 0;
                 if (is_array($result) && count($result)) {
                     foreach ($result as $item) {
                         if ($allow_full_day == 'on') {
                             if ($i >= intval($item['check_in_timestamp']) && $i <= intval($item['check_out_timestamp'])) {
                                 $number_room += $item['number_room'];
                             }
                         } else {
                             if ($i >= intval($item['check_in_timestamp']) && $i < intval($item['check_out_timestamp'])) {
                                 $number_room += $item['number_room'];
                             }
                         }
                     }
                     foreach ($val['date'] as $key => $date) {
                         if ($i >= intval($date['check_in']) && $i <= intval($date['check_out'])) {
                             $number_room_cart += $val['room_num_search'][$key];
                         }
                     }
                     if ($number_room_cart + $number_room > $total_room) {
                         $free_room = $total_room - $number_room;
                         $_SESSION['flash_validate_checkout'] = '<p class="bg-danger" style="padding: 10px 5px">' . sprintf(__('The <b>%s</b> room has only %s room(s) available on <b>%s</b>.', ST_TEXTDOMAIN), get_the_title($room_id), $free_room, date(TravelHelper::getDateFormat(), $i)) . '</p>';
                         return false;
                     }
                 } else {
                     $number_room_cart = 0;
                     foreach ($val['date'] as $key => $date) {
                         if ($i >= intval($date['check_in']) && $i <= intval($date['check_out'])) {
                             $number_room_cart += $val['room_num_search'][$key];
                         }
                     }
                     if ($number_room_cart > $total_room) {
                         $_SESSION['flash_validate_checkout'] = '<p class="bg-danger" style="padding: 10px 5px">' . sprintf(__('This <b>%s</b> room has only %s room(s) available on <b>%s</b>.', ST_TEXTDOMAIN), get_the_title($room_id), $total_room, date(TravelHelper::getDateFormat(), $i)) . '</p>';
                         return false;
                     }
                 }
             }
         }
     }
     return true;
 }