示例#1
0
 function do_add_to_cart()
 {
     $pass_validate = true;
     $item_id = STInput::request('item_id', '');
     if ($item_id <= 0 || get_post_type($item_id) != 'st_holidays') {
         STTemplate::set_message(__('This holiday is not available..', ST_TEXTDOMAIN), 'danger');
         $pass_validate = false;
         return false;
     }
     $number = 1;
     $adult_number = intval(STInput::request('adult_number', 1));
     $child_number = intval(STInput::request('child_number', 0));
     $infant_number = intval(STInput::request('infant_number', 0));
     $data['adult_number'] = $adult_number;
     $data['child_number'] = $child_number;
     $data['infant_number'] = $infant_number;
     $max_number = intval(get_post_meta($item_id, 'max_people', true));
     $type_holiday = get_post_meta($item_id, 'type_holiday', true);
     $data['type_holiday'] = $type_holiday;
     $today = date('Y-m-d');
     $check_in = STInput::request('check_in', '');
     $check_out = STInput::request('check_out', '');
     if (!$check_in || !$check_out) {
         STTemplate::set_message(__('Select a holiday in the calendar above.', ST_TEXTDOMAIN), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     $compare = TravelHelper::dateCompare($today, $check_in);
     if ($compare < 0) {
         STTemplate::set_message(__('This holiday has expired', ST_TEXTDOMAIN), 'danger');
         $pass_validate = false;
         return false;
     }
     $booking_period = intval(get_post_meta($item_id, 'holidays_booking_period', true));
     $period = TravelHelper::dateDiff($today, $check_in);
     if ($period < $booking_period) {
         STTemplate::set_message(sprintf(__('This holiday allow minimum booking is %d day(s)', ST_TEXTDOMAIN), $booking_period), 'danger');
         $pass_validate = false;
         return false;
     }
     if ($adult_number + $child_number + $infant_number > $max_number) {
         STTemplate::set_message(sprintf(__('Max of people for this holiday is %d people', ST_TEXTDOMAIN), $max_number), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     $holiday_available = HolidayHelper::checkAvailableHoliday($item_id, strtotime($check_in), strtotime($check_out));
     if (!$holiday_available) {
         STTemplate::set_message(__('The check in, check out day is not invalid or this holiday not available.', ST_TEXTDOMAIN), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     $free_people = intval(get_post_meta($item_id, 'max_people', true));
     $result = HolidayHelper::_get_free_peple($item_id, strtotime($check_in), strtotime($check_out));
     if (is_array($result) && count($result)) {
         $free_people = intval($result['free_people']);
     }
     if ($free_people < $adult_number + $child_number + $infant_number) {
         STTemplate::set_message(sprintf(__('This holiday only vacant %d people', ST_TEXTDOMAIN), $free_people), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     $data_price = STPrice::getPriceByPeopleHoliday($item_id, strtotime($check_in), strtotime($check_out), $adult_number, $child_number, $infant_number);
     $total_price = $data_price['total_price'];
     $sale_price = STPrice::getSaleHolidaySalePrice($item_id, $total_price, $type_holiday, strtotime($check_in));
     $data['check_in'] = date('m/d/Y', strtotime($check_in));
     $data['check_out'] = date('m/d/Y', strtotime($check_out));
     $people_price = STPrice::getPeoplePrice($item_id, strtotime($check_in), strtotime($check_out));
     $data = wp_parse_args($data, $people_price);
     $data['ori_price'] = $sale_price;
     $data['currency'] = TravelHelper::get_current_currency('symbol');
     $data['currency_rate'] = TravelHelper::get_current_currency('rate');
     $data['currency_pos'] = TravelHelper::get_current_currency('booking_currency_pos');
     $data['commission'] = TravelHelper::get_commission();
     $data['data_price'] = $data_price;
     $data['discount_rate'] = STPrice::get_discount_rate($item_id, strtotime($check_in));
     if ($pass_validate) {
         $data['duration'] = $type_holiday == 'daily_holiday' ? floatval(get_post_meta($item_id, 'duration_day', true)) : '';
         if ($pass_validate) {
             STCart::add_cart($item_id, $number, $sale_price, $data);
         }
     }
     return $pass_validate;
 }
 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);
         }
     }
 }
示例#3
0
 function do_add_to_cart()
 {
     $pass_validate = true;
     $item_id = intval(STInput::request('item_id', ''));
     if ($item_id <= 0 || get_post_type($item_id) != 'st_activity') {
         STTemplate::set_message(__('This activity is not available..', ST_TEXTDOMAIN), 'danger');
         $pass_validate = false;
         return false;
     }
     $number = 1;
     $type_activity = STInput::request('type_activity', 'specific_date');
     $adult_number = intval(STInput::request('adult_number', 1));
     $child_number = intval(STInput::request('child_number', 0));
     $infant_number = intval(STInput::request('infant_number', 0));
     $max_number = intval(get_post_meta($item_id, 'max_people', true));
     $today = date('Y-m-d');
     if ($adult_number + $child_number + $infant_number > $max_number) {
         STTemplate::set_message(sprintf(__('Max of people for this activity is %d people', ST_TEXTDOMAIN), $max_number), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     if ($type_activity == 'specific_date') {
         $check_in = TravelHelper::convertDateFormat(STInput::request('check_in', ''));
         $check_out = TravelHelper::convertDateFormat(STInput::request('check_out', ''));
         if (empty($check_in)) {
             STTemplate::set_message(__('The check in field is not empty.', ST_TEXTDOMAIN), 'danger');
             $pass_validate = false;
             return false;
         }
         if (empty($check_out)) {
             STTemplate::set_message(__('The check out field is not empty.', ST_TEXTDOMAIN), 'danger');
             $pass_validate = false;
             return false;
         }
         $compare = TravelHelper::dateCompare($today, $check_in);
         if ($compare < 0) {
             STTemplate::set_message(__('This activity has expired', ST_TEXTDOMAIN), 'danger');
             $pass_validate = false;
             return false;
         }
         $people = $adult_number + $child_number + $child_number;
         $result = ActivityHelper::_get_free_peple_special($item_id, $check_in, $check_out);
         $free_people = intval(get_post_meta($item_id, 'max_people', true));
         if (is_array($result) && count($result)) {
             $free_people = intval($result['free_people']);
         }
         if ($free_people < $people) {
             STTemplate::set_message(sprintf(__('This activity only vacant %d people', ST_TEXTDOMAIN), $free_people), 'danger');
             $pass_validate = false;
             return false;
         }
         $data['check_in'] = date('m/d/Y', strtotime($check_in));
         $data['check_out'] = date('m/d/Y', strtotime($check_out));
     } elseif ($type_activity == 'daily_activity') {
         $check_in = STInput::request('check_in', '');
         if (empty($check_in)) {
             STTemplate::set_message(__('The check in field is not empty.', ST_TEXTDOMAIN), 'danger');
             $pass_validate = false;
             return false;
         }
         $check_in = TravelHelper::convertDateFormat($check_in);
         $check_in = date('Y-m-d', strtotime($check_in));
         $duration = intval(get_post_meta($item_id, 'duration', true));
         $check_out = $duration >= 2 ? strtotime('+ ' . $duration . ' days', strtotime($check_in)) : strtotime('+ ' . $duration . ' day', strtotime($check_in));
         $check_out = date('Y-m-d', $check_out);
         $booking_period = intval(get_post_meta($item_id, 'activity_booking_period', true));
         $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');
             $pass_validate = false;
             return false;
         }
         if ($booking_period && $booking_period > $period) {
             STTemplate::set_message(sprintf(__('This activity allow minimum booking is %d day(s)', ST_TEXTDOMAIN), $booking_period), 'danger');
             $pass_validate = false;
             return false;
         }
         $people = $adult_number + $child_number + $child_number;
         $result = ActivityHelper::_get_free_peple_daily($item_id, $check_in);
         $free_people = intval(get_post_meta($item_id, 'max_people', true));
         if (is_array($result) && count($result)) {
             $free_people = intval($result['free_people']);
         }
         if ($free_people < $people) {
             STTemplate::set_message(sprintf(__('This activity only vacant %d people', ST_TEXTDOMAIN), $free_people), 'danger');
             $pass_validate = false;
             return false;
         }
         $data['duration'] = $duration;
     }
     $data['adult_number'] = $adult_number;
     $data['child_number'] = $child_number;
     $data['infant_number'] = $infant_number;
     $data['check_in'] = date('m/d/Y', strtotime($check_in));
     $data['check_out'] = date('m/d/Y', strtotime($check_out));
     $data['type_activity'] = $type_activity;
     $data_price = STPrice::getPriceByPeople($item_id, strtotime($check_in), strtotime($check_out), $adult_number, $child_number, $infant_number);
     $total_price = $data_price['total_price'];
     $sale_price = STPrice::getSaleTourSalePrice($item_id, $total_price, $type_activity, strtotime($check_in));
     $discount_rate = STPrice::get_discount_rate($item_id, strtotime($check_in));
     $data['adult_price'] = floatval(get_post_meta($item_id, 'adult_price', true));
     $data['child_price'] = floatval(get_post_meta($item_id, 'child_price', true));
     $data['infant_price'] = floatval(get_post_meta($item_id, 'infant_price', true));
     $data['ori_price'] = $sale_price;
     $data['currency'] = TravelHelper::get_current_currency('symbol');
     $data['currency_rate'] = TravelHelper::get_current_currency('rate');
     $data['currency_pos'] = TravelHelper::get_current_currency('booking_currency_pos');
     $data['commission'] = TravelHelper::get_commission();
     $data['data_price'] = $data_price;
     $data['discount_rate'] = $discount_rate;
     if ($pass_validate) {
         $pass_validate = apply_filters('st_activity_add_cart_validate', $pass_validate);
     }
     if ($pass_validate) {
         STCart::add_cart($item_id, $number, $sale_price, $data);
     }
     return $pass_validate;
 }
示例#4
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;
 }
示例#5
0
 function do_add_to_cart()
 {
     $pass_validate = TRUE;
     $item_id = intval(STInput::request('item_id', ''));
     if ($item_id <= 0 || get_post_type($item_id) != 'st_hotel') {
         STTemplate::set_message(__('This hotel is not available.', ST_TEXTDOMAIN), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     $room_id = intval(STInput::request('room_id', ''));
     if ($room_id <= 0 || get_post_type($room_id) != 'hotel_room') {
         STTemplate::set_message(__('This room is not available.', ST_TEXTDOMAIN), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     $check_in = STInput::request('check_in', '');
     if (empty($check_in)) {
         STTemplate::set_message(__('Date is invalid', ST_TEXTDOMAIN), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     $check_in = TravelHelper::convertDateFormat($check_in);
     $check_out = STInput::request('check_out', '');
     if (empty($check_out)) {
         STTemplate::set_message(__('Date is invalid', ST_TEXTDOMAIN), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     $check_out = TravelHelper::convertDateFormat($check_out);
     $room_num_search = intval(STInput::request('room_num_search', ''));
     if ($room_num_search <= 0) {
         $room_num_search = 1;
     }
     $adult_number = intval(STInput::request('adult_number', ''));
     if ($adult_number <= 0) {
         $adult_number = 1;
     }
     $child_number = intval(STInput::request('child_number', ''));
     if ($child_number <= 0) {
         $child_number = 0;
     }
     $checkin_ymd = date('Y-m-d', strtotime($check_in));
     $checkout_ymd = date('Y-m-d', strtotime($check_out));
     if (!HotelHelper::check_day_cant_order($room_id, $checkin_ymd, $checkout_ymd, $room_num_search)) {
         STTemplate::set_message(sprintf(__('This room is not available from %s to %s.', ST_TEXTDOMAIN), $checkin_ymd, $checkout_ymd), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     if (!HotelHelper::_check_room_available($room_id, $checkin_ymd, $checkout_ymd, $room_num_search)) {
         STTemplate::set_message(__('This room is not available.', ST_TEXTDOMAIN), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     if (strtotime($check_out) - strtotime($check_in) <= 0) {
         STTemplate::set_message(__('The check-out is later than the check-in.', ST_TEXTDOMAIN), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     $num_room = intval(get_post_meta($room_id, 'number_room', true));
     $adult = intval(get_post_meta($room_id, 'adult_number', true));
     $children = intval(get_post_meta($room_id, 'children_number', true));
     if ($room_num_search > $num_room) {
         STTemplate::set_message(__('Max of rooms are incorrect.', ST_TEXTDOMAIN), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     if ($adult_number > $adult) {
         STTemplate::set_message(sprintf(__('Max of adults is %d people.', ST_TEXTDOMAIN), $adult), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     if ($child_number > $children) {
         STTemplate::set_message(__('Number of children in the room are incorrect.', ST_TEXTDOMAIN), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     $today = date('m/d/Y');
     $period = TravelHelper::dateDiff($today, $check_in);
     $booking_min_day = intval(get_post_meta($item_id, 'min_book_room', true));
     $compare = TravelHelper::dateCompare($today, $check_in);
     $booking_period = get_post_meta($item_id, 'hotel_booking_period', true);
     if (empty($booking_period) || $booking_period <= 0) {
         $booking_period = 0;
     }
     if ($compare < 0) {
         STTemplate::set_message(__('You can not set check-in date in the past', ST_TEXTDOMAIN), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     if ($period < $booking_period) {
         STTemplate::set_message(sprintf(__('This hotel allow minimum booking is %d day(s)', ST_TEXTDOMAIN), $booking_period), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     if ($booking_min_day and $booking_min_day > TravelHelper::dateDiff($check_in, $check_out)) {
         STTemplate::set_message(sprintf(__('Please booking at least %d day(s)', ST_TEXTDOMAIN), $booking_min_day), 'danger');
         $pass_validate = false;
         return false;
     }
     $item_price = floatval(get_post_meta($room_id, 'price', true));
     // Extra price added in the new version 1.1.9
     $extras = STInput::request('extra_price', array());
     $numberday = TravelHelper::dateDiff($check_in, $check_out);
     $extra_price = STPrice::getExtraPrice($extras, $room_num_search, $numberday);
     $sale_price = STPrice::getRoomPrice($room_id, strtotime($check_in), strtotime($check_out), $room_num_search);
     $discount_rate = STPrice::get_discount_rate($room_id, strtotime($check_in));
     $data = array('item_price' => $item_price, 'ori_price' => $sale_price + $extra_price, 'check_in' => $check_in, 'check_out' => $check_out, 'room_num_search' => $room_num_search, 'room_id' => $room_id, 'adult_number' => $adult_number, 'child_number' => $child_number, 'extras' => $extras, 'extra_price' => $extra_price, 'commission' => TravelHelper::get_commission(), 'discount_rate' => $discount_rate);
     if ($pass_validate) {
         $pass_validate = apply_filters('st_hotel_add_cart_validate', $pass_validate, $data);
     }
     if ($pass_validate) {
         STCart::add_cart($item_id, $room_num_search, $sale_price + $extra_price, $data);
     }
     return $pass_validate;
 }
示例#6
0
 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));
                 }
             }
             update_post_meta($order_id, 'payment_method', 'st_submit_form');
             $id_user = get_current_user_id();
             update_post_meta($order_id, 'id_user', $id_user);
             $item_price = floatval(get_post_meta($item_id, 'cars_price', true));
             $unit = st()->get_option('cars_price_unit', 'day');
             /*if($unit == 'day'){
                   $numberday = ceil(($check_out_timestamp - $check_in_timestamp) / (60 * 60 * 24));
               }elseif($unit == 'hour'){
                   $numberday = ceil(($check_out_timestamp - $check_in_timestamp) / (60 * 60));
               }*/
             $numberday = STCars::get_date_diff($check_in_timestamp, $check_out_timestamp, $unit);
             $selected_equipments = $_POST['item_equipment'];
             $price_equipment = STPrice::getPriceEuipmentCarAdmin($selected_equipments);
             $data_equipment = STPrice::convertEquipmentToOject($selected_equipments);
             $origin_price = $item_price * $numberday;
             $sale_price = STPrice::getSaleCarPrice($item_id, $item_price, $check_in_timestamp, $check_out_timestamp);
             $price_with_tax = STPrice::getPriceWithTax($sale_price + $price_equipment);
             $coupon_price = 0;
             $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 - $coupon_price;
             }
             $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, 'unit' => $unit, 'price_equipment' => $price_equipment);
             $item_data = array('item_id' => $item_id, 'item_number' => 1, 'total_price' => $total_price, 'item_price' => $item_price, 'check_in' => $check_in, 'check_in_timestamp' => $check_in_timestamp, 'check_out' => $check_out, 'check_out_timestamp' => $check_out_timestamp, 'st_booking_id' => $item_id, 'check_in_time' => $check_in_time, 'check_out_time' => $check_out_time, 'pick_up' => get_the_title($location_id_pick_up), 'location_id_pick_up' => $location_id_pick_up, 'drop_off' => get_the_title($location_id_drop_off), 'location_id_drop_off' => $location_id_drop_off, 'deposit_money' => $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'), 'data_equipment' => $data_equipment, 'data_prices' => $data_prices, 'commission' => TravelHelper::get_commission());
             foreach ($item_data as $val => $value) {
                 update_post_meta($order_id, $val, $value);
             }
             if (TravelHelper::checkTableDuplicate('st_cars')) {
                 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', 'st_booking_post_type' => 'st_cars', 'check_in' => date('m/d/Y', strtotime($check_in)), 'check_out' => date('m/d/Y', strtotime($check_out)), 'st_booking_id' => $item_id, 'check_in_timestamp' => $check_in_timestamp, 'check_out_timestamp' => $check_out_timestamp, '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);
             }
             //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);
             do_action('st_booking_success', $order_id);
             wp_safe_redirect(self::$booking_page);
         }
     }
 }
示例#7
0
 /**
  * @since 1.0.9
  * @update 1.1.3
  **/
 function do_add_to_cart()
 {
     $pass_validate = true;
     $item_id = STInput::request('item_id', '');
     if ($item_id <= 0 || get_post_type($item_id) != 'st_cars') {
         STTemplate::set_message(__('This car is not available.', ST_TEXTDOMAIN), 'danger');
         $pass_validate = FALSE;
         return false;
     }
     $number = 1;
     // Validate required field
     if (!isset($_POST['booking_by']) || $_POST['booking_by'] != 'partner') {
         $change_location_date_box = $this->get_search_fields_box();
         $field_types = $this->get_search_fields_name();
         if (!empty($change_location_date_box)) {
             $message = '';
             foreach ($change_location_date_box as $key => $value) {
                 if (isset($field_types[$value['field_atrribute']]) and $value['is_required'] == 'on') {
                     $field_name = isset($field_types[$value['field_atrribute']]['field_name']) ? $field_types[$value['field_atrribute']]['field_name'] : false;
                     if ($field_name) {
                         if (is_array($field_name)) {
                             foreach ($field_name as $v) {
                                 if (!STInput::request($v)) {
                                     $message .= sprintf(__('%s is required', ST_TEXTDOMAIN), $value['title']) . '<br>';
                                     $pass_validate = false;
                                 }
                             }
                         } elseif (is_string($field_name)) {
                             if (!STInput::request($field_name)) {
                                 $message .= sprintf(__('%s is required', ST_TEXTDOMAIN), $value['title']) . '<br>';
                                 $pass_validate = false;
                             }
                         }
                     }
                 }
             }
             if ($message) {
                 $message = substr($message, 0, -4);
                 STTemplate::set_message($message, 'danger');
             }
         }
     }
     $check_in = '';
     $check_in_n = '';
     $check_in_time = '';
     if (isset($_REQUEST['pick-up-date']) && !empty($_REQUEST['pick-up-date'])) {
         $check_in = TravelHelper::convertDateFormat($_REQUEST['pick-up-date']);
         $check_in_n = $check_in;
     }
     if (isset($_REQUEST['pick-up-time']) && !empty($_REQUEST['pick-up-time'])) {
         $check_in .= ' ' . $_REQUEST['pick-up-time'];
         $check_in_time = $_REQUEST['pick-up-time'];
     }
     $check_in = date('Y-m-d H:i:s', strtotime($check_in));
     $check_out = '';
     $check_out_n = '';
     $check_out_time = '';
     if (isset($_REQUEST['drop-off-date']) && !empty($_REQUEST['drop-off-date'])) {
         $check_out = TravelHelper::convertDateFormat($_REQUEST['drop-off-date']);
         $check_out_n = $check_out;
     }
     if (isset($_REQUEST['drop-off-time']) && !empty($_REQUEST['drop-off-time'])) {
         $check_out .= ' ' . $_REQUEST['drop-off-time'];
         $check_out_time = $_REQUEST['drop-off-time'];
     }
     $check_out = date('Y-m-d H:i:s', strtotime($check_out));
     $location_id_pick_up = STInput::request('location_id_pick_up', '');
     $location_id_drop_off = STInput::request('location_id_drop_off', '');
     if (isset($_REQUEST['location_id_pick_up']) && !empty($_REQUEST['location_id_pick_up']) && isset($_REQUEST['location_id_drop_off']) && !empty($_REQUEST['location_id_drop_off'])) {
         $location_id_pick_up = intval(STInput::request('location_id_pick_up', '0'));
         $location_id_drop_off = intval(STInput::request('location_id_drop_off', '0'));
         $pickup_country = get_post_meta($location_id_pick_up, 'location_country', true);
         $dropoff_country = get_post_meta($location_id_drop_off, 'location_country', true);
         if (!$pickup_country) {
             STTemplate::set_message(__('The \'country\' field not set for the \'' . get_the_title($location_id_pick_up) . '\'', ST_TEXTDOMAIN), 'danger');
             $pass_validate = false;
             return false;
         }
         if (!$dropoff_country) {
             STTemplate::set_message(__('The \'country\' field not set for \'' . get_the_title($location_id_drop_off) . '\'', ST_TEXTDOMAIN), 'danger');
             $pass_validate = false;
             return false;
         }
         if ($pickup_country != $dropoff_country) {
             STTemplate::set_message(__('The country is not same', ST_TEXTDOMAIN), 'danger');
             $pass_validate = false;
             return false;
         }
     }
     $today = date('m/d/Y');
     $booking_period = intval(get_post_meta($item_id, 'cars_booking_period', true));
     $booking_min_day = intval(get_post_meta($item_id, 'cars_booking_min_day', true));
     $booking_min_hour = intval(get_post_meta($item_id, 'cars_booking_min_hour', true));
     if (empty($booking_period) || $booking_period <= 0) {
         $booking_period = 0;
     }
     $check_in_timestamp = '';
     $check_out_timestamp = '';
     if (!empty($check_in_n) && !empty($check_out_n)) {
         $period = TravelHelper::dateDiff($today, $check_in_n);
         $compare = TravelHelper::dateCompare($today, $check_in_n);
         $check_in_timestamp = strtotime($check_in);
         $check_out_timestamp = strtotime($check_out);
         if ($check_in_timestamp - $check_out_timestamp >= 0) {
             STTemplate::set_message(__('The drop off datetime is later than the pick up datetime.', ST_TEXTDOMAIN), 'danger');
             $pass_validate = false;
             return false;
         }
         if ($compare < 0) {
             STTemplate::set_message(__('You can not set check-in date in the past', ST_TEXTDOMAIN), 'danger');
             $pass_validate = false;
             return false;
         }
         if ($period < $booking_period) {
             STTemplate::set_message(sprintf(__('This car allow minimum booking is %d day(s)', ST_TEXTDOMAIN), $booking_period), 'danger');
             $pass_validate = false;
             return false;
         }
         $unit = st()->get_option('cars_price_unit', 'day');
         if ($unit == 'day' and $booking_min_day and $booking_min_day > self::get_date_diff($check_in_timestamp, $check_out_timestamp)) {
             STTemplate::set_message(sprintf(__('Please booking at least %d day(s)', ST_TEXTDOMAIN), $booking_min_day), 'danger');
             $pass_validate = false;
             return false;
         }
         if ($unit == 'hour' and $booking_min_hour and $booking_min_hour > self::get_date_diff($check_in_timestamp, $check_out_timestamp)) {
             STTemplate::set_message(sprintf(__('Please booking at least %d hour(s)', ST_TEXTDOMAIN), $booking_min_hour), 'danger');
             $pass_validate = false;
             return false;
         }
     }
     if ($check_in_timestamp > 0 && $check_out_timestamp > 0) {
         if (!CarHelper::_get_car_cant_order_by_id($item_id, $check_in_timestamp, $check_out_timestamp)) {
             STTemplate::set_message(__('This car is full order', ST_TEXTDOMAIN), 'danger');
             $pass_validate = false;
             return false;
         }
     }
     $selected_equipments = json_decode(str_ireplace("\\", '', STInput::request('selected_equipments', '')));
     $info_price = STCars::get_info_price($item_id, strtotime($check_in), strtotime($check_out));
     $price_unit = $info_price['price'];
     $item_price = floatval(get_post_meta($item_id, 'cars_price', true));
     $price_equipment = STPrice::getPriceEuipmentCar($selected_equipments, $check_in_timestamp, $check_out_timestamp);
     $sale_price = STPrice::getSaleCarPrice($item_id, $item_price, strtotime($check_in), strtotime($check_out));
     $car_sale_price = STPrice::get_car_price_by_number_of_day_or_hour($item_id, $item_price, strtotime($check_in), strtotime($check_out));
     $discount_rate = STPrice::get_discount_rate($item_id, strtotime($check_in));
     $numberday = $numberday = STCars::get_date_diff(strtotime($check_in), strtotime($check_out), st()->get_option('cars_price_unit', 'day'));
     $data = array('check_in' => $check_in_n, 'check_out' => $check_out_n, 'check_in_time' => $check_in_time, 'check_out_time' => $check_out_time, 'check_in_timestamp' => strtotime($check_in), 'check_out_timestamp' => strtotime($check_out), 'location_id_pick_up' => $location_id_pick_up, 'location_id_drop_off' => $location_id_drop_off, 'pick_up' => get_the_title($location_id_pick_up), 'drop_off' => get_the_title($location_id_drop_off), 'ori_price' => $sale_price + $price_equipment, 'item_price' => $item_price, 'sale_price' => $car_sale_price, 'numberday' => $numberday, 'price_equipment' => $price_equipment, 'data_equipment' => $selected_equipments, 'commission' => TravelHelper::get_commission(), 'discount_rate' => $discount_rate);
     $pass_validate = apply_filters('st_car_add_cart_validate', $pass_validate, $item_id, $number, $price_unit, $data);
     if ($pass_validate) {
         STCart::add_cart($item_id, $number, $price_equipment + $sale_price, $data);
     }
     return $pass_validate;
 }