PluginProbe
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce / 1.6.7
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce v1.6.7
1.17.10 1.17.9 1.17.8 1.17.7 1.17.6 1.17.5 1.17.4 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.3.0 1.3.1 1.3.11 1.3.12 1.3.13 1.3.14 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 All 144 releases
erp / modules / hrm / includes / api / class-hrm-reports-controller.php

class-hrm-reports-controller.php in ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce 1.6.7, at modules/hrm/includes/api/class-hrm-reports-controller.php

324 lines 11.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WeDevs\ERP\HRM\API;
4
5 use WeDevs\ERP\API\REST_Controller;
6 use WP_Error;
7 use WP_REST_Response;
8 use WP_REST_Server;
9
10 class HRM_Reports_Controller extends REST_Controller {
11
12 /**
13 * Endpoint namespace.
14 *
15 * @var string
16 */
17 protected $namespace = 'erp/v1';
18
19 /**
20 * Route base.
21 *
22 * @var string
23 */
24 protected $rest_base = 'hrm/reports';
25
26 /**
27 * Register the routes for the objects of the controller.
28 */
29 public function register_routes() {
30 register_rest_route( $this->namespace, '/' . $this->rest_base . '/age-profiles', [
31 [
32 'methods' => WP_REST_Server::READABLE,
33 'callback' => [ $this, 'get_age_profiles' ],
34 'permission_callback' => function ( $request ) {
35 return current_user_can( 'erp_hr_manager' );
36 },
37 ],
38 ] );
39
40 register_rest_route( $this->namespace, '/' . $this->rest_base . '/gender-profiles', [
41 [
42 'methods' => WP_REST_Server::READABLE,
43 'callback' => [ $this, 'get_gender_profiles' ],
44 'permission_callback' => function ( $request ) {
45 return current_user_can( 'erp_hr_manager' );
46 },
47 ],
48 ] );
49
50 register_rest_route( $this->namespace, '/' . $this->rest_base . '/head-counts', [
51 [
52 'methods' => WP_REST_Server::READABLE,
53 'callback' => [ $this, 'get_head_counts' ],
54 'args' => $this->get_collection_params(),
55 'permission_callback' => function ( $request ) {
56 return current_user_can( 'erp_hr_manager' );
57 },
58 ],
59 ] );
60
61 register_rest_route( $this->namespace, '/' . $this->rest_base . '/salary-histories', [
62 [
63 'methods' => WP_REST_Server::READABLE,
64 'callback' => [ $this, 'get_salary_histories' ],
65 'args' => $this->get_collection_params(),
66 'permission_callback' => function ( $request ) {
67 return current_user_can( 'erp_hr_manager' );
68 },
69 ],
70 ] );
71
72 register_rest_route( $this->namespace, '/' . $this->rest_base . '/year-of-services', [
73 [
74 'methods' => WP_REST_Server::READABLE,
75 'callback' => [ $this, 'get_year_of_services' ],
76 'args' => $this->get_collection_params(),
77 'permission_callback' => function ( $request ) {
78 return current_user_can( 'erp_hr_manager' );
79 },
80 ],
81 ] );
82 }
83
84 /**
85 * Get a collection of age profiles
86 *
87 * @param WP_REST_Request $request
88 *
89 * @return WP_Error|WP_REST_Response
90 */
91 public function get_age_profiles( $request ) {
92 $args = [
93 'number' => $request['per_page'],
94 'offset' => ( $request['per_page'] * ( $request['page'] - 1 ) ),
95 'dimension' => isset( $request['dimension'] ) ? $request['dimension'] : 'general',
96 ];
97
98 $employees = new \WeDevs\ERP\HRM\Models\Employee();
99
100 if ( $args['dimension'] == 'department' ) {
101 $departments = erp_hr_get_departments();
102
103 $emp_all_data = [];
104
105 foreach ( $departments as $department ) {
106 $emp_by_dept = $employees->where( 'department', $department->id )->get();
107 $breakdown = get_employee_breakdown_by_age( $emp_by_dept );
108
109 $emp_all_data[ $department->name ] = $breakdown;
110 }
111 } else {
112 $emp_all = $employees->get();
113 $emp_all_data = get_employee_breakdown_by_age( $emp_all );
114 }
115
116 $formated_items = $emp_all_data;
117
118 $response = rest_ensure_response( $formated_items );
119 $response = $this->format_collection_response( $response, $request, 0 );
120
121 return $response;
122 }
123
124 /**
125 * Get a collection of gender profiles
126 *
127 * @param WP_REST_Request $request
128 *
129 * @return WP_Error|WP_REST_Response
130 */
131 public function get_gender_profiles( $request ) {
132 $args = [
133 'number' => $request['per_page'],
134 'offset' => ( $request['per_page'] * ( $request['page'] - 1 ) ),
135 'dimension' => isset( $request['dimension'] ) ? $request['dimension'] : 'general',
136 ];
137
138 if ( $args['dimension'] == 'department' ) {
139 $departments = erp_hr_get_departments();
140
141 $gender_ratio = [];
142
143 foreach ( $departments as $department ) {
144 $count_by_dept = erp_hr_get_gender_count( $department->id );
145
146 $gender_ratio[ $department->name ] = $count_by_dept;
147 }
148 } else {
149 $gender_ratio = erp_hr_get_gender_ratio_data();
150 }
151
152 $formated_items = $gender_ratio;
153
154 $response = rest_ensure_response( $formated_items );
155 $response = $this->format_collection_response( $response, $request, 0 );
156
157 return $response;
158 }
159
160 /**
161 * Get a collection of head counts
162 *
163 * @since 1.0.0
164 *
165 * @param $request
166 *
167 * @return mixed|object|WP_Error|WP_REST_Response
168 */
169 public function get_head_counts( $request ) {
170 $args = [
171 'number' => $request['per_page'],
172 'offset' => ( $request['per_page'] * ( $request['page'] - 1 ) ),
173 'type' => isset( $request['type'] ) ? $request['type'] : 'summary',
174 ];
175
176 if ( ! in_array( $request['type'], [ 'summary', 'list' ] ) ) {
177 return new WP_Error( 'rest_performance_invalid_type', __( 'Invalid Type received' ), [ 'status' => 400 ] );
178 }
179
180 $formatted_items = [];
181 $total = 0;
182
183 if ( $args['type'] == 'summary' ) {
184 $this_month = current_time( 'Y-m-01' );
185 $chart_data = [];
186
187 for ( $i = 0; $i <= 11; $i ++ ) {
188 $month = date( 'Y-m', strtotime( $this_month . " -$i months" ) );
189 $js_month = strtotime( $month . '-01' ) * 1000;
190 $count = erp_hr_get_headcount( $month, '', 'month' );
191
192 $chart_data[] = (object) [
193 'month' => $month,
194 'count' => $count,
195 ];
196 }
197 $formatted_items = $chart_data;
198 $total = count( $chart_data );
199 } else {
200 global $wpdb;
201
202 $user_ids = $wpdb->get_col( "SELECT user_id FROM {$wpdb->prefix}erp_hr_employees LIMIT {$args['number']} OFFSET {$args['offset']}" );
203 $total = (int) $wpdb->get_var( "SELECT count(*) FROM {$wpdb->prefix}erp_hr_employees" );
204
205 foreach ( $user_ids as $user_id ) {
206 $data = [];
207 $employee = new \WeDevs\ERP\HRM\Employee( intval( $user_id ) );
208 $data['id'] = $user_id;
209 $data['name'] = $employee->get_full_name();
210 $data['avatar_url'] = $employee->get_avatar_url( 80 );
211 $data['hiring_date'] = $employee->hiring_date;
212 $data['job_title'] = $employee->get_job_title();
213 $data['department'] = $employee->get_department_title();
214 $data['location'] = $employee->get_work_location();
215 $data['status'] = $employee->get_status();
216 $formatted_items[] = $data;
217 }
218 }
219
220 $response = rest_ensure_response( $formatted_items );
221 $response = $this->format_collection_response( $response, $request, $total );
222
223 return $response;
224 }
225
226 /**
227 * Get a collection of salary histories
228 *
229 * @param WP_REST_Request $request
230 *
231 * @return WP_Error|WP_REST_Response
232 */
233 public function get_salary_histories( $request ) {
234 $args = [
235 'number' => $request['per_page'],
236 'offset' => ( $request['per_page'] * ( $request['page'] - 1 ) ),
237 ];
238
239 global $wpdb;
240
241 $user_ids = $wpdb->get_col( "SELECT user_id FROM {$wpdb->prefix}erp_hr_employees LIMIT {$args['number']} OFFSET {$args['offset']}" );
242 $total_items = (int) $wpdb->get_var( "SELECT count(*) FROM {$wpdb->prefix}erp_hr_employees" );
243
244 $date_format = get_option( 'date_format' );
245
246 $formated_items = [];
247
248 foreach ( $user_ids as $user_id ) {
249 $employee = new \WeDevs\ERP\HRM\Employee( intval( $user_id ) );
250 $compensations = $employee->get_job_histories( 'compensation' );
251
252 $data = [];
253
254 if ( !empty( $compensations['compensation'] ) ) {
255 foreach ( $compensations['compensation'] as $compensation ) {
256 $data[] = [
257 'employee_id' => (int) esc_attr( $employee->id ),
258 'employee_name' => $employee->display_name,
259 'avatar_url' => $employee->get_avatar_url( 80 ),
260 'date' => date( $date_format, strtotime( esc_attr( $compensation['date'] ) ) ),
261 'pay_rate' => (int) esc_attr( $compensation['pay_rate'] ),
262 'pay_type' => esc_attr( $compensation['pay_type'] ),
263 ];
264 }
265 }
266
267 if ( $data ) {
268 $formated_items[] = $data;
269 }
270 }
271 $response = rest_ensure_response( $formated_items );
272 $response = $this->format_collection_response( $response, $request, $total_items );
273
274 return $response;
275 }
276
277 /**
278 * Get a collection of year of services
279 *
280 * @param WP_REST_Request $request
281 *
282 * @return WP_Error|WP_REST_Response
283 */
284 public function get_year_of_services( $request ) {
285 $args = [
286 'number' => $request['per_page'],
287 'offset' => ( $request['per_page'] * ( $request['page'] - 1 ) ),
288 ];
289
290 global $wpdb;
291
292 $user_ids = $wpdb->get_col( "SELECT user_id FROM {$wpdb->prefix}erp_hr_employees WHERE status = 'active' LIMIT {$args['number']} OFFSET {$args['offset']}" );
293
294 $total_items = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}erp_hr_employees WHERE status = 'active'" );
295
296 $hire_data = [];
297
298 foreach ( $user_ids as $user_id ) {
299 $employee = new \WeDevs\ERP\HRM\Employee( intval( $user_id ) );
300 $date = date_parse_from_format( 'Y-m-d', $employee->hiring_date );
301 $month = $date['month'];
302 $day = $date['day'];
303
304 if ( $month > 0 ) {
305 $hire_data[ $month ][ $day ][] = [
306 'employee_id' => (int) $employee->id,
307 'employee_name' => $employee->display_name,
308 'hiring_date' => $employee->hiring_date,
309 'job_age' => date( 'Y', time() ) - date( 'Y', strtotime( $employee->hiring_date ) ),
310 ];
311 }
312 }
313
314 ksort( $hire_data );
315
316 $formated_items = $hire_data;
317
318 $response = rest_ensure_response( $formated_items );
319 $response = $this->format_collection_response( $response, $request, $total_items );
320
321 return $response;
322 }
323 }
324