/** * Create a new employee * * @param array arguments * * @return int employee id */ function erp_hr_employee_create($args = array()) { global $wpdb; $defaults = array('user_email' => '', 'company_id' => erp_get_current_company_id(), 'work' => array('designation' => 0, 'department' => 0, 'location' => '', 'hiring_source' => '', 'hiring_date' => '', 'date_of_birth' => '', 'reporting_to' => 0, 'pay_rate' => '', 'pay_type' => '', 'type' => '', 'status' => ''), 'personal' => array('photo_id' => 0, 'user_id' => 0, 'first_name' => '', 'middle_name' => '', 'last_name' => '', 'other_email' => '', 'phone' => '', 'work_phone' => '', 'mobile' => '', 'address' => '', 'gender' => '', 'marital_status' => '', 'nationality' => '', 'driving_license' => '', 'hobbies' => '', 'user_url' => '', 'description' => '')); $posted = array_map('strip_tags_deep', $args); $posted = array_map('trim_deep', $posted); $data = wp_parse_args($posted, $defaults); // some basic validation if (empty($data['personal']['first_name'])) { return new WP_Error('empty-first-name', __('Please provide the first name.', 'wp-erp')); } if (empty($data['personal']['last_name'])) { return new WP_Error('empty-last-name', __('Please provide the last name.', 'wp-erp')); } if (!is_email($data['user_email'])) { return new WP_Error('invalid-email', __('Please provide a valid email address.', 'wp-erp')); } // attempt to create the user $password = wp_generate_password(12); $userdata = array('user_login' => $data['user_email'], 'user_pass' => $password, 'user_email' => $data['user_email'], 'first_name' => $data['personal']['first_name'], 'last_name' => $data['personal']['last_name'], 'display_name' => $data['personal']['first_name'] . ' ' . $data['personal']['last_name'], 'role' => 'employee'); // if user id exists, do an update $user_id = isset($posted['user_id']) ? intval($posted['user_id']) : 0; $update = false; if ($user_id) { $update = true; $userdata['ID'] = $user_id; } $userdata = apply_filters('erp_hr_employee_args', $userdata); $user_id = wp_insert_user($userdata); if (is_wp_error($user_id)) { return $user_id; } // if reached here, seems like we have success creating the user $employee = new \WeDevs\ERP\HRM\Employee($user_id); // inserting the user for the first time if (!$update) { $work = $data['work']; if (!empty($work['type'])) { $employee->update_employment_status($work['type']); } // update compensation if (!empty($work['pay_rate'])) { $pay_type = !empty($work['pay_type']) ? $work['pay_type'] : 'monthly'; $employee->update_compensation($work['pay_rate'], $pay_type); } // update job info $employee->update_job_info($work['department'], $work['designation'], $work['reporting_to'], $work['location']); } // update the erp table $wpdb->update($wpdb->prefix . 'erp_hr_employees', array('company_id' => (int) $data['company_id'], 'hiring_source' => $data['work']['hiring_source'], 'hiring_date' => $data['work']['hiring_date'], 'date_of_birth' => $data['work']['date_of_birth']), array('user_id' => $user_id)); foreach ($data['personal'] as $key => $value) { update_user_meta($user_id, $key, $value); } if ($update) { do_action('erp_hr_employee_update', $user_id, $data); } else { do_action('erp_hr_employee_new', $user_id, $data); } return $user_id; }