diff --git a/src/application/config/migration.php b/src/application/config/migration.php
old mode 100644
new mode 100755
index 1546ae4d..98964bd8
--- a/src/application/config/migration.php
+++ b/src/application/config/migration.php
@@ -37,7 +37,7 @@ $config['migration_table'] = 'ea_migrations';
| be upgraded / downgraded to.
|
*/
-$config['migration_version'] = 10; // current
+$config['migration_version'] = 11; // current
/*
diff --git a/src/application/controllers/Appointments.php b/src/application/controllers/Appointments.php
index c6d5976e..3f758e80 100755
--- a/src/application/controllers/Appointments.php
+++ b/src/application/controllers/Appointments.php
@@ -790,6 +790,9 @@ class Appointments extends CI_Controller {
// Get the service, provider's working plan and provider appointments.
$working_plan = json_decode($this->providers_model->get_setting('working_plan', $provider_id), TRUE);
+ // Get the provider's extra working plan.
+ $extra_working_plan = json_decode($this->providers_model->get_setting('extra_working_plan', $provider_id), TRUE);
+
$provider_appointments = $this->appointments_model->get_batch([
'id_users_provider' => $provider_id,
]);
@@ -811,6 +814,14 @@ class Appointments extends CI_Controller {
// every reserved appointment is considered to be a taken space in the plan.
$selected_date_working_plan = $working_plan[strtolower(date('l', strtotime($selected_date)))];
+ // Search if the $selected_date is an extra date added outside the normal working plan
+ if ($selected_date_working_plan == null) {
+ if (isset($extra_working_plan[strtolower(date('Y-m-d', strtotime($selected_date)))])){
+ $selected_date_working_plan = $extra_working_plan[strtolower(date('Y-m-d', strtotime($selected_date)))];
+ }
+ }
+
+
$periods = [];
if (isset($selected_date_working_plan['breaks']))
diff --git a/src/application/controllers/Backend.php b/src/application/controllers/Backend.php
index 2db56b7d..e89bae1c 100755
--- a/src/application/controllers/Backend.php
+++ b/src/application/controllers/Backend.php
@@ -212,6 +212,7 @@ class Backend extends CI_Controller {
$view['secretaries'] = $this->secretaries_model->get_batch();
$view['services'] = $this->services_model->get_batch();
$view['working_plan'] = $this->settings_model->get_setting('company_working_plan');
+ $view['extra_working_plan'] = "{}";
$this->set_user_data($view);
$this->load->view('backend/header', $view);
diff --git a/src/application/controllers/Backend_api.php b/src/application/controllers/Backend_api.php
index d7588eae..fd32ca1d 100755
--- a/src/application/controllers/Backend_api.php
+++ b/src/application/controllers/Backend_api.php
@@ -798,6 +798,101 @@ class Backend_api extends CI_Controller {
}
}
+ /**
+ * [AJAX] Insert of update extra working plan time period to database.
+ *
+ * Required POST Parameters:
+ *
+ * - array $_POST['extra_period'] JSON encoded array that contains the unavailable period data.
+ */
+ public function ajax_save_extra_period()
+ {
+ try
+ {
+ // Check privileges
+ $extra_period = json_decode($this->input->post('extra_period'), TRUE);
+
+ $REQUIRED_PRIV = ( ! isset($extra_period['id']))
+ ? $this->privileges[PRIV_APPOINTMENTS]['add']
+ : $this->privileges[PRIV_APPOINTMENTS]['edit'];
+ if ($REQUIRED_PRIV == FALSE)
+ {
+ throw new Exception('You do not have the required privileges for this task.');
+ }
+
+ $this->load->model('providers_model');
+
+ $success = $this->providers_model->set_extra_working_day($extra_period, $extra_period['id_users_provider']);
+
+ if ( ! $success)
+ {
+ $this->output
+ ->set_content_type('application/json')
+ ->set_output(json_encode(['warnings' => 'Error on saving extra period.']));
+ }
+ else
+ {
+ $this->output
+ ->set_content_type('application/json')
+ ->set_output(json_encode(AJAX_SUCCESS));
+ }
+ }
+ catch (Exception $exc)
+ {
+ $this->output
+ ->set_content_type('application/json')
+ ->set_output(json_encode(['exceptions' => [exceptionToJavaScript($exc)]]));
+ }
+ }
+
+ /**
+ * [AJAX] Delete an extra working plan time period to database.
+ *
+ * Required POST Parameters:
+ *
+ * - String $_POST['extra_period'] Date to be deleted.
+ * - int $_POST['provider_id'] Record id to be deleted.
+ */
+ public function ajax_delete_extra_period()
+ {
+ try
+ {
+ if ($this->privileges[PRIV_APPOINTMENTS]['delete'] == FALSE)
+ {
+ throw new Exception('You do not have the required privileges for this task.');
+ }
+
+ // Check privileges
+ $extra_period = $this->input->post('extra_period');
+ $provider_id = $this->input->post('provider_id');
+
+ $this->load->model('providers_model');
+
+ // Delete unavailable
+ $success = $this->providers_model->delete_extra_working_day($extra_period, $provider_id);
+
+ if ( ! $success)
+ {
+ $this->output
+ ->set_content_type('application/json')
+ ->set_output(json_encode(['warnings' => 'Error on deleting extra working day']));
+ }
+ else
+ {
+ $this->output
+ ->set_content_type('application/json')
+ ->set_output(json_encode(AJAX_SUCCESS));
+ }
+
+ } //
+ catch (Exception $exc) //
+ { //
+ $this->output //
+ ->set_content_type('application/json') //
+ ->set_output(json_encode(['exceptions' => [exceptionToJavaScript($exc)]])); //
+ }//
+ } //
+
/**
* [AJAX] Save (insert or update) a customer record.
*
diff --git a/src/application/language/arabic/translations_lang.php b/src/application/language/arabic/translations_lang.php
index bfc7e818..368965c7 100755
--- a/src/application/language/arabic/translations_lang.php
+++ b/src/application/language/arabic/translations_lang.php
@@ -281,3 +281,10 @@ $lang['availabilities_type'] = 'نوع التوفر أو الإتاحة';
$lang['flexible'] = 'مرن';
$lang['fixed'] = 'ثابت';
$lang['attendants_number'] = 'عدد الحاضرين';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/bulgarian/translations_lang.php b/src/application/language/bulgarian/translations_lang.php
index 04adb985..52fd77d8 100755
--- a/src/application/language/bulgarian/translations_lang.php
+++ b/src/application/language/bulgarian/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Гъвкав';
$lang['fixed'] = 'Фиксиран';
$lang['attendants_number'] = 'Брой Посетители';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/chinese/translations_lang.php b/src/application/language/chinese/translations_lang.php
index 71135caf..782c19f3 100755
--- a/src/application/language/chinese/translations_lang.php
+++ b/src/application/language/chinese/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/danish/translations_lang.php b/src/application/language/danish/translations_lang.php
index f460aaca..48cbdf3f 100755
--- a/src/application/language/danish/translations_lang.php
+++ b/src/application/language/danish/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/dutch/translations_lang.php b/src/application/language/dutch/translations_lang.php
index 9f9c177e..f76d2c71 100755
--- a/src/application/language/dutch/translations_lang.php
+++ b/src/application/language/dutch/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexibel';
$lang['fixed'] = 'Vast';
$lang['attendants_number'] = 'Aantal deelnemers';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/english/translations_lang.php b/src/application/language/english/translations_lang.php
index 066223ca..f2d7a84f 100755
--- a/src/application/language/english/translations_lang.php
+++ b/src/application/language/english/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = 'Extra working day';
+$lang['extra_periods'] = 'Extra working days';
+$lang['extra_periods_hint'] = 'Add a working day outside the working plan.';
+$lang['new_extra_period_title'] = 'New working day';
+$lang['extra_period_saved'] = 'New working day saved successfully!';
+$lang['add_extra_periods_during_each_day'] = 'Add working days outside the working plan.';
+$lang['add_extra_period'] = 'Add a working day';
\ No newline at end of file
diff --git a/src/application/language/finnish/translations_lang.php b/src/application/language/finnish/translations_lang.php
index 7ec7e8e3..95348b0c 100755
--- a/src/application/language/finnish/translations_lang.php
+++ b/src/application/language/finnish/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/french/translations_lang.php b/src/application/language/french/translations_lang.php
index 0be876db..9d81812f 100755
--- a/src/application/language/french/translations_lang.php
+++ b/src/application/language/french/translations_lang.php
@@ -280,3 +280,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/german/translations_lang.php b/src/application/language/german/translations_lang.php
index 365022bb..dbe077db 100755
--- a/src/application/language/german/translations_lang.php
+++ b/src/application/language/german/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexibel';
$lang['fixed'] = 'Fest';
$lang['attendants_number'] = 'Begleiternummer';
$lang['reset_working_plan'] = 'Setzen Sie das Arbeitsplan zu die Standard Werte.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/greek/translations_lang.php b/src/application/language/greek/translations_lang.php
index 741a6ad4..5f6cd527 100755
--- a/src/application/language/greek/translations_lang.php
+++ b/src/application/language/greek/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Ευέλικτος';
$lang['fixed'] = 'Σταθερός';
$lang['attendants_number'] = 'Αριθμός Παραστατών';
$lang['reset_working_plan'] = 'Επαναρυθμήστε το πλάνο εργασίας στις αρχικές του τιμές.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/hindi/translations_lang.php b/src/application/language/hindi/translations_lang.php
index a69e2b4e..b7a1f232 100755
--- a/src/application/language/hindi/translations_lang.php
+++ b/src/application/language/hindi/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/hungarian/translations_lang.php b/src/application/language/hungarian/translations_lang.php
index fb55ae82..002ad83a 100755
--- a/src/application/language/hungarian/translations_lang.php
+++ b/src/application/language/hungarian/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/italian/translations_lang.php b/src/application/language/italian/translations_lang.php
index 5203bd2f..d190717e 100755
--- a/src/application/language/italian/translations_lang.php
+++ b/src/application/language/italian/translations_lang.php
@@ -288,3 +288,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = 'Giorno extra';
+$lang['extra_periods'] = 'Giorno Extra';
+$lang['extra_periods_hint'] = 'Aggiungi una giornata lavorativa al di fuori del piano di lavoro.';
+$lang['new_extra_period_title'] = 'Nuova giornata lavorativa';
+$lang['extra_period_saved'] = 'Giornata lavorativa salvata con successo!';
+$lang['add_extra_periods_during_each_day'] = 'Aggiungi giornate lavorative al di fuori del piano di lavoro.';
+$lang['add_extra_period'] = 'Aggiungi giornata lavorativa';
\ No newline at end of file
diff --git a/src/application/language/japanese/translations_lang.php b/src/application/language/japanese/translations_lang.php
index 78b5e48a..c39601a7 100755
--- a/src/application/language/japanese/translations_lang.php
+++ b/src/application/language/japanese/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/luxembourgish/translations_lang.php b/src/application/language/luxembourgish/translations_lang.php
index ab116abe..526f9eb6 100755
--- a/src/application/language/luxembourgish/translations_lang.php
+++ b/src/application/language/luxembourgish/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/polish/translations_lang.php b/src/application/language/polish/translations_lang.php
index bcdb5d62..4cf17336 100755
--- a/src/application/language/polish/translations_lang.php
+++ b/src/application/language/polish/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/portuguese-br/translations_lang.php b/src/application/language/portuguese-br/translations_lang.php
index 5d47d75a..a9019e1f 100755
--- a/src/application/language/portuguese-br/translations_lang.php
+++ b/src/application/language/portuguese-br/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/portuguese/translations_lang.php b/src/application/language/portuguese/translations_lang.php
index df836058..767203fc 100755
--- a/src/application/language/portuguese/translations_lang.php
+++ b/src/application/language/portuguese/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/romanian/translations_lang.php b/src/application/language/romanian/translations_lang.php
index aba0ad53..4aab1f4f 100755
--- a/src/application/language/romanian/translations_lang.php
+++ b/src/application/language/romanian/translations_lang.php
@@ -288,3 +288,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/russian/translations_lang.php b/src/application/language/russian/translations_lang.php
index d51c2c9e..a158cef0 100755
--- a/src/application/language/russian/translations_lang.php
+++ b/src/application/language/russian/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/slovak/translations_lang.php b/src/application/language/slovak/translations_lang.php
index 18a9499f..96de7308 100755
--- a/src/application/language/slovak/translations_lang.php
+++ b/src/application/language/slovak/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexibilný';
$lang['fixed'] = 'Fixný';
$lang['attendants_number'] = 'Počet účastníkov';
$lang['reset_working_plan'] = 'Obnovte pracovný plán späť na predvolené hodnoty.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/spanish/translations_lang.php b/src/application/language/spanish/translations_lang.php
index 237401e9..f500e46a 100755
--- a/src/application/language/spanish/translations_lang.php
+++ b/src/application/language/spanish/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Número de Atenciones';
$lang['reset_working_plan'] = 'Reinicia el plan de trabajo a los valores por defecto.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/language/turkish/translations_lang.php b/src/application/language/turkish/translations_lang.php
index 2d78e152..b5a4881a 100755
--- a/src/application/language/turkish/translations_lang.php
+++ b/src/application/language/turkish/translations_lang.php
@@ -282,3 +282,10 @@ $lang['flexible'] = 'Flexible';
$lang['fixed'] = 'Fixed';
$lang['attendants_number'] = 'Attendants Number';
$lang['reset_working_plan'] = 'Reset the working plan back to the default values.';
+$lang['extra_period'] = '';
+$lang['extra_periods'] = '';
+$lang['extra_periods_hint'] = '';
+$lang['new_extra_period_title'] = '';
+$lang['extra_period_saved'] = '';
+$lang['add_extra_periods_during_each_day'] = '';
+$lang['add_extra_period'] = '';
\ No newline at end of file
diff --git a/src/application/migrations/011_add_user_extra_working_plan.php b/src/application/migrations/011_add_user_extra_working_plan.php
new file mode 100644
index 00000000..24226714
--- /dev/null
+++ b/src/application/migrations/011_add_user_extra_working_plan.php
@@ -0,0 +1,37 @@
+
+ * @copyright Copyright (c) 2013 - 2017, Alex Tselegidis
+ * @license http://opensource.org/licenses/GPL-3.0 - GPLv3
+ * @link http://easyappointments.org
+ * @since v1.2.0
+ * ---------------------------------------------------------------------------- */
+
+class Migration_Add_user_extra_working_plan extends CI_Migration {
+ public function up()
+ {
+ if (!$this->db->field_exists('extra_working_plan', 'ea_user_settings')) {
+ $fields = [
+ 'extra_working_plan' => [
+ 'type' => 'TEXT',
+ 'null' => TRUE,
+ 'default' => '',
+ 'after' => 'working_plan'
+ ]
+ ];
+
+ $this->dbforge->add_column('ea_user_settings', $fields);
+ }
+ }
+
+ public function down()
+ {
+ if (!$this->db->field_exists('extra_working_plan', 'ea_user_settings')) {
+ $this->dbforge->drop_column('ea_user_settings', 'extra_working_plan');
+ }
+ }
+}
diff --git a/src/application/models/Providers_model.php b/src/application/models/Providers_model.php
old mode 100644
new mode 100755
index 9697978e..d1d9a09b
--- a/src/application/models/Providers_model.php
+++ b/src/application/models/Providers_model.php
@@ -600,6 +600,13 @@ class Providers_Model extends CI_Model {
foreach ($settings as $name => $value)
{
+ // Sort in descending order the extra working plan days
+ if ($name == 'extra_working_plan') {
+ $value = json_decode($value, true);
+ // Sort the array and put in reverse order
+ krsort($value);
+ $value = json_encode($value);
+ }
$this->set_setting($name, $value, $provider_id);
}
}
@@ -638,6 +645,86 @@ class Providers_Model extends CI_Model {
}
}
+ /**
+ * Save the provider extra working plan days.
+ *
+ * @param array $extra_period Contains the date and the hours of the extra working plan day.
+ * @param int $provider_id The selected provider record id.
+ *
+ * @return bool Return if the new extra working plan is correctly saved to DB.
+ *
+ * @throws Exception If start time is after the end time.
+ * @throws Exception If $provider_id argument is invalid.
+ */
+ public function set_extra_working_day($extra_period, $provider_id)
+ {
+ // Validate period
+ $dateStart = date('Y-m-d', strtotime($extra_period['start_datetime']));
+ $start = date('H:i',strtotime($extra_period['start_datetime']));
+ $end = date('H:i',strtotime($extra_period['end_datetime']));
+ if ($start > $end)
+ {
+ throw new Exception('Unavailable period start must be prior to end.');
+ }
+
+ // Validate provider record
+ $where_clause = [
+ 'id' => $provider_id,
+ 'id_roles' => $this->db->get_where('ea_roles', ['slug' => DB_SLUG_PROVIDER])->row()->id
+ ];
+
+ if ($this->db->get_where('ea_users', $where_clause)->num_rows() == 0)
+ {
+ throw new Exception('Provider id was not found in database.');
+ }
+
+ // Add record to database.
+ $extra_working_plan = json_decode($this->get_setting('extra_working_plan', $provider_id), true);
+
+ $extra_working_plan[$dateStart] = [
+ 'start' => $start,
+ 'end' => $end,
+ 'breaks' => []
+ ];
+
+ $success = $this->set_setting('extra_working_plan', json_encode($extra_working_plan), $provider_id);
+
+ return $success;
+ }
+
+ /**
+ * Delete a provider extra working plan day.
+ *
+ * @param string $extra_period Contains the date to be deleted from the extra working plan.
+ * @param int $provider_id The selected provider record id.
+ *
+ * @return bool Return if the new extra working plan is correctly deleted from DB.
+ *
+ * @throws Exception If $provider_id argument is invalid.
+ */
+ public function delete_extra_working_day($extra_period, $provider_id)
+ {
+ // Validate provider record
+ $where_clause = [
+ 'id' => $provider_id,
+ 'id_roles' => $this->db->get_where('ea_roles', ['slug' => DB_SLUG_PROVIDER])->row()->id
+ ];
+
+ if ($this->db->get_where('ea_users', $where_clause)->num_rows() == 0)
+ {
+ throw new Exception('Provider id was not found in database.');
+ }
+
+ // Add record to database.
+ $extra_working_plan = json_decode($this->get_setting('extra_working_plan', $provider_id), true);
+
+ unset($extra_working_plan[$extra_period]);
+
+ $success = $this->set_setting('extra_working_plan', json_encode($extra_working_plan), $provider_id);
+
+ return $success;
+ }
+
/**
* Validate Records Username
*
diff --git a/src/application/views/backend/calendar.php b/src/application/views/backend/calendar.php
index b0e0afe6..4e799d2d 100755
--- a/src/application/views/backend/calendar.php
+++ b/src/application/views/backend/calendar.php
@@ -10,6 +10,7 @@
+