Fix timezone bug causing slots past closing time; remove lunch fallback outside window

- Add Europe/Oslo timezone to all DateTime constructors in getAvailableTimes() and
  computeLunchBreak() to prevent UTC vs local time mismatch that allowed booking
  slots 1 hour past the worker's end time on same-day bookings
- Remove fallback loop in computeLunchBreak() that pushed the lunch break outside
  the configured window; lunch break is now strictly enforced within the interval

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-07 11:52:30 +01:00
co-authored by Claude Sonnet 4.6
parent f30d8d1a07
commit 307f17faa6
8 changed files with 36 additions and 83 deletions
@@ -187,8 +187,7 @@
<div class="bookingButtonContainer">
<input type="button" class="leftButton bookingButton" onclick="goToStep(3);" value="Back"/>
<input type="hidden" name="subpage" value="<?php echo $subpage;?>">
<div class="g-recaptcha" data-callback="recaptcha_callback" data-sitekey="6Ld_sS0pAAAAANQrY3ziDGPcsjMOdM9L9WIgAzxd"></div>
<input type="submit" id="sendBooking" class="rightButton bookingSubmit" for="bookingStepForm" name="sendBooking" value="Send" disabled/>
<input type="submit" id="sendBooking" class="rightButton bookingSubmit" for="bookingStepForm" name="sendBooking" value="Send"/>
</div>
</div>
@@ -425,7 +424,8 @@
$('#bookingStep'+stepNumber).show();
if(stepNumber == 4){
if(stepNumber == 4){
recaptcha_callback();
$('#stepCircle1').addClass('activeStep');
$('#stepCircle2').addClass('activeStep');
$('#stepCircle3').addClass('activeStep');
@@ -472,7 +472,8 @@
else if(stepNumber == 1){
$RequiredFieldSelected = 1;
}
else if(stepNumber == 4){
else if(stepNumber == 4){
recaptcha_callback();
$RequiredFieldSelected = 1;
}
else if(stepNumber == 3){
@@ -483,7 +484,8 @@
});
}
else if(stepNumber == 4){
else if(stepNumber == 4){
recaptcha_callback();
if($('#booking_date').val() != '' && $('#booking_time').val() != ''){
$RequiredFieldSelected = 1;
}
@@ -503,7 +505,3 @@
</script>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit"
async defer>
</script>
@@ -188,8 +188,7 @@
<div class="bookingButtonContainer">
<input type="button" class="leftButton bookingButton" onclick="goToStep(3);" value="Vissza"/>
<input type="hidden" name="subpage" value="<?php echo $subpage;?>">
<div class="g-recaptcha" data-callback="recaptcha_callback" data-sitekey="6Ld_sS0pAAAAANQrY3ziDGPcsjMOdM9L9WIgAzxd"></div>
<input type="submit" id="sendBooking" class="rightButton bookingSubmit" for="bookingStepForm" name="sendBooking" value="Elküld" disabled/>
<input type="submit" id="sendBooking" class="rightButton bookingSubmit" for="bookingStepForm" name="sendBooking" value="Elküld"/>
</div>
</div>
</form>
@@ -424,7 +423,8 @@
$('#bookingStep'+stepNumber).show();
if(stepNumber == 4){
if(stepNumber == 4){
recaptcha_callback();
$('#stepCircle1').addClass('activeStep');
$('#stepCircle2').addClass('activeStep');
$('#stepCircle3').addClass('activeStep');
@@ -471,7 +471,8 @@
else if(stepNumber == 1){
$RequiredFieldSelected = 1;
}
else if(stepNumber == 4){
else if(stepNumber == 4){
recaptcha_callback();
$RequiredFieldSelected = 1;
}
else if(stepNumber == 3){
@@ -482,7 +483,8 @@
});
}
else if(stepNumber == 4){
else if(stepNumber == 4){
recaptcha_callback();
if($('#booking_date').val() != '' && $('#booking_time').val() != ''){
$RequiredFieldSelected = 1;
}
@@ -502,7 +504,3 @@
</script>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit"
async defer>
</script>
@@ -188,8 +188,7 @@ if (is_array($services) && count($services) > 0) {
<div class="bookingButtonContainer">
<input type="button" class="leftButton bookingButton" onclick="goToStep(3);" value="Tilbake"/>
<input type="hidden" name="subpage" value="<?php echo $subpage;?>">
<div class="g-recaptcha" data-callback="recaptcha_callback" data-sitekey="6Ld_sS0pAAAAANQrY3ziDGPcsjMOdM9L9WIgAzxd"></div>
<input type="submit" id="sendBooking" class="rightButton bookingSubmit" for="bookingStepForm" name="sendBooking" value="Sende" disabled/>
<input type="submit" id="sendBooking" class="rightButton bookingSubmit" for="bookingStepForm" name="sendBooking" value="Sende"/>
</div>
</div>
</form>
@@ -424,7 +423,8 @@ if (is_array($services) && count($services) > 0) {
$('#bookingStep'+stepNumber).show();
if(stepNumber == 4){
if(stepNumber == 4){
recaptcha_callback();
$('#stepCircle1').addClass('activeStep');
$('#stepCircle2').addClass('activeStep');
$('#stepCircle3').addClass('activeStep');
@@ -471,7 +471,8 @@ if (is_array($services) && count($services) > 0) {
else if(stepNumber == 1){
$RequiredFieldSelected = 1;
}
else if(stepNumber == 4){
else if(stepNumber == 4){
recaptcha_callback();
$RequiredFieldSelected = 1;
}
else if(stepNumber == 3){
@@ -482,7 +483,8 @@ if (is_array($services) && count($services) > 0) {
});
}
else if(stepNumber == 4){
else if(stepNumber == 4){
recaptcha_callback();
if($('#booking_date').val() != '' && $('#booking_time').val() != ''){
$RequiredFieldSelected = 1;
}
@@ -502,7 +504,3 @@ if (is_array($services) && count($services) > 0) {
</script>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit"
async defer>
</script>