EU Reiserecht - Booking

git-svn-id: http://78.47.251.156/svn/dev/sterntours-3@3419 f459cee4-fb09-11de-96c3-f9c5f16c3c76
This commit is contained in:
adametz 2018-06-30 12:44:31 +00:00
parent 8fd6f63403
commit 2360290f06
25 changed files with 1089 additions and 229 deletions

View file

@ -16,5 +16,20 @@
</td>
<td class="st-position-name-col">Gesamtpreis der Reise</td>
</tr>
<tr class="{% if(show_detail) %}hidden{% endif %}">
<td class="st-position-price-col">
<span class="st-deposit-price">{{ booking_price_info.deposit_total|number_format(2) }} €</span>
</td>
<td class="st-position-name-col">Anzahlung (ist sofort fällig)</td>
</tr>
<tr class="{% if(show_detail) %}hidden{% endif %}">
<td class="st-position-price-col">
<span class="st-final-price">{{ booking_price_info.final_payment|number_format(2) }} €</span>
</td>
<td class="st-position-name-col">Restzahlung (bis zum {{ booking_price_info.final_payment_date}})</td>
</tr>
</tbody>
</table>

View file

@ -29,6 +29,10 @@ Abfahrts-/Abflugort: {{ booking_request.departure.name }} {{ booking_request.
Gesamtpreis: {{ booking_price_info['total']|number_format(2) }}
Anzahlung: {{ booking_price_info.deposit_total|number_format(2) }} € (ist sofort fällig)
Restzahlung: {{ booking_price_info.final_payment|number_format(2) }} € (bis zum {{ booking_price_info.final_payment_date}})
=====================================================================================
Reiseleistungen:
=====================================================================================
@ -64,16 +68,16 @@ Zimmernummer, Zimmertyp, Geschlecht, Vorname, Nachname, Geburtsdatum
{% set travelerCollection = booking_request.travelers|slice(0, booking_request.travelerCount) %}
{% for room in booking_request.occupiedRooms %}
{% if(room.type == 1) %}
{{ loop.index }}. Einzelzimmer, {{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex].firstName }}, {{ travelerCollection[travelerIndex].lastName -}}, {{ travelerCollection[travelerIndex].birthDate }}
{{ loop.index }}. Einzelzimmer, {{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex].firstName }}, {{ travelerCollection[travelerIndex].lastName -}}, {{ travelerCollection[travelerIndex].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName }}
{% set travelerIndex = travelerIndex + 1 %}
{% elseif (room.type == 2) %}
{{ loop.index }}. Doppelzimmer, {{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex].firstName }}, {{ travelerCollection[travelerIndex].lastName -}}, {{ travelerCollection[travelerIndex].birthDate }}
{{ loop.index }}. Doppelzimmer, {{ travelerCollection[travelerIndex+1].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex+1].firstName }}, {{ travelerCollection[travelerIndex+1].lastName -}}, {{ travelerCollection[travelerIndex+1].birthDate }}
{{ loop.index }}. Doppelzimmer, {{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex].firstName }}, {{ travelerCollection[travelerIndex].lastName -}}, {{ travelerCollection[travelerIndex].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName }}
{{ loop.index }}. Doppelzimmer, {{ travelerCollection[travelerIndex+1].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex+1].firstName }}, {{ travelerCollection[travelerIndex+1].lastName -}}, {{ travelerCollection[travelerIndex+1].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName }}
{% set travelerIndex = travelerIndex + 2 %}
{% elseif (room.type == 3) %}
{{ loop.index }}. Dreibettzimmer, {{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex].firstName }}, {{ travelerCollection[travelerIndex].lastName -}}, {{ travelerCollection[travelerIndex].birthDate }}
{{ loop.index }}. Dreibettzimmer, {{ travelerCollection[travelerIndex+1].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex+1].firstName }}, {{ travelerCollection[travelerIndex+1].lastName -}}, {{ travelerCollection[travelerIndex+1].birthDate }}
{{ loop.index }}. Dreibettzimmer, {{ travelerCollection[travelerIndex+2].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex+2].firstName }}, {{ travelerCollection[travelerIndex+2].lastName -}}, {{ travelerCollection[travelerIndex+2].birthDate }}
{{ loop.index }}. Dreibettzimmer, {{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex].firstName }}, {{ travelerCollection[travelerIndex].lastName -}}, {{ travelerCollection[travelerIndex].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName }}
{{ loop.index }}. Dreibettzimmer, {{ travelerCollection[travelerIndex+1].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex+1].firstName }}, {{ travelerCollection[travelerIndex+1].lastName -}}, {{ travelerCollection[travelerIndex+1].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName }}
{{ loop.index }}. Dreibettzimmer, {{ travelerCollection[travelerIndex+2].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex+2].firstName }}, {{ travelerCollection[travelerIndex+2].lastName -}}, {{ travelerCollection[travelerIndex+2].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName }}
{% set travelerIndex = travelerIndex + 3 %}
{% endif %}
{% endfor %}

View file

