From 366950d2d7c06ecbde76c69b921baa8f3beb562a Mon Sep 17 00:00:00 2001 From: shreesh arora Date: Fri, 11 Mar 2022 17:19:37 +0530 Subject: [PATCH 1/8] Added feature occupancy wise search --- .../sass/vendor/bootstrap-sass/_buttons.scss | 10 +- .../orders/_current_cart_details_data.tpl | 67 +- .../controllers/orders/_new_product.tpl | 90 +- .../controllers/orders/_product_line.tpl | 85 +- .../template/controllers/orders/form.tpl | 260 +- .../controllers/orders/helpers/view/view.tpl | 16 + .../controllers/products/occupancy.tpl | 48 +- classes/Cart.php | 30 +- classes/Cookie.php | 2 +- classes/PaymentModule.php | 18 +- classes/Product.php | 6 +- classes/controller/FrontController.php | 14 + classes/order/Order.php | 6 + classes/pdf/HTMLTemplateInvoice.php | 7 +- controllers/admin/AdminCartsController.php | 70 + controllers/admin/AdminOrdersController.php | 347 ++- .../admin/AdminPPreferencesController.php | 71 +- controllers/admin/AdminProductsController.php | 37 +- controllers/admin/AdminStatsController.php | 2 +- controllers/front/CartController.php | 237 +- controllers/front/CategoryController.php | 43 +- .../front/OrderConfirmationController.php | 8 + controllers/front/OrderDetailController.php | 8 +- controllers/front/ProductController.php | 102 +- install/data/db_structure.sql | 2 +- js/admin/orders.js | 310 +- js/daterangepicker/LICENSE.txt | 21 + js/daterangepicker/jquery.daterangepicker.css | 460 +++ js/daterangepicker/jquery.daterangepicker.js | 2638 +++++++++++++++++ .../jquery.daterangepicker.min.css | 1 + .../jquery.daterangepicker.min.js | 7 + js/daterangepicker/moment.min.js | 2 + js/daterangepicker/qlodaterangepicker.js | 43 + js/validate.js | 2 - modules/blockcart/ajax-cart.js | 205 +- modules/blockcart/blockcart.php | 48 +- modules/blockcart/blockcart.tpl | 13 +- .../checkroomavailabilityajaxprocess.php | 24 +- .../classes/HotelBookingDemands.php | 4 +- .../classes/HotelBookingDetail.php | 1421 ++++++--- .../classes/HotelCartBookingData.php | 184 +- .../classes/HotelHelper.php | 42 + .../classes/HotelOrderRestrictDate.php | 15 +- .../classes/HotelReservationSystemDb.php | 11 +- .../classes/HotelRoomType.php | 60 +- .../classes/HotelRoomTypeFeaturePricing.php | 54 +- .../admin/AdminAddHotelController.php | 1 + .../admin/AdminHotelFeaturePricesSettings.php | 2 + .../AdminHotelGeneralSettingsController.php | 32 + .../AdminHotelRoomsBookingController.php | 90 +- .../views/js/HotelReservationAdmin.js | 449 ++- .../hotel_rooms_booking/helpers/view/view.tpl | 244 +- .../statsbestproducts/statsbestproducts.php | 2 +- modules/statscheckup/statscheckup.php | 2 +- modules/statsproduct/statsproduct.php | 2 +- .../wkhotelfilterblock/wkhotelfilterblock.php | 27 +- .../classes/WkRoomSearchHelper.php | 128 +- .../views/css/wk-category-search.css | 91 +- .../views/css/wk-global-search.css | 207 +- .../views/css/wk-landing-page-search.css | 30 +- .../views/css/wk-roomtype-search.css | 77 +- .../views/js/wk-room-search-block.js | 457 ++- .../templates/hook/categoryPageSearch.tpl | 55 +- .../templates/hook/landingPageSearch.tpl | 100 +- .../templates/hook/roomTypePageSearch.tpl | 64 +- .../views/templates/hook/searchForm.tpl | 200 ++ .../wkroomsearchblock/wkroomsearchblock.php | 49 +- pdf/invoice.product-tab.tpl | 9 +- .../_partials/booking-form.tpl | 104 +- .../_partials/cart_booking_demands.tpl | 3 +- .../_partials/occupancy_field.tpl | 155 + .../_partials/order_booking_demands.tpl | 3 +- .../_partials/quantity_field.tpl | 16 + .../_partials/room_type_list.tpl | 145 +- .../hotel-reservation-theme/css/category.css | 90 +- .../css/daterangepicker.css | 85 + themes/hotel-reservation-theme/css/global.css | 121 +- .../hotel-reservation-theme/css/product.css | 64 +- themes/hotel-reservation-theme/global.tpl | 23 + .../img/icon/icon-dropdown-arrow.svg | 20 + .../img/icon/icon-hotel.svg | 25 + .../img/icon/icon-users.svg | 25 + .../js/autoload/15-jquery.uniform-modified.js | 2 +- themes/hotel-reservation-theme/js/category.js | 81 - themes/hotel-reservation-theme/js/global.js | 322 +- .../js/modules/blockcart/ajax-cart.js | 205 +- themes/hotel-reservation-theme/js/product.js | 228 +- .../modules/blockcart/blockcart.tpl | 11 +- .../order-confirmation.tpl | 2 +- .../hotel-reservation-theme/order-detail.tpl | 12 +- .../hotel-reservation-theme/shopping-cart.tpl | 12 +- 91 files changed, 9153 insertions(+), 2070 deletions(-) create mode 100644 js/daterangepicker/LICENSE.txt create mode 100644 js/daterangepicker/jquery.daterangepicker.css create mode 100755 js/daterangepicker/jquery.daterangepicker.js create mode 100644 js/daterangepicker/jquery.daterangepicker.min.css create mode 100755 js/daterangepicker/jquery.daterangepicker.min.js create mode 100644 js/daterangepicker/moment.min.js create mode 100644 js/daterangepicker/qlodaterangepicker.js create mode 100644 modules/wkroomsearchblock/views/templates/hook/searchForm.tpl create mode 100644 themes/hotel-reservation-theme/_partials/occupancy_field.tpl create mode 100644 themes/hotel-reservation-theme/_partials/quantity_field.tpl create mode 100644 themes/hotel-reservation-theme/css/daterangepicker.css create mode 100644 themes/hotel-reservation-theme/img/icon/icon-dropdown-arrow.svg create mode 100644 themes/hotel-reservation-theme/img/icon/icon-hotel.svg create mode 100644 themes/hotel-reservation-theme/img/icon/icon-users.svg diff --git a/admin/themes/default/sass/vendor/bootstrap-sass/_buttons.scss b/admin/themes/default/sass/vendor/bootstrap-sass/_buttons.scss index 271ae468f..75c8d0700 100644 --- a/admin/themes/default/sass/vendor/bootstrap-sass/_buttons.scss +++ b/admin/themes/default/sass/vendor/bootstrap-sass/_buttons.scss @@ -50,6 +50,14 @@ } } +// buttons text align +.btn-left { + text-align: left; +} +.btn-right { + text-align: right; +} + // Alternate buttons // -------------------------------------------------- @@ -140,8 +148,6 @@ .btn-block { display: block; width: 100%; - padding-left: 0; - padding-right: 0; } // Vertically space out multiple block buttons diff --git a/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl b/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl index c26576861..d3d517b2f 100644 --- a/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl +++ b/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl @@ -23,7 +23,7 @@ {l s='Cart Details'}
-
+
@@ -31,6 +31,9 @@ + {if $occupancy_wise_booking} + + {/if} @@ -42,7 +45,7 @@ {if isset($cart_detail_data) && $cart_detail_data} {assign var=curr_id value=$cart->id_currency|intval} {foreach from=$cart_detail_data item=data} - + + {if $occupancy_wise_booking} + + {/if} - - + {* *} {*{if ($order->hasBeenPaid())}{/if} {if $display_warehouse}{/if} {if ($order->hasBeenDelivered())}{/if} *} - + + {if isset($refundReqBookings) && $refundReqBookings} @@ -1412,6 +1413,21 @@ {addJsDefL name=txtSomeErr}{l s='Some error occurred. Please try again.' js=1}{/addJsDefL} {addJsDefL name=txtDeleteSucc}{l s='Deleted successfully' js=1}{/addJsDefL} {addJsDefL name=txtInvalidDemandVal}{l s='Invalid demand value found' js=1}{/addJsDefL} + {addJsDefL name='select_age_txt'}{l s='Select age' js=1}{/addJsDefL} + {addJsDefL name='under_1_age'}{l s='Under 1' js=1}{/addJsDefL} + {addJsDefL name='room_txt'}{l s='Room' js=1}{/addJsDefL} + {addJsDefL name='rooms_txt'}{l s='Rooms' js=1}{/addJsDefL} + {addJsDefL name='remove_txt'}{l s='Remove' js=1}{/addJsDefL} + {addJsDefL name='adult_txt'}{l s='Adult' js=1}{/addJsDefL} + {addJsDefL name='adults_txt'}{l s='Adults' js=1}{/addJsDefL} + {addJsDefL name='child_txt'}{l s='Child' js=1}{/addJsDefL} + {addJsDefL name='children_txt'}{l s='Children' js=1}{/addJsDefL} + {addJsDefL name='below_txt'}{l s='Below' js=1}{/addJsDefL} + {addJsDefL name='years_txt'}{l s='years' js=1}{/addJsDefL} + {addJsDefL name='all_children_txt'}{l s='years' js=1}{/addJsDefL} + {addJsDefL name='invalid_occupancy_txt'}{l s='Invalid occupancy(adults/children) found.' js=1}{/addJsDefL} + {addJsDef max_child_age=$max_child_age|escape:'quotes':'UTF-8'} + {addJsDef max_child_in_room=$max_child_in_room|escape:'quotes':'UTF-8'} {/strip} {* Apply javascript for the page *} diff --git a/admin/themes/default/template/controllers/products/occupancy.tpl b/admin/themes/default/template/controllers/products/occupancy.tpl index c38cd0b92..15b7b3527 100644 --- a/admin/themes/default/template/controllers/products/occupancy.tpl +++ b/admin/themes/default/template/controllers/products/occupancy.tpl @@ -24,16 +24,14 @@

{l s='Occupancy'}

- {l s='Set the occupancy of this room type. Enter how much adults and children this room type can accomodate.'} -

