PluginProbe
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce / 1.3.13
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce v1.3.13
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 1.3.7 All 143 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.3.13, at modules/hrm/includes/api/class-hrm-reports-controller.php

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