PluginProbe
Booktics – Appointment Booking Calendar for Service Businesses / 1.0.21
Booktics – Appointment Booking Calendar for Service Businesses v1.0.21
1.0.29 1.0.28 1.0.27 1.0.26 1.0.25 1.0.24 1.0.23 1.0.22 1.0.21 1.0.20 1.0.19 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.2 1.0.3 All 31 releases
booktics / core / appointment / schedule / merged-service-default-strategy.php

merged-service-default-strategy.php in Booktics – Appointment Booking Calendar for Service Businesses 1.0.21, at core/appointment/schedule/merged-service-default-strategy.php

65 lines 2.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Booktics\Appointment\Schedule;
3
4 /**
5 * Strategy class for generating merged time slots based on service and default schedules.
6 *
7 * @package Booktics\Appointment\Schedule
8 */
9 class Merged_Service_Default_Strategy implements Time_Slot_Strategy {
10 /**
11 * Generates time slots by merging service and default schedule entries.
12 *
13 * @param Schedule_Entry|null $service_entry The service schedule entry
14 * @param Schedule_Entry|null $team_entry The team schedule entry
15 * @param Schedule_Entry|null $default_entry The default schedule entry
16 * @param Time_Slot_Manager $manager The time slot manager instance
17 * @param \DateTime $date The date for which to generate slots
18 *
19 * @return array Array of Time_Slot objects representing available time slots
20 */
21 public function generate_slots(
22 array $service_entries,
23 array $team_entries,
24 array $default_entries,
25 Time_Slot_Manager $manager,
26 \DateTime $date
27 ): array {
28 $slots = array();
29 foreach ( $service_entries as $service_entry ) {
30 if ( ! $service_entry || $service_entry->is_holiday() ) {
31 continue;
32 }
33 foreach ( $default_entries as $default_entry ) {
34 if ( ! $default_entry || $default_entry->is_holiday() ) {
35 continue;
36 }
37 $service_start = strtotime( $service_entry->get_start_time() );
38 $service_end = strtotime( $service_entry->get_end_time() );
39 $default_start = strtotime( $default_entry->get_start_time() );
40 $default_end = strtotime( $default_entry->get_end_time() );
41
42 $start_time = max( $service_start, $default_start );
43 $end_time = min( $service_end, $default_end );
44
45 if ( $start_time >= $end_time ) {
46 continue;
47 }
48
49 $slot_length = $manager->get_slot_length() * 60;
50 $before_buffer = $manager->get_before_buffer_time() * 60;
51 $after_buffer = $manager->get_after_buffer_time() * 60;
52 $gap = $before_buffer + $after_buffer;
53 $current_start = $start_time;
54 while ( $current_start + $slot_length <= $end_time ) {
55 $slot_start = gmdate( 'H:i', $current_start );
56 $slot_end = gmdate( 'H:i', $current_start + $slot_length );
57 $slots[] = new Time_Slot( $slot_start, $slot_end, true );
58 $current_start += $slot_length + $gap;
59 }
60 }
61 }
62 return $slots;
63 }
64 }
65