mirror of
https://github.com/alextselegidis/easyappointments.git
synced 2024-11-26 01:43:06 +03:00
Fixed provider availability generation bug.
This commit is contained in:
parent
919c3da18d
commit
3e98961e7e
3 changed files with 70 additions and 56 deletions
|
@ -480,7 +480,7 @@ class Appointments extends CI_Controller {
|
||||||
$working_plan = json_decode($this->providers_model->get_setting('working_plan', $provider_id), true);
|
$working_plan = json_decode($this->providers_model->get_setting('working_plan', $provider_id), true);
|
||||||
|
|
||||||
$where_clause = array(
|
$where_clause = array(
|
||||||
'DATE(start_datetime)' => date('Y-m-d', strtotime($selected_date)),
|
//'DATE(start_datetime)' => date('Y-m-d', strtotime($selected_date)),
|
||||||
'id_users_provider' => $provider_id
|
'id_users_provider' => $provider_id
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -542,10 +542,10 @@ class Appointments extends CI_Controller {
|
||||||
foreach($reserved_appointments as $appointment) {
|
foreach($reserved_appointments as $appointment) {
|
||||||
foreach($available_periods_with_appointments as $index => &$period) {
|
foreach($available_periods_with_appointments as $index => &$period) {
|
||||||
|
|
||||||
$a_start = date('H:i', strtotime($appointment['start_datetime']));
|
$a_start = strtotime($appointment['start_datetime']);
|
||||||
$a_end = date('H:i', strtotime($appointment['end_datetime']));
|
$a_end = strtotime($appointment['end_datetime']);
|
||||||
$p_start = date('H:i', strtotime($period['start']));
|
$p_start = strtotime($selected_date . ' ' . $period['start']);
|
||||||
$p_end = date('H:i', strtotime($period['end']));
|
$p_end = strtotime($selected_date . ' ' .$period['end']);
|
||||||
|
|
||||||
if ($a_start <= $p_start && $a_end <= $p_end && $a_end <= $p_start) {
|
if ($a_start <= $p_start && $a_end <= $p_end && $a_end <= $p_start) {
|
||||||
// The appointment does not belong in this time period, so we
|
// The appointment does not belong in this time period, so we
|
||||||
|
@ -553,25 +553,25 @@ class Appointments extends CI_Controller {
|
||||||
} else if ($a_start <= $p_start && $a_end <= $p_end && $a_end >= $p_start) {
|
} else if ($a_start <= $p_start && $a_end <= $p_end && $a_end >= $p_start) {
|
||||||
// The appointment starts before the period and finishes somewhere inside.
|
// The appointment starts before the period and finishes somewhere inside.
|
||||||
// We will need to break this period and leave the available part.
|
// We will need to break this period and leave the available part.
|
||||||
$period['start'] = $a_end;
|
$period['start'] = date('H:i', $a_end);
|
||||||
|
|
||||||
} else if ($a_start >= $p_start && $a_end <= $p_end) {
|
} else if ($a_start >= $p_start && $a_end <= $p_end) {
|
||||||
// The appointment is inside the time period, so we will split the period
|
// The appointment is inside the time period, so we will split the period
|
||||||
// into two new others.
|
// into two new others.
|
||||||
unset($available_periods_with_appointments[$index]);
|
unset($available_periods_with_appointments[$index]);
|
||||||
$available_periods_with_appointments[] = array(
|
$available_periods_with_appointments[] = array(
|
||||||
'start' => $p_start,
|
'start' => date('H:i', $p_start),
|
||||||
'end' => $a_start
|
'end' => date('H:i', $a_start)
|
||||||
);
|
);
|
||||||
$available_periods_with_appointments[] = array(
|
$available_periods_with_appointments[] = array(
|
||||||
'start' => $a_end,
|
'start' => date('H:i', $a_end),
|
||||||
'end' => $p_end
|
'end' => date('H:i', $p_end)
|
||||||
);
|
);
|
||||||
|
|
||||||
} else if ($a_start >= $p_start && $a_end >= $p_start && $a_start <= $p_end) {
|
} else if ($a_start >= $p_start && $a_end >= $p_start && $a_start <= $p_end) {
|
||||||
// The appointment starts in the period and finishes out of it. We will
|
// The appointment starts in the period and finishes out of it. We will
|
||||||
// need to remove the time that is taken from the appointment.
|
// need to remove the time that is taken from the appointment.
|
||||||
$period['end'] = $a_start;
|
$period['end'] = date('H:i', $a_start);
|
||||||
|
|
||||||
} else if ($a_start >= $p_start && $a_end >= $p_end && $a_start >= $p_end) {
|
} else if ($a_start >= $p_start && $a_end >= $p_end && $a_start >= $p_end) {
|
||||||
// The appointment does not belong in the period so do not change anything.
|
// The appointment does not belong in the period so do not change anything.
|
||||||
|
|
|
@ -53,8 +53,8 @@ class Backend_api extends CI_Controller {
|
||||||
// Get appointments
|
// Get appointments
|
||||||
$where_clause = array(
|
$where_clause = array(
|
||||||
$where_id => $_POST['record_id'],
|
$where_id => $_POST['record_id'],
|
||||||
'start_datetime >=' => $_POST['start_date'],
|
//'start_datetime >=' => $_POST['start_date'],
|
||||||
'end_datetime <=' => $_POST['end_date'],
|
//'end_datetime <=' => $_POST['end_date'],
|
||||||
'is_unavailable' => FALSE
|
'is_unavailable' => FALSE
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -70,8 +70,8 @@ class Backend_api extends CI_Controller {
|
||||||
if ($_POST['filter_type'] == FILTER_TYPE_PROVIDER) {
|
if ($_POST['filter_type'] == FILTER_TYPE_PROVIDER) {
|
||||||
$where_clause = array(
|
$where_clause = array(
|
||||||
$where_id => $_POST['record_id'],
|
$where_id => $_POST['record_id'],
|
||||||
'start_datetime >=' => $_POST['start_date'],
|
//'start_datetime >=' => $_POST['start_date'],
|
||||||
'end_datetime <=' => $_POST['end_date'],
|
//'end_datetime <=' => $_POST['end_date'],
|
||||||
'is_unavailable' => TRUE
|
'is_unavailable' => TRUE
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -989,7 +989,7 @@ var BackendCalendar = {
|
||||||
* @param {object} $calendar The calendar jQuery object.
|
* @param {object} $calendar The calendar jQuery object.
|
||||||
* @param {int} recordId The selected record id.
|
* @param {int} recordId The selected record id.
|
||||||
* @param {string} filterType The filter type, could be either FILTER_TYPE_PROVIDER
|
* @param {string} filterType The filter type, could be either FILTER_TYPE_PROVIDER
|
||||||
* or FILTER_TYPE_SERVICE
|
* or FILTER_TYPE_SERVICE.
|
||||||
* @param {date} startDate Visible start date of the calendar.
|
* @param {date} startDate Visible start date of the calendar.
|
||||||
* @param {type} endDate Visible end date of the calendar.
|
* @param {type} endDate Visible end date of the calendar.
|
||||||
*/
|
*/
|
||||||
|
@ -1045,7 +1045,37 @@ var BackendCalendar = {
|
||||||
var selDayName = $calendar.fullCalendar('getView')
|
var selDayName = $calendar.fullCalendar('getView')
|
||||||
.start.toString('dddd').toLowerCase();
|
.start.toString('dddd').toLowerCase();
|
||||||
|
|
||||||
if (workingPlan[selDayName] == null) return; // go to next loop
|
// Add custom unavailable periods.
|
||||||
|
$.each(response.unavailables, function(index, unavailable) {
|
||||||
|
var unavailablePeriod = {
|
||||||
|
'title': EALang['unavailable'] + ' <br><small>' + ((unavailable.notes.length > 30)
|
||||||
|
? unavailable.notes.substring(0, 30) + '...'
|
||||||
|
: unavailable.notes) + '</small>',
|
||||||
|
'start': Date.parse(unavailable.start_datetime),
|
||||||
|
'end': Date.parse(unavailable.end_datetime),
|
||||||
|
'allDay': false,
|
||||||
|
'color': '#879DB4',
|
||||||
|
'editable': true,
|
||||||
|
'className': 'fc-unavailable fc-custom',
|
||||||
|
'data': unavailable
|
||||||
|
};
|
||||||
|
$calendar.fullCalendar('renderEvent', unavailablePeriod, false);
|
||||||
|
});
|
||||||
|
|
||||||
|
// non working day
|
||||||
|
if (workingPlan[selDayName] == null) {
|
||||||
|
unavailablePeriod = {
|
||||||
|
'title': EALang['not_working'],
|
||||||
|
'start': GeneralFunctions.clone($calendar.fullCalendar('getView').start),
|
||||||
|
'end': GeneralFunctions.clone($calendar.fullCalendar('getView').end),
|
||||||
|
'allDay': false,
|
||||||
|
'color': '#BEBEBE',
|
||||||
|
'editable': false,
|
||||||
|
'className': 'fc-unavailable'
|
||||||
|
};
|
||||||
|
$calendar.fullCalendar('renderEvent', unavailablePeriod, true);
|
||||||
|
return; // go to next loop
|
||||||
|
}
|
||||||
|
|
||||||
// Add unavailable period before work starts.
|
// Add unavailable period before work starts.
|
||||||
var calendarDateStart = $calendar.fullCalendar('getView').start;
|
var calendarDateStart = $calendar.fullCalendar('getView').start;
|
||||||
|
@ -1105,36 +1135,18 @@ var BackendCalendar = {
|
||||||
$calendar.fullCalendar('renderEvent', unavailablePeriod, false);
|
$calendar.fullCalendar('renderEvent', unavailablePeriod, false);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Add custom unavailable periods.
|
|
||||||
$.each(response.unavailables, function(index, unavailable) {
|
|
||||||
var unavailablePeriod = {
|
|
||||||
'title': EALang['unavailable'] + ' <br><small>' + ((unavailable.notes.length > 30)
|
|
||||||
? unavailable.notes.substring(0, 30) + '...'
|
|
||||||
: unavailable.notes) + '</small>',
|
|
||||||
'start': Date.parse(unavailable.start_datetime),
|
|
||||||
'end': Date.parse(unavailable.end_datetime),
|
|
||||||
'allDay': false,
|
|
||||||
'color': '#879DB4',
|
|
||||||
'editable': true,
|
|
||||||
'className': 'fc-unavailable fc-custom',
|
|
||||||
'data': unavailable
|
|
||||||
};
|
|
||||||
$calendar.fullCalendar('renderEvent', unavailablePeriod, false);
|
|
||||||
});
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'agendaWeek':
|
case 'agendaWeek':
|
||||||
var currDateStart = GeneralFunctions.clone($calendar.fullCalendar('getView').start);
|
var currDateStart = GeneralFunctions.clone($calendar.fullCalendar('getView').start);
|
||||||
var currDateEnd = GeneralFunctions.clone(currDateStart).addDays(1);
|
var currDateEnd = GeneralFunctions.clone(currDateStart).addDays(1);
|
||||||
|
|
||||||
$.each(workingPlan, function(index, workingDay) {
|
|
||||||
// Add custom unavailable periods (they are always displayed
|
// Add custom unavailable periods (they are always displayed
|
||||||
// on the calendar, even if the provider won't work on that day).
|
// on the calendar, even if the provider won't work on that day).
|
||||||
$.each(response.unavailables, function(index, unavailable) {
|
$.each(response.unavailables, function(index, unavailable) {
|
||||||
if (currDateStart.toString('dd/MM/yyyy')
|
//if (currDateStart.toString('dd/MM/yyyy')
|
||||||
=== Date.parse(unavailable.start_datetime).toString('dd/MM/yyyy')) {
|
// === Date.parse(unavailable.start_datetime).toString('dd/MM/yyyy')) {
|
||||||
var unavailablePeriod = {
|
unavailablePeriod = {
|
||||||
'title': EALang['unavailable'] + ' <br><small>' + ((unavailable.notes.length > 30)
|
'title': EALang['unavailable'] + ' <br><small>' + ((unavailable.notes.length > 30)
|
||||||
? unavailable.notes.substring(0, 30) + '...'
|
? unavailable.notes.substring(0, 30) + '...'
|
||||||
: unavailable.notes) + '</small>',
|
: unavailable.notes) + '</small>',
|
||||||
|
@ -1147,9 +1159,11 @@ var BackendCalendar = {
|
||||||
'data': unavailable
|
'data': unavailable
|
||||||
};
|
};
|
||||||
$calendar.fullCalendar('renderEvent', unavailablePeriod, false);
|
$calendar.fullCalendar('renderEvent', unavailablePeriod, false);
|
||||||
}
|
//}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$.each(workingPlan, function(index, workingDay) {
|
||||||
|
|
||||||
if (workingDay == null) {
|
if (workingDay == null) {
|
||||||
// Add a full day unavailable event.
|
// Add a full day unavailable event.
|
||||||
unavailablePeriod = {
|
unavailablePeriod = {
|
||||||
|
|
Loading…
Reference in a new issue