/** * Gets the leave dates * * Returns the date list between the start and end date of the * two dates * * @since 0.1 * * @return void */ public function leave_request_dates() { $this->verify_nonce('wp-erp-hr-nonce'); $id = isset($_POST['employee_id']) && $_POST['employee_id'] ? intval($_POST['employee_id']) : false; if (!$id) { $this->send_error('Please select employee', 'wp-erp'); } $policy_id = isset($_POST['type']) && $_POST['type'] ? $_POST['type'] : false; if (!$policy_id) { $this->send_error('Please select leave type', 'wp-erp'); } $start_date = isset($_POST['from']) ? sanitize_text_field($_POST['from']) : date_i18n('Y-m-d'); $end_date = isset($_POST['to']) ? sanitize_text_field($_POST['to']) : date_i18n('Y-m-d'); $valid_date_range = erp_hrm_is_valid_leave_date_range_within_financial_date_range($start_date, $end_date); $financial_start_date = date('Y-m-d', strtotime(erp_financial_start_date())); $financial_end_date = date('Y-m-d', strtotime(erp_financial_end_date())); if ($start_date > $end_date) { $this->send_error('Invalid date range', 'wp-erp'); } if (!$valid_date_range) { $this->send_error(sprintf('Date range must be within %s to %s', erp_format_date($financial_start_date), erp_format_date($financial_end_date))); } $leave_record_exisst = erp_hrm_is_leave_recored_exist_between_date($start_date, $end_date, $id); if ($leave_record_exisst) { $this->send_error(__('Leave recored found withing this range!', 'wp-erp')); } $is_policy_valid = erp_hrm_is_valid_leave_duration($start_date, $end_date, $policy_id, $id); if (!$is_policy_valid) { $this->send_error(__('Your leave duration exceeded entitlement!', 'wp-erp')); } $days = erp_hr_get_work_days_between_dates($start_date, $end_date); if (is_wp_error($days)) { $this->send_error($days->get_error_message()); } // just a bit more readable date format foreach ($days['days'] as &$date) { $date['date'] = erp_format_date($date['date'], 'D, M d'); } $days['total'] = sprintf('%d %s', $days['total'], _n('day', 'days', $days['total'], 'wp-erp')); $this->send_success($days); }
/** * Add a new leave request * * @since 0.1 * * @param array $args * * @return integet request_id */ function erp_hr_leave_insert_request($args = array()) { global $wpdb; $defaults = array('user_id' => 0, 'leave_policy' => 0, 'start_date' => current_time('mysql'), 'end_date' => current_time('mysql'), 'reason' => '', 'status' => 0); $args = wp_parse_args($args, $defaults); extract($args); if (!intval($user_id)) { return new WP_Error('no-employee', __('No employee ID provided.', 'wp-error')); } if (!intval($leave_policy)) { return new WP_Error('no-policy', __('No leave policy provided.', 'wp-error')); } $period = erp_hr_get_work_days_between_dates($start_date, $end_date); if (is_wp_error($period)) { return $period; } // prepare the periods $leaves = array(); if ($period['days']) { foreach ($period['days'] as $date) { if (!$date['count']) { continue; } $leaves[] = array('date' => $date['date'], 'length_hours' => '08:00:00', 'length_days' => '1.00', 'start_time' => '00:00:00', 'end_time' => '00:00:00', 'duration_type' => 1); } } if ($leaves) { $request = array('user_id' => $user_id, 'policy_id' => $leave_policy, 'days' => count($leaves), 'start_date' => $start_date, 'end_date' => $end_date, 'reason' => wp_kses_post($reason), 'status' => 2, 'created_by' => get_current_user_id(), 'created_on' => current_time('mysql')); if ($wpdb->insert($wpdb->prefix . 'erp_hr_leave_requests', $request)) { $request_id = $wpdb->insert_id; foreach ($leaves as $leave) { $leave['request_id'] = $request_id; $wpdb->insert($wpdb->prefix . 'erp_hr_leaves', $leave); } do_action('erp_hr_leave_new', $request_id, $request, $leaves); return $request_id; } } return false; }
/** * Gets the leave dates * * Returns the date list between the start and end date of the * two dates * * @return void */ public function leave_request_dates() { $this->verify_nonce('wp-erp-hr-nonce'); $id = isset($_POST['employee_id']) ? intval($_POST['employee_id']) : get_current_user_id(); $start_date = isset($_POST['from']) ? sanitize_text_field($_POST['from']) : date_i18n('Y-m-d'); $end_date = isset($_POST['to']) ? sanitize_text_field($_POST['to']) : date_i18n('Y-m-d'); $days = erp_hr_get_work_days_between_dates($start_date, $end_date); if (is_wp_error($days)) { $this->send_error($days->get_error_message()); } // just a bit more readable date format foreach ($days['days'] as &$date) { $date['date'] = erp_format_date($date['date'], 'D, M d'); } $days['total'] = sprintf('%d %s', $days['total'], _n('day', 'days', $days['total'], 'wp-erp')); $this->send_success($days); }