[Back] <?php
/** @var $target_date OsWpDateTime */
/** @var $filter array */
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
?>
<div class="le-day-view-wrapper" data-route-name="<?php echo esc_attr(OsRouterHelper::build_route_name('events', 'events_day_view')); ?>">
<div class="le-day-info-section">
<div class="le-day-info">
<div class="le-day-number"><?php echo esc_html($target_date->format('j')); ?></div>
<div class="le-day-month"><?php echo esc_html($target_date->format('M')); ?></div>
</div>
<div class="le-day-filters-wrapper">
<div class="le-day-heading"><?php esc_html_e('Daily Schedule', 'latepoint'); ?></div>
<div class="le-day-filters">
<?php echo OsFormHelper::hidden_field('target_date_string', $target_date->format('Y-m-d')); ?>
<?php echo OsFormHelper::select_field('filter[agent_id]', false, array_merge([['value' => '', 'label' => __('All Agents', 'latepoint')]], OsAgentHelper::get_agents_list()), $filter['agent_id'] ?? ''); ?>
<?php echo OsFormHelper::select_field('filter[service_id]', false, array_merge([['value' => '', 'label' => __('All Services', 'latepoint')]], OsServiceHelper::get_services_list()), $filter['service_id'] ?? ''); ?>
</div>
</div>
<a href="#" class="latepoint-lightbox-close"><i class="latepoint-icon latepoint-icon-x"></i></a>
</div>
<div class="le-day-schedule-wrapper">
<?php
$services_with_resources = [];
$clean_filter = [];
foreach($filter as $filter_key => $filter_value){
if(!empty($filter_value)) $clean_filter[$filter_key] = $filter_value;
}
$services = new OsServiceModel();
$services = $services->should_be_active()->get_results_as_models();
foreach ($services as $service) {
$services_with_resources['service_' . $service->id] = ['model' => $service, 'work_periods' => []];
$booking_request = new \LatePoint\Misc\BookingRequest([
'service_id' => $service->id
]);
$services_with_resources['service_' . $service->id]['resources'] = OsResourceHelper::get_resources_grouped_by_day($booking_request, $target_date);
}
$start_time = 540;
$end_time = 1080;
$min_service_duration = false;
$day_slots = [];
foreach ($services_with_resources as $service_resources) {
if (empty($service_resources['resources'][$target_date->format('Y-m-d')])) continue;
$clean_periods = [];
foreach ($service_resources['resources'][$target_date->format('Y-m-d')] as $resource) {
if(!empty($clean_filter['agent_id']) && $resource->agent_id != $clean_filter['agent_id']) continue;
if(!empty($clean_filter['service_id']) && $resource->service_id != $clean_filter['service_id']) continue;
if(!empty($clean_filter['location_id']) && $resource->location_id != $clean_filter['location_id']) continue;
foreach ($resource->work_time_periods as $time_period) {
$clean_periods[] = $time_period;
}
}
$merged_periods = \LatePoint\Misc\TimePeriod::merge_periods($clean_periods);
foreach ($merged_periods as $time_period) {
if(($time_period->end_time - $time_period->start_time) > 0){
$min_service_duration = $min_service_duration ? min($min_service_duration, ($time_period->end_time - $time_period->start_time)) : $time_period->end_time - $time_period->start_time;
}
$service_box_data = ['model' => $service_resources['model'], 'time_period' => $time_period];
$day_slots[$time_period->start_time][] = $service_box_data;
$start_time = min($start_time, $time_period->start_time);
$end_time = max($end_time, $time_period->end_time);
}
}
ksort($day_slots);
// make sure timeline starts at hour marks
if($start_time % 60 != 0) $start_time = $start_time - ($start_time % 60);
$is_today = $target_date->format('Y-m-d') == OsTimeHelper::today_date('Y-m-d');
$is_day_in_past = $target_date->format('Y-m-d') < OsTimeHelper::today_date('Y-m-d');
echo '<div class="day-schedule-timeslots">';
$hour_height_css = '';
if($min_service_duration && $min_service_duration < 60){
$default_hour_height = 44;
$hour_height = ceil(60 / $min_service_duration) * $default_hour_height;
$hour_height_css = 'style="height: '.esc_attr($hour_height).'px"';
}
for($i = $start_time; $i<$end_time; $i+= 60){
echo '<div class="day-schedule-timeslot-wrapper">';
echo '<div class="day-schedule-timeslot" '.$hour_height_css.'><div class="day-schedule-timeslot-value">'.esc_html(OsTimeHelper::minutes_to_hours_and_minutes($i, null, true, true)).'</div></div>';
echo '</div>';
}
$day_duration = $end_time - $start_time;
foreach($day_slots as $day_slot_services){
foreach($day_slot_services as $day_slot_service){
$slot_duration = $day_slot_service['time_period']->end_time - $day_slot_service['time_period']->start_time;
$start_position = ($day_slot_service['time_period']->start_time - $start_time) / $day_duration * 100;
$height = $slot_duration / $day_duration * 100;
$extra_attrs = 'style="top: '.esc_attr($start_position).'%; height: '.esc_attr($height).'%"';
echo OsEventsHelper::event_service_box_html($day_slot_service['model'], $day_slot_service['time_period'], $clean_filter, $target_date, $extra_attrs);
}
}
echo '</div>';
?>
</div>
</div>