git-svn-id: http://78.47.251.156/svn/dev/sterntours-3@3362 f459cee4-fb09-11de-96c3-f9c5f16c3c76
This commit is contained in:
valentin.wacker 2017-12-05 15:26:00 +00:00
parent f53087fde1
commit c2d6038228
7 changed files with 250 additions and 259 deletions

View file

@ -5,7 +5,7 @@
+ {{ total_price_per_night|number_format(2) }}
</td>
<td class="st-position-name-col">
({{ fewo_booking_request.numberDays }} {{ fewo_price.season.minimumStay < 2 ? 'Nacht' : 'Nächte' }} x {{ fewo_price.perNight|number_format(2) }} €)
({{ fewo_booking_request.numberDays }} {{ fewo_booking_request.numberDays < 2 ? 'Nacht' : 'Nächte' }} x {{ fewo_price.perNight|number_format(2) }} €)
</td>
</tr>
<tr>

View file

@ -168,18 +168,20 @@
<div class="form-box">
<div class="">
{#
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Allgemeine Geschäftsbedingungen</h5>
<div class="checkbox">
{{ form_widget(form.acceptTerms) }}
<label for="{{ form.acceptTerms.vars.id }}">
Ich habe alles gelesen usw...
Ich habe alle Daten und Angaben auf Richtigkeit überprüft. Ich habe die
<a href="/uploads/{{ terms_filename }}" target="_blank">
Allgemeinen Geschäftsbedingungen des Reisevermittlers
</a>
gelesen und akzeptiert. Zugleich erkenne ich diese für alle Reiseteilnehmer an.
</label>
{{ form_errors(form.acceptTerms) }}
</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"

View file

@ -159,7 +159,7 @@ class FewoBookingController extends Controller
$timeDiff = date_diff($finalFromDate, $finalToDate);
$numberDays = $timeDiff->days + 1;
$numberDays = $timeDiff->days; // todo: evtl umbenennen, damit es eindeutig für Nächte und nicht mehr für Tage verwendet wird
$fewoBookingRequest->setNumberDays($numberDays);
$fewoBookingRequest->setLodging($lodging);
@ -246,6 +246,7 @@ class FewoBookingController extends Controller
]);
}
// GET
return $this->render('default/pages/fewoBooking.html.twig', [
'form' => $form->createView(),
'fewo_booking_request' => $fewoBookingRequest,
@ -259,6 +260,7 @@ class FewoBookingController extends Controller
'allowed_to_dates' => implode(';', $allowedToDateStrs),
'page' => $fewoTravelProgramPage,
'show_search_sidebar_widget' => false,
'terms_filename' => $this->getDoctrine()->getRepository('AppBundle:TravelOrganizer')->find(1)->getFileName(),
]);
}

View file

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

View file

