function _add_booking()
 {
     if (!check_admin_referer('shb_action', 'shb_field')) {
         die;
     }
     $data = $this->_check_validate();
     if (is_array($data) && count($data)) {
         extract($data);
         $order = array('post_title' => __('Order', ST_TEXTDOMAIN) . ' - ' . date(get_option('date_format')) . ' @ ' . date(get_option('time_format')), 'post_type' => 'st_order', 'post_status' => 'publish');
         $order_id = wp_insert_post($order);
         if ($order_id) {
             $check_out_field = STCart::get_checkout_fields();
             if (!empty($check_out_field)) {
                 foreach ($check_out_field as $field_name => $field_desc) {
                     update_post_meta($order_id, $field_name, STInput::post($field_name));
                 }
             }
             $id_user = get_current_user_id();
             update_post_meta($order_id, 'id_user', $id_user);
             update_post_meta($order_id, 'payment_method', 'st_submit_form');
             $item_price = STPrice::getRentalPriceOnlyCustomPrice($item_id, strtotime($check_in), strtotime($check_out));
             $numberday = TravelHelper::dateDiff($check_in, $check_out);
             $origin_price = $item_price;
             //Extra price
             $extras = STInput::request('extra_price', array());
             $extra_price = STPrice::getExtraPrice($extras, $room_num_search, $numberday);
             $sale_price = STPrice::getSalePrice($item_id, $item_price, strtotime($check_in), strtotime($check_out));
             $price_with_tax = STPrice::getPriceWithTax($sale_price + $extra_price);
             $deposit_money['data'] = array();
             $deposit_money = STPrice::getDepositData($item_id, $deposit_money);
             $deposit_price = STPrice::getDepositPrice($deposit_money['data']['deposit_money'], $price_with_tax, 0);
             if (isset($deposit_money['data']['deposit_money'])) {
                 $total_price = $deposit_price;
             } else {
                 $total_price = $price_with_tax;
             }
             $data_prices = array('origin_price' => $origin_price, 'sale_price' => $sale_price, 'coupon_price' => 0, 'price_with_tax' => $price_with_tax, 'total_price' => $total_price, 'deposit_price' => $deposit_price);
             $item_data = array('item_number' => 1, 'item_id' => $item_id, 'item_price' => $item_price, 'check_in' => $check_in, 'check_out' => $check_out, 'adult_number' => $adult_number, 'child_number' => $child_number, 'total_price' => $total_price, 'data_prices' => $data_prices, 'deposit_money' => $deposit_money['data']['deposit_money'], 'booking_by' => 'admin', 'st_tax' => STPrice::getTax(), 'st_tax_percent' => STPrice::getTax(), 'status' => $_POST['status'], 'currency' => TravelHelper::get_current_currency('symbol'), 'currency_rate' => TravelHelper::get_current_currency('rate'), 'extras' => $extras, 'extra_price' => $extra_price, 'commission' => TravelHelper::get_commission());
             foreach ($item_data as $val => $value) {
                 update_post_meta($order_id, $val, $value);
             }
             if (TravelHelper::checkTableDuplicate('st_rental')) {
                 global $wpdb;
                 $table = $wpdb->prefix . 'st_order_item_meta';
                 $g_post = get_post($item_id);
                 $partner_id = $g_post ? $g_post->post_author : '';
                 global $sitepress;
                 if ($sitepress) {
                     $post_type = get_post_type($st_booking_id);
                     if ($post_type == 'st_hotel') {
                         $post_type = 'hotel_room';
                         $id = $room_id;
                     } else {
                         $id = $st_booking_id;
                     }
                     $lang_code = $sitepress->get_default_language();
                     $origin_id = icl_object_id($id, $post_type, true, $lang_code);
                 } else {
                     $origin_id = $st_booking_id;
                 }
                 $data = array('order_item_id' => $order_id, 'type' => 'normal_booking', 'check_in' => $check_in, 'check_out' => $check_out, 'st_booking_post_type' => 'st_rental', 'st_booking_id' => $item_id, 'adult_number' => $adult_number, 'child_number' => $child_number, 'check_in_timestamp' => strtotime($check_in), 'check_out_timestamp' => strtotime($check_out), 'room_num_search' => $room_num_search, 'user_id' => $id_user, 'status' => $_POST['status'], 'wc_order_id' => $order_id, 'partner_id' => $partner_id, 'created' => get_the_date('Y-m-d', $order_id), 'total_order' => $total_price, 'commission' => TravelHelper::get_commission(), 'origin_id' => $origin_id);
                 $wpdb->insert($table, $data);
             }
             do_action('st_booking_success', $order_id);
             //Check email
             $user_name = STInput::post('st_email');
             $user_id = username_exists($user_name);
             if (!$user_id and email_exists($user_name) == false) {
                 $random_password = wp_generate_password($length = 12, $include_standard_special_chars = false);
                 $userdata = array('user_login' => $user_name, 'user_pass' => $random_password, 'user_email' => $user_name, 'first_name' => STInput::post('st_first_name'), 'last_name' => STInput::post('st_last_name'));
                 $user_id = wp_insert_user($userdata);
                 wp_new_user_notification($user_id);
             }
             STCart::send_mail_after_booking($order_id, true);
             STCart::send_email_confirm($order_id);
             wp_safe_redirect(self::$booking_page);
         }
     }
 }
