PluginProbe
Booktics – Appointment Booking Calendar for Service Businesses / 1.0.14
Booktics – Appointment Booking Calendar for Service Businesses v1.0.14
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 / base / models / team-member-model.php

team-member-model.php in Booktics – Appointment Booking Calendar for Service Businesses 1.0.14, at base/models/team-member-model.php

124 lines 3.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Booktics\Models;
4
5 use Booktics\Abstracts\User_Model;
6 use Booktics\Team_Member\Services\Team_Member_Availability;
7 use Exception;
8
9 class Team_Member_Model extends User_Model {
10 /**
11 * Store specific user role
12 *
13 * @var string
14 */
15 protected $role = 'booktics_team_member';
16
17 /**
18 * Store specific meta prefix
19 *
20 * @var string
21 */
22 protected $meta_prefix = '_team_member_';
23
24 /**
25 * Store user data
26 *
27 * @var array
28 */
29 protected $fillable = [
30 'id' => '',
31 'display_name' => '',
32 'first_name' => '',
33 'last_name' => '',
34 'user_email' => '',
35 'image' => '',
36 'user_login' => '',
37 'phone' => '',
38 'enable_custom_holiday' => false,
39 'enable_custom_schedule' => false,
40 'role' => [],
41 'status' => '',
42 'services' => [],
43 'workdays' => [],
44 'schedule' => [],
45 'custom' => [],
46 'holiday' => [],
47 'booking_count' => 0,
48 'enable_custom_availability' => false,
49 ];
50
51 /**
52 * Display name attribute
53 *
54 * @param $team_member
55 *
56 * @return string
57 */
58 public function get_display_name_attribute( $team_member ) {
59 return $team_member->first_name . ' ' . $team_member->last_name;
60 }
61
62 /**
63 * Get team member status attribute
64 *
65 * Returns 'pending' if team member status is not active,
66 * otherwise returns current availability status for the current date
67 *
68 * @param object $team_member
69 *
70 * @return string Status of the team member ('active'|'pending')
71 */
72 public function get_status_attribute( $team_member ) {
73 return ( new Team_Member_Availability( $team_member ) )
74 ->get_status( gmdate( 'Y-m-d' ) );
75 }
76
77 /**
78 * workdays attribute
79 *
80 * @param $team_member
81 *
82 * @return array
83 * @throws Exception
84 */
85 public function get_workdays_attribute( $team_member ) {
86 return ( new Team_Member_Availability( $team_member ) )
87 ->get_weekly_schedule( gmdate( 'Y-m-d' ) );
88 }
89
90 /**
91 * email attribute
92 *
93 * @param $team_member
94 *
95 * @return string
96 */
97 public function get_email_attribute( $team_member ) {
98 return $team_member->email ?? $team_member->user_email;
99 }
100
101 /**
102 * Get services attribute
103 *
104 * @param $team_member
105 *
106 * @return object
107 */
108 public function get_schedule_attribute( $team_member ) {
109 return (object) ( $team_member->schedule ?? [] );
110 }
111
112 /**
113 * Get booking count attribute
114 *
115 * Returns the total count of appointments for this team member
116 *
117 * @param object $team_member
118 *
119 * @return int Number of appointments
120 */
121 public function get_booking_count_attribute( $team_member ) {
122 return ( new Appointment_Model() )->get_appointments_count_by_team_member_id( $team_member->id );
123 }
124 }