/** * Add log when udpate policy * * @since 0.1 * * @param integer $policy_id * @param array $fields * * @return void */ public function update_policy($policy_id, $fields) { if (!$policy_id) { return; } $old_policy = \WeDevs\ERP\HRM\Models\Leave_Policies::find($policy_id)->toArray(); unset($old_policy['created_at'], $old_policy['updated_at'], $fields['instant_apply']); $old_policy['effective_date'] = erp_format_date($old_policy['effective_date'], 'Y-m-d'); $fields['effective_date'] = erp_format_date($fields['effective_date'], 'Y-m-d'); if (isset($fields['activate']) && $fields['activate'] == 1) { unset($fields['execute_day'], $old_policy['execute_day']); } $changes = $this->get_array_diff($fields, $old_policy, true); if (empty($changes['old_val']) && empty($changes['new_val'])) { $message = false; } else { array_walk($changes, function (&$key) { if (isset($key['color'])) { $key['calender_color'] = sprintf('<div style="width:60px; height:20px; background-color:%s"></div>', $key['color']); unset($key['color']); } if (isset($key['department'])) { if ($key['department'] == '-1') { $key['department'] = __('All Department', 'wp-erp'); } else { $department = new \WeDevs\ERP\HRM\Department(intval($key['department'])); $key['department'] = $department->title; } } if (isset($key['designation'])) { if ($key['designation'] == '-1') { $key['designation'] = __('All Designation', 'wp-erp'); } else { $designation = new \WeDevs\ERP\HRM\Designation(intval($key['designation'])); $key['designation'] = $designation->title; } } if (isset($key['location'])) { if ($key['location'] == '-1') { $key['location'] = __('All Location', 'wp-erp'); } else { $location = erp_company_get_location_dropdown_raw(); $key['location'] = $location[$key['location']]; } } if (isset($key['gender'])) { $gender = erp_hr_get_genders(__('All', 'wp-erp')); $key['gender'] = $gender[$key['gender']]; } if (isset($key['marital'])) { $marital = erp_hr_get_marital_statuses(__('All', 'wp-erp')); $key['marital'] = $marital[$key['marital']]; } if (isset($key['activate'])) { $activate = array('1' => __('Immediately', 'wp-erp'), '2' => __('After X Days', 'wp-erp'), '3' => __('Manually', 'wp-erp')); if ($key['activate'] == 2) { $key['activation'] = str_replace('X', $key['execute_day'], $activate[$key['activate']]); } else { $key['activation'] = $activate[$key['activate']]; } unset($key['activate']); unset($key['execute_day']); } if (isset($key['effective_date'])) { $key['policy_effective_date'] = erp_format_date($key['effective_date']); unset($key['effective_date']); } }); $message = sprintf('<strong>%s</strong> policy has been edited', $old_policy['name']); } if ($message) { erp_log()->add(['sub_component' => 'leave', 'message' => $message, 'created_by' => get_current_user_id(), 'changetype' => 'edit', 'old_value' => $changes['old_val'] ? base64_encode(maybe_serialize($changes['old_val'])) : '', 'new_value' => $changes['new_val'] ? base64_encode(maybe_serialize($changes['new_val'])) : '']); } }
/** * Assign for schedule leave policy * * @since 0.1 * * @return void */ function erp_hr_apply_policy_schedule() { $active_employes = \WeDevs\ERP\HRM\Models\Employee::select('user_id')->where('status', 'active')->get()->toArray(); $policies = \WeDevs\ERP\HRM\Models\Leave_Policies::get()->toArray(); $selected_policy = []; $today = date('Y-m-d', strtotime(current_time('mysql'))); foreach ($active_employes as $key => $employee) { $employee_obj = new \WeDevs\ERP\HRM\Employee(intval($employee['user_id'])); $employee_data = $employee_obj->to_array(); $department = isset($employee_data['work']['department']) ? $employee_data['work']['department'] : ''; $designation = isset($employee_data['work']['designation']) ? $employee_data['work']['designation'] : ''; $gender = isset($employee_data['personal']['gender']) ? $employee_data['personal']['gender'] : ''; $location = isset($employee_data['work']['location']) ? $employee_data['work']['location'] : ''; $marital = isset($employee_data['personal']['marital_status']) ? $employee_data['personal']['marital_status'] : ''; $hire_date = isset($employee_data['work']['hiring_date']) ? $employee_data['work']['hiring_date'] : ''; $current_time = current_time('mysql'); $daydiff = count(erp_extract_dates($hire_date, $current_time)) - 1; foreach ($policies as $key => $policy) { if ($policy['activate'] == 1) { erp_hr_apply_new_employee_policy($employee_data, $policy); continue; } $effective_date = date('Y-m-d', strtotime($policy['effective_date'])); if (strtotime($effective_date) < 0 && $today < $effective_date) { continue; } if ($daydiff <= $policy['execute_day']) { continue; } if ($policy['department'] != '-1' && $policy['department'] != $department) { continue; } if ($policy['designation'] != '-1' && $policy['designation'] != $designation) { continue; } if ($policy['gender'] != '-1' && $policy['gender'] != $gender) { continue; } if ($policy['location'] != '-1' && $policy['location'] != $location) { continue; } if ($policy['marital'] != '-1' && $policy['marital'] != $marital) { continue; } erp_hr_apply_leave_policy(intval($employee['user_id']), $policy); } } }
/** * Get available day for users leave policy * * @since 0.1 * * @return json */ public function leave_available_days() { $this->verify_nonce('wp-erp-hr-nonce'); $employee_id = isset($_POST['employee_id']) && $_POST['employee_id'] ? intval($_POST['employee_id']) : false; $policy_id = isset($_POST['policy_id']) && $_POST['policy_id'] ? intval($_POST['policy_id']) : false; $available = 0; if (!$employee_id) { $this->send_error('Please select an employee', 'wp-erp'); } if (!$policy_id) { $this->send_error('Please select a policy', 'wp-erp'); } $balance = erp_hr_leave_get_balance($employee_id); if (array_key_exists($policy_id, $balance)) { $available = $balance[$policy_id]['entitlement'] - $balance[$policy_id]['total']; } if ($available < 0) { $content = sprintf('<span class="description red">%d %s</span>', number_format_i18n($available), __('days are available', 'wp-erp')); } elseif ($available > 0) { $content = sprintf('<span class="description green">%d %s</span>', number_format_i18n($available), __('days are available', 'wp-erp')); } else { $leave_policy_day = \WeDevs\ERP\HRM\Models\Leave_Policies::select('value')->where('id', $policy_id)->pluck('value'); $content = sprintf('<span class="description">%d %s</span>', number_format_i18n($leave_policy_day), __('days are available', 'wp-erp')); } $this->send_success($content); }