Beispiel #2
0
 function do_add_to_cart()
 {
     $form_validate = TRUE;
     $item_id = intval(STInput::request('item_id', ''));
     if ($item_id <= 0 || get_post_type($item_id) != 'st_rental') {
         STTemplate::set_message(__('This rental is not available.', ST_TEXTDOMAIN), 'danger');
         $form_validate = FALSE;
         return false;
     }
     $check_in = STInput::request('start', '');
     if (empty($check_in)) {
         STTemplate::set_message(__('The check in field is not empty.', ST_TEXTDOMAIN), 'danger');
         $form_validate = FALSE;
         return false;
     }
     $check_in = TravelHelper::convertDateFormat($check_in);
     $check_out = STInput::request('end', '');
     if (empty($check_out)) {
         STTemplate::set_message(__('The check out field is not empty.', ST_TEXTDOMAIN), 'danger');
         $form_validate = FALSE;
         return false;
     }
     $check_out = TravelHelper::convertDateFormat($check_out);
     $today = date('m/d/Y');
     $booking_period = get_post_meta($item_id, 'rentals_booking_period', true);
     if (empty($booking_period) || $booking_period <= 0) {
         $booking_period = 0;
     }
     $period = TravelHelper::dateDiff($today, $check_in);
     $compare = TravelHelper::dateCompare($today, $check_in);
     if ($compare < 0) {
         STTemplate::set_message(__('You can not set check-in date in the past', ST_TEXTDOMAIN), 'danger');
         $form_validate = FALSE;
         return false;
     }
     if ($period < $booking_period) {
         STTemplate::set_message(sprintf(__('This rental allow minimum booking is %d day(s)', ST_TEXTDOMAIN), $booking_period), 'danger');
         $form_validate = FALSE;
         return false;
     }
     $adult_number = intval(STInput::request('adult_number', ''));
     $child_number = intval(STInput::request('child_number', ''));
     $max_adult = intval(get_post_meta($item_id, 'rental_max_adult', true));
     $max_children = intval(get_post_meta($item_id, 'rental_max_children', true));
     if ($adult_number > $max_adult) {
         STTemplate::set_message(sprintf(__('A maximum number of adult(s): %d', ST_TEXTDOMAIN), $max_adult), 'danger');
         $form_validate = FALSE;
         return false;
     }
     if ($child_number > $max_children) {
         STTemplate::set_message(sprintf(__('A maximum number of children: %d', ST_TEXTDOMAIN), $max_children), 'danger');
         $form_validate = FALSE;
         return false;
     }
     $number_room = intval(get_post_meta($item_id, 'rental_number', true));
     $check_in_tmp = date('Y-m-d', strtotime($check_in));
     $check_out_tmp = date('Y-m-d', strtotime($check_out));
     if (!RentalHelper::check_day_cant_order($item_id, $check_in_tmp, $check_out_tmp, 1)) {
         STTemplate::set_message(sprintf(__('This rental is not available from %s to %s.', ST_TEXTDOMAIN), $check_in_tmp, $check_out_tmp), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     if (!RentalHelper::_check_room_available($item_id, $check_in_tmp, $check_out_tmp, 1)) {
         STTemplate::set_message(__('This rental is not available.', ST_TEXTDOMAIN), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     $item_price = STPrice::getRentalPriceOnlyCustomPrice($item_id, strtotime($check_in), strtotime($check_out));
     $extras = STInput::request('extra_price', array());
     $numberday = TravelHelper::dateDiff($check_in, $check_out);
     $extra_price = STPrice::getExtraPrice($extras, 1, $numberday);
     $price_sale = STPrice::getSalePrice($item_id, $item_price, strtotime($check_in), strtotime($check_out));
     $discount_rate = STPrice::get_discount_rate($item_id, strtotime($check_in));
     $data = array('item_price' => $item_price, 'ori_price' => $price_sale + $extra_price, 'check_in' => $check_in, 'check_out' => $check_out, 'adult_number' => $adult_number, 'child_number' => $child_number, 'extras' => $extras, 'extra_price' => $extra_price, 'commission' => TravelHelper::get_commission(), 'discount_rate' => $discount_rate);
     if ($form_validate) {
         $form_validate = apply_filters('st_rental_add_cart_validate', $form_validate);
     }
     if ($form_validate) {
         STCart::add_cart($item_id, 1, $item_price, $data);
     }
     return $form_validate;
 }
            <input id="field-coupon_code" value="<?php 
echo esc_attr($code);
?>
" type="text"
                   class="form-control" name="coupon_code">
        </div>
        <button class="btn btn-primary"
                type="submit"><?php 
_e('Apply Coupon', ST_TEXTDOMAIN);
?>
</button>
    </form>
</div>
<div class="booking-item-payment-total text-right">
    <?php 
$item_price = STPrice::getRentalPriceOnlyCustomPrice($item_id, strtotime($check_in), strtotime($check_out));
$price = $item_price;
$sale_price = STPrice::getSalePrice($item_id, $item_price, strtotime($check_in), strtotime($check_out));
$extra_price = isset($item['data']['extra_price']) ? floatval($item['data']['extra_price']) : 0;
$price_with_tax = STPrice::getPriceWithTax($sale_price + $extra_price);
?>
    <table border="0" class="table_checkout">
        <tr>
            <td class="text-left title">
            <?php 
echo __('Origin Price', ST_TEXTDOMAIN);
?>
            <?php 
$include_tax = STPrice::checkIncludeTax();
if ($include_tax) {
    echo '(' . __('tax included', ST_TEXTDOMAIN) . ')';
Beispiel #4
0
 public function _get_availability_rental_single()
 {
     $list_date = array();
     $rental_id = STInput::request('post_id', '');
     $check_in = STInput::request('start', '');
     $check_out = STInput::request('end', '');
     $year = date('Y', $check_in);
     if (empty($year)) {
         $year = date('Y');
     }
     $year2 = date('Y', $check_out);
     if (empty($year2)) {
         $year2 = date('Y');
     }
     $month = date('m', $check_in);
     if (empty($month)) {
         $month = date('m');
     }
     $month2 = date('m', $check_out);
     if (empty($month2)) {
         $month2 = date('m');
     }
     $result = RentalHelper::_get_full_ordered($rental_id, $month, $month2, $year, $year2);
     $number_rental = intval(get_post_meta($rental_id, 'rental_number', true));
     $min_max = RentalHelper::_get_min_max_date_ordered($rental_id, $year, $year2);
     if (is_array($min_max) && count($min_max) && is_array($result) && count($result)) {
         $disable = array();
         for ($i = intval($min_max['min_date']); $i <= intval($min_max['max_date']); $i = strtotime('+1 day', $i)) {
             $num_rental = 0;
             foreach ($result as $key => $date) {
                 if ($i >= intval($date['check_in_timestamp']) && $i <= intval($date['check_out_timestamp'])) {
                     $num_rental += 1;
                 }
             }
             $disable[$i] = $num_rental;
         }
         if (count($disable)) {
             foreach ($disable as $key => $num_rental) {
                 if (intval($num_rental) >= $number_rental) {
                     $list_date[] = date(TravelHelper::getDateFormat(), $key);
                 }
             }
         }
     }
     $list_date_2 = AvailabilityHelper::_getDisableCustomDateRental($rental_id, $month, $month2, $year, $year2);
     $date1 = strtotime($year . '-' . $month . '-01');
     $date2 = strtotime($year2 . '-' . $month2 . '-01');
     $date2 = strtotime(date('Y-m-t', $date2));
     $today = strtotime(date('Y-m-d'));
     $return = array();
     $booking_period = intval(get_post_meta($rental_id, 'rentals_booking_period', true));
     for ($i = $date1; $i <= $date2; $i = strtotime('+1 day', $i)) {
         $period = TravelHelper::dateDiff(date('Y-m-d', $today), date('Y-m-d', $i));
         $d = date(TravelHelper::getDateFormat(), $i);
         if (in_array($d, $list_date)) {
             // booked
             $return[] = array('start' => date('Y-m-d', $i), 'date' => date('Y-m-d', $i), 'day' => date('d', $i), 'status' => 'booked');
         } else {
             if ($i < $today) {
                 // past
                 $return[] = array('start' => date('Y-m-d', $i), 'date' => date('Y-m-d', $i), 'day' => date('d', $i), 'status' => 'past');
             } else {
                 // disabled
                 if (in_array($d, $list_date_2)) {
                     $return[] = array('start' => date('Y-m-d', $i), 'date' => date('Y-m-d', $i), 'day' => date('d', $i), 'status' => 'disabled');
                 } else {
                     if ($period < $booking_period) {
                         $return[] = array('start' => date('Y-m-d', $i), 'date' => date('Y-m-d', $i), 'day' => date('d', $i), 'status' => 'disabled');
                     } else {
                         $return[] = array('start' => date('Y-m-d', $i), 'date' => date('Y-m-d', $i), 'day' => date('d', $i), 'status' => 'avalable', 'price' => TravelHelper::format_money(STPrice::getRentalPriceOnlyCustomPrice($rental_id, $i, strtotime('+1 day', $i))));
                     }
                 }
             }
         }
     }
     echo json_encode($return);
     die;
 }