@ -183,7 +183,8 @@
<td>
<p style="white-space: normal;">
<br>
STERN TOURS GmbH empfiehlt generell den Abschluss einer Reise-Rücktrittskosten-Versicherung und einer Auslands-Reisekrankenversicherung mit Rücktransport. Im Anschluss der Buchung senden wir Ihnen diesbezüglich Informationen zu.
STERN TOURS GmbH empfiehlt generell den Abschluss einer Reise-Rücktrittskosten-Versicherung und einer Auslands-Reisekrankenversicherung mit Rücktransport.
Im Anschluss der Buchung senden wir Ihnen diesbezüglich Informationen zu.
</p>
</td>
</tr>
@ -200,7 +201,9 @@
<div class="st-booking-summary">
{% include 'default/components/booking/summary.html.twig' with {
'summary': summary,
'total_price': total_price
'total_price': total_price,
'booking_price_info': booking_price_info,
'show_detail' : true,
} %}
</div>
</div>
@ -209,6 +212,103 @@
</div>
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Flugdaten</h5>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="accordion-toggle-2">
<div class="panel-group" id="accordion_fd">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion_fd" href="#collapse_fd" aria-expanded="true">
<h3><span>Flugdaten einblenden</span><i class="indicator pull-right icon-plus"></i></h3>
</a>
<div id="collapse_fd" class="panel-collapse collapse" aria-expanded="true" style="">
<div class="panel-body">
{% for departure in travel_date.departures %}
{# @var departure \AppBundle\Entity\TravelDeparturePoint #}
{% if departure.flightTime[travel_date.startWeekday] is defined %}
<div class="flight_times_ele" id="flight_time_{{ departure.id }}" style="display: none;">
<h3>Von {{ departure.name }}</h3>
{# travel_date.end|date #}
{# travel_date.end|date #}
{{ departure.flightTime[travel_date.startWeekday] }}
</div>
{% endif %}
{% endfor %}
<div class="" id="no_flight_time" style="display: none;">
<p>Die Flugdaten sind zum Zeitpunkt der Ausschreibung noch nicht bekannt und daher werden wir Ihnen diese mit der Annahme vom Buchungsauftrag mitteilen.</p>
</div>
<div class="" id="yes_flight_time" style="display: none;">
<h3>Hinweis</h3>
<p>Flugzeiten können um 1 Std. variieren durch Sommer-/Winterzeit.</p>
</div>
</div>
</div>
</div>
</div>
</ul>
</div><!-- accordion -->
</div>
</div>
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Reiseprogramm mit Anzeige der Reisetage</h5>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
{% set travel_program_dates = travel_program.getTravelProgramDates(travel_date.start) %}
<ul class="c1">
{% for travel_program_date in travel_program_dates if travel_program_date.count < 1 %}
<li>
{{ travel_program_date.date }} : {{ travel_program_date.day|raw }}
{% if travel_program_date.night is defined %}
<br>Übernachtung : {{ travel_program_date['night']|raw }}
{% endif %}
</li>
{% endfor %}
<div class="accordion-toggle-2">
<div class="panel-group" id="accordion_pd">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion_pd" href="#collapse_pd" aria-expanded="true">
<h3><span>Reiseablauf mit Reisetagen einblenden</span><i class="indicator pull-right icon-plus"></i></h3>
</a>
<div id="collapse_pd" class="panel-collapse collapse" aria-expanded="true" style="">
<div class="panel-body">
{% for travel_program_date in travel_program_dates if travel_program_date.count > 0 %}
<li>
{{ travel_program_date.date }} : {{ travel_program_date.day|raw }}
{% if travel_program_date.night is defined %}
<br>Übernachtung : {{ travel_program_date['night']|raw }}
{% endif %}
</li>
{% endfor %}
</div>
</div>
</div>
</div>
</ul>
</div><!-- accordion -->
</div>
</div>
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
@ -259,6 +359,9 @@
</div><!-- accordion -->
</div>
</div>
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
@ -343,7 +446,28 @@
</div>
</div><!-- end form-box -->
<div class="form-box">
<style type="text/css">
.form-box-small .form-group {
margin-bottom: 5px;
}
.form-box-small .help-block {
margin-top: 0px;
margin-bottom: 0px;
}
.form-box-small .form-control{
margin-bottom: 8px;
}
.form-box.form-box-small .st-travelers div.required:before {
margin-right: 20px;
right: 0px;
top: 0px;
}
</style>
<div class="form-box form-box-small">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Reiseteilnehmer</h5>
@ -351,33 +475,21 @@
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="table-responsive" id="no-more-tables">
<table class="table">
<thead>
<tr>
<th>Zimmertyp</th>
<th>Geschlecht</th>
<th>Vorname</th>
<th>Nachname</th>
<th>Geburtsdatum</th>
</tr>
</thead>
<tbody class="st-travelers">
<div class="st-travelers">
{% set currentIndex = 0 %}
{% for room in form.rooms %}
{% for traveler in room.travelers %}
{#{{ dump(room.vars.value.roomType) }}#}
{% set currentIndex = currentIndex + 1 %}
<tr class="st-traveler st-traveler-{{ currentIndex }}"
<div class="row st-traveler st-traveler-{{ currentIndex }}"
data-st-traveler-index="{{ currentIndex }}"
data-room-index="{{ loop.parent.loop.index }}"
data-room-type="{{ room.vars.value.type }}"
style="display: none;"
>
<td>
<button class="btn btn-primary btn-sm border-radius st-traveller-index"
type="button"
>
style="display: none; border-bottom:2px solid #ffc926; margin-bottom: 20px; padding-bottom: 10px;">
<div class="col-md-12 col-sm-12 col-xs-12" style="margin-bottom:10px; padding-bottom:10px; border-bottom:1px solid #fff;">
<button class="btn btn-primary btn-sm border-radius st-traveller-index" type="button">
{% set roomType = "" %}
{% if loop.parent.loop.index is not null %}
{% if room.vars.value.type == "1" %}
@ -388,54 +500,113 @@
{% set roomType = "Dreibettzimmer" %}
{% endif %}
{% endif %}
{{ roomType }}
Reiseteilnehmer | {{ roomType }}
</button>
</td>
<td>
</div>
<div class="col-md-3 col-sm-12 col-xs-12">
<div class="form-group" style="margin-top:5px;">
<div class="required">
{{ form_field_pho(traveler.sex, 'Geschlecht', {
required: false
}) }}
</td>
<td>
<div class="form-group" style="margin-bottom: 15px;">
</div>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="col-md-4 col-sm-12 col-xs-12">
<div class="form-group">
<div class="required">
{{ form_field_pho(traveler.firstName, 'Vorname') }}
</div>
<div class="help-block with-errors"></div>
</div>
</td>
<td>
<div class="form-group" style="margin-bottom: 15px;">
</div>
<div class="col-md-5 col-sm-12 col-xs-12">
<div class="form-group">
<div class="required">
{{ form_field_pho(traveler.lastName, 'Nachname') }}
</div>
<div class="help-block with-errors"></div>
</div>
</td>
<td>
<div class="form-group" style="margin-bottom: 15px;">
</div>
<div class="col-md-offset-3 col-md-4 col-sm-12 col-xs-12">
<div class="form-group" style="margin-top:5px;">
<div class="required nationality_select" data-toggle="#nationality_entry_{{ currentIndex }}">
{{ form_field_pho(traveler.nationality, 'Nationalität') }}
</div>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="col-md-5 col-sm-12 col-xs-12">
<div class="form-group">
<div class="required">
{{ form_field_pho(traveler.birthDate, 'Geburtsdatum') }}
</div>
<div class="help-block with-errors"></div>
</div>
</td>
</tr>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="accordion-toggle-2" id="nationality_entry_{{ currentIndex }}" style="display:none;">
<div class="panel-group" id="accordion_entry_{{ currentIndex }}">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion_entry_{{ currentIndex }}" href="#collapse_entry_{{ currentIndex }}" aria-expanded="true">
<h3><span>Einreisebestimmungen</span><i class="indicator pull-right icon-plus"></i></h3>
</a>
<div id="collapse_entry_{{ currentIndex }}" class="panel-collapse collapse acc_nationality_panel" aria-expanded="true" style="">
<div class="panel-body">
{% for country in travel_program.countries %}
<h2>{{ country.name }}</h2>
{{ country.entryRequirements|raw|nl2br }}
{% endfor %}
<hr>
</div>
</div>
</div>
</div><!-- accordion -->
<div class="form-group" style="margin-bottom: 15px;">
<div class="checkbox">
{{ form_widget(traveler.acceptEntryRequirements) }}
<label for="{{ traveler.acceptEntryRequirements.vars.id }}" style="line-height: 1.2em;">
Ich habe die oben genannten Hinweise zu den "Einreisebestimmungen, Visabestimmungen und gesundheitspolizeilichen Vorschriften" für mich und alle Mitreisenden gelesen und zur Kenntnis genommen..
</label>
{{ form_errors(traveler.acceptEntryRequirements) }}
<div class="help-block with-errors"></div>
</div>
</div>
</div>
</div> <!-- row -->
{% endfor %}
{% endfor %}
</tbody>
</table>
</div>
</div>
</div> <!-- st trav -->
<h2>Hinweis</h2>
<p>Sofern Sie nicht oder nicht ausschließlich nur die deutsche Staatsbürgerschaft besitzen, können Sie die Reise nicht buchen,
da wir Sie vorher u.a. über die Einreisebestimmungen für Ihre individuelle Staatsbürgerschaft informieren müssen.
Bitte nehmen Sie vor einer Buchung Kontakt mit uns auf, damit Sie nach Erhalt der Informationen entscheiden können, ob Sie die Reise buchen möchten.</p>
</div> <!-- col -->
</div>
</div><!-- end form-box -->
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Mitteilungen / Sonstiges (optional)</h5>
<h5>Unverbindliche Anmerkungen</h5>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
{{ form_field(form.notes, 'Mitteilungen / Sonstiges (optional)', {
{{ form_field(form.notes, 'Unverbindliche Anmerkungen', {
'label_attr': {'class': 'sr-only'},
'attr': {'rows': '6'}
}) }}
@ -443,45 +614,26 @@
</div>
</div><!-- end form-box -->
{#
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Einreisebestimmungen</h5>
{% for country in travel_program.countries %}
<h2>{{ country.name }}</h2>
{{ country.entryRequirements|raw }}
{% endfor %}
<div class="form-group">
<div class="checkbox">
{{ form_widget(form.acceptEntryRequirements) }}
<label for="{{ form.acceptEntryRequirements.vars.id }}">
Bitte bestätigen Sie, dass die das gesetzliche Formblatt zur Kenntnis genommen haben.
</label>
{{ form_errors(form.acceptEntryRequirements) }}
<div class="help-block with-errors"></div>
</div>
</div>
</div>
</div>
</div>
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Reiseveranstalter</h5>
<p>{{ travel_program.organizer.name|raw }}</p>
<h5>Insolvensversicherer</h5>
<p>{{ travel_program.organizer.insolvency|raw }}</p>
<h5>gesetzliche Rechte</h5>
<p>{{ travel_program.organizer.legalRights|raw }}</p>
<h5>Formblatt zur Unterrichtung des Reisenden bei einer Pauschalreise nach § 651a des Bürgerlichen Gesetzbuchs.</h5>
<div class="well">
<p>Bei der Ihnen angebotenen Kombination von Reiseleistungen handelt es sich um eine Pauschalreise im Sinne der Richtlinie (EU) 2015/2302.</p>
<p>Daher können Sie alle EU-Rechte in Anspruch nehmen, die für Pauschalreisen gelten. STERN TOURS GmbH, Emser Str. 3, 10719 Berlin trägt die volle Verantwortung für die ordnungsgemäße Durchführung der gesamten Pauschalreise. Zudem verfügt STERN TOURS GmbH über die gesetzlich vorgeschriebene Absicherung für die Rückzahlung Ihrer Zahlungen und, falls der Transport in der Pauschalreise inbegriffen ist, zur Sicherstellung Ihrer Rückbeförderung im Fall seiner Insolvenz.</p>
<a href="/uploads/{{ travel_program.organizer.fileFormPage }}" target="_blank">
Weiterführende Informationen zu Ihren wichtigsten Rechten nach der Richtlinie (EU) 2015/2302 (Formblatt)
</a>
</div>
<div class="form-group">
<div class="checkbox">
{{ form_widget(form.acceptLegalRights) }}
<label for="{{ form.acceptLegalRights.vars.id }}">
Bitte bestätigen Sie, dass die das gesetzliche Formblatt zur Kenntnis genommen haben.
<label for="{{ form.acceptLegalRights.vars.id }}" style="line-height: 1.2em;">
Hiermit bestätige ich, dass ich das Formblatt mit den Informationen zu meinen wichtigsten Rechten nach der Richtlinie (EU) 2015/2302 zur Kenntnis genommen habe.
</label>
{{ form_errors(form.acceptLegalRights) }}
<div class="help-block with-errors"></div>
@ -489,62 +641,145 @@
</div>
</div>
</div>
</div> #}
</div>
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Zahlung</h5>
<p>Die gewünschte Zahlungsart (Rechnung, Überweisung, Sofortüberweisung, Kreditkarten,
Barzahlung) stimmen wir mit Ihnen im Anschluss an Ihre Buchung ab.
</p>
</div>
</div>
</div>
<!-- end form-box -->
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Allgemeine Geschäftsbedingungen und Datenschutzerlärung</h5>
<h5>Reisebedingungen (ARB)</h5>
<div class="form-group">
<div class="checkbox">
{{ form_widget(form.acceptTerms) }}
<label for="{{ form.acceptTerms.vars.id }}">
<label for="{{ form.acceptTerms.vars.id }}" style="line-height: 1.2em;">
Ich habe alle Daten und Angaben auf Richtigkeit überprüft. Ich habe die
<a href="/uploads/{{ travel_program.organizer.fileName }}" target="_blank">
{% if travel_program.isMediated %}
<a href="/uploads/{{ travel_program.organizer.fileName }}?t={{ travel_program.organizer.rulesUpdatedTime }}" target="_blank">
Allgemeinen Geschäftsbedingungen des Reiseveranstalters
</a> {{ travel_program.organizer.name }}
{% if travel_program.isMediated %}
sowie die
<a href="/uploads/{{ mediator_terms_filename }}" target="_blank">
Allgemeinen Geschäftsbedingungen des Reisevermittlers
</a>
{% else %}
<a href="/uploads/{{ travel_program.organizer.formArb }}?t={{ travel_program.organizer.rulesUpdatedTime }}" target="_blank">
Allgemeinen Reisebedingungen des Reiseveranstalters
</a> {{ travel_program.organizer.name }}
{% endif %}
gelesen und akzeptiert. Zugleich erkenne ich diese für alle Reiseteilnehmer an.
gelesen und akzeptiert. Zugleich erkenne ich diese für alle Reiseteilnehmer an.<br>
Es gelten die der Staatsbürgerschaft der einzelnen Reiseteilnehmer entsprechenden Einreise- und Impfbestimmungen für das Ziel- und Transitland.
Die für deutsche Staatsbürger geltenden Bestimmungen finden Sie auf den Seiten des <a href="https://www.auswaertiges-amt.de/de/ReiseUndSicherheit/reise-und-sicherheitshinweise" target="_blank">Auswärtigen Amts</a>
Ein Widerrufsrecht steht Ihnen gemäß § 312 g Abs. 2 Nr. 9 BGB (Bürgerliches Gesetzbuch) nicht zu.
</label>
{{ form_errors(form.acceptTerms) }}
<div class="help-block with-errors"></div>
</div>
</div>
</div>
</div>
</div><!-- end form-box -->
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Bestätigung der persönlichen Daten und zahlungspflichtigen Buchung</h5>
<div class="form-group">
<div class="checkbox">
{{ form_widget(form.acceptPrivacy) }}
<label for="{{ form.acceptPrivacy.vars.id }}">
Hiermit willige ich in die im Rahmen der
<a href="/datenschutz" target="_blank">
Datenschutzerklärung
</a> genannte Datenverarbeitung ein.
<label for="{{ form.acceptPrivacy.vars.id }}" style="line-height: 1.2em;">Ich habe die <a href="/datenschutz" target="_blank">Datenschutzerklärung</a> zur Kenntnis genommen.
</label>
{{ form_errors(form.acceptPrivacy) }}
<div class="help-block with-errors"></div>
</div>
</div>
<div class="form-group">
<div class="checkbox">
{{ form_widget(form.acceptProcessing) }}
<label for="{{ form.acceptProcessing.vars.id }}" style="line-height: 1.2em;">Einwilligungserklärung: Hiermit willige ich in die Verarbeitung der von mir freiwillig
angegebenen personenbezogenen Daten ein.
Ich wurde darüber informiert, dass ich diese Einwilligung jederzeit ohne Nachteile per Mail an
stern@sterntours.de widerrufen kann.
</label>
{{ form_errors(form.acceptProcessing) }}
<div class="help-block with-errors"></div>
</div>
</div>
</div>
</div>
</div><!-- end form-box -->
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Wichtiger Hinweis</h5>
Nach Abschluss Ihrer Buchung erhalten Sie innerhalb von 15 Minuten eine Email zur Bestätigung Ihres verbindlichen Buchungsauftrages.
Sollten Sie diese Email nicht bekommen, kontaktieren Sie uns bitte per Email, oder per Telefon unter 030-70094100.
Wir sind Montag bis Freitag von 9 bis 22 Uhr, Samstag von 10 bis 22 Uhr und Sonn- und Feiertage von 11 bis 22:00 Uhr für Sie da.
</div>
</div>
</div><!-- end form-box -->
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Zahlung</h5>
<div class="well">
Die gewünschte Zahlungsart (Rechnung, Überweisung, Sofortüberweisung, Kreditkarten, Barzahlung) stimmen wir mit Ihnen im Anschluss an Ihre Buchung ab.
<div class="booking_price_info">
<table class="st-booking-table" id="st-booking-price-set-table">
<tbody>
<tr class="st-total-tr">
<td class="st-position-price-col">
<span class="st-total-price-set">0 €</span>
</td>
<td class="st-position-name-col">Gesamtpreis der Reise</td>
</tr>
<tr class="">
<td class="st-position-price-col">
<span class="st-deposit-price-set">0 €</span>
</td>
<td class="st-position-name-col">Anzahlung (ist sofort fällig)</td>
</tr>
<tr class="">
<td class="st-position-price-col">
<span class="st-final-price-set">0 €</span>
</td>
<td class="st-position-name-col">Restzahlung (bis zum 01.07.2018)</td>
</tr>
</tbody>
</table>
</div>
{% if(travel_program.category.id != 1) %}
<br>
<h5>Hinweis</h5>
<p>Abweichend von den Anzahlungsbedingungen Ziffer 2.1 gelten hier besondere Anzahlungsbedingungen wie folgt:
Fluganteil 100 % und Landleistung 20%.
Abweichend von den allgemeinen Stornobedingungen Ziffer 4.3a gelten hier besondere Stornobedingungen
(Ziffer 4.3b) wie folgt: Fluganteil 100 % und Landleistung gemäß Ziffer 4.3a allgemeine Stornobedingungen.</p>
{% endif %}
</div>
</div>
</div>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="aligncenter btn btn-primary btn-lg border-radius"
@ -552,8 +787,9 @@
kostenpflichtig<br class="visible-xs"> buchen
</button>
</div>
</div>
</div><!-- end form-box -->

View file

@ -62,7 +62,9 @@
<div class="st-booking-summary">
{% include 'default/components/booking/summary.html.twig' with {
'summary': summary,
'total_price': total_price
'total_price': total_price,
'booking_price_info': booking_price_info,
'show_detail' : false,
} %}
</div>
</div>
@ -190,7 +192,6 @@
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Reiseteilnehmer</h5>
<p>Bitte geben Sie Ihre Vornamen und Nachnamen in die beiden Felder "Vornamen" und "Nachnamen" ein, wie diese im maschinenlesbaren Teil in Ihrem Reisepass eingetragen sind.</p>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
@ -202,7 +203,8 @@
<th style="text-align: left;">Geschlecht</th>
<th style="text-align: left;">Vorname</th>
<th style="text-align: left;">Nachname</th>
<th style="text-align: left;">Geburtsdatum (TT.MM.JJJJ)</th>
<th style="text-align: left;">Geburtsdatum</th>
<th style="text-align: left;">Nationalität</th>
</tr>
</thead>
<tbody class="st-travelers">
@ -235,6 +237,9 @@
<td style="text-align: left;">
{{ participant.birthDate|date }}
</td>
<td style="text-align: left;">
{{ participant.getNationalityName }}
</td>
</tr>
{% endfor %}

View file

@ -91,6 +91,20 @@
<div class="help-block with-errors"></div>
</div>
</div>
<div class="form-group">
<div class="checkbox">
{{ form_widget(contact_form.acceptProcessing) }}
<label for="{{ contact_form.acceptProcessing.vars.id }}" style="line-height: 1.2em;">Hiermit willige ich in die Verarbeitung der von mir freiwillig
angegebenen personenbezogenen Daten ein.
Ich wurde darüber informiert, dass ich diese Einwilligung jederzeit ohne Nachteile per Mail an
stern@sterntours.de widerrufen kann.
</label>
{{ form_errors(contact_form.acceptProcessing) }}
<div class="help-block with-errors"></div>
</div>
</div>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">

View file

@ -234,6 +234,18 @@
<div class="help-block with-errors"></div>
</div>
</div>
<div class="form-group">
<div class="checkbox">
{{ form_widget(form.acceptProcessing) }}
<label for="{{ form.acceptProcessing.vars.id }}" style="line-height: 1.2em;">Hiermit willige ich in die Verarbeitung der von mir freiwillig
angegebenen personenbezogenen Daten ein.
Ich wurde darüber informiert, dass ich diese Einwilligung jederzeit ohne Nachteile per Mail an
stern@sterntours.de widerrufen kann.
</label>
{{ form_errors(form.acceptProcessing) }}
<div class="help-block with-errors"></div>
</div>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"

View file

@ -77,11 +77,9 @@ class BookingController extends Controller
}
$htmlSummary = [];
$bookingPriceInfo = [];
$totalPrice = $this->calculatePrice($travelDate, $bookingRequest, $htmlSummary, $bookingPriceInfo);
$totalPrice = $this->calculatePrice($travelDate, $bookingRequest, $travelProgram->getCategory()->getId(), $htmlSummary, $bookingPriceInfo);
if ($action == '/buchen')
{
$breadcrumbEntries = Util::createBreadcrumb($travelProgramPage);
$breadcrumbEntries[] = new BreadcrumbEntry('Buchen');
@ -156,6 +154,8 @@ class BookingController extends Controller
'travel_program' => $travelProgram,
'summary' => $htmlSummary,
'total_price' => $totalPrice,
'booking_price_info' => $bookingPriceInfo,
]);
}
@ -175,6 +175,7 @@ class BookingController extends Controller
'price_type_by_id' => $this->priceTypeById,
'summary' => $htmlSummary,
'total_price' => $totalPrice,
'booking_price_info' => $bookingPriceInfo,
'mediator_terms_filename' => $travelProgram->getIsMediated()
? $this->getDoctrine()->getRepository('AppBundle:TravelOrganizer')->find(1)->getFileName()
: null
@ -185,7 +186,10 @@ class BookingController extends Controller
return $this->render('default/components/booking/summary.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'summary' => $htmlSummary,
'total_price' => $totalPrice
'total_price' => $totalPrice,
'booking_price_info' => $bookingPriceInfo,
'show_detail' => true,
]);
}
throw new \Exception('Unknow BookingController action: '. $action);
@ -200,8 +204,7 @@ class BookingController extends Controller
return $ret;
}
public function calculatePrice(TravelDate $travelDate, BookingRequest $bookingRequest, &$outHtmlSummary = null,
&$outPriceInfo = null)
public function calculatePrice(TravelDate $travelDate, BookingRequest $bookingRequest, $categoryId, &$outHtmlSummary = null, &$outPriceInfo = null)
{
$ret = 0;
$insuranceAssessmentBasis = 0;
@ -220,6 +223,10 @@ class BookingController extends Controller
$outPriceInfo['insurances'] = [];
$outPriceInfo['options'] = [];
$outPriceInfo['classOptions'] = [];
$outPriceInfo['departure'] = 0;
$outPriceInfo['departure_extra'] = 0;
$outPriceInfo['flight_price'] = 0;
$outPriceInfo['final_payment_date'] = $travelDate->getFinalPaymentDate();
}
if($bookingRequest->getDeparture() != null)
@ -236,6 +243,7 @@ class BookingController extends Controller
$insuranceAssessmentBasis += $departure->getExtraCharge();
$a = $travelerCount * $departure->getExtraCharge();
$ret += $a;
$outPriceInfo['departure_extra'] += $a;
if (isset($outHtmlSummary))
{
$outHtmlSummary[] = [
@ -268,8 +276,6 @@ class BookingController extends Controller
}
}
$persons = [
'total' => $travelerCount,
'adults' => $travelerCount,
@ -320,6 +326,10 @@ class BookingController extends Controller
: ($adultCount * ($singleDiscountPrice - $singleFullPrice));
$ret += $roomPrice + $discount;
$singel_flight_price = $travelDate->getFlightCalcPrice();
$outPriceInfo['flight_price'] += (($singel_flight_price * $adultCount) + ($singel_flight_price * $room['persons']['children']));
if (isset($outPriceInfo))
{
$outPriceInfo['rooms'][] = [
@ -396,6 +406,24 @@ class BookingController extends Controller
{
$outPriceInfo['total'] = $ret;
$outPriceInfo['totalWithoutInsurance'] = $ret - $insuranceTotal;
if($outPriceInfo['departure_extra'] >= 0){
$outPriceInfo['flight_price'] = $outPriceInfo['flight_price'] + $outPriceInfo['departure_extra'];
}else{
$outPriceInfo['flight_price'] = 0;
}
//Aeqypten (20% from price)
if($categoryId == 1){
$deposit = ($outPriceInfo['total'] / 100 * 20);
$outPriceInfo['deposit_total'] = $deposit;
$outPriceInfo['final_payment'] = ($outPriceInfo['total'] - $outPriceInfo['deposit_total']);
}else{
//all 100% vom Flugpreis und 20% von der Landleistung.
$deposit = (($outPriceInfo['total'] - $outPriceInfo['flight_price']) / 100 * 20);
$outPriceInfo['deposit_total'] = ($deposit + $outPriceInfo['flight_price']);
$outPriceInfo['final_payment'] = ($outPriceInfo['total'] - $outPriceInfo['deposit_total']);
}
}
return $ret;

View file

@ -97,14 +97,12 @@ class BookingRequest
*/
private $acceptTerms = false;
/*
private $acceptEntryRequirements = false;
private $acceptLegalRights = false;
*/
private $acceptPrivacy = false;
private $acceptProcessing = false;
/**
* BookingRequest constructor.
*/
@ -628,41 +626,21 @@ class BookingRequest
/**
* @return mixed
*/
/*
public function isAcceptEntryRequirements()
{
return $this->acceptEntryRequirements;
}
*/
/**
* @param mixed $acceptEntryRequirements
*/
/*
public function setAcceptEntryRequirements($acceptEntryRequirements)
{
$this->acceptEntryRequirements = $acceptEntryRequirements;
}
*/
/**
* @return mixed
*/
/*
public function isAcceptLegalRights()
{
return $this->acceptLegalRights;
}
*/
/**
* @param mixed $acceptLegalRights
*/
/*
public function setAcceptLegalRights($acceptLegalRights)
{
$this->acceptLegalRights = $acceptLegalRights;
}
*/
/**
* @return mixed
@ -680,6 +658,22 @@ class BookingRequest
$this->acceptPrivacy = $acceptPrivacy;
}
/**
* @return mixed
*/
public function isAcceptProcessing()
{
return $this->acceptProcessing;
}
/**
* @param mixed $acceptProcessing
*/
public function setAcceptProcessing($acceptProcessing)
{
$this->acceptProcessing = $acceptProcessing;
}
/**
* @Assert\Callback
*/

View file

@ -68,6 +68,8 @@ class ContactRequest
private $acceptPrivacy = false;
private $acceptProcessing = false;
/**
* @var int|null $duration
* @Assert\Type(type="integer", message="Bitte geben Sie eine gültige Ganzzahl für die Dauer in Tagen ein")
@ -377,4 +379,20 @@ class ContactRequest
{
$this->acceptPrivacy = $acceptPrivacy;
}
/**
* @return mixed
*/
public function isAcceptProcessing()
{
return $this->acceptProcessing;
}
/**
* @param mixed $acceptProcessing
*/
public function setAcceptProcessing($acceptProcessing)
{
$this->acceptProcessing = $acceptProcessing;
}
}

View file

@ -85,6 +85,8 @@ class FewoBookingRequest
private $acceptPrivacy = false;
private $acceptProcessing = false;
private $lodging;
private $season;
@ -355,6 +357,22 @@ class FewoBookingRequest
$this->acceptPrivacy = $acceptPrivacy;
}
/**
* @return mixed
*/
public function isAcceptProcessing()
{
return $this->acceptProcessing;
}
/**
* @param mixed $acceptProcessing
*/
public function setAcceptProcessing($acceptProcessing)
{
$this->acceptProcessing = $acceptProcessing;
}
/**
* @return mixed
*/

View file

@ -208,6 +208,27 @@ class TravelBooking
*/
private $priceTotal;
/**
* @var float
*
* @ORM\Column(name="deposit_total", type="float", precision=10, scale=2, nullable=true)
*/
private $depositTotal;
/**
* @var float
*
* @ORM\Column(name="final_payment", type="float", precision=10, scale=2, nullable=true)
*/
private $finalPayment;
/**
* @var \DateTime
*
* @ORM\Column(name="final_payment_date", type="date", nullable=true)
*/
private $finalPaymentDate;
/**
* @var string
*
@ -257,6 +278,13 @@ class TravelBooking
*/
private $extraCategory;
/**
* @var string
*
* @ORM\Column(name="accept_legal_rights", type="integer", nullable=false)
*/
private $acceptLegalRights;
/**
* @var integer
*
@ -908,6 +936,8 @@ class TravelBooking
'first_name' => $traveler->getFirstName(),
'last_name' => $traveler->getLastName(),
'birthday' => $birthdate,
'nationality' => $traveler->getNationality(),
'acceptEntryRequirements' => $traveler->isAcceptEntryRequirements(),
];
}
@ -935,6 +965,7 @@ class TravelBooking
$traveler->setSex(intval($participant['gender']));
$traveler->setFirstName($participant['first_name']);
$traveler->setLastName($participant['last_name']);
$traveler->setNationality($participant['nationality']);
if(!strtotime($participant['birthday'])){
$participant['birthday'] = '01.01.1900';
}
@ -992,6 +1023,79 @@ class TravelBooking
return $this->priceTotal;
}
/**
* Set depositTotal
*
* @param float $depositTotal
*
* @return TravelBooking
*/
public function setDepositTotal($depositTotal)
{
$this->depositTotal = $depositTotal;
return $this;
}
/**
* Get depositTotal
*
* @return float
*/
public function getDepositTotal()
{
return $this->depositTotal;
}
/**
* Set finalPayment
*
* @param float $finalPayment
*
* @return TravelBooking
*/
public function setFinalPayment($finalPayment)
{
$this->finalPayment = $finalPayment;
return $this;
}
/**
* Get finalPayment
*
* @return float
*/
public function getFinalPayment()
{
return $this->finalPayment;
}
/**
* Set finalPaymentDate
*
* @param \DateTime $finalPaymentDate
*
* @return TravelBooking
*/
public function setFinalPaymentDate($finalPaymentDate)
{
$this->finalPaymentDate = $finalPaymentDate;
return $this;
}
/**
* Get finalPaymentDate
*
* @return \DateTime
*/
public function getFinalPaymentDate()
{
return $this->finalPaymentDate;
}
/**
* Set comments
*
@ -1181,6 +1285,31 @@ class TravelBooking
return $ret;
}
/**
* Set extraCategory
*
* @param string $extraCategory
*
* @return TravelBooking
*/
public function setAcceptLegalRights($acceptLegalRights)
{
$this->acceptLegalRights = $acceptLegalRights;
return $this;
}
/**
* Get extraCategory
*
* @return string
*/
public function getAcceptLegalRights()
{
return $this->acceptLegalRights;
}
/**
* Get id
*

View file

@ -67,6 +67,11 @@ class TravelBookingRepository extends \Doctrine\ORM\EntityRepository
$ret->setParticipantsTotal($bookingRequest->getTravelerCount());
$ret->setRooms($bookingPriceInfo['rooms']);
$ret->setPriceTotal($bookingPriceInfo['total']);
$ret->setDepositTotal($bookingPriceInfo['deposit_total']);
$ret->setFinalPayment($bookingPriceInfo['final_payment']);
$ret->setFinalPaymentDate(new \DateTime($bookingPriceInfo['final_payment_date']));
$ret->setComments($bookingRequest->getNotes());
if (empty($bookingPriceInfo['options']))
{
@ -86,6 +91,7 @@ class TravelBookingRepository extends \Doctrine\ORM\EntityRepository
}
$ret->setClassOptions(false);
$ret->setExtraCategory(empty($bookingPriceInfo['classOptions']) ? false : $bookingPriceInfo['classOptions']);
$ret->setAcceptLegalRights($bookingRequest->isAcceptLegalRights());
return $ret;
}

View file

@ -153,6 +153,24 @@ final class TravelDate
return $this->start;
}
/**
* @return \DateTime
*/
public function getStartWeekday()
{
return $this->start->format('w');
}
public function getFinalPaymentDate()
{
$pDate = strtotime('-4 week', $this->getStart()->getTimestamp());
if($pDate <= time()){
$pDate = strtotime('+1 day', $this->getStart()->getTimestamp());
}
return date('d.m.Y',$pDate);
}
/**
* @return \DateTime
*/
@ -221,6 +239,23 @@ final class TravelDate
return $flightPrice;
}
public function getFlightCalcPrice()
{
$flightPrice = $this->getFlightPrice();
if ($this->travelProgram->getIsMediated())
{
$profitMargin = 1;
}
else
{
$profitMargin = $this->travelProgram->getProfitMargin() / 100 + 1;
}
$currencyFactor = $this->travelProgram->getNettoPricesInEuro() ? 1 : $this->currencyFactor;
return round(($flightPrice * $currencyFactor) * $profitMargin);
}
/**
* @return TravelPeriodPrice[]|\Doctrine\Common\Collections\Collection
*/

View file

@ -33,6 +33,14 @@ class TravelDeparturePoint
*/
private $days;
/**
* @var string
*
* @ORM\Column(name="flight_time", type="text", length=65535, nullable=true)
*/
private $flightTime;
/**
* @var string
*
@ -170,6 +178,33 @@ class TravelDeparturePoint
return $this->days == null ? null : json_decode($this->days);
}
/**
* Set days
*
* @param string $flightTime
*
* @return TravelDeparturePoint
*/
public function setFlightTime($flightTime)
{
$this->flightTime = $flightTime;
return $this;
}
/**
* Get flightTime
*
* @return array|int[]
*/
public function getFlightTime()
{
return $this->flightTime == null ? null : json_decode($this->flightTime, true);
}
/**
* Set departureType
*
@ -184,6 +219,7 @@ class TravelDeparturePoint
return $this;
}
/**
* Get departureType
*

View file

@ -47,6 +47,21 @@ class TravelOrganizer
*/
private $fileName;
/**
* @var string
*
* @ORM\Column(name="form_arb", type="string", length=255, nullable=true)
*/
private $formArb;
/**
* @var string
*
* @ORM\Column(name="file_form_page", type="string", length=255, nullable=true)
*/
private $fileFormPage;
/**
* @var integer
*
@ -162,6 +177,15 @@ class TravelOrganizer
return $this->rulesUpdated;
}
public function getRulesUpdatedTime()
{
if($this->rulesUpdated){
return $this->rulesUpdated->getTimestamp();
}
return ;
}
/**
* Set fileName
*
@ -186,6 +210,55 @@ class TravelOrganizer
return $this->fileName;
}
/**
* Set formArb
*
* @param string $formArb
*
* @return TravelOrganizer
*/
public function setFormArb($formArb)
{
$this->formArb = $formArb;
return $this;
}
/**
* Get formArb
*
* @return string
*/
public function getFormArb()
{
return $this->formArb;
}
/**
* Set fileFormPage
*
* @param string $fileFormPage
*
* @return TravelOrganizer
*/
public function setFileFormPage($fileFormPage)
{
$this->fileFormPage = $fileFormPage;
return $this;
}
/**
* Get fileFormPage
*
* @return string
*/
public function getFileFormPage()
{
return $this->fileFormPage;
}
/**
* Set cmsId
*

View file

@ -771,6 +771,57 @@ class TravelProgram
return $this->htmlDescription;
}
/**
* @param \DateTime $startDate
* @return array
*/
// '<h2> X Tag / Anreise ... : Programm </h2>';
public function getTravelProgramDates(\DateTime $startDate)
{
$lines = array();
$count = 0;
if($this->htmlDescription){
$text = $this->htmlDescription;
$regex = '#<h2>(.*?)</h2>#';
preg_match_all($regex, $text, $matches);
foreach ($matches[1] as $val){
if(strpos($val, ':')){
$v = explode(':', $val);
$int = (int) filter_var($v[0], FILTER_SANITIZE_NUMBER_INT);
if($int) {
$lines[$int] = array('count'=> $count, 'day' => trim($v[1]), 'date' => $startDate->format('d.m.Y'));
$startDate->modify('+1 day');
$count++;
}
}
}
}
if($this->classDescription){
$text = $this->classDescription;
//standard //komfort
$regex = "'<ul class=\"standard\">(.*?)</ul>'si";
preg_match_all($regex, $text, $matches);
if(isset($matches[1][0]) && strpos($matches[1][0], '</li>')){
$text = $matches[1][0];
$regex = '#<li>(.*?)</li>#';
preg_match_all($regex, $text, $matches);
foreach ($matches[1] as $val){
if(strpos($val, ':')){
$v = explode(':', $val);
$int = (int) filter_var($v[0], FILTER_SANITIZE_NUMBER_INT);
if($int && isset($lines[$int])) {
$lines[$int]['night'] = trim($v[1]);
}
}
}
}
}
return $lines;
}
/**
* Set inSlider
*

View file

@ -14,6 +14,11 @@ class Traveler
const MALE = 1;
const FEMALE = 2;
private $NATIONALITY = [
1 => 'deutsch',
];
/**
* @Assert\NotNull
* @Assert\Choice(choices={1,2})
@ -35,6 +40,16 @@ class Traveler
*/
private $birthDate;
/**
* @Assert\NotBlank()
*/
private $nationality;
/**
* @Assert\IsTrue()
*/
private $acceptEntryRequirements = false;
/**
* @return int
*/
@ -105,5 +120,51 @@ class Traveler
$this->birthDate = $birthDate;
}
/**
* @return int
*/
public function getNationality()
{
return $this->nationality;
}
/**
* @param int $nationality
*/
public function setNationality($nationality)
{
$this->nationality = $nationality;
}
/**
* @return int
*/
public function getNationalityName()
{
if(isset($this->NATIONALITY[$this->nationality])){
return $this->NATIONALITY[$this->nationality];
}
return $this->nationality;
}
/**
* @return mixed
*/
public function isAcceptEntryRequirements()
{
return $this->acceptEntryRequirements;
}
/**
* @param mixed $acceptEntryRequirements
*/
public function setAcceptEntryRequirements($acceptEntryRequirements)
{
$this->acceptEntryRequirements = $acceptEntryRequirements;
}
}

View file

@ -261,7 +261,10 @@ class BookingSternToursCrmExporter extends SternToursCrmExporter
'pax' => $bookingRequest->getTravelerCount(),
'travel_number' => $travelDate->getName(),
'price' => $bookingPriceInfo['totalWithoutInsurance'],
'price_total' => $bookingPriceInfo['total'],
'deposit_total' => $bookingPriceInfo['deposit_total'],
'final_payment' => $bookingPriceInfo['final_payment'],
'final_payment_date' => date("Y-m-d",strtotime($bookingPriceInfo['final_payment_date'])),
'participant_salutation_id' => $bookingRequest->getTravelers()[0]->getSex(),
'participant_name' => $bookingRequest->getTravelers()[0]->getLastName(),
'participant_firstname' => $bookingRequest->getTravelers()[0]->getFirstName(),

View file

@ -12,7 +12,8 @@ use Monolog\Logger;
abstract class SternToursCrmExporter
{
const API_URL = 'http://www.cms.stern-tours.net/api';
//const API_URL = 'http://www.cms.stern-tours.net/api';
const API_URL = 'http://cms-stern-torus.local//api';
const API_KEY = 'f6077389c9ce710e554763a5de02c8ec';
const API_USER_ID = 15; // 'apiuser'
const WEBSITE_ID = 1; // 'sterntours.de'

View file

@ -151,8 +151,8 @@ class BookingRequestType extends AbstractType
->add('notes', TextareaType::class, ['required' => false])
->add('acceptTerms', CheckboxType::class, ['required' => true])
->add('acceptPrivacy', CheckboxType::class, ['required' => true])
//->add('acceptEntryRequirements', CheckboxType::class, ['required' => true])
//->add('acceptLegalRights', CheckboxType::class, ['required' => true])
->add('acceptProcessing', CheckboxType::class, ['required' => true])
->add('acceptLegalRights', CheckboxType::class, ['required' => true])
;
$builder->add('departure', EntityType::class, [

View file

@ -84,6 +84,7 @@ class ContactRequestType extends AbstractType
->add('end', StDateType::class, ['required' => false])
->add('duration')
->add('acceptPrivacy', CheckboxType::class, ['required' => true])
->add('acceptProcessing', CheckboxType::class, ['required' => true])
;
}
}

View file

@ -134,6 +134,7 @@ class FewoBookingRequestType extends AbstractType
->add('notes', TextareaType::class, ['required' => false])
->add('acceptTerms', CheckboxType::class, ['required' => true])
->add('acceptPrivacy', CheckboxType::class, ['required' => true])
->add('acceptProcessing', CheckboxType::class, ['required' => true])
;
}

View file

@ -8,6 +8,7 @@ namespace AppBundle\Form;
use AppBundle\Entity\Traveler;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
@ -23,6 +24,11 @@ class TravelerType extends AbstractType
'weiblich' => Traveler::FEMALE
];
public static $NATIONALITY_CHOICES = [
'Nationalität (Bitte wählen)' => '',
'deutsch' => 1,
];
/**
* @param OptionsResolver $resolver
*/
@ -51,6 +57,17 @@ class TravelerType extends AbstractType
->add('firstName')
->add('lastName')
->add('birthDate')
->add('nationality', ChoiceType::class, [
'choices' => self::$NATIONALITY_CHOICES,
'constraints' => [
new NotNull(),
new Choice(['choices' => self::$NATIONALITY_CHOICES])
],
'required' => true,
])
->add('acceptEntryRequirements', CheckboxType::class, ['required' => true])
;
/*
, StDateType::class, [

View file

@ -28,12 +28,72 @@ $(document).ready(function() {
}).then(function(r) {
summary$.html(r);
$('#st-booking-price-set-table .st-total-price-set').html($(r).find('.st-total-price').text());
$('#st-booking-price-set-table .st-deposit-price-set').html($(r).find('.st-deposit-price').text());
$('#st-booking-price-set-table .st-final-price-set').html($(r).find('.st-final-price').text());
}, function() {
summary$.html('Aufgrund eines Fehlers konnte kein Angebot ermittelt werden.');
})
});
$('#booking_request_departure').change(function () {
//show nothing
$('.flight_times_ele').hide();
$('#no_flight_time').hide();
$('#yes_flight_time').hide();
console.log($(this).val());
if(!$(this).val() || $(this).find("option:selected").text().indexOf("Eigenanreise") == 0){
return;
}
console.log($('#flight_time_'+$(this).val()).length);
if($('#flight_time_'+$(this).val()).length){
$('#flight_time_'+$(this).val()).show();
$('#yes_flight_time').show();
}else{
$('#no_flight_time').show();
}
});
var toggle_first = false;
function updateNationality(ele){
var obj = ele.parents('.nationality_select').data('toggle');
if(ele.val()){
$(obj).show('slow');
if(!toggle_first){
$(obj).find('.accordion-toggle').click();
toggle_first = true;
}
}else{
$(obj).hide();
}
}
$('.nationality_select').find('select').change(function(){
updateNationality($(this));
});
function updateAllNationality(){
$('.nationality_select').find('select').each(function(){
updateNationality($(this));
});
}
updateAllNationality();
function toggleUpdateChevron(e) {
var $i = $(e.target)
.parent('.panel-group')
.find("i.indicator");
$i.toggleClass('icon-minus icon-plus');
}
$('.acc_nationality_panel').on('hidden.bs.collapse', toggleUpdateChevron);
$('.acc_nationality_panel').on('shown.bs.collapse', toggleUpdateChevron);
function updateTravelers()
{
var travelersIndex = 1;
@ -46,7 +106,7 @@ $(document).ready(function() {
travelers$.hide();
travelerFields$.prop('required', false);
var counter = 1;
if(singleTravelerCount > 0)
{
for(var i = 1; i <= singleTravelerCount; i++)
@ -56,7 +116,8 @@ $(document).ready(function() {
var currentRoomIndex = $(travelerSelector).attr("data-room-index");
$(travelerSelector).show().find('input,select').prop('required', true);
//$(roomIndexSelector).text(currentRoomIndex);
$(roomIndexSelector).text("Einzelzimmer");
$(roomIndexSelector).text(counter + ".) Reiseteilnehmer | Einzelzimmer");
counter ++;
}
}
@ -70,7 +131,8 @@ $(document).ready(function() {
var currentRoomIndex = $(travelerSelector).attr("data-room-index");
$(travelerSelector).show().find('input,select').prop('required', true);
//$(roomIndexSelector).text(currentRoomIndex - offset);
$(roomIndexSelector).text("Doppelzimmer");
$(roomIndexSelector).text(counter + ".) Reiseteilnehmer | Doppelzimmer");
counter ++;
}
}
@ -84,7 +146,8 @@ $(document).ready(function() {
var currentRoomIndex = $(travelerSelector).attr("data-room-index");
$(travelerSelector).show().find('input,select').prop('required', true);
//$(roomIndexSelector).text(currentRoomIndex - offset);
$(roomIndexSelector).text("Dreibettzimmer");
$(roomIndexSelector).text(counter + ".) Reiseteilnehmer | Dreibettzimmer");
counter ++;
}
}

View file

@ -399,6 +399,45 @@ jQuery(document).ready(function($) {
$('#accordion').on('hidden.bs.collapse', toggleChevron);
$('#accordion').on('shown.bs.collapse', toggleChevron);
function toggleChevron2(e) {
console.log(e.target);
var $i = $(e.target)
.parent('.panel-group')
.find("i.indicator");
$i.toggleClass('icon-minus icon-plus');
if($i.hasClass('icon-minus')){
$i.parent('h3').find('span').html('Reiseablauf mit Reisetagen ausblenden');
}
if($i.hasClass('icon-plus')){
$i.parent('h3').find('span').html('Reiseablauf mit Reisetagen einblenden');
}
}
$('#accordion_pd').on('hidden.bs.collapse', toggleChevron2);
$('#accordion_pd').on('shown.bs.collapse', toggleChevron2);
function toggleChevron3(e) {
console.log(e.target);
var $i = $(e.target)
.parent('.panel-group')
.find("i.indicator");
$i.toggleClass('icon-minus icon-plus');
if($i.hasClass('icon-minus')){
$i.parent('h3').find('span').html('Flugdaten ausblenden');
}
if($i.hasClass('icon-plus')){
$i.parent('h3').find('span').html('Flugdaten einblenden');
}
}
$('#accordion_fd').on('hidden.bs.collapse', toggleChevron3);
$('#accordion_fd').on('shown.bs.collapse', toggleChevron3);
/* ==============================================
LIGHTBOX -->