diff --git a/application/controllers/Admin.php b/application/controllers/Admin.php
index 15a7e1a..396d4d9 100755
--- a/application/controllers/Admin.php
+++ b/application/controllers/Admin.php
@@ -209,41 +209,6 @@ class Admin extends CI_Controller {
- public function admin_worker_override() {
- $this->load->helper('url');
- $this->load->model('User_model');
- $this->load->model('Service_model');
-
- $data['pageTitle'] = 'Egyedi napok kezelése';
- $data['workers'] = $this->Service_model->getAllWorkers();
-
- if ($this->input->post('storeOverride')) {
- $this->load->database();
- $insert = [
- 'worker_id' => $_POST['worker_id'],
- 'date' => $_POST['date'],
- 'is_day_off' => isset($_POST['is_day_off']) ? 1 : 0,
- 'start_time' => $_POST['start_time'],
- 'end_time' => $_POST['end_time']
- ];
-
- $existing = $this->db->query("SELECT * FROM worker_schedule_overrides WHERE worker_id = '{$insert['worker_id']}' AND date = '{$insert['date']}'")->row();
- if ($existing) {
- $this->db->where('id', $existing->id)->update('worker_schedule_overrides', $insert);
- } else {
- $this->db->insert('worker_schedule_overrides', $insert);
- }
- }
-
- if (!empty($_GET['worker_id'])) {
- $this->load->database();
- $worker_id = $_GET['worker_id'];
- $data['selectedWorkerId'] = $worker_id;
- $data['overrides'] = $this->db->query("SELECT * FROM worker_schedule_overrides WHERE worker_id = '$worker_id' ORDER BY date ASC")->result();
- }
-
- $this->load->view('admin/worker_override', $data);
- }
public function manage_worker_schedule($worker_id = null) {
diff --git a/application/models/Service_model.php b/application/models/Service_model.php
index 9c37b3e..8b91f2a 100755
--- a/application/models/Service_model.php
+++ b/application/models/Service_model.php
@@ -439,17 +439,17 @@ class Service_model extends CI_Model {
if ($override->is_day_off) return [];
- $dayStartTime = new DateTime($selectedDate.' '.$override->start_time);
- $finishTime = new DateTime($selectedDate.' '.$override->end_time);
+ $dayStartTime = new DateTime($selectedDate.' '.$override->start_time, new DateTimeZone('Europe/Oslo'));
+ $finishTime = new DateTime($selectedDate.' '.$override->end_time, new DateTimeZone('Europe/Oslo'));
} else {
$weekday = date('w', strtotime($selectedDate)); // 0 = Sunday, 6 = Saturday
$weekNumber = date('W', strtotime($selectedDate));
$isOddWeek = $weekNumber % 2 !== 0;
$scheduleQuery = $this->db->query("
- SELECT * FROM worker_schedule
- WHERE worker_id = '{$worker_id}'
- AND weekday = '{$weekday}'
+ SELECT * FROM worker_schedule
+ WHERE worker_id = '{$worker_id}'
+ AND weekday = '{$weekday}'
AND (
is_alternate_week = 0
OR (is_alternate_week = 1 AND " . ($isOddWeek ? "1" : "0") . ")
@@ -461,8 +461,8 @@ class Service_model extends CI_Model {
}
$schedule = $scheduleQuery->row();
- $dayStartTime = new DateTime($selectedDate . ' ' . $schedule->start_time);
- $finishTime = new DateTime($selectedDate . ' ' . $schedule->end_time);
+ $dayStartTime = new DateTime($selectedDate . ' ' . $schedule->start_time, new DateTimeZone('Europe/Oslo'));
+ $finishTime = new DateTime($selectedDate . ' ' . $schedule->end_time, new DateTimeZone('Europe/Oslo'));
}
// --- ÚJ: ma foglalva csak (következő 15 perces blokk + 1 óra) UTÁN legyen időpont ---
@@ -685,8 +685,9 @@ class Service_model extends CI_Model {
$lunchDuration = new DateInterval('PT30M');
$lunchStep = new DateInterval('PT15M');
- $winStartDt = new DateTime($date . ' ' . $winStart);
- $winEndDt = new DateTime($date . ' ' . $winEnd);
+ $tz = new DateTimeZone('Europe/Oslo');
+ $winStartDt = new DateTime($date . ' ' . $winStart, $tz);
+ $winEndDt = new DateTime($date . ' ' . $winEnd, $tz);
// Clamp window to actual shift hours
if ($shiftStart && $winStartDt < $shiftStart) $winStartDt = clone $shiftStart;
@@ -695,10 +696,11 @@ class Service_model extends CI_Model {
$scanEnd = (clone $winEndDt)->sub($lunchDuration);
$isFree = function($candidate) use ($lunchDuration, $dayBookings, $date) {
+ $tz = new DateTimeZone('Europe/Oslo');
$candEnd = (clone $candidate)->add($lunchDuration);
foreach ($dayBookings as $bk) {
- $bkS = new DateTime($date . ' ' . $bk->booking_start_time);
- $bkE = new DateTime($date . ' ' . $bk->booking_finish_time);
+ $bkS = new DateTime($date . ' ' . $bk->booking_start_time, $tz);
+ $bkE = new DateTime($date . ' ' . $bk->booking_finish_time, $tz);
if ($bkS < $candEnd && $bkE > $candidate) return false;
}
return true;
@@ -713,7 +715,7 @@ class Service_model extends CI_Model {
if (!empty($freeSlots)) {
// Pick the slot closest to preferred time (or start of window if no preference)
$prefDt = $preferredTime
- ? new DateTime($date . ' ' . $preferredTime)
+ ? new DateTime($date . ' ' . $preferredTime, new DateTimeZone('Europe/Oslo'))
: clone $winStartDt;
$best = null;
$bestDiff = PHP_INT_MAX;
@@ -725,12 +727,6 @@ class Service_model extends CI_Model {
return ['start' => $best->format('H:i'), 'end' => $bestEnd->format('H:i')];
}
- // Fallback: search after the window
- for ($c = clone $winEndDt; ; $c->add($lunchStep)) {
- $candEnd = (clone $c)->add($lunchDuration);
- if ($candEnd > $shiftEnd) break;
- if ($isFree($c)) return ['start' => $c->format('H:i'), 'end' => $candEnd->format('H:i')];
- }
return null;
}
diff --git a/application/views/includes/barber-head.php b/application/views/includes/barber-head.php
index 44fc6b6..2ed6678 100755
--- a/application/views/includes/barber-head.php
+++ b/application/views/includes/barber-head.php
@@ -41,7 +41,6 @@ $this->load->helper('url');
-
diff --git a/application/views/includes/beauty-head.php b/application/views/includes/beauty-head.php
index 8704c04..4a1920e 100755
--- a/application/views/includes/beauty-head.php
+++ b/application/views/includes/beauty-head.php
@@ -41,7 +41,6 @@ $this->load->helper('url');
-
diff --git a/application/views/pages/includes/booking-form-en.php b/application/views/pages/includes/booking-form-en.php
index b7ea7c4..e496261 100755
--- a/application/views/pages/includes/booking-form-en.php
+++ b/application/views/pages/includes/booking-form-en.php
@@ -187,8 +187,7 @@
@@ -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 @@
-
-
\ No newline at end of file
diff --git a/application/views/pages/includes/booking-form-hu.php b/application/views/pages/includes/booking-form-hu.php
index d15feb6..9db655b 100755
--- a/application/views/pages/includes/booking-form-hu.php
+++ b/application/views/pages/includes/booking-form-hu.php
@@ -188,8 +188,7 @@
@@ -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 @@
-
-
\ No newline at end of file
diff --git a/application/views/pages/includes/booking-form-no.php b/application/views/pages/includes/booking-form-no.php
index 40a067a..29a30ad 100755
--- a/application/views/pages/includes/booking-form-no.php
+++ b/application/views/pages/includes/booking-form-no.php
@@ -188,8 +188,7 @@ if (is_array($services) && count($services) > 0) {
@@ -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) {
-
-
\ No newline at end of file
diff --git a/load_services.json b/load_services.json
index f0f3ca2..9d41816 100755
--- a/load_services.json
+++ b/load_services.json
@@ -1 +1 @@
-[{"service_name":"Alkalmi m\u0171szempilla felhelyez\u00e9se (beauty)","service_id":"23"},{"service_name":"Alkalmi smink (beauty)","service_id":"20"},{"service_name":"Bajusz \u00e9s \u00e1ll (beauty)","service_id":"38"},{"service_name":"Dupl\u00e1zott szempilla 2D (beauty)","service_id":"15"},{"service_name":"Dupl\u00e1zott szempilla 2D \u00fajrat\u00f6lt\u00e9se (beauty)","service_id":"16"},{"service_name":"D\u00fas\u00edtott szempilla 3D-5D (beauty)","service_id":"17"},{"service_name":"D\u00fas\u00edtott szempilla 3D-5D \u00fajrat\u00f6lt\u00e9se (beauty)","service_id":"18"},{"service_name":"Eg\u00e9sz h\u00e1t (barber)","service_id":"45"},{"service_name":"Eg\u00e9sz mell (barber)","service_id":"41"},{"service_name":"Egyszer\u0171 d\u00edsz\u00edt\u00e9s \u2013 Kreat\u00edv k\u00f6r\u00f6mdesign (beauty)","service_id":"55"},{"service_name":"Egyszer\u0171 d\u00edsz\u00edt\u00e9s \u2013 Kreat\u00edv k\u00f6r\u00f6mdesign m\u0171k\u00f6r\u00f6mre (beauty)","service_id":"63"},{"service_name":"Egysz\u00edn\u0171 g\u00e9llakkoz\u00e1s \u2013 a r\u00e9gi anyag elt\u00e1vol\u00edt\u00e1s\u00e1val (beauty)","service_id":"50"},{"service_name":"Egysz\u00edn\u0171 g\u00e9llakkoz\u00e1s \u2013 elt\u00e1vol\u00edt\u00e1s n\u00e9lk\u00fcl (beauty)","service_id":"49"},{"service_name":"\u00c9p\u00edtett zsel\u00e9s k\u00f6r\u00f6m elt\u00e1vol\u00edt\u00e1s \u2013 m\u00e1s szolg\u00e1ltat\u00e1s n\u00e9lk\u00fcl (beauty)","service_id":"66"},{"service_name":"Er\u0151s\u00edtett g\u00e9llakk a r\u00e9gi anyag elt\u00e1vol\u00edt\u00e1s\u00e1val (beauty)","service_id":"52"},{"service_name":"Er\u0151s\u00edtett g\u00e9llakk elt\u00e1vol\u00edt\u00e1s n\u00e9lk\u00fcl (beauty)","service_id":"51"},{"service_name":"Extra d\u00edsz\u00edt\u00e9s \u2013 Kreat\u00edv k\u00f6r\u00f6mdesign (beauty)","service_id":"56"},{"service_name":"Extra d\u00edsz\u00edt\u00e9s \u2013 Kreat\u00edv k\u00f6r\u00f6mdesign m\u0171k\u00f6r\u00f6mre (beauty)","service_id":"64"},{"service_name":"F\u00e9rfi hajv\u00e1g\u00e1s (barber)","service_id":"1"},{"service_name":"Francia d\u00edsz\u00edt\u00e9s (beauty)","service_id":"53"},{"service_name":"Francia d\u00edsz\u00edt\u00e9s m\u0171k\u00f6r\u00f6mre (beauty)","service_id":"61"},{"service_name":"F\u00fcll gyanta (barber)","service_id":"11"},{"service_name":"G\u00e9llakk vagy er\u0151s\u00edtett g\u00e9llakk elt\u00e1vol\u00edt\u00e1s \u2013 m\u00e1s szolg\u00e1ltat\u00e1s n\u00e9lk\u00fcl (beauty)","service_id":"65"},{"service_name":"Gyerekhajv\u00e1g\u00e1s (barber)","service_id":"3"},{"service_name":"Hagyom\u00e1nyos forr\u00f3t\u00f6r\u00f6lk\u00f6z\u0151s k\u00e9sesborotv\u00e1l\u00e1s (barber)","service_id":"5"},{"service_name":"H\u00e1t \u00e9s v\u00e1ll (barber)","service_id":"43"},{"service_name":"H\u00e1t, mell \u00e9s has (barber)","service_id":"47"},{"service_name":"H\u00e1t, v\u00e1ll \u00e9s nyak (barber)","service_id":"46"},{"service_name":"Henna fest\u00e9s, tartalmazza a szem\u00f6ld\u00f6k form\u00e1z\u00e1st is (beauty)","service_id":"28"},{"service_name":"H\u00f3nalj (beauty)","service_id":"34"},{"service_name":"H\u00f3nalj (barber)","service_id":"44"},{"service_name":"Kar (beauty)","service_id":"32"},{"service_name":"Klasszikus csomag (barber)","service_id":"7"},{"service_name":"Klasszikus manik\u00fcr (beauty)","service_id":"48"},{"service_name":"Klasszikus szempilla 1D (beauty)","service_id":"13"},{"service_name":"Klasszikus szempilla 1D \u00fajrat\u00f6lt\u00e9se (beauty)","service_id":"14"},{"service_name":"L\u00e1b t\u00e9rdig (beauty)","service_id":"36"},{"service_name":"Mell \u00e9s h\u00e1t (barber)","service_id":"42"},{"service_name":"Menyasszonyi pr\u00f3basmink (beauty)","service_id":"21"},{"service_name":"Menyasszonyi smink (beauty)","service_id":"22"},{"service_name":"Minden egyben csomag (barber)","service_id":"9"},{"service_name":"Modern csomag (barber)","service_id":"8"},{"service_name":"Ombre d\u00edsz\u00edt\u00e9s \u2013 L\u00e1gy \u00e1tmenet (beauty)","service_id":"54"},{"service_name":"Ombre d\u00edsz\u00edt\u00e9s \u2013 L\u00e1gy \u00e1tmenet m\u0171k\u00f6r\u00f6mre (beauty)","service_id":"62"},{"service_name":"Orr (beauty)","service_id":"39"},{"service_name":"Orr gyanta (barber)","service_id":"12"},{"service_name":"Puderes szem\u00f6ld\u00f6ktetov\u00e1l\u00e1s (beauty)","service_id":"31"},{"service_name":"Puderes szem\u00f6ld\u00f6ktetov\u00e1l\u00e1s 1,5 \u00e9ven bel\u00fcli friss\u00edt\u00e9se (beauty)","service_id":"30"},{"service_name":"Skinfade hajv\u00e1g\u00e1s (barber)","service_id":"2"},{"service_name":"Szak\u00e1llfest\u00e9s (barber)","service_id":"6"},{"service_name":"Szak\u00e1lligaz\u00edt\u00e1s (barber)","service_id":"4"},{"service_name":"Szem\u00f6ld\u00f6k fest\u00e9s \u00e9s form\u00e1z\u00e1s (beauty)","service_id":"25"},{"service_name":"Szem\u00f6ld\u00f6k form\u00e1z\u00e1s (beauty)","service_id":"27"},{"service_name":"Szem\u00f6ld\u00f6k gyanta \u00e9s szem\u00f6ld\u00f6k igaz\u00edt\u00e1s (barber)","service_id":"10"},{"service_name":"Szem\u00f6ld\u00f6k lamin\u00e1l\u00e1s, form\u00e1z\u00e1ssal \u00e9s fest\u00e9ssel (beauty)","service_id":"24"},{"service_name":"Szempilla fest\u00e9s (beauty)","service_id":"26"},{"service_name":"Szempilla leold\u00e1sa (beauty)","service_id":"19"},{"service_name":"Szempilla lifting, tartalmazza a fest\u00e9s is (beauty)","service_id":"29"},{"service_name":"Teljes l\u00e1b (beauty)","service_id":"35"},{"service_name":"\u00daj szett zsel\u00e9s k\u00f6r\u00f6mhosszabb\u00edt\u00e1s (L) \u2013 hossz\u00fa (beauty)","service_id":"59"},{"service_name":"\u00daj szett zsel\u00e9s k\u00f6r\u00f6mhosszabb\u00edt\u00e1s (M) \u2013 k\u00f6zepes hossz (beauty)","service_id":"58"},{"service_name":"\u00daj szett zsel\u00e9s k\u00f6r\u00f6mhosszabb\u00edt\u00e1s (S) \u2013 norm\u00e1l hossz (beauty)","service_id":"57"},{"service_name":"Zsel\u00e9s k\u00f6r\u00f6mhosszabb\u00edt\u00e1s t\u00f6lt\u00e9s \u2013 len\u0151tt k\u00f6rm\u00f6k friss\u00edt\u00e9se (3-5 h\u00e9ten bel\u00fcl) (beauty)","service_id":"60"}]
\ No newline at end of file
+[{"service_name":"Alkalmi m\u0171szempilla felhelyez\u00e9se (beauty)","service_id":"23"},{"service_name":"Alkalmi smink (beauty)","service_id":"21"},{"service_name":"Bajusz \u00e9s \u00e1ll (beauty)","service_id":"38"},{"service_name":"Dupl\u00e1zott szempilla 2D (beauty)","service_id":"15"},{"service_name":"Dupl\u00e1zott szempilla 2D \u00fajrat\u00f6lt\u00e9se (beauty)","service_id":"16"},{"service_name":"D\u00fas\u00edtott szempilla 3D-5D (beauty)","service_id":"17"},{"service_name":"D\u00fas\u00edtott szempilla 3D-5D \u00fajrat\u00f6lt\u00e9se (beauty)","service_id":"18"},{"service_name":"Eg\u00e9sz h\u00e1t (barber)","service_id":"45"},{"service_name":"Eg\u00e9sz mell (barber)","service_id":"41"},{"service_name":"Egy k\u00f6r\u00f6m jav\u00edt\u00e1sa (beauty)","service_id":"68"},{"service_name":"Egyszer\u0171 d\u00edsz\u00edt\u00e9s \u2013 Kreat\u00edv k\u00f6r\u00f6mdesign m\u0171k\u00f6r\u00f6mre (beauty)","service_id":"63"},{"service_name":"faszom (beauty)","service_id":"69"},{"service_name":"F\u00e9rfi hajv\u00e1g\u00e1s (barber)","service_id":"1"},{"service_name":"F\u00fcll gyanta (barber)","service_id":"11"},{"service_name":"Gyerekhajv\u00e1g\u00e1s (barber)","service_id":"3"},{"service_name":"Hagyom\u00e1nyos forr\u00f3t\u00f6r\u00f6lk\u00f6z\u0151s k\u00e9sesborotv\u00e1l\u00e1s (barber)","service_id":"5"},{"service_name":"H\u00e1t (beauty)","service_id":"37"},{"service_name":"H\u00e1t \u00e9s v\u00e1ll (barber)","service_id":"43"},{"service_name":"H\u00e1t, mell \u00e9s has (barber)","service_id":"47"},{"service_name":"H\u00e1t, v\u00e1ll \u00e9s nyak (barber)","service_id":"46"},{"service_name":"Henna fest\u00e9s, tartalmazza a szem\u00f6ld\u00f6k form\u00e1z\u00e1st is (beauty)","service_id":"28"},{"service_name":"H\u00f3nalj (beauty)","service_id":"34"},{"service_name":"H\u00f3nalj (barber)","service_id":"44"},{"service_name":"Kar (beauty)","service_id":"32"},{"service_name":"Klasszikus csomag (barber)","service_id":"7"},{"service_name":"Klasszikus szempilla 1D (beauty)","service_id":"13"},{"service_name":"Klasszikus szempilla 1D \u00fajrat\u00f6lt\u00e9se (beauty)","service_id":"14"},{"service_name":"L\u00e1b t\u00e9rdig (beauty)","service_id":"36"},{"service_name":"Mell \u00e9s h\u00e1t (barber)","service_id":"42"},{"service_name":"Menyasszonyi smink (beauty)","service_id":"22"},{"service_name":"Minden egyben csomag (barber)","service_id":"9"},{"service_name":"Modern csomag (barber)","service_id":"8"},{"service_name":"Nappali smink (beauty)","service_id":"20"},{"service_name":"N\u0151i intim bikinivonal (beauty)","service_id":"33"},{"service_name":"Orr (beauty)","service_id":"39"},{"service_name":"Orr gyanta (barber)","service_id":"12"},{"service_name":"Puderes szem\u00f6ld\u00f6ktetov\u00e1l\u00e1s (beauty)","service_id":"31"},{"service_name":"Puderes szem\u00f6ld\u00f6ktetov\u00e1l\u00e1s 1,5 \u00e9ven bel\u00fcli friss\u00edt\u00e9se (beauty)","service_id":"30"},{"service_name":"Skinfade hajv\u00e1g\u00e1s (barber)","service_id":"2"},{"service_name":"Szak\u00e1llfest\u00e9s (barber)","service_id":"6"},{"service_name":"Szak\u00e1lligaz\u00edt\u00e1s (barber)","service_id":"4"},{"service_name":"Szem\u00f6ld\u00f6k fest\u00e9s \u00e9s form\u00e1z\u00e1s (beauty)","service_id":"25"},{"service_name":"Szem\u00f6ld\u00f6k form\u00e1z\u00e1s (beauty)","service_id":"27"},{"service_name":"Szem\u00f6ld\u00f6k gyanta \u00e9s szem\u00f6ld\u00f6k igaz\u00edt\u00e1s (barber)","service_id":"10"},{"service_name":"Szem\u00f6ld\u00f6k lamin\u00e1l\u00e1s, form\u00e1z\u00e1ssal \u00e9s fest\u00e9ssel (beauty)","service_id":"24"},{"service_name":"Szempilla fest\u00e9s (beauty)","service_id":"26"},{"service_name":"Szempilla leold\u00e1sa (beauty)","service_id":"19"},{"service_name":"Szempilla lifting, tartalmazza a fest\u00e9s is (beauty)","service_id":"29"},{"service_name":"Teljes l\u00e1b (beauty)","service_id":"35"}]
\ No newline at end of file