use crate::core::{
api_req::ApiRequest,
api_resp::{ApiResponseTrait, ResponseFormat},
};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Shift {
pub shift_id: String,
pub shift_name: String,
pub punch_times: i32,
pub is_flexible: Option<bool>,
pub flexible_minutes: Option<i32>,
pub flexible_rule: Option<Vec<FlexibleRule>>,
pub no_need_off: Option<bool>,
pub punch_time_rule: Option<Vec<PunchTimeRule>>,
pub late_minutes_as_late: Option<i32>,
pub late_minutes_as_lack: Option<i32>,
pub early_minutes_as_early: Option<i32>,
pub early_minutes_as_lack: Option<i32>,
pub allow_outside_apply: Option<bool>,
pub outside_apply_limit: Option<i32>,
pub allow_face_punch: Option<bool>,
pub face_punch_cfg: Option<FacePunchConfig>,
pub create_time: Option<String>,
pub update_time: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FlexibleRule {
pub flexible_early_minutes: i32,
pub flexible_late_minutes: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PunchTimeRule {
pub on_time: String,
pub off_time: String,
pub on_advance_minutes: i32,
pub off_delay_minutes: i32,
pub late_minutes_as_late: Option<i32>,
pub late_minutes_as_lack: Option<i32>,
pub early_minutes_as_early: Option<i32>,
pub early_minutes_as_lack: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FacePunchConfig {
pub face_punch: bool,
pub face_live_need_action: Option<bool>,
pub face_downgrade: Option<bool>,
}
#[derive(Default)]
pub struct CreateShiftRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub shift_name: String,
pub punch_times: i32,
pub is_flexible: Option<bool>,
pub flexible_minutes: Option<i32>,
pub flexible_rule: Option<Vec<FlexibleRule>>,
pub no_need_off: Option<bool>,
pub punch_time_rule: Option<Vec<PunchTimeRule>>,
pub late_minutes_as_late: Option<i32>,
pub late_minutes_as_lack: Option<i32>,
pub early_minutes_as_early: Option<i32>,
pub early_minutes_as_lack: Option<i32>,
pub allow_outside_apply: Option<bool>,
pub outside_apply_limit: Option<i32>,
pub allow_face_punch: Option<bool>,
pub face_punch_cfg: Option<FacePunchConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateShiftRespData {
pub shift: Shift,
}
impl ApiResponseTrait for CreateShiftRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for Shift {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default)]
pub struct DeleteShiftRequest {
pub api_req: ApiRequest,
pub shift_id: String,
}
#[derive(Default)]
pub struct GetShiftRequest {
pub api_req: ApiRequest,
pub shift_id: String,
}
#[derive(Default)]
pub struct QueryShiftRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub shift_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryShiftRespData {
pub shift_list: Vec<Shift>,
}
impl ApiResponseTrait for QueryShiftRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default)]
pub struct ListShiftRequest {
pub api_req: ApiRequest,
pub page_size: Option<i32>,
pub page_token: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ShiftListData {
pub shift_list: Vec<Shift>,
pub has_more: bool,
pub page_token: Option<String>,
}
impl ApiResponseTrait for ShiftListData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmptyResponse {}
impl ApiResponseTrait for EmptyResponse {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserDailyShift {
pub user_id: String,
pub shift_date: String,
pub shift_id: String,
}
#[derive(Default)]
pub struct BatchCreateUserDailyShiftRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub user_daily_shifts: Vec<UserDailyShift>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchCreateUserDailyShiftRespData {
pub failed_user_daily_shifts: Option<Vec<UserDailyShift>>,
pub success_count: Option<i32>,
pub failed_count: Option<i32>,
}
impl ApiResponseTrait for BatchCreateUserDailyShiftRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default)]
pub struct QueryUserDailyShiftRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub user_ids: Vec<String>,
pub check_date_from: String,
pub check_date_to: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryUserDailyShiftRespData {
pub user_daily_shift_list: Vec<UserDailyShiftData>,
}
impl ApiResponseTrait for QueryUserDailyShiftRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserDailyShiftData {
pub user_id: String,
pub shift_date: String,
pub shift_id: String,
pub shift_name: String,
pub is_temp: Option<bool>,
pub create_time: Option<String>,
pub update_time: Option<String>,
}
#[derive(Default)]
pub struct BatchCreateTempUserDailyShiftRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub user_daily_shifts: Vec<UserDailyShift>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchCreateTempUserDailyShiftRespData {
pub failed_user_daily_shifts: Option<Vec<UserDailyShift>>,
pub success_count: Option<i32>,
pub failed_count: Option<i32>,
}
impl ApiResponseTrait for BatchCreateTempUserDailyShiftRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Group {
pub group_id: String,
pub group_name: String,
pub time_zone: Option<String>,
pub bind_dept_ids: Option<Vec<String>>,
pub except_date_rule: Option<Vec<ExceptDateRule>>,
pub attendance_type: Option<i32>,
pub punch_type: Option<i32>,
pub allow_late_minutes: Option<i32>,
pub allow_early_leave_minutes: Option<i32>,
pub work_day_rule: Option<Vec<WorkDayRule>>,
pub shift_rule: Option<Vec<ShiftRule>>,
pub member_rule: Option<MemberRule>,
pub create_time: Option<String>,
pub update_time: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExceptDateRule {
pub date: String,
pub except_type: i32,
pub shift_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WorkDayRule {
pub week_day: i32,
pub shift_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ShiftRule {
pub shift_id: String,
pub shift_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemberRule {
pub member_type: i32,
pub member_ids: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GroupUser {
pub user_id: String,
pub user_name: Option<String>,
pub employee_no: Option<String>,
pub department_id: Option<String>,
pub join_time: Option<String>,
}
#[derive(Default)]
pub struct ListGroupUserRequest {
pub api_req: ApiRequest,
pub group_id: String,
pub employee_type: String,
pub dept_type: Option<String>,
pub page_size: Option<i32>,
pub page_token: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListGroupUserRespData {
pub user_list: Vec<GroupUser>,
pub has_more: bool,
pub page_token: Option<String>,
}
impl ApiResponseTrait for ListGroupUserRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default)]
pub struct CreateGroupRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub dept_type: Option<String>,
pub group_name: String,
pub time_zone: Option<String>,
pub bind_dept_ids: Option<Vec<String>>,
pub except_date_rule: Option<Vec<ExceptDateRule>>,
pub attendance_type: Option<i32>,
pub punch_type: Option<i32>,
pub allow_late_minutes: Option<i32>,
pub allow_early_leave_minutes: Option<i32>,
pub work_day_rule: Option<Vec<WorkDayRule>>,
pub shift_rule: Option<Vec<ShiftRule>>,
pub member_rule: Option<MemberRule>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateGroupRespData {
pub group: Group,
}
impl ApiResponseTrait for CreateGroupRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default)]
pub struct DeleteGroupRequest {
pub api_req: ApiRequest,
pub group_id: String,
}
#[derive(Default)]
pub struct GetGroupRequest {
pub api_req: ApiRequest,
pub group_id: String,
pub employee_type: String,
pub dept_type: Option<String>,
}
#[derive(Default)]
pub struct SearchGroupRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub dept_type: Option<String>,
pub group_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchGroupRespData {
pub group_list: Vec<Group>,
}
impl ApiResponseTrait for SearchGroupRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default)]
pub struct ListGroupRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub dept_type: Option<String>,
pub page_size: Option<i32>,
pub page_token: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListGroupRespData {
pub group_list: Vec<Group>,
pub has_more: bool,
pub page_token: Option<String>,
}
impl ApiResponseTrait for ListGroupRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for Group {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserSetting {
pub user_id: String,
pub face_key_open: Option<bool>,
pub face_key: Option<String>,
pub face_live_need_action: Option<bool>,
pub face_downgrade: Option<bool>,
pub create_time: Option<String>,
pub update_time: Option<String>,
}
#[derive(Default)]
pub struct ModifyUserSettingRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub user_id: String,
pub face_key_open: Option<bool>,
pub face_key: Option<String>,
pub face_live_need_action: Option<bool>,
pub face_downgrade: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModifyUserSettingRespData {
pub user_setting: UserSetting,
}
impl ApiResponseTrait for ModifyUserSettingRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default)]
pub struct QueryUserSettingRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub user_ids: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryUserSettingRespData {
pub user_setting_list: Vec<UserSetting>,
}
impl ApiResponseTrait for QueryUserSettingRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default)]
pub struct UploadUserPhotoRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub user_id: String,
pub photo_data: Vec<u8>,
pub photo_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UploadUserPhotoRespData {
pub face_key: String,
}
impl ApiResponseTrait for UploadUserPhotoRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default)]
pub struct DownloadUserPhotoRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub user_id: String,
pub face_key: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DownloadUserPhotoRespData {
pub photo_data: Vec<u8>,
}
impl ApiResponseTrait for DownloadUserPhotoRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for UserSetting {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default, Clone)]
pub struct UpdateUserStatsDataRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub stats_setting: StatsSettings,
}
impl UpdateUserStatsDataRequest {
pub fn build(self) -> Self {
self
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct StatsSettings {
pub stats_scope: i32,
pub start_date: String,
pub end_date: String,
pub user_ids: Vec<String>,
pub need_fields: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UpdateUserStatsDataRespData {
pub success: bool,
}
#[derive(Default, Clone)]
pub struct QueryStatsSettingsRequest {
pub api_req: ApiRequest,
pub employee_type: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryStatsSettingsRespData {
pub stats_setting: StatsSettings,
}
#[derive(Default, Clone)]
pub struct QueryStatsFieldsRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub locale: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StatsField {
pub field_key: String,
pub field_name: String,
pub field_name_zh: Option<String>,
pub field_name_en: Option<String>,
pub field_name_ja: Option<String>,
pub field_type: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryStatsFieldsRespData {
pub fields: Vec<StatsField>,
}
#[derive(Default, Clone)]
pub struct QueryUserStatsDataRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub start_date: String,
pub end_date: String,
pub user_ids: Vec<String>,
pub need_fields: Vec<String>,
pub locale: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserStatsData {
pub user_id: String,
pub user_name: Option<String>,
pub datas: std::collections::HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryUserStatsDataRespData {
pub datas: Vec<UserStatsData>,
}
impl ApiResponseTrait for UpdateUserStatsDataRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for QueryStatsSettingsRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for QueryStatsFieldsRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for QueryUserStatsDataRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default)]
pub struct QueryUserApprovalRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub status: Option<i32>,
pub date_from: Option<String>,
pub date_to: Option<String>,
pub user_ids: Option<Vec<String>>,
pub page_size: Option<i32>,
pub page_token: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserApproval {
pub approval_id: String,
pub user_id: String,
pub user_name: Option<String>,
pub approval_type: i32,
pub status: i32,
pub start_time: String,
pub end_time: String,
pub duration: Option<f64>,
pub reason: Option<String>,
pub approval_note: Option<String>,
pub created_at: Option<String>,
pub approved_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryUserApprovalRespData {
pub approvals: Vec<UserApproval>,
pub has_more: bool,
pub page_token: Option<String>,
}
#[derive(Default)]
pub struct CreateUserApprovalRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub approval_id: String,
pub status: i32,
pub approval_note: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateUserApprovalRespData {
pub success: bool,
pub approval_id: String,
}
#[derive(Default)]
pub struct ProcessUserApprovalRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub approval_id: String,
pub action: i32,
pub message: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProcessUserApprovalRespData {
pub success: bool,
pub approval_id: String,
}
impl ApiResponseTrait for QueryUserApprovalRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for CreateUserApprovalRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for ProcessUserApprovalRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default, Clone)]
pub struct CreateUserTaskRemedyRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub remedy_application: UserTaskRemedyApplication,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct UserTaskRemedyApplication {
pub user_id: String,
pub remedy_date: String,
pub remedy_time: String,
pub remedy_type: i32,
pub reason: String,
pub comment: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateUserTaskRemedyRespData {
pub remedy_id: String,
pub success: bool,
}
#[derive(Default, Clone)]
pub struct QueryUserAllowedRemedysRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub user_id: String,
pub date_from: Option<String>,
pub date_to: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserAllowedRemedy {
pub date: String,
pub shift_id: String,
pub shift_name: String,
pub remedy_periods: Vec<RemedyPeriod>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RemedyPeriod {
pub remedy_type: i32,
pub remedy_type_name: String,
pub standard_time: String,
pub remedy_start_time: String,
pub remedy_end_time: String,
pub can_remedy: bool,
pub block_reason: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryUserAllowedRemedysRespData {
pub allowed_remedys: Vec<UserAllowedRemedy>,
}
#[derive(Default, Clone)]
pub struct QueryUserTaskRemedyRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub user_ids: Option<Vec<String>>,
pub date_from: Option<String>,
pub date_to: Option<String>,
pub status: Option<i32>,
pub page_size: Option<i32>,
pub page_token: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserTaskRemedy {
pub remedy_id: String,
pub user_id: String,
pub user_name: Option<String>,
pub remedy_date: String,
pub remedy_time: String,
pub remedy_type: i32,
pub status: i32,
pub reason: String,
pub comment: Option<String>,
pub apply_time: String,
pub approve_time: Option<String>,
pub approver_id: Option<String>,
pub approve_comment: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryUserTaskRemedyRespData {
pub remedys: Vec<UserTaskRemedy>,
pub has_more: bool,
pub page_token: Option<String>,
}
impl ApiResponseTrait for CreateUserTaskRemedyRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for QueryUserAllowedRemedysRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for QueryUserTaskRemedyRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default)]
pub struct BatchCreateUserTaskRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub user_tasks: Vec<UserTaskCreate>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct UserTaskCreate {
pub user_id: String,
pub group_id: String,
pub shift_id: String,
pub check_date: String,
pub check_time: String,
pub check_type: i32,
pub check_result: i32,
pub location: Option<UserTaskLocation>,
pub is_field: Option<bool>,
pub is_remedy: Option<bool>,
pub comment: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserTaskLocation {
pub latitude: f64,
pub longitude: f64,
pub address: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchCreateUserTaskRespData {
pub success_count: i32,
pub failed_count: i32,
pub failed_records: Option<Vec<UserTaskCreateFailure>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserTaskCreateFailure {
pub user_id: String,
pub reason: String,
pub error_code: Option<String>,
}
#[derive(Default)]
pub struct GetUserTaskRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub user_id: String,
pub check_date: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserTask {
pub task_id: String,
pub user_id: String,
pub user_name: Option<String>,
pub group_id: String,
pub shift_id: String,
pub shift_name: String,
pub check_date: String,
pub check_time: String,
pub check_type: i32,
pub check_result: i32,
pub location: Option<UserTaskLocation>,
pub is_field: bool,
pub is_remedy: bool,
pub comment: Option<String>,
pub create_time: String,
pub update_time: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GetUserTaskRespData {
pub user_tasks: Vec<UserTask>,
}
#[derive(Default)]
pub struct QueryUserTaskRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub user_ids: Option<Vec<String>>,
pub check_date_from: Option<String>,
pub check_date_to: Option<String>,
pub check_type: Option<i32>,
pub page_size: Option<i32>,
pub page_token: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryUserTaskRespData {
pub user_tasks: Vec<UserTask>,
pub has_more: bool,
pub page_token: Option<String>,
}
#[derive(Default)]
pub struct BatchDelUserTaskRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub task_ids: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchDelUserTaskRespData {
pub success_count: i32,
pub failed_count: i32,
pub failed_records: Option<Vec<UserTaskDeleteFailure>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserTaskDeleteFailure {
pub task_id: String,
pub reason: String,
pub error_code: Option<String>,
}
#[derive(Default)]
pub struct QueryUserTaskResultRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub user_ids: Option<Vec<String>>,
pub check_date_from: Option<String>,
pub check_date_to: Option<String>,
pub page_size: Option<i32>,
pub page_token: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserTaskResult {
pub user_id: String,
pub user_name: Option<String>,
pub attendance_date: String,
pub attendance_status: i32,
pub check_in_records: Option<Vec<UserTask>>,
pub check_out_records: Option<Vec<UserTask>>,
pub work_duration: Option<f64>,
pub overtime_duration: Option<f64>,
pub exceptions: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryUserTaskResultRespData {
pub user_task_results: Vec<UserTaskResult>,
pub has_more: bool,
pub page_token: Option<String>,
}
impl ApiResponseTrait for BatchCreateUserTaskRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for GetUserTaskRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for QueryUserTaskRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for BatchDelUserTaskRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for QueryUserTaskResultRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default, Clone)]
pub struct QueryArchiveStatsFieldsRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub archive_rule_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ArchiveStatsField {
pub field_id: String,
pub field_name: String,
pub field_type: i32,
pub field_description: Option<String>,
pub is_required: bool,
pub default_value: Option<String>,
pub field_options: Option<Vec<ArchiveFieldOption>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ArchiveFieldOption {
pub value: String,
pub label: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryArchiveStatsFieldsRespData {
pub fields: Vec<ArchiveStatsField>,
pub report_name: String,
pub archive_rule_name: String,
}
#[derive(Default, Clone)]
pub struct UploadArchiveReportRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub archive_rule_id: String,
pub report_data: Vec<ArchiveReportRecord>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ArchiveReportRecord {
pub record_id: Option<String>,
pub user_id: String,
pub archive_date: String,
pub field_data: std::collections::HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UploadArchiveReportRespData {
pub success_count: i32,
pub failed_count: i32,
pub failed_records: Option<Vec<ArchiveReportFailure>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ArchiveReportFailure {
pub user_id: String,
pub archive_date: String,
pub reason: String,
pub error_code: Option<String>,
}
#[derive(Default, Clone)]
pub struct DelArchiveReportRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub archive_rule_id: String,
pub record_ids: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DelArchiveReportRespData {
pub success_count: i32,
pub failed_count: i32,
pub failed_records: Option<Vec<ArchiveReportDeleteFailure>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ArchiveReportDeleteFailure {
pub record_id: String,
pub reason: String,
pub error_code: Option<String>,
}
#[derive(Default, Clone)]
pub struct ListArchiveRulesRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub page_size: Option<i32>,
pub page_token: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ArchiveRule {
pub archive_rule_id: String,
pub archive_rule_name: String,
pub description: Option<String>,
pub archive_period_type: i32,
pub is_enabled: bool,
pub create_time: String,
pub update_time: String,
pub field_count: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListArchiveRulesRespData {
pub archive_rules: Vec<ArchiveRule>,
pub has_more: bool,
pub page_token: Option<String>,
}
impl ApiResponseTrait for QueryArchiveStatsFieldsRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for UploadArchiveReportRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for DelArchiveReportRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for ListArchiveRulesRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default, Clone)]
pub struct GetLeaveEmployExpireRecordRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub start_time: i64,
pub end_time: i64,
pub page_size: Option<i32>,
pub page_token: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LeaveEmployExpireRecord {
pub record_id: String,
pub employee_id: String,
pub employee_name: Option<String>,
pub leave_type_id: String,
pub leave_type_name: String,
pub granted_amount: f64,
pub expire_time: i64,
pub granted_time: i64,
pub granted_reason: Option<String>,
pub remaining_amount: f64,
pub status: i32,
pub create_time: i64,
pub update_time: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GetLeaveEmployExpireRecordRespData {
pub records: Vec<LeaveEmployExpireRecord>,
pub has_more: bool,
pub page_token: Option<String>,
pub total_count: i32,
}
#[derive(Default, Clone)]
pub struct PatchLeaveAccrualRecordRequest {
pub api_req: ApiRequest,
pub employee_type: String,
pub leave_accrual_record_id: String,
pub leave_accrual_record: LeaveAccrualRecordPatch,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct LeaveAccrualRecordPatch {
pub employee_id: Option<String>,
pub leave_type_id: Option<String>,
pub granted_amount: Option<f64>,
pub expire_time: Option<i64>,
pub granted_time: Option<i64>,
pub granted_reason: Option<String>,
pub validity_type: Option<i32>,
pub granted_type: Option<i32>,
pub granted_description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PatchLeaveAccrualRecordRespData {
pub leave_accrual_record: LeaveAccrualRecord,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LeaveAccrualRecord {
pub record_id: String,
pub employee_id: String,
pub employee_name: Option<String>,
pub leave_type_id: String,
pub leave_type_name: String,
pub granted_amount: f64,
pub expire_time: Option<i64>,
pub granted_time: i64,
pub granted_reason: Option<String>,
pub remaining_amount: f64,
pub used_amount: f64,
pub status: i32,
pub validity_type: i32,
pub granted_type: i32,
pub granted_description: Option<String>,
pub create_time: i64,
pub update_time: i64,
}
impl ApiResponseTrait for GetLeaveEmployExpireRecordRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for PatchLeaveAccrualRecordRespData {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl QueryStatsSettingsRequest {
pub fn build(self) -> Self {
self
}
}
impl QueryStatsFieldsRequest {
pub fn build(self) -> Self {
self
}
}
impl QueryUserStatsDataRequest {
pub fn build(self) -> Self {
self
}
}
impl CreateUserTaskRemedyRequest {
pub fn build(self) -> Self {
self
}
}
impl QueryUserAllowedRemedysRequest {
pub fn build(self) -> Self {
self
}
}
impl QueryUserTaskRemedyRequest {
pub fn build(self) -> Self {
self
}
}
impl QueryArchiveStatsFieldsRequest {
pub fn build(self) -> Self {
self
}
}
impl UploadArchiveReportRequest {
pub fn build(self) -> Self {
self
}
}
impl DelArchiveReportRequest {
pub fn build(self) -> Self {
self
}
}
impl ListArchiveRulesRequest {
pub fn build(self) -> Self {
self
}
}
impl GetLeaveEmployExpireRecordRequest {
pub fn build(self) -> Self {
self
}
}
impl PatchLeaveAccrualRecordRequest {
pub fn build(self) -> Self {
self
}
}