Files
flutter-learn/lib/leave/leave_api.dart
T
2026-03-03 08:08:55 +08:00

85 lines
3.2 KiB
Dart

import './leave_model.dart';
import '../services/generic_api_service.dart';
import 'package:intl/intl.dart';
import '../auth_manager.dart'; // 確保引入 AuthManager
class LeaveApiService {
final GenericApiService _apiService = GenericApiService();
// 新增:獲取所有啟用的假別清單
Future<List<LeaveType>> fetchLeaveTypes() async {
// 這裡通常不需要特別的 filter,或可根據公司邏輯過濾性別等
return await _apiService.fetchList<LeaveType>(
tableName: "hrs_leavetype",
pk: "leavetype_id",
queryFilter: "1^100^leavetype_id^*^^^", // 取得前100筆
fromJson: (json) => LeaveType.fromJson(json),
);
}
// 查詢員工清單 (代理人)
Future<List<Map<String, dynamic>>> fetchEmployees(String keyword) async {
// 1. 設定查詢過濾器 (依據 Generic API 規範)
// 格式:當前頁^每頁筆數^排序欄位^關鍵字欄位^關鍵字內容
// 我們同時搜尋姓名(personcname)或工號(personid)
String queryFilter = "1^50^personid^*^^^personcname^$keyword";
final List<dynamic> result = await _apiService.fetchList<dynamic>(
tableName: "basperson", // 指向員工主檔
pk: "personid",
queryFilter: queryFilter,
fromJson: (json) => json,
);
// 2. 轉換並確保回傳正確的欄位映射
return result.map((e) => {
'id': e['personid'] ?? '',
'name': e['personcname'] ?? '',
'dept': e['departmentid'] ?? '',
}).toList();
}
// 獲取個人請假紀錄
Future<List<Leave>> fetchLeaves(String personId) async {
// 排序:按單據日期降冪
String queryFilter = "1^100^billdate^*^start_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)^^personid^$personId";
return await _apiService.fetchList<Leave>(
tableName: "hrs_leave",
pk: "billno",
queryFilter: queryFilter,
fromJson: (json) => Leave.fromJson(json),
);
}
// 提交請假單 (新增)
//Future<bool> createLeave(Leave leave) async {
Future<List<Leave>> createLeave(Leave leave) async {
final String currentUid = AuthManager().currentUserId ?? leave.personId;
final Map<String, dynamic> data = {
"billdate": DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now()),
"billno": "LV${DateTime.now().millisecondsSinceEpoch}", // 範例編號
"personid": currentUid,
"agentid": leave.agentId,
"leavetype": leave.leaveType,
"starttime": DateFormat('yyyy-MM-dd HH:mm:ss').format(leave.startTime!),
"endtime": DateFormat('yyyy-MM-dd HH:mm:ss').format(leave.endTime!),
"days": leave.days,
"hours": leave.hours,
"leave_note": leave.leaveNote,
"flow_status": "1", // 提交即進入審核中
"create_user": currentUid,
"create_date": DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now()),
};
return await _apiService.fetchList<Leave>(
tableName: "hrs_leave",
pk: "ClockInId",
queryFilter: "", // 通常新增不需要 filter,依後端 API 協議而定
action: "C", // 傳入您指定的動作碼 'C' (Create)
data: data, // 將打卡欄位資料透過額外參數傳入
fromJson: (json) => Leave.fromJson(json), // 這裡填入模型的解析工廠
);
}
}