• Бронирование Отелей PHP SQL?

    OlegSo
    @OlegSo Автор вопроса
    /**
    * какие цены в днях диапазона номеров.
    *
    * @param string $from From date.
    * @param string $to To date.
    * @param int $room_id Room ID.
    * @param integer $night Number of nights.
    *
    * return array
    * @since 1.0.0
    */
    public static function get_pricing_of_days( $from, $to, $room_id, $night = 1 ) {
    $start_month = date( 'm', strtotime( $from ) );
    $end_month = date( 'm', strtotime( $to ) );

    $start_year = date( 'Y', strtotime( $from ) );
    $end_year = date( 'Y', strtotime( $to ) );

    $start_date = date( 'd', strtotime( $from ) );
    $end_date = date( 'd', strtotime( $to ) );

    $key_pricing = array();
    if ( $start_month == $end_month ) {

    $check_pricing = AWE_function::check_apb_pricing( $start_year, $start_month, $room_id );
    if ( ! empty( $check_pricing ) ) {

    for ( $day = ( int ) $start_date; $day <= ( int ) $end_date - $night; $day++ ) {
    $get_price = 'd' . $day;
    if ( checkdate( $start_month, $day, $start_year ) ) {
    $key_pricing[ $start_month ][ $day ] = $check_pricing[0]->$get_price;
    }
    }
    } else {
    for ( $day = ( int ) $start_date; $day <= ( int ) $end_date - $night; $day++ ) {
    $get_price = 'd' . $day;
    if ( checkdate( $start_month, $day, $start_year ) ) {
    $key_pricing[ $start_month ][ $day ] = get_post_meta( $room_id, 'base_price', true );
    }
    }
    }
    } else {
    $list_month = AWE_function::get_list_day( $start_year, $end_year, $start_month, $end_month );
    if ( count( $list_month ) > 2 ) {
    //====== List month > 2 ============//
    // Month day start

    $_monthStart = $list_month[0];
    $_monthEnd = $list_month[ count( $list_month ) - 1 ];
    unset( $list_month[0] );
    unset( $list_month[ count( $list_month ) ] );

    $check_pricing_start = AWE_function::check_apb_pricing( $_monthStart['y'], $_monthStart['m'], $room_id );
    if ( ! empty( $check_pricing_start ) ) {
    $total_day = date( 't', mktime( 0, 0, 0, $start_year, 1, $start_month ) );
    for ( $day = ( int ) $start_date; $day <= ( int ) $total_day; $day++ ) {
    $get_price = 'd' . $day;
    if ( checkdate( $_monthStart['m'], $day, $start_year ) ) {
    $key_pricing[ $_monthStart['m'] ][ $day ] = $check_pricing_start[0]->$get_price;
    }
    }
    } else {
    $total_day = date( 't', mktime( 0, 0, 0, $start_year, 1, $start_month ) );
    for ( $day = ( int ) $start_date; $day <= ( int ) $total_day; $day++ ) {
    $get_price = 'd' . $day;
    if ( checkdate( $_monthStart['m'], $day, $start_year ) ) {
    $key_pricing[ $_monthStart['m'] ][ $day ] = get_post_meta( $room_id, 'base_price', true );
    }
    }
    }
    foreach ( $list_month as $monthCenter ) {
    $check_pricing = AWE_function::check_apb_pricing( $monthCenter['y'], $monthCenter['m'], $room_id );

    if ( ! empty( $check_pricing ) ) {

    $total_day = date( 't', mktime( 0, 0, 0, $start_year, 1, $start_month ) );
    for ( $day = 0; $day <= ( int ) $total_day; $day++ ) {
    $get_price = 'd' . $day;
    if ( checkdate( $monthCenter['m'], $day, $start_year ) ) {
    $key_pricing[ $monthCenter['m'] ][ $day ] = $check_pricing[0]->$get_price;
    }
    }
    } else {

    $total_day = date( 't', mktime( 0, 0, 0, $start_year, 1, $start_month ) );
    for ( $day = 0; $day <= ( int ) $total_day; $day++ ) {
    if ( checkdate( $monthCenter['m'], $day, $start_year ) ) {
    $key_pricing[ $monthCenter['m'] ][ $day ] = get_post_meta( $room_id, 'base_price', true );
    }
    }
    }
    }

    // Month day end.
    $check_pricing_end = AWE_function::check_apb_pricing( $_monthEnd['y'], $_monthEnd['m'], $room_id );
    if ( ! empty( $check_pricing_end ) ) {
    for ( $day = 1; $day <= ( int ) $end_date - $night; $day++ ) {
    $get_price = 'd' . $day;
    if ( checkdate( $_monthEnd['m'], $day, $start_year ) ) {
    $key_pricing[ $_monthEnd['m'] ][ $day ] = $check_pricing_end[0]->$get_price;
    }
    }
    } else {
    for ( $day = 1; $day <= ( int ) $end_date - $night; $day++ ) {
    $get_price = 'd' . $day;
    if ( checkdate( $_monthEnd['m'], $day, $start_year ) ) {
    $key_pricing[ $_monthEnd['m'] ][ $day ] = get_post_meta( $room_id, 'base_price', true );
    }
    }
    }
    } else {
    // Month day start.
    $check_pricing_start = AWE_function::check_apb_pricing( $list_month[0]['y'], $list_month[0]['m'], $room_id );
    if ( ! empty( $check_pricing_start ) ) {

    $total_day = date( 't', mktime( 0, 0, 0, $start_year, 1, $start_month ) );
    for ( $day = ( int ) $start_date; $day <= ( int ) $total_day; $day++ ) {
    $get_price = 'd' . $day;
    if ( checkdate( $list_month[0]['m'], $day, $start_year ) ) {
    $key_pricing[ $list_month[0]['m'] ][ $day ] = $check_pricing_start[0]->$get_price;
    }
    }
    } else {
    $total_day = date( 't', mktime( 0, 0, 0, $start_year, 1, $start_month ) );
    for ( $day = ( int ) $start_date; $day <= ( int ) $total_day; $day++ ) {
    $get_price = 'd' . $day;
    if ( checkdate( $list_month[0]['m'], $day, $start_year ) ) {
    $key_pricing[ $list_month[0]['m'] ][ $day ] = get_post_meta( $room_id, 'base_price', true );
    }
    }
    }
    // Month day start.
    $check_pricing_end = AWE_function::check_apb_pricing( $list_month[ count( $list_month ) - 1 ]['y'], $list_month[ count( $list_month ) - 1 ]['m'], $room_id );
    if ( ! empty( $check_pricing_end ) ) {
    for ( $day = 1; $day <= ( int ) $end_date - $night; $day++ ) {
    $get_price = 'd' . $day;
    if ( checkdate( $list_month[ count( $list_month ) - 1 ]['m'], $day, $start_year ) ) {
    $key_pricing[ $list_month[ count( $list_month ) - 1 ]['m'] ][ $day ] = $check_pricing_end[0]->$get_price;
    }
    }
    } else {
    for ( $day = 1; $day <= ( int ) $end_date - $night; $day++ ) {
    $get_price = 'd' . $day;
    if ( checkdate( $list_month[ count( $list_month ) - 1 ]['m'], $day, $start_year ) ) {
    $key_pricing[ $list_month[ count( $list_month ) - 1 ]['m'] ][ $day ] = get_post_meta( $room_id, 'base_price', true );
    }
    }
    }
    }
    }
    return $key_pricing;
    }
  • Бронирование Отелей PHP SQL?

    OlegSo
    @OlegSo Автор вопроса
    Создаем Таблицы 12 мес,
    "CREATE TABLE apb_availability (

    unit_id int(10) UNSIGNED NOT NULL COMMENT 'Id гостиницы.',
    year int(11) NOT NULL DEFAULT 0 COMMENT 'Календарный год, за который эта строка доступность соответствующих',
    month int(11) NOT NULL DEFAULT 0 COMMENT 'Месяца, за который эта строка доступность соответствующих',

    d1 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 1',
    d2 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 2',
    d3 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 3',
    d4 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 4',
    d5 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 5',
    d6 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 6',
    d7 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 7',
    d8 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 8',
    d9 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 9',
    d10 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 10',
    d11 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 11',
    d12 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 12',
    d13 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 13',
    d14 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 14',
    d15 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 15',
    d16 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 16',
    d17 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 17',
    d18 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 18',
    d19 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 19',
    d20 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 20',
    d21 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 21',
    d22 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 22',
    d23 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 23',
    d24 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 24',
    d25 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 25',
    d26 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 26',
    d27 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 27',
    d28 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 28',
    d29 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 29',
    d30 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 30',
    d31 int(11) NOT NULL DEFAULT 2 COMMENT 'Month Day 31',
    INDEX month (month),
    UNIQUE INDEX month_key (unit_id, year, month),
    INDEX unit_id (unit_id),
    INDEX year (year)
  • Бронирование Отелей PHP SQL?

    OlegSo
    @OlegSo Автор вопроса
    (function($) {
    "use strict";
    function count_days(date1, date2) {
    var each_day = 1000 * 60 * 60 * 24;//milliseconds in a day
    var ms_date1 = date1.getTime();//milliseconds for date1
    var ms_date2 = date2.getTime();//milliseconds for date2
    var ms_date_diff = Math.abs(ms_date1 - ms_date2);//different of the two dates in milliseconds
    var days = Math.round(ms_date_diff / each_day);//divided the different with millisecond in a day

    return (days != "") ? days : 1;
    }
    apb_calendar();

    function apb_calendar(){
    $('#apb_calendar').fullCalendar({
    header: {
    left: '',
    right: "",
    center: 'title',
    },
    ignoreTimezone: false,
    selectable: true,
    editable: false,
    handleWindowResize: true,
    defaultDate: apb_script_param.awe_date_curent_one,
    select: function(start, end,allDay) {

    var ed = end.subtract(1, 'days');
    start.add('month', 1);
    end.add('month', 1);
    var day_start = new Date(start);
    var start_date = day_start.getMonth()+"/"+day_start.getDate()+"/"+day_start.getFullYear();

    var d1 = new Date(start);
    var d2 = new Date(end);

    $(".night-select-js").val(count_days(d1,d2));
    $(".date-start-js").val(start_date);

    var day_end = new Date(end);
    var end_date = day_end.getMonth()+"/"+day_end.getDate()+"/"+day_end.getFullYear();
    $(".date-end-js").val(end_date);
    },

    eventRender: function(event, el) {
    el.find('.fc-time').remove();
    },
    });
    $('#apb_calendar2').fullCalendar({
    header: {
    left: '',
    right: "",
    center: 'title',
    },
    editable: false,
    ignoreTimezone: false,
    selectable: true,
    handleWindowResize: true,
    defaultDate: apb_script_param.awe_date_curent_two,
    select: function(start, end,allDay) {
    var ed = end.subtract(1, 'days');
    start.add('month', 1);
    end.add('month', 1);
    var day_start = new Date(start);
    var start_date = day_start.getMonth()+"/"+day_start.getDate()+"/"+day_start.getFullYear();

    var d1 = new Date(start);
    var d2 = new Date(end);

    $(".night-select-js").val(count_days(d1,d2));
    $(".date-start-js").val(start_date);

    var day_end = new Date(end);
    var end_date = day_end.getMonth()+"/"+day_end.getDate()+"/"+day_end.getFullYear();
    $(".date-end-js").val(end_date);
    },
    eventRender: function(event, el) {
    el.find('.fc-time').remove();
    },
    });
    }
    function SecondsToDay(seconds){
    var second = new Date(seconds);
    var date = second.toLocaleDateString('de-DE', {
    month: '2-digit',
    day: '2-digit',
    year: 'numeric',
    }).replace(/\./g, '/');
    return date;

    }
    /*
    * End render check available
    */
    })(jQuery);

    как вариант ?
  • Бронирование Отелей PHP SQL?

    OlegSo
    @OlegSo Автор вопроса
    maximw: Как Вообще сделать бронирование на интервал дат, с проверкой есть ли в этих датах интервал других дат.

    Пример: я бронирую отель с 10.06.2017 по 20.06.2017 итого = 10 дней.
    но у отеля акция с 15.06.2017 по 15.06.2017.
    Получается я забронировал 10 дней из них 5 дней (1000р) по обычной цене а 5 по акции (2000р)
    Итого: 15000к рур как просчитать это PHP SQL JAVA ???? HELP.

    Условия - на период (бесконечность) если нет акции цены заданы.
    есть 10 категорий в которых задаются даты начала и конец акции со своими ценами.

    Может есть решения или мысли ?)
  • Бронирование Отелей PHP SQL?

    OlegSo
    @OlegSo Автор вопроса
    Да бредятина ))) я уже столько перепробовал и list как решить данную задумку или ваше не в те дебри лезу. Ну луди же как то это реализовывают ))
  • Бронирование Отелей PHP SQL?

    OlegSo
    @OlegSo Автор вопроса
    <?php
    // Массив который сравниваем
    $start = DateTime::createFromFormat("d/m/Y", "$experience_start");
    $end = DateTime::createFromFormat("d/m/Y", "$experience_end");
    $interval = new DateInterval('P1D');
    $dateRange = new DatePeriod($start, $interval, $end);

    $daysNumber = 1;
    $days = array();
    foreach ($dateRange as $date) {
    $days[$daysNumber][] = $date->format('d/m/Y');
    if ($date->format('d') == 0) {
    $daysNumber++;
    }
    }
    // Массив с которым сравниваем
    $dep1 = $product['price_1_one_start'];
    $dep2 = $product['price_1_one_end'];
    $dep_start = DateTime::createFromFormat("d/m/Y", "$dep1");
    $date_end = DateTime::createFromFormat("d/m/Y", "$dep2");
    echo "".$dep1."";
    echo "".$dep2."";
    $interval_dep1 = new DateInterval('P1D');
    $dateRange_dep1 = new DatePeriod($dep_start, $interval_dep1, $date_end);

    $daysNumber1 = 1;
    $days_dep1 = array();
    foreach ($dateRange_dep1 as $date1) {
    $days_dep1[$daysNumber1][] = $date1->format('d/m/Y');
    if ($date1->format('d') == 0) {
    $daysNumber1++;
    }
    }

    /* СРАВНИВАЕМ !! */
    function fill_array_diff(array $days, array $days_dep1) {
    $diff = array_keys(array_diff_key($days, $days_dep1));

    return array_merge($days_dep1, array_fill_keys($diff, 0));
    }

    $array = fill_array_diff($days_dep1, $days);

    var_export($array);

    echo '';

    print_r($days);
    print_r($days_dep1);
    echo "Дни 1 Деп";
    echo "".$dep1."";
    echo "".$dep2."";

    echo "Дни основы";
    print_r($experience_start);
    echo '';
    print_r($experience_end);
    echo '';

    ?>

    Ну думал как то так кривой до безумия но массив или ест пути легче

    Задача просто просчитать сколько дней будут по другой цене а там через js думаю прикручу допы ))
  • Бронирование Отелей PHP SQL?

    OlegSo
    @OlegSo Автор вопроса
    Спасибо за ответ, по вашему примеру можно поподробнее ) как можно в данном случае это сделать с теми крематориями что выложил ниже.
    Создавать отдельную ячейку под каждый день 365