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 / 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 includes/api/class-hrm-reports-controller.php

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