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> fetchLeaveTypes() async { // 這裡通常不需要特別的 filter,或可根據公司邏輯過濾性別等 return await _apiService.fetchList( tableName: "hrs_leavetype", pk: "leavetype_id", queryFilter: "1^100^leavetype_id^*^^^", // 取得前100筆 fromJson: (json) => LeaveType.fromJson(json), ); } // 查詢員工清單 (代理人) Future>> fetchEmployees(String keyword) async { // 1. 設定查詢過濾器 (依據 Generic API 規範) // 格式:當前頁^每頁筆數^排序欄位^關鍵字欄位^關鍵字內容 // 我們同時搜尋姓名(personcname)或工號(personid) String queryFilter = "1^50^personid^*^^^personcname^$keyword"; final List result = await _apiService.fetchList( 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> fetchLeaves(String personId) async { // 排序:按單據日期降冪 String queryFilter = "1^100^billdate^*^^^personid^$personId"; return await _apiService.fetchList( tableName: "hrs_leave", pk: "billno", queryFilter: queryFilter, fromJson: (json) => Leave.fromJson(json), ); } // 提交請假單 (新增) //Future createLeave(Leave leave) async { Future> createLeave(Leave leave) async { final String currentUid = AuthManager().currentUserId ?? leave.personId; final Map 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( tableName: "hrs_leave", pk: "ClockInId", queryFilter: "", // 通常新增不需要 filter,依後端 API 協議而定 action: "C", // 傳入您指定的動作碼 'C' (Create) data: data, // 將打卡欄位資料透過額外參數傳入 fromJson: (json) => Leave.fromJson(json), // 這裡填入模型的解析工廠 ); } }