282 lines
11 KiB
Plaintext
282 lines
11 KiB
Plaintext
<!--
|
||
SPDX-FileCopyrightText: 2023 jordi fita mas <jordi@tandem.blog>
|
||
SPDX-FileCopyrightText: 2023 Oriol Carbonell <info@oriolcarbonell.cat>
|
||
SPDX-License-Identifier: AGPL-3.0-only
|
||
-->
|
||
{{- /*gotype: dev.tandem.ws/tandem/camper/pkg/booking.adminBookingForm*/ -}}
|
||
<input type="hidden" name="{{ .PaymentSlug.Name }}" value="{{ .PaymentSlug.Val }}">
|
||
{{ if .Error -}}
|
||
<p class="error">{{ .Error }}</p>
|
||
{{- end }}
|
||
{{ with .CampsiteType -}}
|
||
<label>
|
||
{{( pgettext "Accommodation" "title" )}}<br>
|
||
<select name="{{ .Name }}"
|
||
required
|
||
data-hx-get="{{ $.URL }}" data-hx-trigger="change"
|
||
{{ template "error-attrs" . }}
|
||
>
|
||
<option value="">{{( gettext "Choose an accommodation" )}}</option>
|
||
{{ template "list-options" . }}
|
||
</select><br>
|
||
{{ template "error-message" . }}
|
||
</label>
|
||
{{- end }}
|
||
{{ with .Dates -}}
|
||
<fieldset class="booking-period"
|
||
data-hx-get="{{ $.URL }}"
|
||
data-hx-trigger="change delay:500ms"
|
||
>
|
||
{{ with .ArrivalDate -}}
|
||
<label>
|
||
{{( pgettext "Arrival date" "input" )}}<br>
|
||
<input type="date" required
|
||
min="{{ formatDateAttr .MinDate }}"
|
||
max="{{ formatDateAttr .MaxDate }}"
|
||
name="{{ .Name }}" value="{{ .Val }}" {{ template "error-attrs" . }}
|
||
><br>
|
||
{{ template "error-message" . }}
|
||
</label>
|
||
{{- end }}
|
||
{{ with .DepartureDate -}}
|
||
<label>
|
||
{{( pgettext "Departure date" "input" )}}<br>
|
||
<input type="date" required
|
||
min="{{ formatDateAttr .MinDate }}"
|
||
max="{{ formatDateAttr .MaxDate }}"
|
||
name="{{ .Name }}" value="{{ .Val }}" {{ template "error-attrs" . }}
|
||
><br>
|
||
{{ template "error-message" . }}
|
||
</label>
|
||
{{- end }}
|
||
</fieldset>
|
||
{{- end }}
|
||
{{ with .Options -}}
|
||
{{ with .ZonePreferences -}}
|
||
<label>{{( pgettext "Area preferences (optional)" "input" )}}<br>
|
||
<input type="text"
|
||
name="{{ .Name }}" value="{{ .Val }}" {{ template "error-attrs" . }}
|
||
><br>
|
||
<a href="/{{ currentLocale }}/campground?zones" target="_blank">{{( gettext "Campground map" )}}</a><br>
|
||
{{ template "error-message" . }}
|
||
</label>
|
||
{{- end }}
|
||
{{- end }}
|
||
{{ with $guests := .Guests -}}
|
||
{{ $draft := $.Cart.Draft }}
|
||
<fieldset class="booking-items"
|
||
data-hx-get="{{ $.URL }}" data-hx-trigger="change"
|
||
>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th scope="col">{{( pgettext "Units" "header" )}}</th>
|
||
<th scope="col">{{( pgettext "Decription" "header" )}}</th>
|
||
<th scope="col" class="numeric">{{( pgettext "Total" "header" )}}</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>{{ $draft.NumNights }}</td>
|
||
<td>{{( pgettext "Night" "cart" )}}</td>
|
||
<td class="numeric">{{ formatPrice $draft.Nights }}</td>
|
||
</tr>
|
||
{{ with .NumberAdults -}}
|
||
<tr>
|
||
<td><input id="adults" type="number" required
|
||
name="{{ .Name }}" value="{{ .Val }}"
|
||
min="1"{{if not $guests.OverflowAllowed }} max="{{ $guests.MaxGuests }}"{{ end }}
|
||
{{ template "error-attrs" . }}
|
||
>
|
||
</td>
|
||
<td>
|
||
<label for="adults">{{( pgettext "Adults aged 17 or older" "input" )}}</label><br>
|
||
{{ template "error-message" . }}
|
||
</td>
|
||
<td class="numeric">{{ formatPrice $draft.Adults }}</td>
|
||
</tr>
|
||
{{- end }}
|
||
{{ with .NumberTeenagers -}}
|
||
<tr>
|
||
<td>
|
||
<input id="teenagers" type="number" required
|
||
name="{{ .Name }}" value="{{ .Val }}"
|
||
min="0"{{if not $guests.OverflowAllowed }} max="{{ $guests.MaxGuests | dec }}"{{ end }}
|
||
{{ template "error-attrs" . }}
|
||
>
|
||
</td>
|
||
<td>
|
||
<label for="teenagers">{{( pgettext "Teenagers from 11 to 16 years old" "input" )}}</label><br>
|
||
{{ template "error-message" . }}
|
||
</td>
|
||
<td class="numeric">{{ formatPrice $draft.Teenagers }}</td>
|
||
</tr>
|
||
{{- end }}
|
||
{{ with .NumberChildren -}}
|
||
<tr>
|
||
<td>
|
||
<input id="children" type="number" required
|
||
name="{{ .Name }}" value="{{ .Val }}"
|
||
min="0"{{if not $guests.OverflowAllowed }} max="{{ $guests.MaxGuests | dec }}"{{ end }}
|
||
{{ template "error-attrs" . }}
|
||
>
|
||
</td>
|
||
<td>
|
||
<label for="children">{{( pgettext "Children from 2 to 10 years old" "input" )}}</label><br>
|
||
{{ template "error-message" . }}
|
||
</td>
|
||
<td class="numeric">{{ formatPrice $draft.Children }}</td>
|
||
</tr>
|
||
{{- end }}
|
||
{{ with .NumberDogs -}}
|
||
<tr>
|
||
<td>
|
||
<input id="dogs" type="number" required
|
||
name="{{ .Name }}" value="{{ .Val }}" min="0"
|
||
{{ template "error-attrs" . }}
|
||
>
|
||
</td>
|
||
<td>
|
||
<label for="dogs">{{( pgettext "Dogs" "input" )}}</label><br>
|
||
{{ template "error-message" . }}
|
||
</td>
|
||
<td class="numeric">{{ formatPrice $draft.Dogs }}</td>
|
||
</tr>
|
||
{{- end }}
|
||
{{ with $.Options -}}
|
||
{{ range .Options -}}
|
||
<tr>
|
||
<td>
|
||
<input id="{{ .Input.Name }}" type="number" required
|
||
name="{{ .Input.Name }}" value="{{ .Input.Val }}"
|
||
min="{{ .Min }}" max="{{ .Max }}"
|
||
{{ template "error-attrs" .Input }}
|
||
>
|
||
|
||
</td>
|
||
<td>
|
||
<label for="{{ .Input.Name }}">{{ .Label }}</label><br>
|
||
{{ template "error-message" .Input }}
|
||
</td>
|
||
<td class="numeric">{{ formatPrice .Subtotal }}</td>
|
||
</tr>
|
||
{{- end }}
|
||
{{- end }}
|
||
<tr>
|
||
<td>{{ $draft.NumAdults }}</td>
|
||
<td>{{( pgettext "Tourist tax" "cart" )}}</td>
|
||
<td class="numeric">{{ formatPrice $draft.TouristTax }}</td>
|
||
</tr>
|
||
</tbody>
|
||
<tfoot>
|
||
<tr>
|
||
<th scope="row" colspan="2" class="numeric">{{( pgettext "Total" "header" )}}</th>
|
||
<td class="numeric">{{ formatPrice $draft.Total }}</td>
|
||
</tr>
|
||
</tfoot>
|
||
</table>
|
||
{{ if not .NumberDogs -}}
|
||
<small>{{( gettext "Note: This accommodation does <strong>not</strong> allow dogs.") | raw }}</small>
|
||
{{- end }}
|
||
{{ if .Error -}}
|
||
<p class="error">{{ .Error }}</p>
|
||
{{- end }}
|
||
</fieldset>
|
||
{{- end }}
|
||
{{ with .Customer -}}
|
||
<fieldset class="customer-details">
|
||
<legend>{{( pgettext "Customer Details" "title" )}}</legend>
|
||
{{ with .FullName -}}
|
||
<label>
|
||
{{( pgettext "Full name" "input" )}}<br>
|
||
<input type="text" required minlength="2"
|
||
name="{{ .Name }}" value="{{ .Val }}" {{ template "error-attrs" . }}
|
||
><br>
|
||
{{ template "error-message" . }}
|
||
</label>
|
||
{{- end }}
|
||
{{ with .Country -}}
|
||
<label>
|
||
{{( pgettext "Country (optional)" "input" )}}<br>
|
||
<select name="{{ .Name }}"
|
||
{{ template "error-attrs" . }}
|
||
>
|
||
<option value="">{{( gettext "Choose a country" )}}</option>
|
||
{{ template "list-options" . }}
|
||
</select><br>
|
||
{{ template "error-message" . }}
|
||
</label>
|
||
{{- end }}
|
||
{{ with .Address -}}
|
||
<label class="colspan">
|
||
{{( pgettext "Address (optional)" "input" )}}<br>
|
||
<input type="text"
|
||
name="{{ .Name }}" value="{{ .Val }}" {{ template "error-attrs" . }}
|
||
><br>
|
||
{{ template "error-message" . }}
|
||
</label>
|
||
{{- end }}
|
||
{{ with .PostalCode -}}
|
||
<label>
|
||
{{( pgettext "Postcode (optional)" "input" )}}<br>
|
||
<input type="text"
|
||
name="{{ .Name }}" value="{{ .Val }}" {{ template "error-attrs" . }}
|
||
><br>
|
||
{{ template "error-message" . }}
|
||
</label>
|
||
{{- end }}
|
||
{{ with .City -}}
|
||
<label>
|
||
{{( pgettext "Town or village (optional)" "input" )}}<br>
|
||
<input type="text"
|
||
name="{{ .Name }}" value="{{ .Val }}" {{ template "error-attrs" . }}
|
||
><br>
|
||
{{ template "error-message" . }}
|
||
</label>
|
||
{{- end }}
|
||
{{ with .Email -}}
|
||
<label>
|
||
{{( pgettext "Email (optional)" "input" )}}<br>
|
||
<input type="email"
|
||
name="{{ .Name }}" value="{{ .Val }}" {{ template "error-attrs" . }}
|
||
><br>
|
||
{{ template "error-message" . }}
|
||
</label>
|
||
{{- end }}
|
||
{{ with .Phone -}}
|
||
<label>
|
||
{{( pgettext "Phone (optional)" "input" )}}<br>
|
||
<input type="tel"
|
||
name="{{ .Name }}" value="{{ .Val }}" {{ template "error-attrs" . }}
|
||
><br>
|
||
{{ template "error-message" . }}
|
||
</label>
|
||
{{- end }}
|
||
{{ with $.Guests.ACSICard -}}
|
||
<label class="colspan" data-hx-get="{{ $.URL }}" data-hx-trigger="change">
|
||
<input type="checkbox" name="{{ .Name }}" {{ if .Checked}}checked{{ end }}
|
||
{{ template "error-attrs" . }}
|
||
> {{( pgettext "ACSI / ANWB card? (optional)" "input" )}}<br>
|
||
{{ template "error-message" . }}
|
||
</label>
|
||
{{- end }}
|
||
</fieldset>
|
||
{{- end }}
|
||
{{ if .Campsites -}}
|
||
<h3>{{( pgettext "Campsites" "title" )}}</h3>
|
||
{{ template "grid.gohtml" . }}
|
||
{{ if .Error -}}
|
||
<p class="error">{{ .Error }}</p>
|
||
{{- end }}
|
||
{{- end }}
|
||
|
||
{{ define "campsite-heading" -}}
|
||
{{- /*gotype: dev.tandem.ws/tandem/camper/pkg/booking.CampsiteEntry*/ -}}
|
||
<label>
|
||
<input type="checkbox"
|
||
name="campsite"
|
||
value="{{ .ID }}"
|
||
{{- if .Selected }} checked="checked"{{ end -}}
|
||
> {{ .Label }}</label>
|
||
{{- end }}
|