{% set fromDate = demi_getSearchFrom() %}
{% set toDate = demi_getSearchTo() %}
{% if not tvbPackage is defined and housePackageContainer is defined %}
{% set tvbPackage = housePackageContainer %}
{% endif %}
{% if housePackageContainer is defined and tvbPackage is not defined %}
{% set tvbPackage = housePackageContainer %}
{% endif %}
{% set isTVB = tvbPackage is defined ? true : false %}
{% if isTVB %}
{% set packageWithoutAcco = isTVB and tvbPackage.getClassName() == 'demiPackage' and tvbPackage.hasAccommodationSection() == false %}
{% set nextPossibleArrivalDay = demi_getNextPossibleArrivalDay(tvbPackage) %}
{% endif %}
{% set datePickerData = demi_core_configuration('getDatepickerInfoTexts',[]) %}
{% if datePickerData is not null and datePickerData|length >0 %}
{% set datePickerTexts = [] %}
{% for item in datePickerData.getItems() %}
{% if item.getDateTo() is not empty and item.getDateFrom() is not empty and item.getDateTo() > date('now') %}
{% set datePickerTexts= datePickerTexts|merge([{
'from': elements_customDateFormat(item.getDateFrom()),
'to': elements_customDateFormat(item.getDateTo()),
'message': item.getText()}]) %}
{% endif %}
{% endfor %}
{% if datePickerTexts|length > 0 %}
{% do jsConfig().add({'datepickerRangeMessages': datePickerTexts}) %}
{% endif %}
{% endif %}
{% if not isTVB or (isTVB and nextPossibleArrivalDay is not null) %}
<script type="text/javascript" data-cookieconsent="ignore">
_config.overlay = true;
_config.searchForm = true;
_config.searchOverlay = true;
_config.quickFilter = true;
</script>
<form id="search-form" action="" class="js-search-form">
<div class="row row--gutter-width-10">
{% if not isTVB %}
<div class="col col-12">
<button class="form-box mb-3 js-overlay__toggle" type="button"
data-target="#search-duration-overlay">
<span class="form-box__label">{{ "demi.search.for"|trans }}</span>
<span class="form-box__content">
<span class="js-search-form__period">{{ "demi.search.exact-period"|trans }}</span>
</span>
<span class="demi-icon demi-icon-chevron-down form-box__icon"></span>
</button>
</div>
{% endif %}
{% if isTVB %}
<div class="col col-6">
<button type="button"
class="form-box mb-3 js-overlay__toggle"
data-target="#date-overlay">
<span class="form-box__label">
<span
class="js-search-form__exact-label">{{ (isTVB and packageWithoutAcco ? "demi.start-date" : "demi.search.arrival")|trans }}</span>
<span
class="js-search-form__variable-label">{{ "demi.search.earliest-arrival-from"|trans }}></span>
</span>
<span class="form-box__content">
{% if availabilityIsChecked is defined and availabilityIsChecked==true %}
<time class="js-search-form__arrival-text"
datetime="{{ fromDate.formatLocalized('%Y-%m-%d') }}">
{{ elements_dateFormat(fromDate, 'date-long') }}</time>
{% else %}
<time class="js-search-form__arrival-text"
datetime="{{ nextPossibleArrivalDay.formatLocalized('%Y-%m-%d') }}">
{{ elements_dateFormat(nextPossibleArrivalDay, 'date-long') }}</time>
<script>
_initialState.searchForm.from = '{{ elements_customDateFormat(nextPossibleArrivalDay) }}';
</script>
{% endif %}
</span>
<span class="demi-icon demi-icon-calendar-insert form-box__icon"></span>
</button>
</div>
<div class="col col-6">
<script>
_config.datepickerRanges = [
{% for range in demi_getDestinationPackageRangesAsTimestring(tvbPackage) %}
{
start: '{{ range['from'] }}',
end: '{{ range['to'] }}'
},
{% endfor %}
];
{% set weekdayDurationDaysArray = demi_getDestinationPackageWeekdayDurations(tvbPackage) %}
{% set possibleDurations = [] %}
{% for weekDay,durations in weekdayDurationDaysArray %}
{% for d in durations %}
{% if d not in possibleDurations %}
{% set possibleDurations = possibleDurations|merge([d]) %}
{% endif %}
{% endfor %}
{% endfor %}
{% set possibleDurations = possibleDurations|sort %}
{% set isOnlyOneDuration = possibleDurations|length is same as 1 %}
{# define available duration nights for every weekday (0 - Sun to 6 - Sat)
combine all possible days as a string in "all" #}
_config.datepickerWeekdays = {
"all": "{{ (weekdayDurationDaysArray|keys)|join }}",
{% for weekday,durations in weekdayDurationDaysArray %}
"{{ weekday }}": [{{ durations|join(',') }}],
{% endfor %}
}
{# max rooms for TVB packages is always 1 #}
_config.searchFormMaxRooms = 1;
_config.searchFormMinAdults = {{ tvbPackage.getAdultsMin() }};
_config.searchFormMaxAdults = {{ tvbPackage.getAdultsMax() }};
_config.searchFormMaxChildren = {{ tvbPackage.getChildrenMax() }};
_config.searchFormMinChildren = {{ tvbPackage.getChildrenMin() }};
{% if availabilityIsChecked is defined and availabilityIsChecked==true %}
_initialState.search.durationNights = {{ toDate.diff(fromDate).d }};
{% else %}
{% set defaultChildAges = [] %}
{% if tvbPackage.getChildrenMin() > 0 %}
{% for i in 0..((tvbPackage.getChildrenMin()|length)-1) %}
{% set defaultChildAges = defaultChildAges|merge([0]) %}
{% endfor %}
{% endif %}
{% if isOnlyOneDuration %}
_initialState.searchForm.durationNights = {{ possibleDurations|first }};
_initialState.search.to = '{{ elements_customDateFormat(nextArivalDay.addDays((possibleDurations|first))) }}';
{% endif %}
{% set possibleChildAges =[] %}
{% if tvbPackage.getChildAgeGroups() is not empty %}
{% for fc in tvbPackage.getChildAgeGroups() %}
{% for i in fc.getAgeFrom()..fc.getAgeTo() %}
{% set possibleChildAges = possibleChildAges|merge([i]) %}
{% endfor %}
{% endfor %}
{% else %}
{% for i in 0..18 %}
{% set possibleChildAges=possibleChildAges|merge([i]) %}
{% endfor %}
{% endif %}
_config.searchFormPossibleChildAges = [{{ possibleChildAges|join(',') }}];
_initialState.occupancy.rooms = [{
adults: {{ tvbPackage.getAdultsMin() is not empty ? tvbPackage.getAdultsMin() : 2 }},
childAges: [{{ defaultChildAges|join(',') }}],
quantity: 1
}];
{% endif %}
_config.parsley = true;
</script>
<div class="js-form-group">
<label class="form-box">
<span
class="form-box__label">{{ (isTVB and packageWithoutAcco ? 'demi.booking.period' : 'demi.nights')|trans }}</span>
<select name="count"
class="form-box__content form-control js-search-form__nights-select js-parsley"
required>
{% if not isOnlyOneDuration %}
<option value=""
disabled>{{ 'demi.search.destinationpackage.please-choose'|trans }}</option>
{% endif %}
{% for possibleDuration in possibleDurations %}
{% if packageWithoutAcco is defined %}
<option value="{{ possibleDuration }}"
{{ isOnlyOneDuration ? "selected" : "disabled" }}>{{ possibleDuration+1 }} {{ 'demi.days'|trans }}</option>
{% else %}
<option value="{{ possibleDuration }}" {{ isOnlyOneDuration ? "selected" : "disabled" }}>{{ possibleDuration }}
({{ possibleDuration +1 }} {{ 'demi.days'|trans }})
</option>
{% endif %}
{% endfor %}
</select>
<span class="demi-icon demi-icon-chevron-down form-box__select-icon"
aria-hidden="true"></span>
</label>
<div class="form-errors"></div>
</div>
</div>
{% else %}
<div class="col col-12">
<button type="button"
class="form-box mb-3 js-overlay__toggle"
data-target="#date-overlay">
<span class="form-box__label">
<span class="js-search-form__exact-label">
{{ "demi.search.arrival"|trans }} - {{ "demi.search.departure"|trans }}
</span>
<span class="js-search-form__variable-label">
{{ "demi.search.earliest-arrival-from"|trans }} - {{ "demi.search.latest-departure-to"|trans }}
</span>
</span>
<span class="form-box__content">
<time class="js-search-form__arrival-text"
datetime="{{ fromDate.formatLocalized('%Y-%m-%d') }}">{{ elements_dateFormat(fromDate, 'date-long') }}</time>
-
<time class="js-search-form__departure-text"
datetime="{{ toDate.formatLocalized('%Y-%m-%d') }}">{{ elements_dateFormat(toDate, 'date-long') }}</time>
</span>
<span class="demi-icon demi-icon-calendar-insert form-box__icon"></span>
</button>
</div>
{% endif %}
<div class="col col-12">
<button class="form-box mb-3 js-overlay__toggle" data-target="#occupancy-overlay" type="button">
<span
class="form-box__label">{{ (isTVB and packageWithoutAcco ? "demi.guests" : "demi.search.guests-rooms")|trans }}</span>
<span class="form-box__content js-search-form__occupancy">
{{ demi_getOccupancyType() is not empty ? "demi.search.multiple-rooms"|trans : '' }}
</span>
<span class="demi-icon demi-icon-chevron-down form-box__icon"></span>
</button>
</div>
{% set route = app.request.get('_route') %}
{% set isDetail = 'detail' in route %}
{% if not isDetail
and not (isTVB and tvbPackage.getClassName() == 'demiPackage')
and (demi_core_configuration('getNearbySearchByLocation',[]) == 'active' or demi_core_configuration('getNearbySearchByLocation',[]) == 'checked' )%}
<div class="col col-12 mb-4">
{{ include('@ElementsDemiFrontend/Includes/elements/checkboxes/checkbox.html.twig', {
'name': '' ,
'label': 'demi.search.my-location'|trans,
'isChecked': demi_core_configuration('getNearbySearchByLocation',[]) == 'checked' ? true : false,
'value': "on",
'customClass': 'js-search-form__search-nearby'
}) }}
</div>
{% endif %}
</div>
{% if showMoreOptions is defined and showMoreOptions == true and not isTVB %}
<div class="text-center mb-4 mt-2 text-primary">
<button type="button"
class="btn-no-styling increased-click-area js-overlay__toggle"
data-target="#additional-search-overlay">
<span class="fz17 text-primary font-medium">{{ "demi.search.more.options"|trans }}</span>
<span aria-label="{{ "demi.open"|trans }}"
class="demi-icon demi-icon-chevron-down icon-in-text ml-1"></span>
</button>
</div>
{% endif %}
<div class="row justify-content-center">
<div class="col-8">
<button class="btn btn-success btn-lg btn-block js-search-form__submit"
type="{{ pageSubmit is defined and pageSubmit == true? 'submit': 'button' }}">{{ (isTVB and packageWithoutAcco ? "demi.detail.package.add-to-cart" : "demi.search")|trans }}</button>
</div>
</div>
<div class="mt-4 js-search-form__range-messages" hidden></div>
</form>
{% else %}
{{ "demi.destinationpackages.no-arrival-date"|trans }}
{% endif %}
{% if isTVB %}
<div class="card box-shadow mt-4">
<div class="card-body">
<div class="row row--gutter-width-10 ">
<div class="col">
<div class="h5 mb-2">{{ "demi.search.destinationpackage.form.packageinfos"|trans }}</div>
</div>
</div>
<div class="row row--gutter-width-10 ">
<div class="col-12 col-md-6">
{% set adultsString = tvbPackage.getAdultsMin() %}
{% if tvbPackage.getAdultsMax() != tvbPackage.getAdultsMin() %}
{% set adultsString = adultsString ~ " - " ~ tvbPackage.getAdultsMax() %}
{% endif %}
{% set childrenString = null %}
{% if tvbPackage.getChildrenMax() %}
{% set childrenString = tvbPackage.getChildrenMin() %}
{% if tvbPackage.getChildrenMax() != tvbPackage.getChildrenMin() %}
{% set childrenString = childrenString ~ " - " ~ tvbPackage.getChildrenMax() %}
{% endif %}
{% endif %}
<div
class="h6 mb-2">{{ (isTVB and packageWithoutAcco ? "demi.guests" : "demi.search.destinationpackage.occupancy")|trans }}</div>
<div class="small">
{{ adultsString }} {{ 'demi.adults'|trans }}{% if childrenString is not empty %}, {{ childrenString }} {{ 'demi.children'|trans }}{% endif %}
</div>
<div class="h6 mb-2 mt-4">{{ "demi.search.destinationpackage.possible-periods"|trans }}</div>
<ul class="small list-default">
{% for item in tvbPackage.getValidDates() %}
<li>
<time
datetime="{{ item.getDateFrom().formatLocalized('%Y-%m-%d') }}">{{ elements_dateFormat(item.getDateFrom(),'date-long') }}</time>
-
<time
datetime="{{ item.getDateTo().formatLocalized('%Y-%m-%d') }}">{{ elements_dateFormat(item.getDateTo(),'date-long') }}</time>
</li>
{% endfor %}
</ul>
</div>
<div class="col-12 col-md-6">
<div
class="h6 mb-2 mt-4 mt-md-0">{{ (packageWithoutAcco ? "demi.search.destinationpackage.duration-and-arrival-days" : "demi.search.destinationpackage.stay-and-arrival-days")|trans }}</div>
<ul class="small list-default">
{% for item in tvbPackage.getPackageDuration() %}
<li>
{% if packageWithoutAcco %}
{{ item.getDurationDays() }} {{ (item.getDurationDays()==2? 'demi.day' : 'demi.days')|trans }} -
{% else %}
{{ item.getDurationDays()-1 }} {{ (item.getDurationDays()==2? 'demi.night' : 'demi.nights')|trans }} -
{% endif %}
{% set days = [] %}
{% if item.getMon() %}
{% set days = days|merge([('demi.search.destinationpackage.mon')|trans]) %}
{% endif %}
{% if item.getTue() %}
{% set days = days|merge([('demi.search.destinationpackage.tue')|trans]) %}
{% endif %}
{% if item.getWed() %}
{% set days = days|merge([('demi.search.destinationpackage.wed')|trans]) %}
{% endif %}
{% if item.getThu() %}
{% set days = days|merge([('demi.search.destinationpackage.thu')|trans]) %}
{% endif %}
{% if item.getFri() %}
{% set days = days|merge([('demi.search.destinationpackage.fri')|trans]) %}
{% endif %}
{% if item.getSat() %}
{% set days = days|merge([('demi.search.destinationpackage.sat')|trans]) %}
{% endif %}
{% if item.getSun() %}
{% set days = days|merge([('demi.search.destinationpackage.sun')|trans]) %}
{% endif %}
{% if days|length == 7 %}
{{ 'demi.search.destinationpackage.arrival-every-day'|trans }}
{% else %}
{{ days|join(', ') }}
{% endif %}
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
{% endif %}