From 8704413c0ff34846f0ba740f7409511b9d8f168d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=CC=81bastien?= Date: Fri, 5 Jun 2020 17:29:35 +0200 Subject: [PATCH 1/4] Do not add bookAdvanceTimeout delay to new appointment modal on the backend. --- application/controllers/Backend.php | 1 - application/views/backend/calendar.php | 1 - assets/js/backend_calendar_appointments_modal.js | 4 ++-- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/application/controllers/Backend.php b/application/controllers/Backend.php index f6c4e589..8eb7867a 100755 --- a/application/controllers/Backend.php +++ b/application/controllers/Backend.php @@ -99,7 +99,6 @@ class Backend extends CI_Controller { $view['base_url'] = $this->config->item('base_url'); $view['user_display_name'] = $this->user_model->get_user_display_name($this->session->userdata('user_id')); $view['active_menu'] = PRIV_APPOINTMENTS; - $view['book_advance_timeout'] = $this->settings_model->get_setting('book_advance_timeout'); $view['date_format'] = $this->settings_model->get_setting('date_format'); $view['time_format'] = $this->settings_model->get_setting('time_format'); $view['first_weekday'] = $this->settings_model->get_setting('first_weekday'); diff --git a/application/views/backend/calendar.php b/application/views/backend/calendar.php index b8f0a7e1..d6622937 100755 --- a/application/views/backend/calendar.php +++ b/application/views/backend/calendar.php @@ -17,7 +17,6 @@ 'availableProviders' : , 'availableServices' : , 'baseUrl' : , - 'bookAdvanceTimeout' : , 'dateFormat' : , 'timeFormat' : , 'firstWeekday' : , diff --git a/assets/js/backend_calendar_appointments_modal.js b/assets/js/backend_calendar_appointments_modal.js index 7eb0db61..ce95c325 100755 --- a/assets/js/backend_calendar_appointments_modal.js +++ b/assets/js/backend_calendar_appointments_modal.js @@ -390,8 +390,8 @@ window.BackendCalendarAppointmentsModal = window.BackendCalendarAppointmentsModa var duration = service ? service.duration : 0; - var startDatetime = new Date().addMinutes(GlobalVariables.bookAdvanceTimeout); - var endDatetime = new Date().addMinutes(GlobalVariables.bookAdvanceTimeout).addMinutes(duration); + var startDatetime = new Date(); + var endDatetime = new Date().addMinutes(duration); var dateFormat; switch (GlobalVariables.dateFormat) { From 950738f2fe4235e17bde35d2788117b7f659be51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=CC=81bastien?= Date: Fri, 5 Jun 2020 18:24:05 +0200 Subject: [PATCH 2/4] Redirect clients which are tying to update an appointment during the book advance timeout to a warning page. --- application/controllers/Appointments.php | 22 +++++++++++++++++++ .../language/english/translations_lang.php | 2 ++ .../language/french/translations_lang.php | 2 ++ .../language/german/translations_lang.php | 2 ++ 4 files changed, 28 insertions(+) diff --git a/application/controllers/Appointments.php b/application/controllers/Appointments.php index 09c8b61d..2988919c 100755 --- a/application/controllers/Appointments.php +++ b/application/controllers/Appointments.php @@ -95,6 +95,7 @@ class Appointments extends CI_Controller { $available_services = $this->services_model->get_available_services(); $available_providers = $this->providers_model->get_available_providers(); $company_name = $this->settings_model->get_setting('company_name'); + $book_advance_timeout = $this->settings_model->get_setting('book_advance_timeout'); $date_format = $this->settings_model->get_setting('date_format'); $time_format = $this->settings_model->get_setting('time_format'); $first_weekday = $this->settings_model->get_setting('first_weekday'); @@ -144,6 +145,27 @@ class Appointments extends CI_Controller { return; } + // If the requested apppointment begin date is lower than book_advance_timeout. Display + // a message to the customer. + $startDate = strtotime($results[0]['start_datetime']); + $limit = strtotime('+' . $book_advance_timeout . ' minutes', strtotime('now')); + + if ($startDate < $limit) + { + $hours = floor($book_advance_timeout / 60); + $minutes = ($book_advance_timeout % 60); + + $view = [ + 'message_title' => $this->lang->line('appointment_locked'), + 'message_text' => strtr($this->lang->line('appointment_locked_message'), [ + '{$limit}' => sprintf('%02d:%02d', $hours, $minutes) + ]), + 'message_icon' => base_url('assets/img/error.png') + ]; + $this->load->view('appointments/message', $view); + return; + } + $appointment = $results[0]; $provider = $this->providers_model->get_row($appointment['id_users_provider']); $customer = $this->customers_model->get_row($appointment['id_users_customer']); diff --git a/application/language/english/translations_lang.php b/application/language/english/translations_lang.php index 21ac685c..ef31b689 100755 --- a/application/language/english/translations_lang.php +++ b/application/language/english/translations_lang.php @@ -50,6 +50,8 @@ $lang['appointment_added_to_google_calendar'] = 'Your appointment has been added $lang['view_appointment_in_google_calendar'] = 'Click here to view your appointment on Google Calendar.'; $lang['appointment_added_to_your_plan'] = 'A new appointment has been added to your plan.'; $lang['appointment_link_description'] = 'You can make changes by clicking the appointment link below.'; +$lang['appointment_locked'] = 'Modification impossible!'; +$lang['appointment_locked_message'] = 'The appointment cannot be changed less than {$limit} hours in advance.'; $lang['appointment_not_found'] = 'Appointment Not Found!'; $lang['appointment_does_not_exist_in_db'] = 'The appointment you requested does not exist in the system database anymore.'; $lang['display_calendar'] = 'Display Calendar'; diff --git a/application/language/french/translations_lang.php b/application/language/french/translations_lang.php index dc4f37dc..41b44a7d 100755 --- a/application/language/french/translations_lang.php +++ b/application/language/french/translations_lang.php @@ -50,6 +50,8 @@ $lang['appointment_added_to_google_calendar'] = 'Votre rendez-vous a été ajout $lang['view_appointment_in_google_calendar'] = 'Cliquez ici pour voir votre rendez-vous dans le calendrier Google.'; $lang['appointment_added_to_your_plan'] = 'Un nouveau rendez-vous a été ajouté à votre planning.'; $lang['appointment_link_description'] = 'Vous pouvez faires des modifications en cliquant sur le lien suivant.'; +$lang['appointment_locked'] = 'Modification impossible !'; +$lang['appointment_locked_message'] = 'Le rendez-vous ne peut pas être modifié moins de {$limit} heures avant.'; $lang['appointment_not_found'] = 'Rendez-vous introuvable !'; $lang['appointment_does_not_exist_in_db'] = 'Le rendez-vous demandé n\'existe plus dans la base de données système.'; $lang['display_calendar'] = 'Afficher le calendrier.'; diff --git a/application/language/german/translations_lang.php b/application/language/german/translations_lang.php index d8af8f51..02258bb8 100755 --- a/application/language/german/translations_lang.php +++ b/application/language/german/translations_lang.php @@ -50,6 +50,8 @@ $lang['appointment_added_to_google_calendar'] = 'Ihr Termin ist zu Ihrem Google $lang['view_appointment_in_google_calendar'] = 'Bitte klicken Sie hier, um Ihren Termin im Google Kalender zu sehen.'; $lang['appointment_added_to_your_plan'] = 'Ein neuer Termin ist zu Ihrer Planung hinzugefügt worden.'; $lang['appointment_link_description'] = 'Sie können Änderungen durch Klicken auf den Termin-Link durchführen.'; +$lang['appointment_locked'] = 'Änderungen unmöglich!'; +$lang['appointment_locked_message'] = 'Der Termin kann nicht weniger als {$limit} Stunden im Voraus geändert werden.'; $lang['appointment_not_found'] = 'Termin nicht gefunden!'; $lang['appointment_does_not_exist_in_db'] = 'Der von Ihnen angeforderte Termin existiert nicht in der Systemdatenbank.'; $lang['display_calendar'] = 'Kalender anzeigen'; From 5a03ecd73623fb7149991798a6d52698b948383f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=CC=81bastien?= Date: Fri, 5 Jun 2020 20:34:20 +0200 Subject: [PATCH 3/4] Improve some french translations about book advance timeout. --- application/language/french/translations_lang.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/language/french/translations_lang.php b/application/language/french/translations_lang.php index 41b44a7d..01bd650e 100755 --- a/application/language/french/translations_lang.php +++ b/application/language/french/translations_lang.php @@ -169,9 +169,9 @@ $lang['current_user'] = 'Utilisateur actuel'; $lang['about_app'] = 'Au sujet d\'Easy!Appointments'; $lang['edit_working_plan_hint'] = 'Indiquer ici les jours et les heures pendant lesquels votre société accepte les rendez-vous. Il est possible de fixer vous-même un rendez-vous en dehors des heures de travail tandis que les clients ne pourront pas prendre d\'eux-mêmes un rendez-vous en dehors des périodes de travail indiquées ici. Ce planning de travail sera celui proposé par défaut pour chaque nouvel enregistrement. Toutefois il vous sera possible de changer séparément chaque planning de travail individuel en l\'éditant. Après cela vous pouvez encore ajouter les périodes de pause.'; $lang['edit_breaks_hint'] = 'Indiquer ici les périodes des pauses quotidiennes. Ces pauses seront disponibles à chaque nouvel exécutant.'; -$lang['book_advance_timeout'] = 'Temporisation avancée de l\'agenda'; -$lang['book_advance_timeout_hint'] = 'Définir la temporisation (en minutes) avant que les clients ne puissent prendre ou modifier les rendez-vous avec la société.'; -$lang['timeout_minutes'] = 'Temporisation (Minutes)'; +$lang['book_advance_timeout'] = 'Paramètres de réservation'; +$lang['book_advance_timeout_hint'] = 'Définis le délai minimum (en minutes) entre la réservation et la date du rendez-vous. Une fois ce délai passé, les réservations ne peuvent plus être créées, modifiées ni, annulées.'; +$lang['timeout_minutes'] = 'Délai de réservation (en minutes)'; $lang['about_app_info'] = 'Easy!Appointments est une application Web hautement personnalisable qui permet à vos clients de prendre rendez-vous avec vous via le web. En outre, elle offre la possibilité de synchroniser vos données avec un calendrier Google afin que vous puissiez les utiliser avec d\'autres services. Easy!Appointments est un projet open source et vous pouvez le télécharger et l\'installer même pour un usage commercial. Easy!Appointments fonctionnera sans problème avec votre site web existant car il peut être installé dans un dossier spécifique du serveur et bien sûr, les deux sites peuvent partager la même base de données.'; $lang['current_version'] = 'Version actuelle'; $lang['support'] = 'Support'; From 18d05411141818bde0f1ccff4af64b654bc85c36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=CC=81bastien?= Date: Fri, 5 Jun 2020 20:36:40 +0200 Subject: [PATCH 4/4] Improve the "help block" for the book advance timeout field in french. --- application/controllers/Backend.php | 7 +++++++ application/language/french/translations_lang.php | 2 +- application/views/backend/settings.php | 8 ++++++-- assets/js/backend_settings_system.js | 8 ++++++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/application/controllers/Backend.php b/application/controllers/Backend.php index 8eb7867a..b58958a0 100755 --- a/application/controllers/Backend.php +++ b/application/controllers/Backend.php @@ -374,6 +374,13 @@ class Backend extends CI_Controller { $view['system_settings'] = $this->settings_model->get_settings(); $view['user_settings'] = $this->user_model->get_user($user_id); $view['timezones'] = $this->timezones->to_array(); + + // book_advance_timeout preview + $book_advance_timeout = $this->settings_model->get_setting('book_advance_timeout'); + $hours = floor($book_advance_timeout / 60); + $minutes = $book_advance_timeout % 60; + $view['book_advance_timeout_preview'] = sprintf('%02d:%02d', $hours, $minutes); + $this->set_user_data($view); $this->load->view('backend/header', $view); diff --git a/application/language/french/translations_lang.php b/application/language/french/translations_lang.php index 01bd650e..24f81488 100755 --- a/application/language/french/translations_lang.php +++ b/application/language/french/translations_lang.php @@ -170,7 +170,7 @@ $lang['about_app'] = 'Au sujet d\'Easy!Appointments'; $lang['edit_working_plan_hint'] = 'Indiquer ici les jours et les heures pendant lesquels votre société accepte les rendez-vous. Il est possible de fixer vous-même un rendez-vous en dehors des heures de travail tandis que les clients ne pourront pas prendre d\'eux-mêmes un rendez-vous en dehors des périodes de travail indiquées ici. Ce planning de travail sera celui proposé par défaut pour chaque nouvel enregistrement. Toutefois il vous sera possible de changer séparément chaque planning de travail individuel en l\'éditant. Après cela vous pouvez encore ajouter les périodes de pause.'; $lang['edit_breaks_hint'] = 'Indiquer ici les périodes des pauses quotidiennes. Ces pauses seront disponibles à chaque nouvel exécutant.'; $lang['book_advance_timeout'] = 'Paramètres de réservation'; -$lang['book_advance_timeout_hint'] = 'Définis le délai minimum (en minutes) entre la réservation et la date du rendez-vous. Une fois ce délai passé, les réservations ne peuvent plus être créées, modifiées ni, annulées.'; +$lang['book_advance_timeout_hint'] = 'Les réservations ne peuvent pas être créées, modifiées ou annulées moins de {$limit} heures avant le rendez-vous.'; $lang['timeout_minutes'] = 'Délai de réservation (en minutes)'; $lang['about_app_info'] = 'Easy!Appointments est une application Web hautement personnalisable qui permet à vos clients de prendre rendez-vous avec vous via le web. En outre, elle offre la possibilité de synchroniser vos données avec un calendrier Google afin que vous puissiez les utiliser avec d\'autres services. Easy!Appointments est un projet open source et vous pouvez le télécharger et l\'installer même pour un usage commercial. Easy!Appointments fonctionnera sans problème avec votre site web existant car il peut être installé dans un dossier spécifique du serveur et bien sûr, les deux sites peuvent partager la même base de données.'; $lang['current_version'] = 'Version actuelle'; diff --git a/application/views/backend/settings.php b/application/views/backend/settings.php index 576b60c7..659d5f0d 100755 --- a/application/views/backend/settings.php +++ b/application/views/backend/settings.php @@ -268,8 +268,12 @@
-

- +

+ $book_advance_timeout_preview + ]) + ?>

diff --git a/assets/js/backend_settings_system.js b/assets/js/backend_settings_system.js index b6b190e5..8099e27c 100644 --- a/assets/js/backend_settings_system.js +++ b/assets/js/backend_settings_system.js @@ -44,6 +44,14 @@ // Update the logo title on the header. $('#header-logo span').text($('#company-name').val()); + // Update book_advance_timeout preview + var totalMinutes = $('#book-advance-timeout').val(); + var hours = Math.floor(totalMinutes / 60); + var minutes = totalMinutes % 60; + $('#book-advance-timeout-helper').text( + EALang.book_advance_timeout_hint.replace('{$limit}', ('0' + hours).slice(-2) + ':' + ('0' + minutes).slice(-2)) + ); + // Update variables also used in other setting tabs GlobalVariables.timeFormat = $('#time-format').val(); GlobalVariables.firstWeekday = $('#first-weekday').val();