@ -24,6 +24,7 @@ class FileManager
$file->move($this->getTargetDir(), $fileName);
$path = $this->getTargetDir() .'/'. $fileName;
// Ermittle Breite, Höhe und Typ des Originalbildes
$imgInfo = getimagesize($path);
if ($imgInfo !== false)
{
@ -37,7 +38,11 @@ class FileManager
}
if (isset($src))
{
$tmp = imagecreatetruecolor(848, 280);
$destWidth = min(2 * self::MAX_DEST_WIDTH, $srcWidth);
$destHeight = $destWidth * $srcHeight / $srcWidth;
/*
$destWidth = self::MAX_DEST_HEIGHT * $srcWidth / $srcHeight;
if ($destWidth < self::MAX_DEST_WIDTH)
{
@ -52,8 +57,15 @@ class FileManager
$destX = ($destWidth - self::MAX_DEST_WIDTH) / 2;
$destY = 0;
}
imagecopyresampled($tmp, $src, 0, 0, $destX, $destY,
*/
// Breite: MIN(2*848,$srcWidth); Höhe ergibt sich aus Seitenverhältnis d. Originalbildes
$tmp = imagecreatetruecolor($destWidth, $destHeight);
imagecopyresampled($tmp, $src, 0, 0, 0, 0,
$destWidth, $destHeight, $srcWidth, $srcHeight);
$newFileName = md5(uniqid()) .'.jpg';
if (imagejpeg($tmp, $this->getTargetDir() .'/'. $newFileName, 80))
{
@ -67,7 +79,6 @@ class FileManager
return $fileName;
}
public function delete(FewoLodgingImage $image)
{
$filesystem = new Filesystem();

View file

@ -35,23 +35,31 @@ class LodgingCalendarService
setlocale(LC_TIME, "german");
$yearTurned = false;
$yearsTurned = 0;
for($m = $currentMonth; $m < ($currentMonth + $months); $m++)
{
if($m < 13)
$actualMonth = $m % 12;
if($actualMonth == 0)
{
$actualMonth = $m;
$actualCurrentYear = $currentYear;
}
else
{
$actualMonth = $m % 12;
$actualCurrentYear = $currentYear + 1;
$actualMonth = 12;
$yearTurned = true;
}
$date = getdate(mktime(0,0,0, $actualMonth, 1, $actualCurrentYear));
$actualYear = $currentYear + $yearsTurned;
if($yearTurned)
{
$yearsTurned = $yearsTurned + 1;
$yearTurned = false;
}
$date = getdate(mktime(0,0,0, $actualMonth, 1, $actualYear));
$weekDay = $weekDays[$date['wday']];
$numberDays = $this->daysInMonth($actualMonth, $actualCurrentYear);
$numberDays = $this->daysInMonth($actualMonth, $actualYear);
$data = null;
$actualStartingWeekDay = $date['wday'];
@ -105,8 +113,8 @@ class LodgingCalendarService
$calendar[] = [
'numberDays' => $numberDays,
'monthNumber' => $actualMonth,
'monthName' => utf8_encode(strftime("%B", mktime(0, 0, 0, $actualMonth, 1, $actualCurrentYear))),
'year' => $actualCurrentYear,
'monthName' => utf8_encode(strftime("%B", mktime(0, 0, 0, $actualMonth, 1, $actualYear))),
'year' => $actualYear,
'startWeekDay' => $weekDay,
'data' => $data,
'marked' => 0
@ -127,23 +135,31 @@ class LodgingCalendarService
setlocale(LC_TIME, "german");
$yearTurned = false;
$yearsTurned = 0;
for($m = $currentMonth; $m < ($currentMonth + $months); $m++)
{
if($m < 13)
$actualMonth = $m % 12;
if($actualMonth == 0)
{
$actualMonth = $m;
$actualCurrentYear = $currentYear;
}
else
{
$actualMonth = $m % 12;
$actualCurrentYear = $currentYear + 1;
$actualMonth = 12;
$yearTurned = true;
}
$date = getdate(mktime(0,0,0, $actualMonth, 1, $actualCurrentYear));
$actualYear = $currentYear + $yearsTurned;
if($yearTurned)
{
$yearsTurned = $yearsTurned + 1;
$yearTurned = false;
}
$date = getdate(mktime(0,0,0, $actualMonth, 1, $actualYear));
$weekDay = $weekDays[$date['wday']];
$numberDays = $this->daysInMonth($actualMonth, $actualCurrentYear);
$numberDays = $this->daysInMonth($actualMonth, $actualYear);
/** @var CalendarDayState[] $data */
$data = null;
@ -160,7 +176,7 @@ class LodgingCalendarService
$day->setIsReservationBegin(false);
$day->setIsReservationEnd(false);
$datetime = new \DateTime();
$datetime->setTimestamp(mktime(0,0,0, $actualMonth, $d, $actualCurrentYear));
$datetime->setTimestamp(mktime(0,0,0, $actualMonth, $d, $actualYear));
$day->setDate($datetime);
$data[] = $day;
@ -169,8 +185,8 @@ class LodgingCalendarService
$calendar[] = [
'numberDays' => $numberDays,
'monthNumber' => $actualMonth,
'monthName' => utf8_encode(strftime("%B", mktime(0, 0, 0, $actualMonth, 1, $actualCurrentYear))),
'year' => $actualCurrentYear,
'monthName' => utf8_encode(strftime("%B", mktime(0, 0, 0, $actualMonth, 1, $actualYear))),
'year' => $actualYear,
'startWeekDay' => $weekDay,
'data' => $data,
'marked' => 0
@ -193,7 +209,9 @@ class LodgingCalendarService
$curMonthDate->setDate($curMonthDate->format('Y'), $curMonthDate->format('n'), 1);
$seasonMonthDate = new \DateTime($latestSeason->getToDate()->format('Y-m-d'));
$seasonMonthDate->setDate($seasonMonthDate->format('Y'), $seasonMonthDate->format('n'), 1);
return 2 + intval($seasonMonthDate->diff($curMonthDate)->format('%m'));
$dateInterval = $seasonMonthDate->diff($curMonthDate);
$month = intval($dateInterval->format('%m')) + (intval($dateInterval->format('%y')) * 12);
return 2 + $month;
}
@ -224,12 +242,12 @@ class LodgingCalendarService
return $ret;
}
private function getMonthIndex($calendar, $month)
private function getMonthIndex($calendar, $month, $year)
{
$result = 0;
for($i = 0; $i < count($calendar); $i++)
{
if($calendar[$i]['monthNumber'] == $month)
if($calendar[$i]['monthNumber'] == $month && $calendar[$i]['year'] == $year)
{
$result = $i;
break;
@ -262,185 +280,191 @@ class LodgingCalendarService
$todayYear = $today->format('Y');
if($startMonth < $todayMonth && $startYear == $todayYear)
if ($endMonth >= $todayMonth || ($todayMonth == 12 && $endMonth >= 1 && ($todayYear < $endYear))) //($toDate > $today)
{
$startDay = 1;
$startMonth = $today->format('n');
$startYear = $today->format('Y');
}
$startCalendarIndex = $this->getMonthIndex($calendar, $startMonth);
$endCalendarIndex = $this->getMonthIndex($calendar, $endMonth);
// anfang und ende innerhalb eines monats
if($startCalendarIndex == $endCalendarIndex)
{
/** @var CalendarDayState[] $data */
$data = $calendar[$startCalendarIndex]['data'];
$calendar[$startCalendarIndex]['marked'] = 1;
$startIndex = $startDay - 1;
$endIndex = $endDay - 1;
for ($i = $startIndex; $i <= $endIndex; $i++)
if($fromDate < $today)
{
if ($reservationMode)
{
if ($i == $startIndex)
{
$data[$i]->setIsReserved(true);
$data[$i]->setIsReservationBegin(true);
$data[$i]->setReservation($reservation);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
elseif ($i == $endIndex)
{
$data[$i]->setIsReserved(true);
$data[$i]->setIsReservationEnd(true);
$data[$i]->setReservation($reservation);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
//$data[$i]->setIsBookable(true);
}
else
{
$data[$i]->setIsReserved(true);
$data[$i]->setReservation($reservation);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
}
else
{
$data[$i]->setIsReserved(false);
$data[$i]->setPrice($price);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
$startDay = 1;
$startMonth = $today->format('n');
$startYear = $today->format('Y');
}
$calendar[$startCalendarIndex]['data'] = $data;
}
else
{
// erster monat
/** @var CalendarDayState[] $data */
$data = $calendar[$startCalendarIndex]['data'];
// wenn sich der Kalender über mehrere Jahre zieht, könnte es hier zu Problemen kommen
$startCalendarIndex = $this->getMonthIndex($calendar, $startMonth, $startYear);
$endCalendarIndex = $this->getMonthIndex($calendar, $endMonth, $endYear);
$calendar[$startCalendarIndex]['marked'] = 1;
$startIndex = $startDay - 1;
$endIndex = count($data) - 1;
for($i = $startIndex; $i <= $endIndex; $i++)
{
if ($reservationMode)
{
if ($i == $startIndex)
{
$data[$i]->setIsReserved(true);
$data[$i]->setIsReservationBegin(true);
$data[$i]->setReservation($reservation);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
else
{
$data[$i]->setIsReserved(true);
$data[$i]->setReservation($reservation);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
}
else
{
$data[$i]->setIsReserved(false);
$data[$i]->setPrice($price);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
}
$calendar[$startCalendarIndex]['data'] = $data;
// letzter monat
/** @var CalendarDayState[] $data */
$data = $calendar[$endCalendarIndex]['data'];
$calendar[$endCalendarIndex]['marked'] = 1;
$startIndex = 0;
$endIndex = $endDay - 1;
for($i = $startIndex; $i <= $endIndex; $i++)
{
if ($reservationMode)
{
if ($i == $endIndex)
{
$data[$i]->setIsReserved(true);
$data[$i]->setIsReservationEnd(true);
$data[$i]->setReservation($reservation);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
//$data[$i]->setIsBookable(true);
}
else
{
$data[$i]->setIsReserved(true);
$data[$i]->setReservation($reservation);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
}
else
{
$data[$i]->setIsReserved(false);
$data[$i]->setPrice($price);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
}
$calendar[$endCalendarIndex]['data'] = $data;
// alle monate dazwischen
for($i = $startCalendarIndex + 1; $i < $endCalendarIndex; $i++)
// anfang und ende innerhalb eines monats
if($startCalendarIndex == $endCalendarIndex)
{
/** @var CalendarDayState[] $data */
$data = $calendar[$i]['data'];
$data = $calendar[$startCalendarIndex]['data'];
$calendar[$i]['marked'] = 1;
$calendar[$startCalendarIndex]['marked'] = 1;
$startIndex = 0;
$endIndex = count($data) - 1;
for($j = $startIndex; $j <= $endIndex; $j++)
// hier geht man von ungepaddeten Kalendermonaten aus
$startIndex = $startDay - 1;
$endIndex = $endDay - 1;
for ($i = $startIndex; $i <= $endIndex; $i++)
{
if ($reservationMode)
{
$data[$j]->setIsReserved(true);
$data[$j]->setReservation($reservation);
$data[$j]->setIsInSeason(true);
$data[$j]->setIsBookable(false);
if ($i == $startIndex)
{
$data[$i]->setIsReserved(true);
$data[$i]->setIsReservationBegin(true);
$data[$i]->setReservation($reservation);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
elseif ($i == $endIndex)
{
$data[$i]->setIsReserved(true);
$data[$i]->setIsReservationEnd(true);
$data[$i]->setReservation($reservation);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
//$data[$i]->setIsBookable(true);
}
else
{
$data[$i]->setIsReserved(true);
$data[$i]->setReservation($reservation);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
}
else
{
$data[$j]->setIsReserved(false);
$data[$j]->setPrice($price);
$data[$j]->setIsInSeason(true);
$data[$j]->setIsBookable(false);
$data[$i]->setIsReserved(false);
$data[$i]->setPrice($price);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
}
$calendar[$i]['data'] = $data;
$calendar[$startCalendarIndex]['data'] = $data;
}
else
{
// erster monat
/** @var CalendarDayState[] $data */
$data = $calendar[$startCalendarIndex]['data'];
$calendar[$startCalendarIndex]['marked'] = 1;
$startIndex = $startDay - 1;
$endIndex = count($data) - 1;
for($i = $startIndex; $i <= $endIndex; $i++)
{
if ($reservationMode)
{
if ($i == $startIndex)
{
$data[$i]->setIsReserved(true);
$data[$i]->setIsReservationBegin(true);
$data[$i]->setReservation($reservation);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
else
{
$data[$i]->setIsReserved(true);
$data[$i]->setReservation($reservation);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
}
else
{
$data[$i]->setIsReserved(false);
$data[$i]->setPrice($price);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
}
$calendar[$startCalendarIndex]['data'] = $data;
// letzter monat
/** @var CalendarDayState[] $data */
$data = $calendar[$endCalendarIndex]['data'];
$calendar[$endCalendarIndex]['marked'] = 1;
$startIndex = 0;
$endIndex = $endDay - 1;
for($i = $startIndex; $i <= $endIndex; $i++)
{
if ($reservationMode)
{
if ($i == $endIndex)
{
$data[$i]->setIsReserved(true);
$data[$i]->setIsReservationEnd(true);
$data[$i]->setReservation($reservation);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
//$data[$i]->setIsBookable(true);
}
else
{
$data[$i]->setIsReserved(true);
$data[$i]->setReservation($reservation);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
}
else
{
$data[$i]->setIsReserved(false);
$data[$i]->setPrice($price);
$data[$i]->setIsInSeason(true);
$data[$i]->setIsBookable(false);
}
}
$calendar[$endCalendarIndex]['data'] = $data;
// alle monate dazwischen
for($i = $startCalendarIndex + 1; $i < $endCalendarIndex; $i++)
{
/** @var CalendarDayState[] $data */
$data = $calendar[$i]['data'];
$calendar[$i]['marked'] = 1;
$startIndex = 0;
$endIndex = count($data) - 1;
for($j = $startIndex; $j <= $endIndex; $j++)
{
if ($reservationMode)
{
$data[$j]->setIsReserved(true);
$data[$j]->setReservation($reservation);
$data[$j]->setIsInSeason(true);
$data[$j]->setIsBookable(false);
}
else
{
$data[$j]->setIsReserved(false);
$data[$j]->setPrice($price);
$data[$j]->setIsInSeason(true);
$data[$j]->setIsBookable(false);
}
}
$calendar[$i]['data'] = $data;
}
}
}
return $calendar;
}
private function mergeCalendars($calendar, $extensionCalendar, $withFromTo = false)
// in der Regel: calendar = pricesCalendar; extensionCalendar = reservationsCalendar
private function mergeCalendars($calendar, $extensionCalendar)
{
for($i = 0; $i < count($calendar); $i++)
{
@ -454,71 +478,23 @@ class LodgingCalendarService
for($j = 0; $j < $endIndex; $j++)
{
if ($withFromTo)
{
if ($extensionCalendarData[$j]->getIsInSeason())
{
//$calendarData[$j] = $extensionCalendarData[$j];
$price = $extensionCalendarData[$j]->getPrice();
$calendarData[$j]->setIsInSeason(true);
$calendarData[$j]->setPrice($price);
}
}
if ($extensionCalendarData[$j]->getIsReserved())
{
// braucht man das überhaupt noch?
if ($withFromTo)
$price = $calendarData[$j]->getPrice();
//$isInSeason = $calendarData[$j]->getIsInSeason();
$reservation = $calendarData[$j]->getReservation();
$calendarData[$j] = $extensionCalendarData[$j];
if ($calendarData[$j]->getIsReservationEnd() && $extensionCalendarData[$j]->getIsReservationBegin())
{
// zweite runde $actuallyReservableDaysCalendar merge mit $reservationsCalendar
if (!($calendarData[$j]->getIsBookable() && $extensionCalendarData[$j]->getIsReservationEnd()))
{
//$calendarData[$j] = $extensionCalendarData[$j];
$price = $calendarData[$j]->getPrice();
//$calendarData[$j] = $extensionCalendarData[$j];// todo
$calendarData[$j]->setIsBookable(false);
$calendarData[$j]->setIsReserved(true);
$calendarData[$j]->setReservation($extensionCalendarData[$j]->getReservation());
$calendarData[$j]->setIsReservationBegin($extensionCalendarData[$j]->getIsReservationBegin());
$calendarData[$j]->setIsReservationEnd($extensionCalendarData[$j]->getIsReservationEnd());
if ($calendarData[$j]->getIsReservationEnd() && $extensionCalendarData[$j]->getIsReservationBegin())
{
$calendarData[$j]->setIsReservationBegin(false);
$calendarData[$j]->setIsReservationEnd(false);
}
$calendarData[$j]->setIsInSeason(true);
$calendarData[$j]->setPrice($price);
}
$calendarData[$j]->setReservation($reservation);
$calendarData[$j]->setIsReservationBegin(false);
$calendarData[$j]->setIsReservationEnd(false);
}
else
{
// erste runde $pricesCalendar merge mit $reservationsCalendar
$price = $calendarData[$j]->getPrice();
$isInSeason = $calendarData[$j]->getIsInSeason();
$reservation = $calendarData[$j]->getReservation();
$calendarData[$j] = $extensionCalendarData[$j];
if ($calendarData[$j]->getIsReservationEnd() && $extensionCalendarData[$j]->getIsReservationBegin())
{
$calendarData[$j]->setReservation($reservation);
$calendarData[$j]->setIsReservationBegin(false);
$calendarData[$j]->setIsReservationEnd(false);
}
/** @var FewoPrice $price */
$calendarData[$j]->setIsInSeason(true);
$calendarData[$j]->setPrice($price);
}
/** @var FewoPrice $price */
$calendarData[$j]->setIsInSeason(true);
$calendarData[$j]->setPrice($price);
}
}
@ -698,15 +674,14 @@ class LodgingCalendarService
foreach($reservations as $reservation)
{
$reservationId = $reservation->getId();
$appendix = ','.$reservationId;
$fromDate = $reservation->getFromDate();
$toDate = $reservation->getToDate();
$reservationsCalendar = $this->markCalendarDays($reservationsCalendar, $fromDate, $toDate, true, null, $reservation); //TODO fast fertig
$reservationsCalendar = $this->markCalendarDays($reservationsCalendar, $fromDate, $toDate,
true, null, $reservation); //TODO fast fertig
}
$mergedPricesAndReservationsCalendar = $this->mergeCalendars($pricesCalendar, $reservationsCalendar, false);
$mergedPricesAndReservationsCalendar = $this->mergeCalendars($pricesCalendar, $reservationsCalendar);
$actuallyReservableDaysCalendar = $this->filterReservableDays($lodging, $mergedPricesAndReservationsCalendar);
//$resultCalendar = $this->mergeCalendars($actuallyReservableDaysCalendar, $reservationsCalendar, true);

View file

@ -55,7 +55,7 @@ class FewoBookingRequestValidator extends ConstraintValidator
$reservations = $lodging->getReservations();
$timeDiff = date_diff($fromDate, $toDate);
$numberDays = $timeDiff->days + 1;
$numberDays = $timeDiff->days;
$withinSeason = false;
$alreadyReserved = false;
@ -94,7 +94,7 @@ class FewoBookingRequestValidator extends ConstraintValidator
if($numberDays < $season->getMinimumStay())
{
$this->context->buildViolation("Mindestanzahl an Tagen nicht erreicht!")
$this->context->buildViolation("Mindestanzahl an Nächten nicht erreicht!")
->addViolation();
}