- {l s='Note'} : {l s='These occupancy settings will not affect "ROOM TYPE ADDITIONAL FACILITIES" any way. It will work separately.'} + {l s='Below, enter the base occupancy of this room type.'}
@@ -44,7 +42,7 @@
@@ -53,6 +51,46 @@
+
+ +
+ {l s='Below, enter the maximum of adult or children which can be accommodated in a room of this room type. Also, enter maximum number of guests for this room type.'} +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
{l s='Room Image'} {l s='Room Type'} {l s='Duration'}{l s='Occupancy'}{l s='Unit Price (tax excl)'} {l s='Additinal Facilities (tax excl)'} {l s='Total Rooms Price (tax excl)'}
{$data.room_num|escape:'html':'UTF-8'} @@ -58,13 +61,71 @@ {/if} {dateFormat date=$data.date_from} - {dateFormat date=$data.date_to} + + {if $data.feature_price_diff != 0} {assign var=shown_room_type_price value=$data.feature_price_tax_excl} {else} {assign var=shown_room_type_price value=$data.product_price_tax_excl} {/if} - + {if isset($data.extra_demands) && $data.extra_demands} diff --git a/admin/themes/default/template/controllers/orders/_new_product.tpl b/admin/themes/default/template/controllers/orders/_new_product.tpl index e67cc63ff..5aa06c218 100644 --- a/admin/themes/default/template/controllers/orders/_new_product.tpl +++ b/admin/themes/default/template/controllers/orders/_new_product.tpl @@ -64,7 +64,7 @@ + {if $order->is_occupnacy_provided && $data['children']} + + {else} + {if $data['adult']}{$data['adult']}{/if} {if $data['adult'] > 1}{l s='Adults'}{else}{l s='Adult'}{/if}{if {$data['children']}}, {$data['children']} {if $data['children'] > 1}{l s='Children'}{else}{l s='Child'}{/if}{/if} + {/if} + {if $order->is_occupnacy_provided} + + {else} + + {/if} diff --git a/admin/themes/default/template/controllers/orders/form.tpl b/admin/themes/default/template/controllers/orders/form.tpl index 1d80ec936..209f9495a 100644 --- a/admin/themes/default/template/controllers/orders/form.tpl +++ b/admin/themes/default/template/controllers/orders/form.tpl @@ -241,12 +241,13 @@ e.preventDefault(); var cart_row = $(this).closest('tr'); var params = { - id_booking_data: parseInt($(this).attr('data-id-booking-data')), - id_product: parseInt($(this).attr('data-id-product')), - id_room: parseInt($(this).attr('data-id-room')), - date_from: $(this).attr('data-date-from'), - date_to: $(this).attr('data-date-to'), + id_booking_data: parseInt($(cart_row).attr('data-id-booking-data')), + id_product: parseInt($(cart_row).attr('data-id-product')), + id_room: parseInt($(cart_row).attr('data-id-room')), + date_from: $(cart_row).attr('data-date-from'), + date_to: $(cart_row).attr('data-date-to'), price: $(this).val(), + id_cart: id_cart }; updateProductPrice(params, cart_row); }) @@ -272,6 +273,8 @@ } }); }); + + initOccupancyField(); resetBind(); $('#customer').focus(); @@ -334,6 +337,213 @@ }); }); + {literal} + function initOccupancyField() + { + $(document).on('click', '.booking_occupancy_wrapper .remove-room-link', function(e) { + e.preventDefault(); + + booking_occupancy_inner = $(this).closest('.booking_occupancy_inner'); + $(this).closest('.occupancy_info_block').remove(); + $(booking_occupancy_inner).find('.room_num_wrapper').each(function(key, val) { + $(this).text(room_txt + ' - '+ (key+1) ); + }); + setRoomTypeGuestOccupancy($(booking_occupancy_inner).closest('.booking_occupancy_wrapper')); + }); + + $(document).on('change', '.num_occupancy', function(e) { + let current_room_occupancy = 0; + $(this).closest('.occupancy_info_block').find('.num_occupancy').each(function(){ + current_room_occupancy += parseInt($(this).val()); + }); + let max_guests_in_room = $(this).closest(".booking_occupancy_wrapper").find('.max_guests').val(); + let max_allowed_for_current = (max_guests_in_room - current_room_occupancy) + parseInt($(this).val()); + if ($(this).val() > $(this).attr('max')) { + $(this).val($(this).attr('max')); + } + if ($(this).val() > max_allowed_for_current) { + $(this).val(max_allowed_for_current); + } + if ($(this).hasClass('num_children')) { + var totalChilds = $(this).closest('.occupancy_info_block').find('.guest_child_age').length; + if (totalChilds < $(this).val()) { + if (totalChilds < max_child_in_room) { + $(this).closest('.occupancy_info_block').find('.children_age_info_block').show(); + while ($(this).closest('.occupancy_info_block').find('.guest_child_age').length < $(this).val()) { + + + var roomBlockIndex = parseInt($(this).closest('.occupancy_info_block').attr('occ_block_index')); + + var childAgeSelect = '

'; + childAgeSelect += ''; + childAgeSelect += '

'; + $(this).closest('.occupancy_info_block').find('.children_ages').append(childAgeSelect); + } + } + } else { + let child = $(this).val(); + $(this).closest('.occupancy_info_block').find('.guest_child_age').each(function(ind, element) { + if (child <= ind) { + $(element).parent().remove(); + } + }); + if (child == 0) { + $(this).closest('.occupancy_info_block').find('.children_age_info_block').hide(); + } + + } + } + setRoomTypeGuestOccupancy($(this).closest('.booking_occupancy_wrapper')); + + }); + + + $(document).on('click', '.booking_guest_occupancy', function(e) { + $(this).parent().toggleClass('open'); + }); + + $(document).on('click', function(e) { + if ($('.booking_occupancy_wrapper:visible').length) { + var occupancy_wrapper = $('.booking_occupancy_wrapper:visible'); + $(occupancy_wrapper).find(".occupancy_info_block").addClass('selected'); + if (!($(e.target).closest(".booking_occupancy_wrapper").length || $(e.target).closest(".booking_guest_occupancy").length || $(e.target).closest(".ajax_add_to_cart_button").length || $(e.target).closest(".exclusive.book_now_submit").length)) { + let hasErrors = 0; + + let adult = $(occupancy_wrapper).find(".num_adults").map(function(){return $(this).val();}).get(); + let children = $(occupancy_wrapper).find(".num_children").map(function(){return $(this).val();}).get(); + let child_ages = $(occupancy_wrapper).find(".guest_child_age").map(function(){return $(this).val();}).get(); + + // start validating above values + if (!adult.length || (adult.length != children.length)) { + hasErrors = 1; + showErrorMessage(invalid_occupancy_txt); + } else { + $(occupancy_wrapper).find('.occupancy_count').removeClass('error_border'); + + // validate values of adult and children + adult.forEach(function (item, index) { + if (isNaN(item) || parseInt(item) < 1) { + hasErrors = 1; + $(occupancy_wrapper).find(".num_adults").eq(index).closest('.occupancy_count_block').find('.occupancy_count').addClass('error_border'); + } + if (isNaN(children[index])) { + hasErrors = 1; + $(occupancy_wrapper).find(".num_children").eq(index).closest('.occupancy_count_block').find('.occupancy_count').addClass('error_border'); + } + }); + + // validate values of selected child ages + $(occupancy_wrapper).find('.guest_child_age').parent().removeClass('has-error'); + child_ages.forEach(function (age, index) { + age = parseInt(age); + if (isNaN(age) || (age < 0) || (age >= parseInt(max_child_age))) { + hasErrors = 1; + $(occupancy_wrapper).find(".guest_child_age").eq(index).parent().addClass('has-error'); + } + }); + } + if (hasErrors == 0) { + $(occupancy_wrapper).parent().removeClass('open'); + $(document).trigger( "QloApps:updateRoomOccupancy", [occupancy_wrapper]); + } + } + } + }); + + $(document).on('QloApps:updateRoomOccupancy', function (e, occupancy_wrapper) { + e.preventDefault(); + let cart_row = $(occupancy_wrapper).closest('tr'); + let occupancy = getBookingOccupancyDetails(cart_row); + let params = { + id_cart: id_cart, + id_booking_data: parseInt($(cart_row).attr('data-id-booking-data')), + occupancy : occupancy.shift(), + }; + updateProductOccupancy(params, cart_row); + }); + } + function getBookingOccupancyDetails(bookingform) + { + let occupancy; + let selected_occupancy = $(bookingform).find(".occupancy_info_block.selected") + if (selected_occupancy.length) { + occupancy = []; + $(selected_occupancy).each(function(ind, element) { + if (parseInt($(element).find('.num_adults').val())) { + let child_ages = []; + $(element).find('.guest_child_age').each(function(index) { + if ($(this).val() > -1) { + child_ages.push($(this).val()); + } + }); + if ($(element).find('.num_children').val()) { + if (child_ages.length != $(element).find('.num_children').val()) { + $(bookingform).find('.booking_occupancy_wrapper').parent().addClass('open'); + occupancy = false; + return false; + } + } + occupancy.push({ + 'adult': $(element).find('.num_adults').val(), + 'children': $(element).find('.num_children').val(), + 'child_ages': child_ages + }); + } else { + $(bookingform).find('.booking_occupancy_wrapper').parent().addClass('open'); + occupancy = false; + return false; + } + }); + } else { + $(bookingform).find('.booking_occupancy_wrapper').parent().addClass('open'); + occupancy = false; + } + + return occupancy; + } + {/literal} + + function setRoomTypeGuestOccupancy(booking_occupancy_wrapper) + { + var adult = 0; + var children = 0; + var rooms = $(booking_occupancy_wrapper).find('.occupancy_info_block').length; + + $(booking_occupancy_wrapper).find(".num_adults" ).each(function(key, val) { + adult += parseInt($(this).val()); + }); + $(booking_occupancy_wrapper).find(".num_children" ).each(function(key, val) { + children += parseInt($(this).val()); + }); + + var guestButtonVal = parseInt(adult) + ' '; + if (parseInt(adult) > 1) { + guestButtonVal += adults_txt; + } else { + guestButtonVal += adult_txt; + } + if (parseInt(children) > 0) { + if (parseInt(children) > 1) { + guestButtonVal += ', ' + parseInt(children) + ' ' + children_txt; + } else { + guestButtonVal += ', ' + parseInt(children) + ' ' + child_txt; + } + } + // if (parseInt(rooms) > 1) { + // guestButtonVal += ', ' + parseInt(rooms) + ' ' + rooms_txt; + // } else { + // guestButtonVal += ', ' + parseInt(rooms) + ' ' + room_txt; + // } + // console.log($(booking_occupancy_wrapper).siblings('.booking_guest_occupancy > span')); + $(booking_occupancy_wrapper).siblings('.booking_guest_occupancy').find('span').text(guestButtonVal); + } + function resetBind() { $('.fancybox').fancybox({ @@ -391,7 +601,6 @@ function updateProductPrice(params, cart_row) { $.extend(params, { - id_cart: id_cart, price: new Number(params.price.replace(",",".")).toFixed(4).toString(), }); @@ -414,6 +623,28 @@ }); } + function updateProductOccupancy(params, cart_row) + { + $.ajax({ + type:"POST", + url: "{$link->getAdminLink('AdminCarts')|addslashes}", + async: true, + dataType: "JSON", + data: { + ajax: "1", + token: "{getAdminToken tab='AdminCarts'}", + tab: "AdminCarts", + action: "updateProductOccupancy", + params: params, + }, + success : function(response) { + updateCartLine(response.curr_booking_info, cart_row); + updateCartSummaryData(response.cart_info); + } + }); + } + + function updateCartLine(data, cart_row) { $(cart_row).find('.cart_line_total_rooms_price').html(data.amt_with_qty); $(cart_row).find('.cart_line_total_price').html(data.total_price); @@ -1687,6 +1918,23 @@ +{strip} + {addJsDef max_child_age=$max_child_age} + {addJsDef max_child_in_room=$max_child_in_room} + {addJsDefL name='select_age_txt'}{l s='Select age' js=1}{/addJsDefL} + {addJsDefL name='under_1_age'}{l s='Under 1' js=1}{/addJsDefL} + {addJsDefL name='room_txt'}{l s='Room' js=1}{/addJsDefL} + {addJsDefL name='rooms_txt'}{l s='Rooms' js=1}{/addJsDefL} + {addJsDefL name='remove_txt'}{l s='Remove' js=1}{/addJsDefL} + {addJsDefL name='adult_txt'}{l s='Adult' js=1}{/addJsDefL} + {addJsDefL name='adults_txt'}{l s='Adults' js=1}{/addJsDefL} + {addJsDefL name='child_txt'}{l s='Child' js=1}{/addJsDefL} + {addJsDefL name='children_txt'}{l s='Children' js=1}{/addJsDefL} + {addJsDefL name='below_txt'}{l s='Below' js=1}{/addJsDefL} + {addJsDefL name='years_txt'}{l s='years' js=1}{/addJsDefL} + {addJsDefL name='all_children_txt'}{l s='years' js=1}{/addJsDefL} + {addJsDefL name='invalid_occupancy_txt'}{l s='Invalid occupancy(adults/children) found.' js=1}{/addJsDefL} +{/strip}
diff --git a/admin/themes/default/template/controllers/orders/helpers/view/view.tpl b/admin/themes/default/template/controllers/orders/helpers/view/view.tpl index ea80d46a9..b03f3d1af 100644 --- a/admin/themes/default/template/controllers/orders/helpers/view/view.tpl +++ b/admin/themes/default/template/controllers/orders/helpers/view/view.tpl @@ -981,6 +981,7 @@
{l s='Room Type'} {l s='Hotel Name'} {l s='Duration'}{l s='Occupancy'} {l s='Unit Price (Tax excl.)'} {l s='Total Price (Tax incl.)'}
' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + getWeekHead() + + ' ' + + ' ' + + '
' + + ' ' + + arrowPrev + + ' ' + + ' ' + + ' ' + + (opt.singleDate || !opt.stickyMonths ? '' + arrowNext + '' : '') + + '
'; + + if (hasMonth2()) { + html += '
' + getGapHTML() + '
' + + '' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + getWeekHead() + + ' ' + + ' ' + + '
' + + (!opt.stickyMonths ? '' + arrowPrev + '' : '') + + ' ' + + ' ' + + ' ' + arrowNext + '' + + '
'; + + } + //+'
' + html += '
' + + '
' + + '
'; + if (!opt.singleDate) { + html += '
'; + } + html += '
' + + '
' + + '
'; + + html += ''; + + + return $(html); + } + + function getApplyBtnClass() { + var klass = ''; + if (opt.autoClose === true) { + klass += ' hide'; + } + if (opt.applyBtnClass !== '') { + klass += ' ' + opt.applyBtnClass; + } + return klass; + } + + function getWeekHead() { + var prepend = opt.showWeekNumbers ? '' + translate('week-number') + '' : ''; + if (opt.startOfWeek == 'monday') { + return prepend + '' + translate('week-1') + '' + + '' + translate('week-2') + '' + + '' + translate('week-3') + '' + + '' + translate('week-4') + '' + + '' + translate('week-5') + '' + + '' + translate('week-6') + '' + + '' + translate('week-7') + ''; + } else { + return prepend + '' + translate('week-7') + '' + + '' + translate('week-1') + '' + + '' + translate('week-2') + '' + + '' + translate('week-3') + '' + + '' + translate('week-4') + '' + + '' + translate('week-5') + '' + + '' + translate('week-6') + ''; + } + } + + function isMonthOutOfBounds(month) { + month = moment(month); + if (opt.startDate && month.endOf('month').isBefore(opt.startDate)) { + return true; + } + if (opt.endDate && month.startOf('month').isAfter(opt.endDate)) { + return true; + } + return false; + } + + function getGapHTML() { + var html = ['
']; + for (var i = 0; i < 20; i++) { + html.push('
' + + '
' + + '
' + + '
' + + '
'); + } + html.push('
'); + return html.join(''); + } + + function hasMonth2() { + return (!opt.singleMonth); + } + + function attributesCallbacks(initialObject, callbacksArray, today) { + var resultObject = $.extend(true, {}, initialObject); + + $.each(callbacksArray, function(cbAttrIndex, cbAttr) { + var addAttributes = cbAttr(today); + for (var attr in addAttributes) { + if (resultObject.hasOwnProperty(attr)) { + resultObject[attr] += addAttributes[attr]; + } else { + resultObject[attr] = addAttributes[attr]; + } + } + }); + + var attrString = ''; + + for (var attr in resultObject) { + if (resultObject.hasOwnProperty(attr)) { + attrString += attr + '="' + resultObject[attr] + '" '; + } + } + + return attrString; + } + + function createMonthHTML(d) { + var days = []; + d.setDate(1); + var lastMonth = new Date(d.getTime() - 86400000); + var now = new Date(); + + var dayOfWeek = d.getDay(); + if ((dayOfWeek === 0) && (opt.startOfWeek === 'monday')) { + // add one week + dayOfWeek = 7; + } + var today, valid; + + if (dayOfWeek > 0) { + for (var i = dayOfWeek; i > 0; i--) { + var day = new Date(d.getTime() - 86400000 * i); + valid = isValidTime(day.getTime()); + if (opt.startDate && compare_day(day, opt.startDate) < 0) valid = false; + if (opt.endDate && compare_day(day, opt.endDate) > 0) valid = false; + days.push({ + date: day, + type: 'lastMonth', + day: day.getDate(), + time: day.getTime(), + valid: valid + }); + } + } + var toMonth = d.getMonth(); + for (var i = 0; i < 40; i++) { + today = moment(d).add(i, 'days').toDate(); + valid = isValidTime(today.getTime()); + if (opt.startDate && compare_day(today, opt.startDate) < 0) valid = false; + if (opt.endDate && compare_day(today, opt.endDate) > 0) valid = false; + days.push({ + date: today, + type: today.getMonth() == toMonth ? 'toMonth' : 'nextMonth', + day: today.getDate(), + time: today.getTime(), + valid: valid + }); + } + var html = []; + for (var week = 0; week < 6; week++) { + if (days[week * 7].type == 'nextMonth') break; + html.push(''); + + for (var day = 0; day < 7; day++) { + var _day = (opt.startOfWeek == 'monday') ? day + 1 : day; + today = days[week * 7 + _day]; + var highlightToday = moment(today.time).format('L') == moment(now).format('L'); + today.extraClass = ''; + today.tooltip = ''; + if (today.valid && opt.beforeShowDay && typeof opt.beforeShowDay == 'function') { + var _r = opt.beforeShowDay(moment(today.time).toDate()); + today.valid = _r[0]; + today.extraClass = _r[1] || ''; + today.tooltip = _r[2] || ''; + if (today.tooltip !== '') today.extraClass += ' has-tooltip '; + } + + var todayDivAttr = { + time: today.time, + 'data-tooltip': today.tooltip, + 'class': 'day ' + today.type + ' ' + today.extraClass + ' ' + (today.valid ? 'valid' : 'invalid') + ' ' + (highlightToday ? 'real-today' : '') + }; + + if (day === 0 && opt.showWeekNumbers) { + html.push('
' + opt.getWeekNumber(today.date) + '
'); + } + + html.push('
' + showDayHTML(today.time, today.day) + '
'); + } + html.push(''); + } + return html.join(''); + } + + function showDayHTML(time, date) { + if (opt.showDateFilter && typeof opt.showDateFilter == 'function') return opt.showDateFilter(time, date); + return date; + } + + function getLanguages() { + if (opt.language == 'auto') { + var language = navigator.language ? navigator.language : navigator.browserLanguage; + if (!language) { + return $.dateRangePickerLanguages['default']; + } + language = language.toLowerCase(); + if(language in $.dateRangePickerLanguages){ + return $.dateRangePickerLanguages[language]; + } + + return $.dateRangePickerLanguages['default']; + } else if (opt.language && opt.language in $.dateRangePickerLanguages) { + return $.dateRangePickerLanguages[opt.language]; + } else { + return $.dateRangePickerLanguages['default']; + } + } + + /** + * Translate language string, try both the provided translation key, as the lower case version + */ + function translate(translationKey) { + var translationKeyLowerCase = translationKey.toLowerCase(); + console.log(languages); + var result = (translationKey in languages) ? languages[translationKey] : (translationKeyLowerCase in languages) ? languages[translationKeyLowerCase] : null; + var defaultLanguage = $.dateRangePickerLanguages['default']; + if (result == null) result = (translationKey in defaultLanguage) ? defaultLanguage[translationKey] : (translationKeyLowerCase in defaultLanguage) ? defaultLanguage[translationKeyLowerCase] : ''; + console.log(result); + + return result; + } + + function getDefaultTime() { + var defaultTime = opt.defaultTime ? opt.defaultTime : new Date(); + + if (opt.lookBehind) { + if (opt.startDate && compare_month(defaultTime, opt.startDate) < 0) defaultTime = nextMonth(moment(opt.startDate).toDate()); + if (opt.endDate && compare_month(defaultTime, opt.endDate) > 0) defaultTime = moment(opt.endDate).toDate(); + } else { + if (opt.startDate && compare_month(defaultTime, opt.startDate) < 0) defaultTime = moment(opt.startDate).toDate(); + if (opt.endDate && compare_month(nextMonth(defaultTime), opt.endDate) > 0) defaultTime = prevMonth(moment(opt.endDate).toDate()); + } + + if (opt.singleDate) { + if (opt.startDate && compare_month(defaultTime, opt.startDate) < 0) defaultTime = moment(opt.startDate).toDate(); + if (opt.endDate && compare_month(defaultTime, opt.endDate) > 0) defaultTime = moment(opt.endDate).toDate(); + } + + return defaultTime; + } + + function resetMonthsView(time) { + if (!time) { + time = getDefaultTime(); + } + + if (opt.lookBehind) { + showMonth(prevMonth(time), 'month1'); + showMonth(time, 'month2'); + } else { + showMonth(time, 'month1'); + showMonth(nextMonth(time), 'month2'); + } + + if (opt.singleDate) { + showMonth(time, 'month1'); + } + + showSelectedDays(); + showGap(); + } + + function outsideClickClose(evt) { + if (!IsOwnDatePickerClicked(evt, self[0])) { + if (box.is(':visible')) closeDatePicker(); + } + } + + }; +})); diff --git a/js/daterangepicker/jquery.daterangepicker.min.css b/js/daterangepicker/jquery.daterangepicker.min.css new file mode 100644 index 000000000..45d658857 --- /dev/null +++ b/js/daterangepicker/jquery.daterangepicker.min.css @@ -0,0 +1 @@ +.date-picker{width:170px;height:25px;padding:0;border:0;line-height:25px;padding-left:10px;font-size:12px;font-family:Arial,sans-serif;font-weight:700;cursor:pointer;color:#303030;position:relative;z-index:2}.date-picker-wrapper{position:absolute;z-index:1;border:1px solid #bfbfbf;background-color:#efefef;padding:5px 12px;font-size:12px;line-height:20px;color:#aaa;font-family:Arial,sans-serif;-webkit-box-shadow:3px 3px 10px rgba(0,0,0,.5);box-shadow:3px 3px 10px rgba(0,0,0,.5);-webkit-box-sizing:initial;box-sizing:initial}.dp-clearfix{clear:both;height:0;font-size:0}.date-picker-wrapper.inline-wrapper{position:relative;-webkit-box-shadow:none;box-shadow:none;display:inline-block}.date-picker-wrapper.single-date{width:auto}.date-picker-wrapper.no-shortcuts{padding-bottom:12px}.date-picker-wrapper.no-topbar{padding-top:12px}.date-picker-wrapper .footer{font-size:11px;padding-top:3px}.date-picker-wrapper b{color:#666;font-weight:700}.date-picker-wrapper a{color:#6bb4d6;text-decoration:underline}.date-picker-wrapper .month-name{text-transform:uppercase}.date-picker-wrapper .select-wrapper{position:relative;overflow:hidden;display:inline-block;vertical-align:middle}.date-picker-wrapper .select-wrapper:hover{text-decoration:underline}.date-picker-wrapper .month-element{display:inline-block;vertical-align:middle}.date-picker-wrapper .select-wrapper select{position:absolute;margin:0;padding:0;left:0;top:-1px;font-size:inherit;font-style:inherit;font-weight:inherit;text-transform:inherit;color:inherit;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;border:0;outline:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=1)";filter:alpha(opacity=1);opacity:.01}.date-picker-wrapper .month-wrapper{border:1px solid #bfbfbf;border-radius:3px;background-color:#fff;padding:5px;cursor:default;position:relative;_overflow:hidden}.date-picker-wrapper .month-wrapper table{width:190px;float:left}.date-picker-wrapper .month-wrapper table.month2{width:190px;float:left}.date-picker-wrapper .month-wrapper table td,.date-picker-wrapper .month-wrapper table th{vertical-align:middle;text-align:center;line-height:14px;margin:0;padding:0}.date-picker-wrapper .month-wrapper table .day{padding:5px 0;line-height:1;font-size:12px;margin-bottom:1px;color:#ccc;cursor:default}.date-picker-wrapper .month-wrapper table div.day.lastMonth,.date-picker-wrapper .month-wrapper table div.day.nextMonth{color:#999;cursor:default}.date-picker-wrapper .month-wrapper table .day.checked{background-color:#9cdbf7}.date-picker-wrapper .month-wrapper table .week-name{height:20px;line-height:20px;font-weight:100;text-transform:uppercase}.date-picker-wrapper .month-wrapper table .day.has-tooltip{cursor:help!important}.date-picker-wrapper .month-wrapper table .day.has-tooltip .tooltip{white-space:nowrap}.date-picker-wrapper .time label{white-space:nowrap}.date-picker-wrapper .month-wrapper table .day.toMonth.valid{color:#333;cursor:pointer}.date-picker-wrapper .month-wrapper table .day.toMonth.hovering{background-color:#cdecfa}.date-picker-wrapper .month-wrapper table .day.lastMonth,.date-picker-wrapper .month-wrapper table .day.nextMonth{display:none}.date-picker-wrapper .month-wrapper table .day.real-today{background-color:#ffe684}.date-picker-wrapper .month-wrapper table .day.real-today.checked,.date-picker-wrapper .month-wrapper table .day.real-today.hovering{background-color:#70ccd5}.date-picker-wrapper table .caption{height:40px}.date-picker-wrapper table .caption>th:first-of-type,.date-picker-wrapper table .caption>th:last-of-type{width:27px}.date-picker-wrapper table .caption .next,.date-picker-wrapper table .caption .prev{padding:0 5px;cursor:pointer}.date-picker-wrapper table .caption .next:hover,.date-picker-wrapper table .caption .prev:hover{background-color:#ccc;color:#fff}.date-picker-wrapper .gap{position:relative;z-index:1;width:15px;height:100%;background-color:red;font-size:0;line-height:0;float:left;top:-5px;margin:0 10px -10px;visibility:hidden;height:0}.date-picker-wrapper .gap .gap-lines{height:100%;overflow:hidden}.date-picker-wrapper .gap .gap-line{height:15px;width:15px;position:relative}.date-picker-wrapper .gap .gap-line .gap-1{z-index:1;height:0;border-left:8px solid #fff;border-top:8px solid #eee;border-bottom:8px solid #eee}.date-picker-wrapper .gap .gap-line .gap-2{position:absolute;right:0;top:0;z-index:2;height:0;border-left:8px solid transparent;border-top:8px solid #fff}.date-picker-wrapper .gap .gap-line .gap-3{position:absolute;right:0;top:8px;z-index:2;height:0;border-left:8px solid transparent;border-bottom:8px solid #fff}.date-picker-wrapper .gap .gap-top-mask{width:6px;height:1px;position:absolute;top:-1px;left:1px;background-color:#eee;z-index:3}.date-picker-wrapper .gap .gap-bottom-mask{width:6px;height:1px;position:absolute;bottom:-1px;left:7px;background-color:#eee;z-index:3}.date-picker-wrapper .selected-days{display:none}.date-picker-wrapper .drp_top-bar{line-height:1.4;position:relative;padding:10px 40px 10px 0}.date-picker-wrapper .drp_top-bar .error-top,.date-picker-wrapper .drp_top-bar .normal-top{display:none}.date-picker-wrapper .drp_top-bar .default-top{display:block}.date-picker-wrapper .drp_top-bar.error .default-top{display:none}.date-picker-wrapper .drp_top-bar.error .error-top{display:block;color:red}.date-picker-wrapper .drp_top-bar.normal .default-top{display:none}.date-picker-wrapper .drp_top-bar.normal .normal-top{display:block}.date-picker-wrapper .drp_top-bar.normal .normal-top .selection-top{color:#333}.date-picker-wrapper .drp_top-bar .apply-btn{position:absolute;right:0;top:6px;padding:3px 5px;margin:0;font-size:12px;border-radius:4px;cursor:pointer;color:#d9eef7;border:solid 1px #0076a3;background:#0095cd;background:-moz-linear-gradient(top,#00adee,#0078a5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00adee', endColorstr='#0078a5');color:#fff;line-height:initial}.date-picker-wrapper .drp_top-bar .apply-btn.disabled{cursor:pointer;color:#606060;border:solid 1px #b7b7b7;background:#fff;background:-moz-linear-gradient(top,#fff,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed')}.date-picker-wrapper .time{position:relative}.date-picker-wrapper.single-month .time{display:block}.date-picker-wrapper .time input[type=range]{vertical-align:middle;width:129px;padding:0;margin:0;height:20px}.date-picker-wrapper .time1{width:180px;padding:0 5px;text-align:center}.time2{width:180px;padding:0 5px;text-align:center}.date-picker-wrapper .time1{float:left}.date-picker-wrapper .time2{float:right}.date-picker-wrapper .hour{text-align:right}.minute{text-align:right}.date-picker-wrapper .hide{display:none}.date-picker-wrapper .first-date-selected,.date-picker-wrapper .last-date-selected{background-color:#49e!important;color:#fff!important}.date-picker-wrapper .date-range-length-tip{position:absolute;margin-top:-4px;margin-left:-8px;-webkit-box-shadow:0 0 3px rgba(0,0,0,.3);box-shadow:0 0 3px rgba(0,0,0,.3);display:none;background-color:#ff0;padding:0 6px;border-radius:2px;font-size:12px;line-height:16px;-webkit-filter:drop-shadow(0 0 3px rgba(0, 0, 0, .3));-moz-filter:drop-shadow(0 0 3px rgba(0, 0, 0, .3));-ms-filter:drop-shadow(0 0 3px rgba(0, 0, 0, .3));-o-filter:drop-shadow(0 0 3px rgba(0, 0, 0, .3));filter:drop-shadow(0 0 3px rgba(0, 0, 0, .3))}.date-picker-wrapper .date-range-length-tip:after{content:'';position:absolute;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #ff0;left:50%;margin-left:-4px;bottom:-4px}.date-picker-wrapper.two-months.no-gap .month1 .next,.date-picker-wrapper.two-months.no-gap .month2 .prev{display:none}.date-picker-wrapper .week-number{padding:5px 0;line-height:1;font-size:12px;margin-bottom:1px;color:#999;cursor:pointer}.date-picker-wrapper .week-number.week-number-selected{color:#49e;font-weight:700} \ No newline at end of file diff --git a/js/daterangepicker/jquery.daterangepicker.min.js b/js/daterangepicker/jquery.daterangepicker.min.js new file mode 100755 index 000000000..508ddcce6 --- /dev/null +++ b/js/daterangepicker/jquery.daterangepicker.min.js @@ -0,0 +1,7 @@ +/** + * jquery-date-range-picker + * @version v0.21.1 + * @link https://github.com/longbill/jquery-date-range-picker + * @license MIT + */ +!function(e){"function"==typeof define&&define.amd?define(["jquery","moment"],e):"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("jquery"),require("moment")):e(jQuery,moment)}(function(U,Q){"use strict";U.dateRangePickerLanguages={default:{selected:"Selected:",day:"Day",days:"Days",apply:"Close","week-1":"mo","week-2":"tu","week-3":"we","week-4":"th","week-5":"fr","week-6":"sa","week-7":"su","week-number":"W","month-name":["january","february","march","april","may","june","july","august","september","october","november","december"],shortcuts:"Shortcuts","custom-values":"Custom Values",past:"Past",following:"Following",previous:"Previous","prev-week":"Week","prev-month":"Month","prev-year":"Year",next:"Next","next-week":"Week","next-month":"Month","next-year":"Year","less-than":"Date range should not be more than %d days","more-than":"Date range should not be less than %d days","default-more":"Please select a date range longer than %d days","default-single":"Please select a date","default-less":"Please select a date range less than %d days","default-range":"Please select a date range between %d and %d days","default-default":"Please select a date range",time:"Time",hour:"Hour",minute:"Minute"},id:{selected:"Terpilih:",day:"Hari",days:"Hari",apply:"Tutup","week-1":"sen","week-2":"sel","week-3":"rab","week-4":"kam","week-5":"jum","week-6":"sab","week-7":"min","week-number":"W","month-name":["januari","februari","maret","april","mei","juni","juli","agustus","september","oktober","november","desember"],shortcuts:"Pintas","custom-values":"Nilai yang ditentukan",past:"Yang Lalu",following:"Mengikuti",previous:"Sebelumnya","prev-week":"Minggu","prev-month":"Bulan","prev-year":"Tahun",next:"Selanjutnya","next-week":"Minggu","next-month":"Bulan","next-year":"Tahun","less-than":"Tanggal harus lebih dari %d hari","more-than":"Tanggal harus kurang dari %d hari","default-more":"Jarak tanggal harus lebih lama dari %d hari","default-single":"Silakan pilih tanggal","default-less":"Jarak rentang tanggal tidak boleh lebih lama dari %d hari","default-range":"Rentang tanggal harus antara %d dan %d hari","default-default":"Silakan pilih rentang tanggal",time:"Waktu",hour:"Jam",minute:"Menit"},az:{selected:"Seçildi:",day:" gün",days:" gün",apply:"tətbiq","week-1":"1","week-2":"2","week-3":"3","week-4":"4","week-5":"5","week-6":"6","week-7":"7","month-name":["yanvar","fevral","mart","aprel","may","iyun","iyul","avqust","sentyabr","oktyabr","noyabr","dekabr"],shortcuts:"Qısayollar",past:"Keçmiş",following:"Növbəti",previous:"   ","prev-week":"Öncəki həftə","prev-month":"Öncəki ay","prev-year":"Öncəki il",next:"   ","next-week":"Növbəti həftə","next-month":"Növbəti ay","next-year":"Növbəti il","less-than":"Tarix aralığı %d gündən çox olmamalıdır","more-than":"Tarix aralığı %d gündən az olmamalıdır","default-more":"%d gündən çox bir tarix seçin","default-single":"Tarix seçin","default-less":"%d gündən az bir tarix seçin","default-range":"%d və %d gün aralığında tarixlər seçin","default-default":"Tarix aralığı seçin"},bg:{selected:"Избрано:",day:"Ден",days:"Дни",apply:"Затвори","week-1":"пн","week-2":"вт","week-3":"ср","week-4":"чт","week-5":"пт","week-6":"сб","week-7":"нд","week-number":"С","month-name":["януари","февруари","март","април","май","юни","юли","август","септември","октомври","ноември","декември"],shortcuts:"Преки пътища","custom-values":"Персонализирани стойности",past:"Минал",following:"Следващ",previous:"Предишен","prev-week":"Седмица","prev-month":"Месец","prev-year":"Година",next:"Следващ","next-week":"Седмица","next-month":"Месец","next-year":"Година","less-than":"Периодът от време не трябва да е повече от %d дни","more-than":"Периодът от време не трябва да е по-малко от %d дни","default-more":"Моля изберете период по-дълъг от %d дни","default-single":"Моля изберете дата","default-less":"Моля изберете период по-къс от %d дни","default-range":"Моля изберете период между %d и %d дни","default-default":"Моля изберете период",time:"Време",hour:"Час",minute:"Минута"},cn:{selected:"已选择:",day:"天",days:"天",apply:"确定","week-1":"一","week-2":"二","week-3":"三","week-4":"四","week-5":"五","week-6":"六","week-7":"日","week-number":"周","month-name":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],shortcuts:"快捷选择",past:"过去",following:"将来",previous:"   ","prev-week":"上周","prev-month":"上个月","prev-year":"去年",next:"   ","next-week":"下周","next-month":"下个月","next-year":"明年","less-than":"所选日期范围不能大于%d天","more-than":"所选日期范围不能小于%d天","default-more":"请选择大于%d天的日期范围","default-less":"请选择小于%d天的日期范围","default-range":"请选择%d天到%d天的日期范围","default-single":"请选择一个日期","default-default":"请选择一个日期范围",time:"时间",hour:"小时",minute:"分钟"},cz:{selected:"Vybráno:",day:"Den",days:"Dny",apply:"Zavřít","week-1":"po","week-2":"út","week-3":"st","week-4":"čt","week-5":"pá","week-6":"so","week-7":"ne","month-name":["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],shortcuts:"Zkratky",past:"po",following:"následující",previous:"předchozí","prev-week":"týden","prev-month":"měsíc","prev-year":"rok",next:"další","next-week":"týden","next-month":"měsíc","next-year":"rok","less-than":"Rozsah data by neměl být větší než %d dnů","more-than":"Rozsah data by neměl být menší než %d dnů","default-more":"Prosím zvolte rozsah data větší než %d dnů","default-single":"Prosím zvolte datum","default-less":"Prosím zvolte rozsah data menší než %d dnů","default-range":"Prosím zvolte rozsah data mezi %d a %d dny","default-default":"Prosím zvolte rozsah data"},de:{selected:"Auswahl:",day:"Tag",days:"Tage",apply:"Schließen","week-1":"mo","week-2":"di","week-3":"mi","week-4":"do","week-5":"fr","week-6":"sa","week-7":"so","month-name":["januar","februar","märz","april","mai","juni","juli","august","september","oktober","november","dezember"],shortcuts:"Schnellwahl",past:"Vorherige",following:"Folgende",previous:"Vorherige","prev-week":"Woche","prev-month":"Monat","prev-year":"Jahr",next:"Nächste","next-week":"Woche","next-month":"Monat","next-year":"Jahr","less-than":"Datumsbereich darf nicht größer sein als %d Tage","more-than":"Datumsbereich darf nicht kleiner sein als %d Tage","default-more":"Bitte mindestens %d Tage auswählen","default-single":"Bitte ein Datum auswählen","default-less":"Bitte weniger als %d Tage auswählen","default-range":"Bitte einen Datumsbereich zwischen %d und %d Tagen auswählen","default-default":"Bitte ein Start- und Enddatum auswählen",Time:"Zeit",hour:"Stunde",minute:"Minute"},es:{selected:"Seleccionado:",day:"Día",days:"Días",apply:"Cerrar","week-1":"lu","week-2":"ma","week-3":"mi","week-4":"ju","week-5":"vi","week-6":"sa","week-7":"do","month-name":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],shortcuts:"Accesos directos",past:"Pasado",following:"Siguiente",previous:"Anterior","prev-week":"Semana","prev-month":"Mes","prev-year":"Año",next:"Siguiente","next-week":"Semana","next-month":"Mes","next-year":"Año","less-than":"El rango no debería ser mayor de %d días","more-than":"El rango no debería ser menor de %d días","default-more":"Por favor selecciona un rango mayor a %d días","default-single":"Por favor selecciona un día","default-less":"Por favor selecciona un rango menor a %d días","default-range":"Por favor selecciona un rango entre %d y %d días","default-default":"Por favor selecciona un rango de fechas."},fr:{selected:"Sélection:",day:"Jour",days:"Jours",apply:"Fermer","week-1":"lu","week-2":"ma","week-3":"me","week-4":"je","week-5":"ve","week-6":"sa","week-7":"di","month-name":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],shortcuts:"Raccourcis",past:"Passé",following:"Suivant",previous:"Précédent","prev-week":"Semaine","prev-month":"Mois","prev-year":"Année",next:"Suivant","next-week":"Semaine","next-month":"Mois","next-year":"Année","less-than":"L'intervalle ne doit pas être supérieure à %d jours","more-than":"L'intervalle ne doit pas être inférieure à %d jours","default-more":"Merci de choisir une intervalle supérieure à %d jours","default-single":"Merci de choisir une date","default-less":"Merci de choisir une intervalle inférieure %d jours","default-range":"Merci de choisir une intervalle comprise entre %d et %d jours","default-default":"Merci de choisir une date"},hu:{selected:"Kiválasztva:",day:"Nap",days:"Nap",apply:"Ok","week-1":"h","week-2":"k","week-3":"sz","week-4":"cs","week-5":"p","week-6":"sz","week-7":"v","month-name":["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],shortcuts:"Gyorsválasztó",past:"Múlt",following:"Következő",previous:"Előző","prev-week":"Hét","prev-month":"Hónap","prev-year":"Év",next:"Következő","next-week":"Hét","next-month":"Hónap","next-year":"Év","less-than":"A kiválasztás nem lehet több %d napnál","more-than":"A kiválasztás nem lehet több %d napnál","default-more":"Válassz ki egy időszakot ami hosszabb mint %d nap","default-single":"Válassz egy napot","default-less":"Válassz ki egy időszakot ami rövidebb mint %d nap","default-range":"Válassz ki egy %d - %d nap hosszú időszakot","default-default":"Válassz ki egy időszakot"},it:{selected:"Selezionati:",day:"Giorno",days:"Giorni",apply:"Chiudi","week-1":"lu","week-2":"ma","week-3":"me","week-4":"gi","week-5":"ve","week-6":"sa","week-7":"do","month-name":["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],shortcuts:"Scorciatoie",past:"Scorso",following:"Successivo",previous:"Precedente","prev-week":"Settimana","prev-month":"Mese","prev-year":"Anno",next:"Prossimo","next-week":"Settimana","next-month":"Mese","next-year":"Anno","less-than":"L'intervallo non dev'essere maggiore di %d giorni","more-than":"L'intervallo non dev'essere minore di %d giorni","default-more":"Seleziona un intervallo maggiore di %d giorni","default-single":"Seleziona una data","default-less":"Seleziona un intervallo minore di %d giorni","default-range":"Seleziona un intervallo compreso tra i %d e i %d giorni","default-default":"Seleziona un intervallo di date"},ko:{selected:"기간:",day:"일",days:"일간",apply:"닫기","week-1":"월","week-2":"화","week-3":"수","week-4":"목","week-5":"금","week-6":"토","week-7":"일","week-number":"주","month-name":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],shortcuts:"단축키들",past:"지난(오늘기준)",following:"이후(오늘기준)",previous:"이전","prev-week":"1주","prev-month":"1달","prev-year":"1년",next:"다음","next-week":"1주","next-month":"1달","next-year":"1년","less-than":"날짜 범위는 %d 일보다 많을 수 없습니다","more-than":"날짜 범위는 %d 일보다 작을 수 없습니다","default-more":"날짜 범위를 %d 일보다 길게 선택해 주세요","default-single":"날짜를 선택해 주세요","default-less":"%d 일보다 작은 날짜를 선택해 주세요","default-range":"%d와 %d 일 사이의 날짜 범위를 선택해 주세요","default-default":"날짜 범위를 선택해 주세요",time:"시각",hour:"시",minute:"분"},no:{selected:"Valgt:",day:"Dag",days:"Dager",apply:"Lukk","week-1":"ma","week-2":"ti","week-3":"on","week-4":"to","week-5":"fr","week-6":"lø","week-7":"sø","month-name":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],shortcuts:"Snarveier","custom-values":"Egendefinerte Verdier",past:"Over",following:"Følger",previous:"Forrige","prev-week":"Uke","prev-month":"Måned","prev-year":"År",next:"Neste","next-week":"Uke","next-month":"Måned","next-year":"År","less-than":"Datoperioden skal ikkje være lengre enn %d dager","more-than":"Datoperioden skal ikkje være kortere enn %d dager","default-more":"Vennligst velg ein datoperiode lengre enn %d dager","default-single":"Vennligst velg ein dato","default-less":"Vennligst velg ein datoperiode mindre enn %d dager","default-range":"Vennligst velg ein datoperiode mellom %d og %d dager","default-default":"Vennligst velg ein datoperiode",time:"Tid",hour:"Time",minute:"Minutter"},nl:{selected:"Geselecteerd:",day:"Dag",days:"Dagen",apply:"Ok","week-1":"ma","week-2":"di","week-3":"wo","week-4":"do","week-5":"vr","week-6":"za","week-7":"zo","month-name":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],shortcuts:"Snelkoppelingen","custom-values":"Aangepaste waarden",past:"Verleden",following:"Komend",previous:"Vorige","prev-week":"Week","prev-month":"Maand","prev-year":"Jaar",next:"Volgende","next-week":"Week","next-month":"Maand","next-year":"Jaar","less-than":"Interval moet langer dan %d dagen zijn","more-than":"Interval mag niet minder dan %d dagen zijn","default-more":"Selecteer een interval langer dan %dagen","default-single":"Selecteer een datum","default-less":"Selecteer een interval minder dan %d dagen","default-range":"Selecteer een interval tussen %d en %d dagen","default-default":"Selecteer een interval",time:"Tijd",hour:"Uur",minute:"Minuut"},ru:{selected:"Выбрано:",day:"День",days:"Дней",apply:"Применить","week-1":"пн","week-2":"вт","week-3":"ср","week-4":"чт","week-5":"пт","week-6":"сб","week-7":"вс","month-name":["январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь"],shortcuts:"Быстрый выбор","custom-values":"Пользовательские значения",past:"Прошедшие",following:"Следующие",previous:"   ","prev-week":"Неделя","prev-month":"Месяц","prev-year":"Год",next:"   ","next-week":"Неделя","next-month":"Месяц","next-year":"Год","less-than":"Диапазон не может быть больше %d дней","more-than":"Диапазон не может быть меньше %d дней","default-more":"Пожалуйста выберите диапазон больше %d дней","default-single":"Пожалуйста выберите дату","default-less":"Пожалуйста выберите диапазон меньше %d дней","default-range":"Пожалуйста выберите диапазон между %d и %d днями","default-default":"Пожалуйста выберите диапазон",time:"Время",hour:"Часы",minute:"Минуты"},uk:{selected:"Вибрано:",day:"День",days:"Днів",apply:"Застосувати","week-1":"пн","week-2":"вт","week-3":"ср","week-4":"чт","week-5":"пт","week-6":"сб","week-7":"нд","month-name":["січень","лютий","березень","квітень","травень","червень","липень","серпень","вересень","жовтень","листопад","грудень"],shortcuts:"Швидкий вибір","custom-values":"Значення користувача",past:"Минулі",following:"Наступні",previous:"   ","prev-week":"Тиждень","prev-month":"Місяць","prev-year":"Рік",next:"   ","next-week":"Тиждень","next-month":"Місяць","next-year":"Рік","less-than":"Діапазон не може бути більш ніж %d днів","more-than":"Діапазон не може бути меньш ніж %d днів","default-more":"Будь ласка виберіть діапазон більше %d днів","default-single":"Будь ласка виберіть дату","default-less":"Будь ласка виберіть діапазон менше %d днів","default-range":"Будь ласка виберіть діапазон між %d та %d днями","default-default":"Будь ласка виберіть діапазон",time:"Час",hour:"Години",minute:"Хвилини"},pl:{selected:"Wybrany:",day:"Dzień",days:"Dni",apply:"Zamknij","week-1":"pon","week-2":"wt","week-3":"śr","week-4":"czw","week-5":"pt","week-6":"so","week-7":"nd","month-name":["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],shortcuts:"Skróty","custom-values":"Niestandardowe wartości",past:"Przeszłe",following:"Następne",previous:"Poprzednie","prev-week":"tydzień","prev-month":"miesiąc","prev-year":"rok",next:"Następny","next-week":"tydzień","next-month":"miesiąc","next-year":"rok","less-than":"Okres nie powinien być dłuższy niż %d dni","more-than":"Okres nie powinien być krótszy niż %d ni","default-more":"Wybierz okres dłuższy niż %d dni","default-single":"Wybierz datę","default-less":"Wybierz okres krótszy niż %d dni","default-range":"Wybierz okres trwający od %d do %d dni","default-default":"Wybierz okres",time:"Czas",hour:"Godzina",minute:"Minuta"},se:{selected:"Vald:",day:"dag",days:"dagar",apply:"godkänn","week-1":"ma","week-2":"ti","week-3":"on","week-4":"to","week-5":"fr","week-6":"lö","week-7":"sö","month-name":["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],shortcuts:"genvägar","custom-values":"Anpassade värden",past:"över",following:"följande",previous:"förra","prev-week":"vecka","prev-month":"månad","prev-year":"år",next:"nästa","next-week":"vecka","next-month":"måned","next-year":"år","less-than":"Datumintervall bör inte vara mindre än %d dagar","more-than":"Datumintervall bör inte vara mer än %d dagar","default-more":"Välj ett datumintervall längre än %d dagar","default-single":"Välj ett datum","default-less":"Välj ett datumintervall mindre än %d dagar","default-range":"Välj ett datumintervall mellan %d och %d dagar","default-default":"Välj ett datumintervall",time:"tid",hour:"timme",minute:"minut"},pt:{selected:"Selecionado:",day:"Dia",days:"Dias",apply:"Fechar","week-1":"seg","week-2":"ter","week-3":"qua","week-4":"qui","week-5":"sex","week-6":"sab","week-7":"dom","week-number":"N","month-name":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],shortcuts:"Atalhos","custom-values":"Valores Personalizados",past:"Passado",following:"Seguinte",previous:"Anterior","prev-week":"Semana","prev-month":"Mês","prev-year":"Ano",next:"Próximo","next-week":"Próxima Semana","next-month":"Próximo Mês","next-year":"Próximo Ano","less-than":"O período selecionado não deve ser maior que %d dias","more-than":"O período selecionado não deve ser menor que %d dias","default-more":"Selecione um período superior a %d dias","default-single":"Selecione uma data","default-less":"Selecione um período inferior a %d dias","default-range":"Selecione um período de %d a %d dias","default-default":"Selecione um período",time:"Tempo",hour:"Hora",minute:"Minuto"},tc:{selected:"已選擇:",day:"天",days:"天",apply:"確定","week-1":"一","week-2":"二","week-3":"三","week-4":"四","week-5":"五","week-6":"六","week-7":"日","week-number":"週","month-name":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],shortcuts:"快速選擇",past:"過去",following:"將來",previous:"   ","prev-week":"上週","prev-month":"上個月","prev-year":"去年",next:"   ","next-week":"下週","next-month":"下個月","next-year":"明年","less-than":"所選日期範圍不能大於%d天","more-than":"所選日期範圍不能小於%d天","default-more":"請選擇大於%d天的日期範圍","default-less":"請選擇少於%d天的日期範圍","default-range":"請選擇%d天到%d天的日期範圍","default-single":"請選擇一個日期","default-default":"請選擇一個日期範圍",time:"日期",hour:"小時",minute:"分鐘"},ja:{selected:"選択しました:",day:"日",days:"日",apply:"確定","week-1":"月","week-2":"火","week-3":"水","week-4":"木","week-5":"金","week-6":"土","week-7":"日","month-name":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],shortcuts:"クイック選択",past:"過去",following:"将来",previous:"   ","prev-week":"先週","prev-month":"先月","prev-year":"昨年",next:"   ","next-week":"来週","next-month":"来月","next-year":"来年","less-than":"日付の範囲は%d日以上にすべきではありません","more-than":"日付の範囲は%d日を下回ってはいけません","default-more":"%d日よりも長い期間を選択してください","default-less":"%d日未満の期間を選択してください","default-range":"%d日と%d日の間の日付範囲を選択してください","default-single":"日付を選択してください","default-default":"日付範囲を選択してください",time:"時間",hour:"時間",minute:"分"},da:{selected:"Valgt:",day:"Dag",days:"Dage",apply:"Luk","week-1":"ma","week-2":"ti","week-3":"on","week-4":"to","week-5":"fr","week-6":"lø","week-7":"sø","month-name":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],shortcuts:"genveje","custom-values":"Brugerdefinerede værdier",past:"Forbi",following:"Følgende",previous:"Forrige","prev-week":"uge","prev-month":"måned","prev-year":"år",next:"Næste","next-week":"uge","next-month":"måned","next-year":"år","less-than":"Dato interval bør ikke være med end %d dage","more-than":"Dato interval bør ikke være mindre end %d dage","default-more":"Vælg datointerval længere end %d dage","default-single":"Vælg dato","default-less":"Vælg datointerval mindre end %d dage","default-range":"Vælg datointerval mellem %d og %d dage","default-default":"Vælg datointerval",time:"tid",hour:"time",minute:"minut"},fi:{selected:"Valittu:",day:"Päivä",days:"Päivää",apply:"Sulje","week-1":"ma","week-2":"ti","week-3":"ke","week-4":"to","week-5":"pe","week-6":"la","week-7":"su","week-number":"V","month-name":["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],shortcuts:"Pikavalinnat","custom-values":"Mukautetut Arvot",past:"Menneet",following:"Tulevat",previous:"Edellinen","prev-week":"Viikko","prev-month":"Kuukausi","prev-year":"Vuosi",next:"Seuraava","next-week":"Viikko","next-month":"Kuukausi","next-year":"Vuosi","less-than":"Aikajakson tulisi olla vähemmän kuin %d päivää","more-than":"Aikajakson ei tulisi olla vähempää kuin %d päivää","default-more":"Valitse pidempi aikajakso kuin %d päivää","default-single":"Valitse päivä","default-less":"Valitse lyhyempi aikajakso kuin %d päivää","default-range":"Valitse aikajakso %d ja %d päivän väliltä","default-default":"Valitse aikajakso",time:"Aika",hour:"Tunti",minute:"Minuutti"},cat:{selected:"Seleccionats:",day:"Dia",days:"Dies",apply:"Tanca","week-1":"Dl","week-2":"Dm","week-3":"Dc","week-4":"Dj","week-5":"Dv","week-6":"Ds","week-7":"Dg","week-number":"S","month-name":["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],shortcuts:"Dreçeres","custom-values":"Valors personalitzats",past:"Passat",following:"Futur",previous:"Anterior","prev-week":"Setmana","prev-month":"Mes","prev-year":"Any",next:"Següent","next-week":"Setmana","next-month":"Mes","next-year":"Any","less-than":"El període no hauria de ser de més de %d dies","more-than":"El període no hauria de ser de menys de %d dies","default-more":"Perfavor selecciona un període més gran de %d dies","default-single":"Perfavor selecciona una data","default-less":"Perfavor selecciona un període de menys de %d dies","default-range":"Perfavor selecciona un període d'entre %d i %d dies","default-default":"Perfavor selecciona un període",time:"Temps",hour:"Hora",minute:"Minut"},sk:{selected:"Vybrané:",day:"Deň",days:"Dni",apply:"Zavrieť","week-1":"po","week-2":"út","week-3":"st","week-4":"št","week-5":"pi","week-6":"so","week-7":"ne","week-number":"T","month-name":["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],shortcuts:"Skratky","custom-values":"Vlastné hodnoty",past:"po",following:"nasledujúci",previous:"predchádzajúci","prev-week":"týždeň","prev-month":"mesiac","prev-year":"rok",next:"ďalší","next-week":"týždeň","next-month":"mesiac","next-year":"rok","less-than":"Rozsah dátumu by nemal byť väčší ako %d dní","more-than":"Rozsah dátumu by nemal byť menší ako %d dní","default-more":"Prosím zvoľte rozsah dlhší ako %d dní","default-single":"Prosím zvoľte dátum","default-less":"Prosím zvoľte rozsah menší ako %d dní","default-range":"Prosím zvoľte rozsah medzi %d a %d dňami","default-default":"Prosím zvoľte rozsah",time:"Čas",hour:"Hodina",minute:"Minúta"}},U.fn.dateRangePicker=function(f){f||(f={}),(f=U.extend(!0,{autoClose:!1,format:"YYYY-MM-DD",separator:" to ",language:"auto",startOfWeek:"sunday",getValue:function(){return U(this).val()},setValue:function(e){U(this).attr("readonly")||U(this).is(":disabled")||e==U(this).val()||U(this).val(e)},startDate:!1,endDate:!1,time:{enabled:!1},minDays:0,maxDays:0,showShortcuts:!1,shortcuts:{},customShortcuts:[],inline:!1,container:"body",alwaysOpen:!1,singleDate:!1,lookBehind:!1,batchMode:!1,duration:200,stickyMonths:!1,dayDivAttrs:[],dayTdAttrs:[],selectForward:!1,selectBackward:!1,applyBtnClass:"",singleMonth:"auto",hoveringTooltip:function(e,t,a){return 1'+f.customTopBar+"
"):(t+='
'+K("selected")+' ...',f.singleDate||(t+=' '+f.separator+' ... (3 '+K("days")+")"),t+="
",t+='
error
default
'),t+='',t+="");var a=f.showWeekNumbers?6:5,n="<";f.customArrowPrevSymbol&&(n=f.customArrowPrevSymbol);var r=">";if(f.customArrowNextSymbol&&(r=f.customArrowNextSymbol),t+='
'+E()+"
'+n+' '+(f.singleDate||!f.stickyMonths?''+r+"":"")+'
",f.singleMonth||(t+='
'+function(){for(var e=['
'],t=0;t<20;t++)e.push('
');return e.push("
"),e.join("")}()+'
'+E()+"
'+(f.stickyMonths?"":''+n+"")+' '+r+'
"),t+='
',f.singleDate||(t+='
'),t+='
',t+='")}().hide()).append('
'),U(f.container).append(m),f.inline?m.addClass("inline-wrapper"):i();f.alwaysOpen&&m.find(".apply-btn").hide();var e=_();if(G(e),f.time.enabled)if(f.startDate&&f.endDate||f.start&&f.end)Y(Q(f.start||f.startDate).toDate(),"time1"),Y(Q(f.end||f.endDate).toDate(),"time2");else{var a=f.defaultEndTime?f.defaultEndTime:e;Y(e,"time1"),Y(a,"time2")}var n="";n=f.singleDate?K("default-single"):f.minDays&&f.maxDays?K("default-range"):f.minDays?K("default-more"):f.maxDays?K("default-less"):K("default-default");m.find(".default-top").html(n.replace(/\%d/,f.minDays).replace(/\%d/,f.maxDays)),f.singleMonth?m.addClass("single-month"):m.addClass("two-months");setTimeout(function(){l(),s=!0},0),m.on("click",function(e){e.stopPropagation()}),U(document).on("click.datepicker",Z),m.find(".next").on("click",function(){f.stickyMonths?function(e){var t=F(f.month1),a=F(f.month2);if(q(a))return;if(!f.singleDate&&0<=L(t,a))return;O(t,"month1"),O(a,"month2"),C()}():function(e){var t=U(e).parents("table").hasClass("month2"),a=t?f.month2:f.month1;if(a=F(a),!f.singleMonth&&!f.singleDate&&!t&&0<=L(a,f.month2)||q(a))return;O(a,t?"month2":"month1"),I()}(this)}),m.find(".prev").on("click",function(){f.stickyMonths?function(e){var t=R(f.month1),a=R(f.month2);if(q(t))return;if(!f.singleDate&&L(a,t)<=0)return;O(a,"month2"),O(t,"month1"),C()}():function(e){var t=U(e).parents("table").hasClass("month2"),a=t?f.month2:f.month1;if(a=R(a),t&&L(a,f.month1)<=0||q(a))return;O(a,t?"month2":"month1"),I()}(this)}),m.attr("unselectable","on").css("user-select","none").on("selectstart",function(e){return e.preventDefault(),!1}),m.find(".apply-btn").on("click",function(){B();var e=W(new Date(f.start))+f.separator+W(new Date(f.end));U(t).trigger("datepicker-apply",{value:e,date1:new Date(f.start),date2:new Date(f.end)})}),m.find("[custom]").on("click",function(){var e=U(this).attr("custom");f.start=!1,f.end=!1,m.find(".day.checked").removeClass("checked"),f.setValue.call(o,e),M(),S(!0),C(),f.autoClose&&B()}),m.find("[shortcut]").on("click",function(){var e,t=U(this).attr("shortcut"),a=new Date,n=!1;if(-1!=t.indexOf("day")){var r=parseInt(t.split(",",2)[1],10);n=new Date((new Date).getTime()+864e5*r),a=new Date(a.getTime()+864e5*(0f.end){var a=f.end;f.end=v(f.start),f.start=p(a),f.time.enabled&&f.swapTime&&(u("time1",f.start),u("time2",f.end))}f.start=parseInt(f.start),f.end=parseInt(f.end),b(),f.start&&!f.end&&(U(n).trigger("datepicker-first-date-selected",{date1:new Date(f.start)}),y(e)),w(),M(),S(),C(),x()}}function g(e){if(e=parseInt(e,10),f.startDate&&H(e,f.startDate)<0)return!1;if(f.endDate&&0f.maxDays)return!1;if(0f.start)return!1;if(f.beforeShowDay&&"function"==typeof f.beforeShowDay){for(var t=!0,a=e;1f.start&&(a-=864e5),a'+e.attr("data-tooltip")+"";else if(!e.hasClass("invalid"))if(f.singleDate)m.find(".day.hovering").removeClass("hovering"),e.addClass("hovering");else if(m.find(".day").each(function(){var e=parseInt(U(this).attr("time"));f.start,f.end;e==t?U(this).addClass("hovering"):U(this).removeClass("hovering"),f.start&&!f.end&&(f.starte&&t<=e)?U(this).addClass("hovering"):U(this).removeClass("hovering")}),f.start&&!f.end){var n=z(t,f.start);f.hoveringTooltip&&("function"==typeof f.hoveringTooltip?a=f.hoveringTooltip(n,f.start,t):!0===f.hoveringTooltip&&1f.maxDays?(f.start=!1,f.end=!1,m.find(".day").removeClass("checked"),m.find(".drp_top-bar").removeClass("normal").addClass("error").find(".error-top").html(K("less-than").replace("%d",f.maxDays))):f.minDays&&et.getTime()){var n=t;t=e,e=n,n=null}var r=!0;if(f.startDate&&H(e,f.startDate)<0&&(r=!1),f.endDate&&0'+A(a)+"";if(!f.monthSelect)return n;var r=!!f.startDate&&Q(f.startDate).add(f.singleMonth||"month2"!==t?0:1,"month"),s=!!f.endDate&&Q(f.endDate).add(f.singleMonth||"month1"!==t?0:-1,"month"),o=r&&e.isSame(r,"year")?r.get("month"):0,i=s&&e.isSame(s,"year")?s.get("month"):11,d=Math.min(o,a),l=Math.max(i,a);if(d===l)return n;return P("month",V({minSelectable:o,maxSelectable:i,minVisible:d,maxVisible:l},a,function(e){return A(e)}))}(e=Q(e).toDate(),t),n=function(e,t){var a=(e=Q(e)).get("year"),n='
'+a+"
";if(!f.yearSelect)return n;var r=f.yearSelect&&"function"==typeof f.yearSelect,s=!!f.startDate&&Q(f.startDate).add(f.singleMonth||"month2"!==t?0:1,"month"),o=!!f.endDate&&Q(f.endDate).add(f.singleMonth||"month1"!==t?0:-1,"month"),i=r?f.yearSelect(a):f.yearSelect.slice(),d=s?Math.max(i[0],s.get("year")):Math.min(i[0],a),l=o?Math.min(i[1],o.get("year")):Math.max(i[1],a),u=Math.min(d,a),m=Math.max(l,a);if(u===m)return n;return P("year",V({minSelectable:d,maxSelectable:l,minVisible:u,maxVisible:m},a))}(e,t);m.find("."+t+" .month-name").html(a+" "+n),m.find("."+t+" tbody").html(function(e){var t=[];e.setDate(1);new Date(e.getTime()-864e5);var a,n,r=new Date,s=e.getDay();0===s&&"monday"===f.startOfWeek&&(s=7);if(0");for(var i=0;i<7;i++){var m="monday"==f.startOfWeek?i+1:i;a=t[7*u+m];var h=Q(a.time).format("L")==Q(r).format("L");if(a.extraClass="",a.tooltip="",a.valid&&f.beforeShowDay&&"function"==typeof f.beforeShowDay){var c=f.beforeShowDay(Q(a.time).toDate());a.valid=c[0],a.extraClass=c[1]||"",a.tooltip=c[2]||"",""!==a.tooltip&&(a.extraClass+=" has-tooltip ")}var p={time:a.time,"data-tooltip":a.tooltip,class:"day "+a.type+" "+a.extraClass+" "+(a.valid?"valid":"invalid")+" "+(h?"real-today":"")};0===i&&f.showWeekNumbers&&l.push('
'+f.getWeekNumber(a.date)+"
"),l.push("
"+J(a.time,a.day)+"
")}l.push("")}return l.join("")}(e)),f[t]=e,w(),m.find(".day").off("click").on("click",function(e){k(U(this))}),m.find(".day").off("mouseenter").on("mouseenter",function(e){y(U(this))}),m.find(".day").off("mouseleave").on("mouseleave",function(e){m.find(".date-range-length-tip").hide(),f.singleDate&&b()}),m.find(".week-number").off("click").on("click",function(e){var t,a,n,r;t=U(this),r=parseInt(t.attr("data-start-time"),10),f.startWeek?(m.find(".week-number-selected").removeClass("week-number-selected"),a=new Date(re.maxSelectable});return n}function P(e,t){for(var a,n='
"+a+"
"}function Y(e,t){m.find("."+t).append("
"+K("Time")+': 00:00
'),u(t,e)}function A(e){return K("month-name")[e]}function W(e){return Q(e).format(f.format)}function I(){C();var e=parseInt(Q(f.month1).format("YYYYMM")),t=parseInt(Q(f.month2).format("YYYYMM")),a=Math.abs(e-t);1"+K("week-number")+"":"";return"monday"==f.startOfWeek?e+""+K("week-1")+""+K("week-2")+""+K("week-3")+""+K("week-4")+""+K("week-5")+""+K("week-6")+""+K("week-7")+"":e+""+K("week-7")+""+K("week-1")+""+K("week-2")+""+K("week-3")+""+K("week-4")+""+K("week-5")+""+K("week-6")+""}function q(e){return e=Q(e),!(!f.startDate||!e.endOf("month").isBefore(f.startDate))||!(!f.endDate||!e.startOf("month").isAfter(f.endDate))}function $(e,t,r){var s=U.extend(!0,{},e);U.each(t,function(e,t){var a=t(r);for(var n in a)s.hasOwnProperty(n)?s[n]+=a[n]:s[n]=a[n]});var a="";for(var n in s)s.hasOwnProperty(n)&&(a+=n+'="'+s[n]+'" ');return a}function J(e,t){return f.showDateFilter&&"function"==typeof f.showDateFilter?f.showDateFilter(e,t):t}function K(e){var t=e.toLowerCase(),a=e in r?r[e]:t in r?r[t]:null,n=U.dateRangePickerLanguages.default;return null==a&&(a=e in n?n[e]:t in n?n[t]:""),a}function _(){var e=f.defaultTime?f.defaultTime:new Date;return f.lookBehind?(f.startDate&&L(e,f.startDate)<0&&(e=F(Q(f.startDate).toDate())),f.endDate&&0>>0,s=0;sAe(e)?(r=e+1,t-Ae(e)):(r=e,t);return{year:r,dayOfYear:n}}function qe(e,t,n){var s,i,r=ze(e.year(),t,n),r=Math.floor((e.dayOfYear()-r-1)/7)+1;return r<1?s=r+P(i=e.year()-1,t,n):r>P(e.year(),t,n)?(s=r-P(e.year(),t,n),i=e.year()+1):(i=e.year(),s=r),{week:s,year:i}}function P(e,t,n){var s=ze(e,t,n),t=ze(e+1,t,n);return(Ae(e)-s+t)/7}s("w",["ww",2],"wo","week"),s("W",["WW",2],"Wo","isoWeek"),t("week","w"),t("isoWeek","W"),n("week",5),n("isoWeek",5),v("w",p),v("ww",p,w),v("W",p),v("WW",p,w),Te(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=g(e)});function Be(e,t){return e.slice(t,7).concat(e.slice(0,t))}s("d",0,"do","day"),s("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),s("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),s("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),s("e",0,0,"weekday"),s("E",0,0,"isoWeekday"),t("day","d"),t("weekday","e"),t("isoWeekday","E"),n("day",11),n("weekday",11),n("isoWeekday",11),v("d",p),v("e",p),v("E",p),v("dd",function(e,t){return t.weekdaysMinRegex(e)}),v("ddd",function(e,t){return t.weekdaysShortRegex(e)}),v("dddd",function(e,t){return t.weekdaysRegex(e)}),Te(["dd","ddd","dddd"],function(e,t,n,s){s=n._locale.weekdaysParse(e,s,n._strict);null!=s?t.d=s:m(n).invalidWeekday=e}),Te(["d","e","E"],function(e,t,n,s){t[s]=g(e)});var Je="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Qe="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Xe="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ke=k,et=k,tt=k;function nt(){function e(e,t){return t.length-e.length}for(var t,n,s,i=[],r=[],a=[],o=[],u=0;u<7;u++)s=l([2e3,1]).day(u),t=M(this.weekdaysMin(s,"")),n=M(this.weekdaysShort(s,"")),s=M(this.weekdays(s,"")),i.push(t),r.push(n),a.push(s),o.push(t),o.push(n),o.push(s);i.sort(e),r.sort(e),a.sort(e),o.sort(e),this._weekdaysRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+i.join("|")+")","i")}function st(){return this.hours()%12||12}function it(e,t){s(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rt(e,t){return t._meridiemParse}s("H",["HH",2],0,"hour"),s("h",["hh",2],0,st),s("k",["kk",2],0,function(){return this.hours()||24}),s("hmm",0,0,function(){return""+st.apply(this)+r(this.minutes(),2)}),s("hmmss",0,0,function(){return""+st.apply(this)+r(this.minutes(),2)+r(this.seconds(),2)}),s("Hmm",0,0,function(){return""+this.hours()+r(this.minutes(),2)}),s("Hmmss",0,0,function(){return""+this.hours()+r(this.minutes(),2)+r(this.seconds(),2)}),it("a",!0),it("A",!1),t("hour","h"),n("hour",13),v("a",rt),v("A",rt),v("H",p),v("h",p),v("k",p),v("HH",p,w),v("hh",p,w),v("kk",p,w),v("hmm",ge),v("hmmss",we),v("Hmm",ge),v("Hmmss",we),D(["H","HH"],x),D(["k","kk"],function(e,t,n){e=g(e);t[x]=24===e?0:e}),D(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),D(["h","hh"],function(e,t,n){t[x]=g(e),m(n).bigHour=!0}),D("hmm",function(e,t,n){var s=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s)),m(n).bigHour=!0}),D("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s,2)),t[N]=g(e.substr(i)),m(n).bigHour=!0}),D("Hmm",function(e,t,n){var s=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s))}),D("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s,2)),t[N]=g(e.substr(i))});k=de("Hours",!0);var at,ot={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ce,monthsShort:Ue,week:{dow:0,doy:6},weekdays:Je,weekdaysMin:Xe,weekdaysShort:Qe,meridiemParse:/[ap]\.?m?\.?/i},R={},ut={};function lt(e){return e&&e.toLowerCase().replace("_","-")}function ht(e){for(var t,n,s,i,r=0;r=t&&function(e,t){for(var n=Math.min(e.length,t.length),s=0;s=t-1)break;t--}r++}return at}function dt(t){var e;if(void 0===R[t]&&"undefined"!=typeof module&&module&&module.exports&&null!=t.match("^[^/\\\\]*$"))try{e=at._abbr,require("./locale/"+t),ct(e)}catch(e){R[t]=null}return R[t]}function ct(e,t){return e&&((t=o(t)?mt(e):ft(e,t))?at=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),at._abbr}function ft(e,t){if(null===t)return delete R[e],null;var n,s=ot;if(t.abbr=e,null!=R[e])Q("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=R[e]._config;else if(null!=t.parentLocale)if(null!=R[t.parentLocale])s=R[t.parentLocale]._config;else{if(null==(n=dt(t.parentLocale)))return ut[t.parentLocale]||(ut[t.parentLocale]=[]),ut[t.parentLocale].push({name:e,config:t}),null;s=n._config}return R[e]=new K(X(s,t)),ut[e]&&ut[e].forEach(function(e){ft(e.name,e.config)}),ct(e),R[e]}function mt(e){var t;if(!(e=e&&e._locale&&e._locale._abbr?e._locale._abbr:e))return at;if(!a(e)){if(t=dt(e))return t;e=[e]}return ht(e)}function _t(e){var t=e._a;return t&&-2===m(e).overflow&&(t=t[O]<0||11We(t[Y],t[O])?b:t[x]<0||24P(r,u,l)?m(s)._overflowWeeks=!0:null!=h?m(s)._overflowWeekday=!0:(d=$e(r,a,o,u,l),s._a[Y]=d.year,s._dayOfYear=d.dayOfYear)),null!=e._dayOfYear&&(i=bt(e._a[Y],n[Y]),(e._dayOfYear>Ae(i)||0===e._dayOfYear)&&(m(e)._overflowDayOfYear=!0),h=Ze(i,0,e._dayOfYear),e._a[O]=h.getUTCMonth(),e._a[b]=h.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=c[t]=n[t];for(;t<7;t++)e._a[t]=c[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[x]&&0===e._a[T]&&0===e._a[N]&&0===e._a[Ne]&&(e._nextDay=!0,e._a[x]=0),e._d=(e._useUTC?Ze:je).apply(null,c),r=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[x]=24),e._w&&void 0!==e._w.d&&e._w.d!==r&&(m(e).weekdayMismatch=!0)}}function Tt(e){if(e._f===f.ISO_8601)St(e);else if(e._f===f.RFC_2822)Ot(e);else{e._a=[],m(e).empty=!0;for(var t,n,s,i,r,a=""+e._i,o=a.length,u=0,l=ae(e._f,e._locale).match(te)||[],h=l.length,d=0;de.valueOf():e.valueOf()"}),i.toJSON=function(){return this.isValid()?this.toISOString():null},i.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},i.unix=function(){return Math.floor(this.valueOf()/1e3)},i.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},i.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},i.eraName=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},i.isLocal=function(){return!!this.isValid()&&!this._isUTC},i.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},i.isUtc=At,i.isUTC=At,i.zoneAbbr=function(){return this._isUTC?"UTC":""},i.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},i.dates=e("dates accessor is deprecated. Use date instead.",ke),i.months=e("months accessor is deprecated. Use month instead",Ge),i.years=e("years accessor is deprecated. Use year instead",Ie),i.zone=e("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?(this.utcOffset(e="string"!=typeof e?-e:e,t),this):-this.utcOffset()}),i.isDSTShifted=e("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var e,t={};return $(t,this),(t=Nt(t))._a?(e=(t._isUTC?l:W)(t._a),this._isDSTShifted=this.isValid()&&0', + customArrowNextSymbol: '', + getValue: function() + { + return $(this).find('span').html(); + }, + setValue: function(s, s1, s2) { + if (s) { + $(this).find('span').html(s.replace('to', '  ')); + } else { + $(this).find('span').html( + RangePickerCheckin + '    ' + RangePickerCheckout + ); + } + } + } + $.each(opt, function(index) { + delete custom_opt[index]; + }); + + $.extend(true, opt, custom_opt); + + } + + var args = Array.prototype.slice.call(arguments,0); + return dateRangePickerOrg.apply(this, args); + } +})(jQuery); \ No newline at end of file diff --git a/js/validate.js b/js/validate.js index 85b041fbb..b8c011e0e 100644 --- a/js/validate.js +++ b/js/validate.js @@ -184,9 +184,7 @@ function validate_field(that) var selector = '#id_country'; if ($(that).attr('name') == 'postcode_invoice') selector += '_invoice'; - var id_country = $(selector + ' option:selected').val(); - if (typeof(countriesNeedZipCode[id_country]) != 'undefined' && typeof(countries[id_country]) != 'undefined') var result = window['validate_'+$(that).attr('data-validate')]($(that).val(), countriesNeedZipCode[id_country], countries[id_country]['iso_code']); } diff --git a/modules/blockcart/ajax-cart.js b/modules/blockcart/ajax-cart.js index d92610635..a355d77bc 100644 --- a/modules/blockcart/ajax-cart.js +++ b/modules/blockcart/ajax-cart.js @@ -134,26 +134,28 @@ var ajaxCart = { var dateFrom = $(this).attr('cat_rm_check_in'); var dateTo = $(this).attr('cat_rm_check_out'); - + var occupancy = getBookingOccupancyDetails($(this).closest('.booking_room_fields')); /* By Webkul * Note : In our case minimalQuantity is taken from Qty. field */ // var minimalQuantity = parseInt($(this).data('minimal_quantity')); - var minimalQuantity = parseInt($(this).data('minimal_quantity')); - var minimalQuantity = $("#cat_quantity_wanted_" + idProduct).val(); - if (!minimalQuantity) - minimalQuantity = 1; - if ($(this).prop('disabled') != 'disabled') - ajaxCart.add(idProduct, idProductAttribute, false, this, minimalQuantity, null, dateFrom, dateTo); + // var minimalQuantity = parseInt($(this).data('minimal_quantity')); + // var minimalQuantity = $("#quantity_wanted_" + idProduct).val(); + // if (!minimalQuantity) + // minimalQuantity = 1; + if ($(this).prop('disabled') != 'disabled' && occupancy) + ajaxCart.add(idProduct, idProductAttribute, false, this, occupancy, null, dateFrom, dateTo); }); //for product page 'add' button... if ($('.cart_block').length) { - $(document).off('click', '#add_to_cart button').on('click', '#add_to_cart button', function(e) { + $(document).off('click', '#add_to_cartadd_to_cart button').on('click', '#add_to_cart button', function(e) { e.preventDefault(); - var date_from = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate(ajaxCart.dateFormat, $('#room_check_in').val())); - var date_to = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate(ajaxCart.dateFormat, $('#room_check_out').val())); - ajaxCart.add($('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').val(), null, date_from, date_to); - + var date_from = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate('yy-mm-dd', $('#room_check_in').val())); + var date_to = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate('yy-mm-dd', $('#room_check_out').val())); + var occupancy = getBookingOccupancyDetails($(this).closest('.booking_room_fields')); + if (occupancy) { + ajaxCart.add($('#product_page_product_id').val(), $('#idCombination').val(), true, null, occupancy, null, date_from, date_to); + } }); } @@ -214,8 +216,8 @@ var ajaxCart = { /*by webkul*/ if (pagename == 'product') { - dateFrom = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate(ajaxCart.dateFormat, $('#room_check_in').val())); - dateTo = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate(ajaxCart.dateFormat, $('#room_check_out').val())); + dateFrom = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate('yy-mm-dd', $('#room_check_in').val())); + dateTo = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate('yy-mm-dd', $('#room_check_out').val())); } else if (pagename == 'category') { dateFrom = $('#check_in_time').val(); dateTo = $('#check_out_time').val(); @@ -319,7 +321,7 @@ var ajaxCart = { // close fancybox updateFancyBox: function() {}, // add a product in the cart via ajax - add: function(idProduct, idCombination, addedFromProductPage, callerElement, quantity, whishlist, dateFrom, dateTo) { + add: function(idProduct, idCombination, addedFromProductPage, callerElement, occupancy, whishlist, dateFrom, dateTo) { if (addedFromProductPage && !checkCustomizations()) { if (contentOnly) { @@ -346,8 +348,9 @@ var ajaxCart = { if (addedFromProductPage) { $('#add_to_cart button').prop('disabled', 'disabled').addClass('disabled'); $('.filled').removeClass('filled'); - } else + } else { $(callerElement).prop('disabled', 'disabled'); + } if ($('.cart_block_list').hasClass('collapsed')) this.expand(); @@ -365,7 +368,7 @@ var ajaxCart = { async: true, cache: false, dataType: "json", - data: 'controller=cart&add=1&dateFrom=' + dateFrom + '&dateTo=' + dateTo + '&ajax=true&qty=' + ((quantity && quantity != null) ? quantity : '1') + '&id_product=' + idProduct + '&roomDemands=' + JSON.stringify(roomDemands) + '&token=' + static_token + ((parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination) : '' + '&id_customization=' + ((typeof customizationId !== 'undefined') ? customizationId : 0)), + data: 'controller=cart&add=1&dateFrom=' + dateFrom + '&dateTo=' + dateTo + '&ajax=true&occupancy=' + JSON.stringify(occupancy) + '&id_product=' + idProduct + '&roomDemands=' + JSON.stringify(roomDemands) + '&token=' + static_token + ((parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination) : '' + '&id_customization=' + ((typeof customizationId !== 'undefined') ? customizationId : 0)), success: function(jsonData, textStatus, jqXHR) { /*by webkul checking and setting availability of rooms*/ /*for product page add to cart quantity management*/ @@ -375,7 +378,7 @@ var ajaxCart = { } else { $('.num_quantity_alert').hide(); } - $("#max_avail_type_qty").val(jsonData.avail_rooms); + $(".max_avail_type_qty").val(jsonData.avail_rooms); $(".num_searched_avail_rooms").text(jsonData.avail_rooms); if (jsonData.avail_rooms == 0) { @@ -388,18 +391,17 @@ var ajaxCart = { if (pagename == 'category') { if (jsonData.avail_rooms <= room_warning_num) { - $(".cat_remain_rm_qty_" + idProduct).closest('.rm_left').show(); + $(callerElement).closest(".room_cont").find(".rm_left").show(); } else { - $("cat_remain_rm_qty_" + idProduct).closest('.rm_left').hide(); + $(callerElement).closest(".room_cont").find(".rm_left").hide(); } /*for category page add to cart quantity management*/ - - $(".cat_remain_rm_qty_" + idProduct).text(jsonData.avail_rooms); + $(callerElement).closest(".room_cont").find(".remain_rm_qty").text(jsonData.avail_rooms); if (jsonData.avail_rooms == 0) { - $(".cat_remain_rm_qty_" + idProduct).closest('.room_cont').hide(); + $(callerElement).closest(".room_cont").hide(); } - //$('#cat_quantity_wanted_'+idProduct).val(1); + //$('#quantity_wanted_'+idProduct).val(1); } @@ -416,22 +418,27 @@ var ajaxCart = { if (jsonData.crossSelling) $('.crossseling').html(jsonData.crossSelling); - if (idCombination) - $(jsonData.products).each(function() { - if (this.id != undefined && this.id == parseInt(idProduct) && this.idCombination == parseInt(idCombination)) - if (contentOnly) - window.parent.ajaxCart.updateLayer(this); - else - ajaxCart.updateLayer(this); - }); - else - $(jsonData.products).each(function() { - if (this.id != undefined && this.id == parseInt(idProduct)) - if (contentOnly) - window.parent.ajaxCart.updateLayer(this); - else - ajaxCart.updateLayer(this); - }); + // if (idCombination) + // $(jsonData.products).each(function() { + // if (this.id != undefined && this.id == parseInt(idProduct) && this.idCombination == parseInt(idCombination)) + // if (contentOnly) + // window.parent.ajaxCart.updateLayer(this); + // else + // ajaxCart.updateLayer(this); + // }); + // else + // $(jsonData.products).each(function() { + // if (this.id != undefined && this.id == parseInt(idProduct)) + // if (contentOnly) + // window.parent.ajaxCart.updateLayer(this); + // else { + // ajaxCart.updateLayer(this); + // } + // }); + if (jsonData.last_added_product) { + ajaxCart.updateLayer(jsonData.last_added_product); + + } if (contentOnly) parent.$.fancybox.close(); } else { @@ -444,7 +451,9 @@ var ajaxCart = { else $(callerElement).removeProp('disabled'); } - + if (!addedFromProductPage) { + resetOccupancyField($(callerElement).closest('.booking_room_fields').find('.booking_occupancy_wrapper')); + } emptyCustomizations(); }, @@ -505,8 +514,8 @@ var ajaxCart = { /*by webkul checking and setting availability of rooms*/ /*for product page add to cart quantity management*/ if (pagename == 'product') { - var date_checkIn = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate(ajaxCart.dateFormat, $('#room_check_in').val())); - var date_checkOut = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate(ajaxCart.dateFormat, $('#room_check_out').val())); + var date_checkIn = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate('yy-mm-dd', $('#room_check_in').val())); + var date_checkOut = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate('yy-mm-dd', $('#room_check_out').val())); var product_page_id_product = $('#product_page_product_id').val(); if (idProduct == product_page_id_product && dateFrom < date_checkOut && dateTo >= date_checkIn) { if (jsonData.avail_rooms <= room_warning_num) { @@ -514,7 +523,7 @@ var ajaxCart = { } else { $('.num_quantity_alert').hide(); } - $("#max_avail_type_qty").val(jsonData.avail_rooms); + $(".max_avail_type_qty").val(jsonData.avail_rooms); $(".num_searched_avail_rooms").text(jsonData.avail_rooms); if (jsonData.avail_rooms == 0) { @@ -529,18 +538,18 @@ var ajaxCart = { if (pagename == 'category') { if (jsonData.avail_rooms <= room_warning_num) { - $(".cat_remain_rm_qty_" + idProduct).closest('.rm_left').show(); + $(".room_cont").find('[data-id-product="'+idProduct+'"] .rm_left').show(); } else { - $("cat_remain_rm_qty_" + idProduct).closest('.rm_left').hide(); + $("room_cont").find('[data-id-product="'+idProduct+'"] .rm_left').hide(); } /*for category page add to cart quantity management*/ - $(".cat_remain_rm_qty_" + idProduct).text(jsonData.avail_rooms); + $(".room_cont").find('[data-id-product="'+idProduct+'"] .remain_rm_qty').text(jsonData.avail_rooms); if (jsonData.avail_rooms == 0) { - $(".cat_remain_rm_qty_" + idProduct).closest('.room_cont').hide(); + $(".room_cont").find('[data-id-product="'+idProduct+'"]').hide(); } - //$('#cat_quantity_wanted_'+idProduct).val(1); + //$('#quantity_wanted_'+idProduct).val(1); } ajaxCart.updateCart(jsonData); @@ -628,28 +637,27 @@ var ajaxCart = { data: 'controller=cart&delete=1&dateFrom=' + dateFrom + '&dateTo=' + dateTo + '&id_product=' + idProduct + '&ipa=' + ((idCombination != null && parseInt(idCombination)) ? idCombination : '') + ((customizationId && customizationId != null) ? '&id_customization=' + customizationId : '') + '&id_address_delivery=' + idAddressDelivery + '&token=' + static_token + '&ajax=true', success: function(jsonData) { if (pagename == 'product') { - if (jsonData.avail_rooms <= room_warning_num) { - $('.num_quantity_alert').show(); - } else { - $('.num_quantity_alert').hide(); - } - - $("#max_avail_type_qty").val(jsonData.avail_rooms); - $(".num_searched_avail_rooms").text(jsonData.avail_rooms); - $('.sold_out_alert').hide(); - disableRoomTypeDemands(0); - $('.unvail_rooms_cond_display').show(); + // if (jsonData.avail_rooms <= room_warning_num) { + // $('.num_quantity_alert').show(); + // } else { + // $('.num_quantity_alert').hide(); + // } + + // $(".max_avail_type_qty").val(jsonData.avail_rooms); + // $(".num_searched_avail_rooms").text(jsonData.avail_rooms); + // $('.sold_out_alert').hide(); + // disableRoomTypeDemands(0); + // $('.unvail_rooms_cond_display').show(); } if (pagename == 'category') { // for category page.... - $(".cat_remain_rm_qty_" + idProduct).text(jsonData.avail_rooms); - - $(".cat_remain_rm_qty_" + idProduct).closest('.room_cont').show(0, function() { + $('.room_cont[data-id-product="'+idProduct+'"]').find(".remain_rm_qty").text(jsonData.avail_rooms); + $('.room_cont[data-id-product="'+idProduct+'"]').show(0, function() { if (jsonData.avail_rooms <= room_warning_num) { - $(".cat_remain_rm_qty_" + idProduct).closest('.rm_left').show(); + $('.room_cont[data-id-product="'+idProduct+'"]').find('.rm_left').show(); } else { - $(".cat_remain_rm_qty_" + idProduct).closest('.rm_left').hide(); + $('.room_cont[data-id-product="'+idProduct+'"]').find('.rm_left').hide(); } }); } @@ -1037,17 +1045,20 @@ var ajaxCart = { $('#layer_cart_product_price').text(product.price); //by webkul has to work on it more.. - if (pagename == 'product') { - $('#layer_cart_product_time_duration').text($('#room_check_in').val() + ' - ' + $('#room_check_out').val()); - $('#layer_cart_product_quantity').text($('#quantity_wanted').val()); - $('#quantity_wanted').val(1); - } - if (pagename == 'category') { - $('#layer_cart_product_time_duration').text($('#check_in_time').val() + ' - ' + $('#check_out_time').val()); - $('#layer_cart_product_quantity').text($('#cat_quantity_wanted_' + product.id).val()); - $('#cat_quantity_wanted_' + product.id).val(1); + $('#layer_cart_product_time_duration').text( + product.date_from + ' - ' + product.date_to + ); + + let rooms = 0; + let adult = 0; + let children = 0; + $.each(product.occupancy, function(index, val) { + rooms++; + adult += parseInt(val.adult); + children += parseInt(val.children); - } + }); + $('#layer_cart_product_quantity').text(getRoomTypeGuestOccupancyFormated(adult, children, rooms)); $('.layer_cart_img').html('' + product.name + ''); @@ -1216,4 +1227,48 @@ function getRoomsExtraDemands() }); return roomDemands; +} + +function getBookingOccupancyDetails(bookingform) +{ + let occupancy; + if (occupancy_wise_booking) { + let selected_occupancy = $(bookingform).find(".occupancy_info_block.selected") + if (selected_occupancy.length) { + occupancy = []; + $(selected_occupancy).each(function(ind, element) { + if (parseInt($(element).find('.num_adults').val())) { + let child_ages = []; + $(element).find('.guest_child_age').each(function(index) { + if ($(this).val() > -1) { + child_ages.push($(this).val()); + } + }); + if ($(element).find('.num_children').val()) { + if (child_ages.length != $(element).find('.num_children').val()) { + $(bookingform).find('.booking_occupancy_wrapper').parent().addClass('open') + occupancy = false; + return false; + } + } + occupancy.push({ + 'adult': $(element).find('.num_adults').val(), + 'children': $(element).find('.num_children').val(), + 'child_ages': child_ages + }); + } else { + $(bookingform).find('.booking_occupancy_wrapper').parent().addClass('open') + occupancy = false; + return false; + } + }); + } else { + $(bookingform).find('.booking_occupancy_wrapper').parent().addClass('open') + occupancy = false; + } + } else { + occupancy = parseInt($(bookingform).find(".quantity_wanted").val()); + } + + return occupancy; } \ No newline at end of file diff --git a/modules/blockcart/blockcart.php b/modules/blockcart/blockcart.php index 2ad83363e..c011e9992 100644 --- a/modules/blockcart/blockcart.php +++ b/modules/blockcart/blockcart.php @@ -195,6 +195,52 @@ public function getContentVars($params) 1 ); + $addedProduct = false; + // get currently added product if exists + if (!empty($params['cookie']->currentAddedProduct)) { + $addedProduct = json_decode($params['cookie']->currentAddedProduct, true); + $objProduct = new Product($addedProduct['id_product'], false, $this->context->language->id); + + $addedProduct['name'] = $objProduct->name; + $addedProduct['link'] = $this->context->link->getProductLink( + $objProduct->id, + $objProduct->link_rewrite, + $objProduct->category, + null, + null, + $this->context->cart->id_shop + ); + $image = Product::getCover($objProduct->id); + $image['id_product'] = $objProduct->id; + // Product::defineProductImage(array(Product::getCover($objProduct->id)['id_image']/), $this->id_lang) + $addedProduct['image'] = $this->context->link->getImageLink( + $objProduct->link_rewrite, + Product::defineProductImage($image, $this->context->language->id), + 'home_default' + ); + $addedProduct['image_cart'] = $this->context->link->getImageLink( + $objProduct->link_rewrite, + Product::defineProductImage($image, $this->context->language->id), + 'cart_default' + ); + $price = $addedProduct['price'] = HotelRoomTypeFeaturePricing::getRoomTypeTotalPrice( + $objProduct->id, + $addedProduct['date_from'], + $addedProduct['date_to'], + $addedProduct['req_rm'] + ); + + if ($priceDisplayMethod == PS_TAX_EXC) { + $addedProduct['price'] = Tools::displayPrice($price['total_price_tax_incl']); + } else { + $addedProduct['price'] = Tools::displayPrice($price['total_price_tax_excl']); + } + $addedProduct['date_from'] = Tools::displayDate($addedProduct['date_from']); + $addedProduct['date_to'] = Tools::displayDate($addedProduct['date_to']); + + unset($this->context->cookie->currentAddedProduct); + } + $response = array( 'products' => $products, 'customizedDatas' => Product::getAllCustomizedDatas((int) ($params['cart']->id)), @@ -218,7 +264,7 @@ public function getContentVars($params) 'static_token' => Tools::getToken(false), 'free_shipping' => Tools::displayPrice($total_free_shipping), 'free_shipping_float' => $total_free_shipping, - + 'last_added_product' => $addedProduct, 'cart_booking_data' => $htlCartData, 'total_rooms_in_cart' => $totalRooms, ); diff --git a/modules/blockcart/blockcart.tpl b/modules/blockcart/blockcart.tpl index 6192288d3..f5ec9906f 100644 --- a/modules/blockcart/blockcart.tpl +++ b/modules/blockcart/blockcart.tpl @@ -24,7 +24,7 @@ *} {if isset($blockcart_top) && $blockcart_top} - + {if $occupancy_wise_search} +
+ +
+ +
+
+ {/if}