leave add leavetpe_name

This commit is contained in:
2026-03-06 23:55:18 +08:00
parent 0516db1690
commit 38039e8dc0
2 changed files with 34 additions and 4 deletions
+25 -3
View File
@@ -7,16 +7,31 @@ class LeaveApiService {
final GenericApiService _apiService = GenericApiService(); final GenericApiService _apiService = GenericApiService();
// 新增:獲取所有啟用的假別清單 // 新增:獲取所有啟用的假別清單
// 實作快取:Key 為 leavetype_id, Value 為 leavetype_name
static final Map<String, String> _leaveTypeCache = {};
// *** 關聯取得假別名稱 define
// 新增:提供外部存取快取的介面
static String getTypeName(String id) => _leaveTypeCache[id] ?? id;
Future<List<LeaveType>> fetchLeaveTypes() async { Future<List<LeaveType>> fetchLeaveTypes() async {
// 這裡通常不需要特別的 filter,或可根據公司邏輯過濾性別等 // 1. 從 API 取得原始資料
return await _apiService.fetchList<LeaveType>( final List<LeaveType> types = await _apiService.fetchList<LeaveType>(
tableName: "hrs_leavetype", tableName: "hrs_leavetype",
pk: "leavetype_id", pk: "leavetype_id",
queryFilter: "1^100^leavetype_id^*^^^", // 取得前100筆 queryFilter: "1^100^leavetype_id^*^^^",
fromJson: (json) => LeaveType.fromJson(json), fromJson: (json) => LeaveType.fromJson(json),
); );
// 2. 更新快取池
for (var type in types) {
_leaveTypeCache[type.id] = type.name;
} }
return types;
}
// *** 關聯取得假別名稱 define
// 查詢員工清單 (代理人) // 查詢員工清單 (代理人)
Future<List<Map<String, dynamic>>> fetchEmployees(String keyword) async { Future<List<Map<String, dynamic>>> fetchEmployees(String keyword) async {
// 1. 設定查詢過濾器 (依據 Generic API 規範) // 1. 設定查詢過濾器 (依據 Generic API 規範)
@@ -41,6 +56,13 @@ class LeaveApiService {
// 獲取個人請假紀錄 // 獲取個人請假紀錄
Future<List<Leave>> fetchLeaves(String personId) async { Future<List<Leave>> fetchLeaves(String personId) async {
// *** 關聯取得假別名稱,存到 Cache
// 若快取為空,先執行一次同步
if (_leaveTypeCache.isEmpty) {
await fetchLeaveTypes();
}
// *** 關聯取得假別名稱,存到 Cache
// 排序:按單據日期降冪 // 排序:按單據日期降冪
String queryFilter = "1^100^billdate^*^start_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)^^personid^$personId"; String queryFilter = "1^100^billdate^*^start_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)^^personid^$personId";
+9 -1
View File
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'leave_api.dart';
// 假別模型 260110 // 假別模型 260110
class LeaveType { class LeaveType {
@@ -58,6 +59,12 @@ class Leave {
}); });
factory Leave.fromJson(Map<String, dynamic> json) { factory Leave.fromJson(Map<String, dynamic> json) {
// 取的假別關聯名稱
final String typeId = json['leavetype'] as String? ?? '';
// 自動映射名稱:若 API 有給就用 API 的,沒有就去 Service 快取找
final String typeName = json['leavetype_name'] ?? LeaveApiService.getTypeName(typeId);
return Leave( return Leave(
billNo: json['billno'] as String? ?? '', billNo: json['billno'] as String? ?? '',
billDate: json['billdate'] != null ? DateTime.tryParse(json['billdate']) : null, billDate: json['billdate'] != null ? DateTime.tryParse(json['billdate']) : null,
@@ -65,7 +72,8 @@ class Leave {
agentId: json['agentid'] as String? ?? '', agentId: json['agentid'] as String? ?? '',
agentName: json['agentname'] ?? '', /// 假設 API 會 Join 姓名 agentName: json['agentname'] ?? '', /// 假設 API 會 Join 姓名
leaveType: json['leavetype'] as String? ?? '', leaveType: json['leavetype'] as String? ?? '',
leaveTypeName: json['leavetype_name'] ?? json['leavetype'] ?? '', // leaveTypeName: json['leavetype_name'] ?? json['leavetype'] ?? '',
leaveTypeName: typeName, // 這裡現在保證有值
startTime: json['starttime'] != null ? DateTime.tryParse(json['starttime']) : null, startTime: json['starttime'] != null ? DateTime.tryParse(json['starttime']) : null,
endTime: json['endtime'] != null ? DateTime.tryParse(json['endtime']) : null, endTime: json['endtime'] != null ? DateTime.tryParse(json['endtime']) : null,
days: double.tryParse(json['days']?.toString() ?? '0') ?? 0, days: double.tryParse(json['days']?.toString() ?? '0') ?? 0,