* @package WordPress * @subpackage Traveler * @since 1.0 * * hotel cart item html * * Created by ShineTheme * */ if (isset($item_id) and $item_id) { $item = STCart::find_item($item_id); $hotel = $item_id; $room_id = $item['data']['room_id']; $check_in = strtotime($item['data']['check_in']); $check_out = strtotime($item['data']['check_out']); $date_diff = STDate::date_diff($check_in, $check_out); $data_price = $item['data']['data_price']; $data_price = str_ireplace("\\", '', $data_price); $data_price = unserialize($data_price); $info_price = $data_price['info_price']; $info_price = TravelerObject::st_conver_info_price($info_price); ?> <header class="clearfix"> <?php if (get_post_status($hotel)) { ?> <a class="booking-item-payment-img" href="#"> <?php echo get_the_post_thumbnail($hotel, array(98, 74, 'bfi_thumb' => true)); ?> </a>
/** * @since 1.1.0 **/ function add_to_cart() { if (STInput::request('action') == 'rental_add_cart') { if (!STInput::request('start') or !STInput::request('end')) { STTemplate::set_message(st_get_language('check_in_and_check_out_are_required'), 'danger'); return; } $today = strtotime(date('m/d/Y')); $check_in = TravelHelper::convertDateFormat(STInput::request('start')); $rental_id = STInput::request('item_id'); $booking_period = get_post_meta($rental_id, 'rentals_booking_period', true); $period = STDate::date_diff($today, $check_in); if ($booking_period && $period < $booking_period) { STTemplate::set_message(sprintf(__('Booking is only accepted %d day(s) before today.', ST_TEXTDOMAIN), $booking_period), 'danger'); return; } $adult = intval(STInput::request('adult')); $children = intval(STInput::request('children')); if (get_post_meta($rental_id, 'rental_max_adult', true)) { $max_adult = intval(get_post_meta($rental_id, 'rental_max_adult', true)); if ($adult > $max_adult) { STTemplate::set_message(sprintf(__('A maximum number of adult(s): %d', ST_TEXTDOMAIN), $max_adult), 'danger'); return; } } if (get_post_meta($rental_id, 'rental_max_children', true)) { $max_children = intval(get_post_meta($rental_id, 'rental_max_children', true)); if ($children > $max_children) { STTemplate::set_message(sprintf(__('A maximum number of children: %d', ST_TEXTDOMAIN), $max_children), 'danger'); return; } } $validate = $this->do_add_to_cart(array('item_id' => STInput::request('item_id'), 'number_room' => STInput::request('number_room'), 'price' => STInput::request('price'), 'start' => TravelHelper::convertDateFormat(STInput::request('start')), 'end' => TravelHelper::convertDateFormat(STInput::request('end')), 'adult' => STInput::request('adult'), 'children' => STInput::request('children'))); if ($validate) { $link = STCart::get_cart_link(); wp_safe_redirect($link); die; } } }
echo esc_html($title); ?> ', animate: true, seriesDefaults: { pointLabels: {show: true}, <?php if ($type == 'quarter') { ?> renderer: $.jqplot.BarRenderer, <?php } elseif ($type == 'year' and STInput::request('year_end') - STInput::request('year_start') < 4) { ?> renderer: $.jqplot.BarRenderer, <?php } elseif ($type == 'custom_date' and $number_days = STDate::date_diff(strtotime(STInput::request('date_start')), strtotime(STInput::request('date_end'))) <= 7) { ?> renderer: $.jqplot.BarRenderer, <?php } ?> rendererOptions: {fillToZero: true} }, legend: { show: true, placement: 'insideGrid' }, series: data_lable, axes: { xaxis: { renderer: $.jqplot.CategoryAxisRenderer,
function is_booking_period($item_id = '', $t = '', $c = '') { $today = strtotime($t); $check_in = strtotime($c); $booking_period = intval(get_post_meta($item_id, 'hotel_booking_period', TRUE)); $period = STDate::date_diff($today, $check_in); if ($period < $booking_period) { return $booking_period; } return FALSE; }
static function get_default_info_reports($type, $date_start = false, $date_end = false) { $data = array('post_type' => array('st_hotel' => array('ids' => array(), 'number_orders' => 0, 'number_items' => 0, 'average_total' => 0, 'date' => array()), 'st_rental' => array('ids' => array(), 'number_orders' => 0, 'number_items' => 0, 'average_total' => 0, 'date' => array()), 'st_cars' => array('ids' => array(), 'number_orders' => 0, 'number_items' => 0, 'average_total' => 0, 'date' => array()), 'st_activity' => array('ids' => array(), 'number_orders' => 0, 'number_items' => 0, 'average_total' => 0, 'date' => array()), 'st_tours' => array('ids' => array(), 'number_orders' => 0, 'number_items' => 0, 'average_total' => 0, 'date' => array())), 'number_orders' => 0, 'number_items' => 0, 'average_total' => 0, 'average_daily_sale' => 0); $list_partner = st()->get_option('list_partner'); $array_partner = array(); if (!empty($list_partner)) { foreach ($list_partner as $key => $value) { $id = 'st_' . $value['id_partner']; if ($value['id_partner'] == 'car' or $value['id_partner'] == 'tour') { $id = 'st_' . $value['id_partner'] . 's'; } $array_partner[$id] = $value['title']; } } foreach ($data['post_type'] as $k => $v) { if (isset($array_partner[$k])) { if ($type != '15days' and $type != 'custom_date') { // add 12 month for ($i = 1; $i <= 12; $i++) { $data['post_type'][$k]['date'][$i] = array('number_order' => 0, 'number_items' => 0, 'average_total' => 0); // add day if ($i == 2) { $day = 28; } else { $day = 31; } for ($j = 1; $j <= $day; $j++) { $data['post_type'][$k]['date'][$i]['day'][$j] = array('number_order' => 0, 'number_items' => 0, 'average_total' => 0); } } } else { $number_days = STDate::date_diff(strtotime($date_start), strtotime($date_end)); for ($i = 0; $i <= $number_days; $i++) { $next_day = date('m-d-Y', strtotime($date_start . "+" . $i . " days")); if (empty($data['post_type'][$k]['date'][$next_day])) { $data['post_type'][$k]['date'][$next_day] = array('number_orders' => 0, 'number_items' => 0, 'average_total' => 0); } } } } else { unset($data['post_type'][$k]); } } return $data; }
function do_add_to_cart() { $pass_validate = true; $item_id = STInput::request('item_id'); $number = STInput::request('number'); $discount = STInput::request('discount'); $price = STInput::request('price'); if (!empty($discount)) { $price_sale = $price - $price * ($discount / 100); $data = array('discount' => $discount, 'price_sale' => $price_sale); } $data['check_in'] = STInput::request('check_in'); $data['check_out'] = STInput::request('check_out'); $data['type_tour'] = STInput::request('type_tour'); $data['type_price'] = STInput::request('type_price'); if ($data['type_price'] == 'people_price') { $prices = self::get_price_person($item_id); $data['adult_price'] = $prices['adult']; $data['child_price'] = $prices['child']; $data['discount'] = $prices['discount']; $data['adult_number'] = STInput::request('adult_number', 1); $data['child_number'] = STInput::request('children_number', 0); } $data['duration'] = STInput::request('duration'); $type_tour = STInput::request('type_tour'); $today = strtotime(date('m/d/Y', time())); if ($type_tour == 'daily_tour') { $check_in = strtotime(TravelHelper::convertDateFormat(STInput::request('check_in'))); } else { $check_in = strtotime(get_post_meta($item_id, 'check_in', true)); } $booking_period = intval(get_post_meta($item_id, 'tours_booking_period', true)); $period = STDate::date_diff($today, $check_in); $expired = $check_in - $today; if ($type_tour == 'daily_tour') { if ($booking_period && $period < $booking_period) { STTemplate::set_message(sprintf(__('Booking is only accepted %d day(s) before today.', ST_TEXTDOMAIN), $booking_period), 'danger'); return; } } else { if ($expired < 0) { STTemplate::set_message(__('This tour has expired', ST_TEXTDOMAIN), 'danger'); $pass_validate = false; return; } } if ($pass_validate) { $pass_validate = apply_filters('st_tour_add_cart_validate', $pass_validate, $data); } if ($pass_validate) { STCart::add_cart($item_id, $number, $price, $data); } return $pass_validate; }
* hotel payment item row * * Created by ShineTheme * */ $order_token_code = STInput::get('order_token_code'); if ($order_token_code) { $order_code = STOrder::get_order_id_by_token($order_token_code); } $hotel_id = $key; $object_id = $key; $total = 0; $room_id = $data['data']['room_id']; $check_in = $data['data']['check_in']; $check_out = $data['data']['check_out']; $datediff = STDate::date_diff(strtotime($check_in), strtotime($check_out)); $number = $data['number']; $price = $data['price']; if (!$number) { $number = 1; } /*if($datediff>=1) { $total+= ($price)*$datediff*$number; }else{ $total+= $price*$number; }*/ $hotel_link = ''; if (isset($hotel_id) and $hotel_id) { $hotel_link = get_permalink($hotel_id); }
static function get_coupon_value($coupon, $total = false, $cart_items = array(), $customer_email = false, $check_in = null) { if (!$total) { $total = STCart::get_total_with_out_tax(); } if (empty($cart_items)) { $cart_items = STCart::get_items(); } $coupon_object = get_page_by_title($coupon, OBJECT, 'st_coupon_code'); if (!$coupon_object) { return array('status' => 0, 'message' => __('Coupon Not Found', ST_TEXTDOMAIN)); } $discount_value = 0; $coupon_post_id = $coupon_object->ID; $discount_type = get_post_meta($coupon_post_id, 'discount_type', true); //$booking_type_available = get_post_meta($coupon_post_id,'booking_type_available',true); $amount = get_post_meta($coupon_post_id, 'amount', true); $expiry_date = get_post_meta($coupon_post_id, 'expiry_date', true); $minimum_spend = get_post_meta($coupon_post_id, 'minimum_spend', true); $maximum_spend = get_post_meta($coupon_post_id, 'maximum_spend', true); $required_porduct = get_post_meta($coupon_post_id, 'include_products', true); $exclude_products = get_post_meta($coupon_post_id, 'exclude_products', true); $limit_per_coupon = get_post_meta($coupon_post_id, 'limit_per_coupon', true); $limit_per_user = get_post_meta($coupon_post_id, 'limit_per_user', true); //Validate Expiry Date if ($expiry_date) { $datediff = STDate::date_diff2($expiry_date, date('Y-m-d')); if ($datediff <= 1) { return array('status' => 0, 'message' => __('This coupon is expired', ST_TEXTDOMAIN)); } } //Validate Minium Spend if ($minimum_spend) { if ($minimum_spend > $total) { return array('status' => 0, 'message' => sprintf(__('This coupon is only applicable for bills spent over %s', ST_TEXTDOMAIN), TravelHelper::format_money($minimum_spend))); } } //Validate Maximum Spend if ($maximum_spend) { if ($maximum_spend < $total) { return array('status' => 0, 'message' => sprintf(__('This coupon is only applicable for bills spent less than %s', ST_TEXTDOMAIN), TravelHelper::format_money($maximum_spend))); } } //Validate Required Product if ($required_porduct) { $ids = explode(',', $required_porduct); $products_name = array(); $check = array(); foreach ($ids as $key) { if (self::_check_in_items($key, $cart_items)) { $check[] = 1; } $products_name[] = "<a class='dotted_bottom' href='" . get_permalink($key) . "' target='_blank'>" . get_the_title($key) . "</a>"; } if (empty($check)) { return array('status' => 0, 'message' => sprintf(__('This coupon is required %s in the cart', ST_TEXTDOMAIN), implode(', ', $products_name))); } } //Validate Exclude Product if ($exclude_products) { $ids = explode(',', $exclude_products); $products_name = array(); $check = array(); foreach ($ids as $key) { if (self::_check_in_items($key, $cart_items)) { $check[] = 1; } $products_name[] = "<a class='dotted_bottom' href='" . get_permalink($key) . "' target='_blank'>" . get_the_title($key) . "</a>"; } if (!empty($check)) { return array('status' => 0, 'message' => sprintf(__('This coupon is required %s NOT in the cart', ST_TEXTDOMAIN), implode(', ', $products_name))); } } //Validate Used Time $coupon_code = $coupon_object->post_title; if ($limit_per_coupon) { global $wpdb; $query = "\r\n SELECT count({$wpdb->prefix}posts.ID) as total\r\n FROM {$wpdb->prefix}posts\r\n join {$wpdb->prefix}postmeta on {$wpdb->prefix}postmeta.post_id = {$wpdb->prefix}posts.ID and {$wpdb->prefix}postmeta.meta_key = 'coupon_code' \r\n and {$wpdb->prefix}postmeta.meta_value = '{$coupon_code}'\r\n WHERE post_type = 'st_order'"; $result = $wpdb->get_results($query); $count_used = 0; if (!empty($result) and is_array($result)) { foreach ($result as $key => $value) { $count_used += $value->total; } } if ($count_used >= $limit_per_coupon) { return array('status' => 0, 'message' => __('This coupon is reach the limit of usage', ST_TEXTDOMAIN)); } } // Validate Per User if ($limit_per_user and is_user_logged_in()) { /*$q_arg=array( 'post_type'=>'st_order' ); if(is_user_logged_in()){ $q_arg['meta_key']='id_user'; $q_arg['meta_value']=get_current_user_id(); }elseif($customer_email){ $q_arg['meta_key']='st_email'; $q_arg['meta_value']=$customer_email; }*/ $q_arg = array('post_type' => 'st_order', 'meta_query' => array('relation' => 'AND', array('key' => 'coupon_code', 'value' => $coupon_code, 'type' => 'CHAR', 'compare' => '='), array('key' => 'id_user', 'value' => get_current_user_id(), 'compare' => '='))); $query = new WP_Query($q_arg); if ($query->found_posts >= $limit_per_user) { return array('status' => 0, 'message' => __('This coupon is reach the limit of usage per user', ST_TEXTDOMAIN)); } } if ($amount) { switch ($discount_type) { case "cart_percent": if ($amount < 100) { $discount_value = $total / 100 * $amount; } else { $discount_value = $total; } break; // Currently, Only one product in cart, so dont need to use bellow discount type // case "product_amount": // $discount_value=self::_get_product_discount($amount,explode(',',$required_porduct),$cart_items,'amount'); // break; // case "product_percent": // $discount_value=self::_get_product_discount($amount,explode(',',$required_porduct),$cart_items,'percent'); // break; // Default: Card Discount // Currently, Only one product in cart, so dont need to use bellow discount type // case "product_amount": // $discount_value=self::_get_product_discount($amount,explode(',',$required_porduct),$cart_items,'amount'); // break; // case "product_percent": // $discount_value=self::_get_product_discount($amount,explode(',',$required_porduct),$cart_items,'percent'); // break; // Default: Card Discount default: $discount_value = $amount > $total ? $total : $amount; break; } } $result = apply_filters('st_get_coupon_value', array('status' => 1, 'value' => $discount_value, 'coupon' => $coupon, 'total' => $total, 'cart_items' => $cart_items)); return array('status' => $result['status'], 'value' => isset($result['value']) ? $result['value'] : 0, 'message' => isset($result['message']) ? $result['message'] : 0, 'data' => isset($result['data']) ? $result['data'] : 0); }
/** * * * @since 1.1.3 * */ static function get_equipment_line_item($price, $unit, $start_timestamp, $end_timestamp) { switch ($unit) { case "per_day": $diff = STDate::timestamp_diff_day($start_timestamp, $end_timestamp); if (!$diff) { $diff = 1; } return (double) $unit * $diff; break; case "per_hour": $diff = STDate::timestamp_diff($start_timestamp, $end_timestamp); if (!$diff) { $diff = 1; } return (double) $price * $diff; break; default: return (double) $price; break; } }
/** * * * */ static function get_hotel_price($data, $price, $number = 1) { $default = array('check_in' => false, 'check_out' => false); extract(wp_parse_args($data, $default)); //Check datediff and price per date if ($check_in and $check_out) { $datediff = STDate::date_diff(strtotime($check_in), strtotime($check_out)); if ($datediff >= 1) { return $price * $datediff * $number; } else { return $price * $number; } } else { return $price * $number; } }
static function get_date_diff($start, $end, $unit = false) { if (!$unit) { $unit = self::get_price_unit(); } $format = '%H'; $datediff = STDate::timestamp_diff($start, $end); switch ($unit) { case "day": $diff_number = ceil($datediff / 24); break; case "per_day": $diff_number = ceil($datediff / 24); break; case "hour": $diff_number = ceil($datediff); break; case "per_hour": $diff_number = ceil($datediff); break; default: $diff_number = $datediff; break; } if ($diff_number < 0) { $diff_number = 0; } if (self::check_booking_days_included()) { $diff_number += 1; } return $diff_number; }
function ajax_search_room() { if (st_is_ajax() and STInput::post('room_search')) { if (!wp_verify_nonce(STInput::post('room_search'), 'room_search')) { $result = array('status' => 0, 'data' => ""); echo json_encode($result); die; } $result = array('status' => 1, 'data' => ""); $hotel_id = get_the_ID(); $post = STInput::request(); $post['room_parent'] = $hotel_id; //Check Date $today = date('m/d/Y'); $check_in = strtotime(TravelHelper::convertDateFormat($post['start'])); $check_out = strtotime(TravelHelper::convertDateFormat($post['end'])); $date_diff = STDate::date_diff($check_in, $check_out); $booking_period = $this->is_booking_period($hotel_id, $today, $post['start']); if ($booking_period) { $result = array('status' => 0, 'data' => st()->load_template('hotel/elements/loop-room-none'), 'message' => sprintf(__('Booking is only accepted %d day(s) before today.', ST_TEXTDOMAIN), $booking_period)); echo json_encode($result); die; } if ($date_diff < 1) { $result = array('status' => 0, 'data' => "", 'message' => __('Make sure your check-out date is at least 1 day after check-in.', ST_TEXTDOMAIN), 'more-data' => $date_diff); echo json_encode($result); die; } query_posts($this->search_room($post)); $post['check_in'] = date('d-m-Y', strtotime($post['start'])); $post['check_out'] = date('d-m-Y', strtotime($post['end'])); global $wp_query; if (have_posts()) { while (have_posts()) { the_post(); $result['data'] .= st()->load_template('hotel/elements/loop-room-item'); } } else { $result['data'] .= st()->load_template('hotel/elements/loop-room-none'); } wp_reset_query(); echo json_encode($result); die; } }