PluginProbe
Timetics – Appointment Booking Calendar & Scheduling / 1.0.61
Timetics – Appointment Booking Calendar & Scheduling v1.0.61
1.0.61 1.0.60 1.0.59 1.0.58 1.0.57 1.0.56 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.19 1.0.2 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 All 62 releases
timetics / core / reports / api-report.php

api-report.php in Timetics – Appointment Booking Calendar & Scheduling 1.0.61, at core/reports/api-report.php

185 lines 5.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Api reports class
4 *
5 * @package Timetics
6 */
7
8 namespace Timetics\Core\Reports;
9
10 use Timetics\Base\Api;
11 use Timetics\Utils\Singleton;
12
13 /**
14 * Class Api Reports
15 */
16 class Api_Report extends Api {
17 use Singleton;
18
19 /**
20 * Store api namespace
21 *
22 * @var string
23 */
24 protected $namespace = 'timetics/v1';
25
26 /**
27 * Store rest base
28 *
29 * @var string
30 */
31 protected $rest_base = 'reports';
32
33 /**
34 * Register rest routes
35 *
36 * @return void
37 */
38 public function register_routes() {
39 /**
40 * Register route
41 *
42 * @var void
43 */
44 register_rest_route(
45 $this->namespace, $this->rest_base . '/overview', [
46 [
47 'methods' => \WP_REST_Server::CREATABLE,
48 'callback' => [$this, 'get_overview'],
49 'permission_callback' => function () {
50 return current_user_can( 'manage_timetics' );
51 },
52 ],
53 ]
54 );
55 }
56
57 /**
58 * Get overview
59 *
60 * @param WP_Rest_Request
61 *
62 * @return JSON
63 */
64 public function get_overview( $request ) {
65 $input_data = json_decode( $request->get_body(), true );
66
67 /**
68 * Added temporary for leagacy sass. It will remove in future.
69 */
70 $data = apply_filters('timetics/overview/report/get_overview', $this->generate_reports( $input_data ) );
71
72 $response = [
73 'status_code' => 200,
74 'success' => 1,
75 'data' => $data,
76 ];
77
78 return rest_ensure_response( $response );
79 }
80
81 /**
82 * Generate reports based date
83 *
84 * @param array $input_data
85 *
86 * @return array
87 */
88 public function generate_reports( $input_data = [] ) {
89 $reports = [];
90 $default_booking_status = timetics_get_option( 'default_booking_status', 'approved' );
91 if ( $input_data ) {
92 foreach ( $input_data as $data ) {
93 if ( empty( $data['report'] ) || empty( $data['start_date'] ) || empty( $data['end_date'] ) ) {
94 continue;
95 }
96
97 $date_range = [
98 'start' => $data['start_date'],
99 'end' => $data['end_date'],
100 ];
101
102 switch ( $data['report'] ) {
103 case 'total_booking':
104 $total_booking = timetics_count_posts( [
105 'post_type' => 'timetics-booking',
106 'post_status' => $default_booking_status,
107 'date_range' => $date_range,
108 ] );
109
110 $reports['total_booking'] = $total_booking;
111 break;
112
113 case 'total_earning':
114 $total_earning = number_format( timetics_get_total_sale( [
115 'post_type' => 'timetics-booking',
116 'post_status' => $default_booking_status,
117 'date_range' => $date_range,
118 ] ), 2 );
119
120 $reports['total_earning'] = $total_earning;
121 break;
122
123 case 'total_customer':
124 $total_customer = timetics_count_users( [
125 'role' => 'timetics-customer',
126 'date_range' => $date_range,
127 ] );
128
129 $reports['total_customer'] = $total_customer;
130 break;
131
132 case 'booking_reports':
133 $reports['booking_reports'] = $this->generate_date_range_reports( $date_range );
134 break;
135 }
136 }
137 }
138
139 return $reports;
140 }
141
142 /**
143 * Generate report for a date range and get every date reports
144 *
145 * @return array
146 */
147 public function generate_date_range_reports( $date ) {
148 $start_date = $date['start'];
149 $end_date = $date['end'];
150
151 $current_date = strtotime( $start_date );
152 $end_timestamp = strtotime( $end_date );
153 $default_booking_status = timetics_get_option( 'default_booking_status', 'approved' );
154 $reports = [];
155
156 while ( $current_date <= $end_timestamp ) {
157 $current_report_date = gmdate( 'Y-m-d', $current_date );
158
159 $date_range = [
160 'start' => $current_report_date,
161 'end' => $current_report_date,
162 ];
163
164 $booking_report = [
165 'cancel' => timetics_count_posts( [
166 'post_type' => 'timetics-booking',
167 'post_status' => 'cancel',
168 'date_range' => $date_range,
169 ] ),
170 'completed' => timetics_count_posts( [
171 'post_type' => 'timetics-booking',
172 'post_status' => $default_booking_status,
173 'date_range' => $date_range,
174 ] ),
175 ];
176
177 $reports[$current_report_date] = $booking_report;
178
179 $current_date = strtotime( '+1 day', $current_date );
180 }
181
182 return $reports;
183 }
184 }
185