2

コーディングのヘルプを探しています。私はairbnbに似た予約システムを持っています。私の問題は予約日に関するものです。より具体的にするために、1つの例を挙げます

2012 年 12 月 2 日から 2012 年 12 月 5 日までの日程で、1 つのアパートメントがすでに予約されています。

新規のお客様が 2012 年 12 月 4 日から 2012 年 12 月 6 日までの次の日付を選択すると、「これらの日付は既に予約されています」というメッセージが表示されます。

ただし、顧客が 12 月 1 日から 12 月 6 日まで、または 11 月 29 日から 12 月 10 日までのような日付を選択した場合。システムは、日付が利用可能であるかのように顧客に進めさせます。

要約すると、選択した期間にすでに予約されている日付が含まれている場合、顧客に「それらの日付は既に予約されています」というメッセージが表示されるようにする必要があります。

私はコーディングの専門家ではありません。しかし、問題は利用可能なフラットを表示するjavascriptにあると確信しています。

Js丸ごと入れます。

「これらの日付は既に予約されています」というメッセージは、#book_it_disabled_message に対応します。

時間とスキルをよろしくお願いします。

function check_inputs(b, c, a) {
b = typeof (b) != "undefined" ? b : true;
c = typeof (c) != "undefined" ? c : "checkin";
a = typeof (a) != "undefined" ? a : "checkout";
if (calendar_is_not_set_date(c)) {
    if (b) {
        calendar_show_cal(c)
    }
    return false
}
if (calendar_is_not_set_date(a)) {
    if (b) {
        calendar_show_cal(a)
    }
    return false
}
return true
}

function copy_checkin_checkout_fields() {
var a = check_inputs(false);
if (a) {
    jQuery("#message_checkin").val(jQuery("#checkin").val());
    jQuery("#message_checkout").val(jQuery("#checkout").val());
    jQuery("#message_number_of_guests").val(jQuery("#number_of_guests").val());
    check_availability_of_dates()
}
}

function copy_message_fields_to_book_it() {
jQuery("#checkin").val(jQuery("#message_checkin").val());
jQuery("#checkout").val(jQuery("#message_checkout").val());
jQuery("#number_of_guests").val(jQuery("#message_number_of_guests").val())
}

function refresh_subtotal() {
var a = function (c, e, d) {
        var b;
        if (c.available) {
            jQuery("#book_it_disabled").hide();
            jQuery("#book_it_enabled").show();
            b = jQuery("#price_amount").html(c.price_per_night).data("nightly-price", c.price_per_night);
            jQuery("#service_fee").html(c.service_fee);
            CogzidelRooms.staggered = c.staggered;
            if (CogzidelRooms.staggered === true) {
                if (CogzidelRooms.stayOffered !== 0) {
                    jQuery("#payment_period").hide();
                    jQuery("#per_month").show();
                    CogzidelRooms.$cancellationVal.text(Translations.long_term);
                    jQuery("#includesFees").show();
                    jQuery("#book_it_default").addClass("monthly")
                }
                jQuery("#subtotal_area").hide();
                jQuery("#show_more_subtotal_info").hide();
                jQuery("#price_amount").text(Cogzidel.Utils.decode(c.staggered_price));
                b.data("monthly-price", c.staggered_price);
                CogzidelRooms.hideMonthlyPriceDetails()
            } else {
                if (CogzidelRooms.stayOffered === 2) {
                    jQuery("#per_month").hide();
                    CogzidelRooms.$cancellationVal.text(CogzidelRooms.originalCancellationPolicy);
                    jQuery("#includesFees").hide();
                    jQuery("#book_it_default").removeClass("monthly");
                    jQuery("#payment_period").show()
                }
                jQuery("#subtotal_area ").show();
                jQuery("#subtotal_area").find("p").show();
                jQuery("#show_more_subtotal_info").show();
                jQuery("#subtotal").html(c.total_price);
                jQuery("#payment_period").val("per_night");
                b.removeAttr("data-monthly-price");
                CogzidelRooms.showMonthlyPriceDetails()
            }
            if (c.can_instant_book) {
                Page3.showInstantBookButton()
            } else {
                Page3.showBookItButton()
            }
        } else {
            if (CogzidelRooms.stayOffered === 1) {
                jQuery("#payment_period").hide();
                jQuery("#per_month").show();
                CogzidelRooms.$cancellationVal.text(Translations.long_term);
                jQuery("#includesFees").show();
                CogzidelRooms.hideMonthlyPriceDetails()
            } else {
                jQuery("#book_it_default").removeClass("monthly");
                jQuery("#payment_period").show();
                jQuery("#per_month").hide();
                  CogzidelRooms.$cancellationVal.text(CogzidelRooms.originalCancellationPolicy);
                jQuery("#includesFees").hide();
                jQuery("#price_amount").html(jQuery("#price_amount").data("nightly-price"));
                CogzidelRooms.showMonthlyPriceDetails()
            }
            jQuery("#book_it_disabled_message").html(c.reason_message);
            jQuery("#book_it_enabled").hide();
            jQuery("#book_it_disabled").show();
            jQuery("#show_more_subtotal_info").hide()
        }
        jQuery("#book_it_status").pulsate(1, 600)
    };
jQuery("#book_it_button").removeAttr("disabled");
jQuery("#subtotal_area").find("p").hide();
jQuery("#subtotal_area").show();
if (calendar_is_not_set_date("checkin") || calendar_is_not_set_date("checkout")) {
    a = function () {};
    jQuery("#book_it_disabled").hide();
    jQuery("#book_it_enabled").show();
    jQuery("#subtotal_area").hide();
    jQuery("#show_more_subtotal_info").hide()
} else {
    jQuery("#subtotal, #book_it_disabled_message").html('<img src="'+base_url+'images/spinner.gif" alt="" height="16" width="16" />')
}
jQuery.getJSON(base_url+"rooms/ajax_refresh_subtotal", jQuery("#book_it_form").serialize(), a)
 }
4

1 に答える 1

1

この行から:

if (calendar_is_not_set_date("checkin") || calendar_is_not_set_date("checkout")) {

相互に排他的な関数で日付 1 と日付 2 をテストしているようです。一度に 1 日だけテストする場合は、(チェックイン) と (チェックアウト) の間に毎日テストする必要があります。

おそらく、チェックイン日とチェックアウト日を 2 つのパラメーターとして受け取り、その日付のブロックが利用可能かどうかをテストする関数が必要になるでしょう。

于 2012-10-31T21:17:42.787 に答える