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);
|
||||
|
||||
$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
|
||||
);
|
||||
|
||||
|
@ -542,10 +542,10 @@ class Appointments extends CI_Controller {
|
|||
foreach($reserved_appointments as $appointment) {
|
||||
foreach($available_periods_with_appointments as $index => &$period) {
|
||||
|
||||
$a_start = date('H:i', strtotime($appointment['start_datetime']));
|
||||
$a_end = date('H:i', strtotime($appointment['end_datetime']));
|
||||
$p_start = date('H:i', strtotime($period['start']));
|
||||
$p_end = date('H:i', strtotime($period['end']));
|
||||
$a_start = strtotime($appointment['start_datetime']);
|
||||
$a_end = strtotime($appointment['end_datetime']);
|
||||
$p_start = strtotime($selected_date . ' ' . $period['start']);
|
||||
$p_end = strtotime($selected_date . ' ' .$period['end']);
|
||||
|
||||
if ($a_start <= $p_start && $a_end <= $p_end && $a_end <= $p_start) {
|
||||
// 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) {
|
||||
// The appointment starts before the period and finishes somewhere inside.
|
||||
// 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) {
|
||||
// The appointment is inside the time period, so we will split the period
|
||||
// into two new others.
|
||||
unset($available_periods_with_appointments[$index]);
|
||||
$available_periods_with_appointments[] = array(
|
||||
'start' => $p_start,
|
||||
'end' => $a_start
|
||||
'start' => date('H:i', $p_start),
|
||||
'end' => date('H:i', $a_start)
|
||||
);
|
||||
$available_periods_with_appointments[] = array(
|
||||
'start' => $a_end,
|
||||
'end' => $p_end
|
||||
'start' => date('H:i', $a_end),
|
||||
'end' => date('H:i', $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
|
||||
// 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) {
|
||||
// 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
|
||||
$where_clause = array(
|
||||
$where_id => $_POST['record_id'],
|
||||
'start_datetime >=' => $_POST['start_date'],
|
||||
'end_datetime <=' => $_POST['end_date'],
|
||||
//'start_datetime >=' => $_POST['start_date'],
|
||||
//'end_datetime <=' => $_POST['end_date'],
|
||||
'is_unavailable' => FALSE
|
||||
);
|
||||
|
||||
|
@ -70,8 +70,8 @@ class Backend_api extends CI_Controller {
|
|||
if ($_POST['filter_type'] == FILTER_TYPE_PROVIDER) {
|
||||
$where_clause = array(
|
||||
$where_id => $_POST['record_id'],
|
||||
'start_datetime >=' => $_POST['start_date'],
|
||||
'end_datetime <=' => $_POST['end_date'],
|
||||
//'start_datetime >=' => $_POST['start_date'],
|
||||
//'end_datetime <=' => $_POST['end_date'],
|
||||
'is_unavailable' => TRUE
|
||||
);
|
||||
|
||||
|
|
|
@ -989,7 +989,7 @@ var BackendCalendar = {
|
|||
* @param {object} $calendar The calendar jQuery object.
|
||||
* @param {int} recordId The selected record id.
|
||||
* @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 {type} endDate Visible end date of the calendar.
|
||||
*/
|
||||
|
@ -1045,7 +1045,37 @@ var BackendCalendar = {
|
|||
var selDayName = $calendar.fullCalendar('getView')
|
||||
.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.
|
||||
var calendarDateStart = $calendar.fullCalendar('getView').start;
|
||||
|
@ -1105,36 +1135,18 @@ var BackendCalendar = {
|
|||
$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;
|
||||
|
||||
case 'agendaWeek':
|
||||
var currDateStart = GeneralFunctions.clone($calendar.fullCalendar('getView').start);
|
||||
var currDateEnd = GeneralFunctions.clone(currDateStart).addDays(1);
|
||||
|
||||
$.each(workingPlan, function(index, workingDay) {
|
||||
// Add custom unavailable periods (they are always displayed
|
||||
// on the calendar, even if the provider won't work on that day).
|
||||
$.each(response.unavailables, function(index, unavailable) {
|
||||
if (currDateStart.toString('dd/MM/yyyy')
|
||||
=== Date.parse(unavailable.start_datetime).toString('dd/MM/yyyy')) {
|
||||
var unavailablePeriod = {
|
||||
//if (currDateStart.toString('dd/MM/yyyy')
|
||||
// === Date.parse(unavailable.start_datetime).toString('dd/MM/yyyy')) {
|
||||
unavailablePeriod = {
|
||||
'title': EALang['unavailable'] + ' <br><small>' + ((unavailable.notes.length > 30)
|
||||
? unavailable.notes.substring(0, 30) + '...'
|
||||
: unavailable.notes) + '</small>',
|
||||
|
@ -1147,9 +1159,11 @@ var BackendCalendar = {
|
|||
'data': unavailable
|
||||
};
|
||||
$calendar.fullCalendar('renderEvent', unavailablePeriod, false);
|
||||
}
|
||||
//}
|
||||
});
|
||||
|
||||
$.each(workingPlan, function(index, workingDay) {
|
||||
|
||||
if (workingDay == null) {
|
||||
// Add a full day unavailable event.
|
||||
unavailablePeriod = {
|
||||
|
|
Loading…
Reference in a new issue