diff --git a/application/controllers/Appointments.php b/application/controllers/Appointments.php index 2d845cdc..3adbb9f6 100755 --- a/application/controllers/Appointments.php +++ b/application/controllers/Appointments.php @@ -97,6 +97,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'); @@ -146,6 +147,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/controllers/Backend.php b/application/controllers/Backend.php index fab6b463..35932d78 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'); @@ -375,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/english/translations_lang.php b/application/language/english/translations_lang.php index 0d4858df..f8294235 100755 --- a/application/language/english/translations_lang.php +++ b/application/language/english/translations_lang.php @@ -53,6 +53,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 b39f3a2f..b14a9841 100755 --- a/application/language/french/translations_lang.php +++ b/application/language/french/translations_lang.php @@ -52,6 +52,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.'; @@ -169,9 +171,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'] = 'Les réservations ne peuvent pas être créées, modifiées ou annulées moins de ## 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'; $lang['support'] = 'Support'; diff --git a/application/language/german/translations_lang.php b/application/language/german/translations_lang.php index 400199b9..a4febaa9 100755 --- a/application/language/german/translations_lang.php +++ b/application/language/german/translations_lang.php @@ -51,6 +51,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'; diff --git a/application/views/backend/calendar.php b/application/views/backend/calendar.php index 7ff2409f..a0c384a8 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 3662ce74..1c68f41d 100755 --- a/assets/js/backend_calendar_appointments_modal.js +++ b/assets/js/backend_calendar_appointments_modal.js @@ -392,8 +392,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) { diff --git a/assets/js/backend_settings_system.js b/assets/js/backend_settings_system.js index 8adc993d..0a9b260b 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();