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.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 / accounting / api / class-rest-api-employees.php

class-rest-api-employees.php in ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce 1.6.7, at modules/accounting/api/class-rest-api-employees.php

424 lines 14.1 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\Accounting\API;
4
5 use WeDevs\ERP\HRM\Employee;
6 use WP_Error;
7 use WP_REST_Response;
8 use WP_REST_Server;
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit; // Exit if accessed directly
12 }
13
14 class Employees_Controller extends \WeDevs\ERP\API\REST_Controller {
15
16 /**
17 * Endpoint namespace.
18 *
19 * @var string
20 */
21 protected $namespace = 'erp/v1';
22
23 /**
24 * Route base.
25 *
26 * @var string
27 */
28 protected $rest_base = 'accounting/v1/employees';
29
30 /**
31 * Register the routes for the objects of the controller.
32 */
33 public function register_routes() {
34 register_rest_route(
35 $this->namespace,
36 '/' . $this->rest_base,
37 [
38 [
39 'methods' => WP_REST_Server::READABLE,
40 'callback' => [ $this, 'get_employees' ],
41 'args' => $this->get_collection_params(),
42 'permission_callback' => function ( $request ) {
43 return current_user_can( 'erp_view_list' );
44 },
45 ],
46 'schema' => [ $this, 'get_public_item_schema' ],
47 ]
48 );
49
50 register_rest_route(
51 $this->namespace,
52 '/' . $this->rest_base . '/(?P<id>[\d]+)',
53 [
54 [
55 'methods' => WP_REST_Server::READABLE,
56 'callback' => [ $this, 'get_employee' ],
57 'args' => [
58 'context' => $this->get_context_param( [ 'default' => 'view' ] ),
59 ],
60 'permission_callback' => function ( $request ) {
61 return current_user_can( 'erp_list_employee' );
62 },
63 ],
64 'schema' => [ $this, 'get_public_item_schema' ],
65 ]
66 );
67
68 register_rest_route(
69 $this->namespace,
70 '/' . $this->rest_base . '/(?P<id>[\d]+)' . '/transactions',
71 [
72 [
73 'methods' => WP_REST_Server::READABLE,
74 'callback' => [ $this, 'get_transactions' ],
75 'args' => $this->get_collection_params(),
76 'permission_callback' => function ( $request ) {
77 return current_user_can( 'erp_view_list' );
78 },
79 ],
80 ]
81 );
82 }
83
84 /**
85 * Get a collection of employees
86 *
87 * @param $request
88 *
89 * @return mixed|object|WP_REST_Response
90 */
91 public function get_employees( $request ) {
92 $args = [
93 'number' => $request['per_page'],
94 'offset' => ( $request['per_page'] * ( $request['page'] - 1 ) ),
95 'status' => ( $request['status'] ) ? $request['status'] : 'active',
96 'department' => ( $request['department'] ) ? $request['department'] : '-1',
97 'designation' => ( $request['designation'] ) ? $request['designation'] : '-1',
98 'location' => ( $request['location'] ) ? $request['location'] : '-1',
99 's' => ( $request['s'] ) ? $request['s'] : '',
100 ];
101
102 $items = erp_hr_get_employees( $args );
103
104 $args['count'] = true;
105 $total_items = erp_hr_get_employees( $args );
106 $total_items = is_array( $total_items ) ? count( $total_items ) : $total_items;
107
108 $formatted_items = [];
109 $additional_fields = [];
110
111 $additional_fields['namespace'] = $this->namespace;
112 $additional_fields['rest_base'] = $this->rest_base;
113
114 foreach ( $items as $item ) {
115 $additional_fields['id'] = $item->user_id;
116
117 $data = $this->prepare_item_for_response( $item, $request, $additional_fields );
118 $formatted_items[] = $this->prepare_response_for_collection( $data );
119 }
120 $response = rest_ensure_response( $formatted_items );
121 $response = $this->format_collection_response( $response, $request, $total_items );
122 $response->set_status( 200 );
123
124 return $response;
125 }
126
127 /**
128 * Get a specific employee
129 *
130 * @param \WP_REST_Request $request
131 *
132 * @return WP_Error|WP_REST_Response
133 */
134 public function get_employee( $request ) {
135 $people_id = (int) $request['id'];
136 $user_id = erp_acct_get_user_id_by_people_id( $people_id );
137
138 $employee = new \WeDevs\ERP\HRM\Employee( $user_id );
139 $item = (array) erp_get_people( $people_id );
140
141 if ( empty( $item['id'] ) ) {
142 return new WP_Error( 'rest_employee_invalid_id', __( 'Invalid resource id.' ), [ 'status' => 404 ] );
143 }
144
145 $item['designation'] = $employee->get_designation( 'view' );
146 $item['department'] = $employee->get_department( 'view' );
147 $item['reporting_to'] = $employee->get_reporting_to( 'view' );
148 $item['avatar'] = $employee->get_avatar();
149
150 $additional_fields['namespace'] = $this->namespace;
151 $additional_fields['rest_base'] = $this->rest_base;
152
153 $item = $this->prepare_employee_item_for_response( $item, $request, $additional_fields );
154 $response = rest_ensure_response( $item );
155
156 $response->set_status( 200 );
157
158 return $response;
159 }
160
161 /**
162 * Get a collection of transactions
163 *
164 * @param WP_REST_Request $request
165 *
166 * @return WP_Error|WP_REST_Response
167 */
168 public function get_transactions( $request ) {
169 $args['people_id'] = (int) $request['id'];
170
171 $transactions = erp_acct_get_people_transactions( $args );
172
173 return new WP_REST_Response( $transactions, 200 );
174 }
175
176 /**
177 * Prepare a single user output for response
178 *
179 * @param array|object $item
180 * @param \WP_REST_Request|null $request
181 * @param array $additional_fields
182 *
183 * @return mixed|object|WP_REST_Response
184 */
185 public function prepare_item_for_response( $item, $request = null, $additional_fields = [] ) {
186 $item = $item->data;
187 $employee = new \WeDevs\ERP\HRM\Employee( $item['user_id'] );
188
189 $data = array_merge( $item['work'], $item['personal'], $additional_fields );
190 $data['user_id'] = $item['user_id'];
191 $data['email'] = $item['user_email'];
192 $data['people_id'] = erp_acct_get_people_id_by_user_id( $item['user_id'] );
193 $data['department'] = $employee->get_department( 'view' );
194 $data['designation'] = $employee->get_designation( 'view' );
195
196 // Wrap the data in a response object
197 $response = rest_ensure_response( $data );
198
199 $response = $this->add_links( $response, $item, $additional_fields );
200
201 return $response;
202 }
203
204 /**
205 * Prepare a single employee output for response
206 *
207 * @param array|object $item
208 * @param \WP_REST_Request|null $request
209 * @param array $additional_fields
210 *
211 * @return mixed|object|WP_REST_Response
212 */
213 public function prepare_employee_item_for_response( $item, $request = null, $additional_fields = [] ) {
214 // Wrap the data in a response object
215 $response = rest_ensure_response( $item );
216
217 $response = $this->add_links( $response, $item, $additional_fields );
218
219 return $response;
220 }
221
222 /**
223 * Prepare a single item for create or update
224 *
225 * @param \WP_REST_Request $request request object
226 *
227 * @return array $prepared_item
228 */
229 public function prepare_item_for_database( $request ) {
230 $prepared_item = [];
231 $company = new \WeDevs\ERP\Company();
232
233 if ( isset( $request['id'] ) ) {
234 $prepared_item['id'] = $request['id'];
235 }
236
237 // required arguments.
238 if ( isset( $request['first_name'] ) ) {
239 $prepared_item['personal']['first_name'] = $request['first_name'];
240 }
241
242 if ( isset( $request['last_name'] ) ) {
243 $prepared_item['personal']['last_name'] = $request['last_name'];
244 }
245
246 if ( isset( $request['employee_id'] ) ) {
247 $prepared_item['work']['employee_id'] = $request['employee_id'];
248 }
249
250 if ( isset( $request['email'] ) ) {
251 $prepared_item['user_email'] = $request['email'];
252 }
253
254 // optional arguments.
255 if ( isset( $request['company'] ) ) {
256 $prepared_item['company'] = isset( $request['company'] ) ? $request['company'] : $company->name;
257 }
258
259 if ( isset( $request['user_id'] ) ) {
260 $prepared_item['user_id'] = absint( $request['user_id'] );
261 }
262
263 if ( isset( $request['middle_name'] ) ) {
264 $prepared_item['personal']['middle_name'] = $request['middle_name'];
265 }
266
267 if ( isset( $request['designation'] ) ) {
268 $prepared_item['work']['designation'] = $request['designation'];
269 }
270
271 if ( isset( $request['department'] ) ) {
272 $prepared_item['work']['department'] = $request['department'];
273 }
274
275 if ( isset( $request['reporting_to'] ) ) {
276 $prepared_item['work']['reporting_to'] = $request['reporting_to'];
277 }
278
279 if ( isset( $request['location'] ) ) {
280 $prepared_item['work']['location'] = $request['location'];
281 }
282
283 if ( isset( $request['hiring_source'] ) ) {
284 $prepared_item['work']['hiring_source'] = $request['hiring_source'];
285 }
286
287 if ( isset( $request['hiring_date'] ) ) {
288 $prepared_item['work']['hiring_date'] = $request['hiring_date'];
289 }
290
291 if ( isset( $request['date_of_birth'] ) ) {
292 $prepared_item['work']['date_of_birth'] = $request['date_of_birth'];
293 }
294
295 if ( isset( $request['pay_rate'] ) ) {
296 $prepared_item['work']['pay_rate'] = $request['pay_rate'];
297 }
298
299 if ( isset( $request['pay_type'] ) ) {
300 $prepared_item['work']['pay_type'] = $request['pay_type'];
301 }
302
303 if ( isset( $request['type'] ) ) {
304 $prepared_item['work']['type'] = $request['type'];
305 }
306
307 if ( isset( $request['status'] ) ) {
308 $prepared_item['work']['status'] = $request['status'];
309 }
310
311 if ( isset( $request['other_email'] ) ) {
312 $prepared_item['personal']['other_email'] = $request['other_email'];
313 }
314
315 if ( isset( $request['phone'] ) ) {
316 $prepared_item['personal']['phone'] = $request['phone'];
317 }
318
319 if ( isset( $request['work_phone'] ) ) {
320 $prepared_item['personal']['work_phone'] = $request['work_phone'];
321 }
322
323 if ( isset( $request['mobile'] ) ) {
324 $prepared_item['personal']['mobile'] = $request['mobile'];
325 }
326
327 if ( isset( $request['address'] ) ) {
328 $prepared_item['personal']['address'] = $request['address'];
329 }
330
331 if ( isset( $request['gender'] ) ) {
332 $prepared_item['personal']['gender'] = $request['gender'];
333 }
334
335 if ( isset( $request['marital_status'] ) ) {
336 $prepared_item['personal']['marital_status'] = $request['marital_status'];
337 }
338
339 if ( isset( $request['nationality'] ) ) {
340 $prepared_item['personal']['nationality'] = $request['nationality'];
341 }
342
343 if ( isset( $request['driving_license'] ) ) {
344 $prepared_item['personal']['driving_license'] = $request['driving_license'];
345 }
346
347 if ( isset( $request['hobbies'] ) ) {
348 $prepared_item['personal']['hobbies'] = $request['hobbies'];
349 }
350
351 if ( isset( $request['user_url'] ) ) {
352 $prepared_item['personal']['user_url'] = $request['user_url'];
353 }
354
355 if ( isset( $request['description'] ) ) {
356 $prepared_item['personal']['description'] = $request['description'];
357 }
358
359 if ( isset( $request['street_1'] ) ) {
360 $prepared_item['personal']['street_1'] = $request['street_1'];
361 }
362
363 if ( isset( $request['street_2'] ) ) {
364 $prepared_item['personal']['street_2'] = $request['street_2'];
365 }
366
367 if ( isset( $request['city'] ) ) {
368 $prepared_item['personal']['city'] = $request['city'];
369 }
370
371 if ( isset( $request['country'] ) ) {
372 $prepared_item['personal']['country'] = $request['country'];
373 }
374
375 if ( isset( $request['state'] ) ) {
376 $prepared_item['personal']['state'] = $request['state'];
377 }
378
379 if ( isset( $request['postal_code'] ) ) {
380 $prepared_item['personal']['postal_code'] = $request['postal_code'];
381 }
382
383 if ( isset( $request['photo_id'] ) ) {
384 $prepared_item['personal']['photo_id'] = $request['photo_id'];
385 }
386
387 return $prepared_item;
388 }
389
390 /**
391 * Get the query params for collections.
392 *
393 * @return array
394 */
395 public function get_collection_params() {
396 return [
397 'context' => $this->get_context_param(),
398 'page' => [
399 'description' => __( 'Current page of the collection.' ),
400 'type' => 'integer',
401 'default' => 1,
402 'sanitize_callback' => 'absint',
403 'validate_callback' => 'rest_validate_request_arg',
404 'minimum' => 1,
405 ],
406 'per_page' => [
407 'description' => __( 'Maximum number of items to be returned in result set.' ),
408 'type' => 'integer',
409 'default' => 20,
410 'minimum' => 1,
411 'maximum' => 100,
412 'sanitize_callback' => 'absint',
413 'validate_callback' => 'rest_validate_request_arg',
414 ],
415 'search' => [
416 'description' => __( 'Limit results to those matching a string.' ),
417 'type' => 'string',
418 'sanitize_callback' => 'sanitize_text_field',
419 'validate_callback' => 'rest_validate_request_arg',
420 ],
421 ];
422 }
423 }
424