expense_apply_approval_api.dart 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import 'package:flutter_riverpod/flutter_riverpod.dart';
  2. import '../../core/network/api_client.dart';
  3. import '../../core/utils/date_utils.dart' as du;
  4. import '../../app.dart';
  5. import 'expense_apply_model.dart';
  6. import 'expense_apply_list_controller.dart';
  7. final expenseApplyApprovalApiProvider = Provider<ExpenseApplyApprovalApi>(
  8. (ref) => ExpenseApplyApprovalApi(ref.read(apiClientProvider)),
  9. );
  10. class ApprovalListItem {
  11. final String bilId;
  12. final String bilNo;
  13. final String bilDate;
  14. final String applicant;
  15. final String dept;
  16. final double amount;
  17. final String remark;
  18. final String status;
  19. const ApprovalListItem({
  20. required this.bilId,
  21. required this.bilNo,
  22. required this.bilDate,
  23. required this.applicant,
  24. required this.dept,
  25. required this.amount,
  26. required this.remark,
  27. required this.status,
  28. });
  29. factory ApprovalListItem.fromJson(Map<String, dynamic> json) =>
  30. ApprovalListItem(
  31. bilId: json['bilId'] as String? ?? '',
  32. bilNo: json['bilNo'] as String? ?? '',
  33. bilDate: json['bilDate'] as String? ?? '',
  34. applicant: json['applicant'] as String? ?? '',
  35. dept: json['dept'] as String? ?? '',
  36. amount: (json['amount'] as num?)?.toDouble() ?? 0,
  37. remark: json['remark'] as String? ?? '',
  38. status: json['status'] as String? ?? 'pending',
  39. );
  40. ExpenseApplyModel toExpenseApplyModel() => ExpenseApplyModel(
  41. id: bilNo,
  42. expenseApplyNo: bilNo,
  43. expenseApplyDate:
  44. bilDate.isNotEmpty ? DateTime.tryParse(bilDate) : null,
  45. applicantId: applicant,
  46. applicantName: applicant,
  47. deptId: dept,
  48. deptName: dept,
  49. estimatedAmount: amount,
  50. purpose: remark,
  51. remark: '',
  52. status: status == 'approved' ? 'approved' : 'pending',
  53. createTime: DateTime.now(),
  54. updateTime: DateTime.now(),
  55. );
  56. }
  57. class ExpenseApplyApprovalApi {
  58. final ApiClient _client;
  59. ExpenseApplyApprovalApi(this._client);
  60. Future<Map<String, dynamic>> fetchApprovalList({
  61. required String bilId,
  62. required String status,
  63. String erpCategory = 'MasterService',
  64. String keyword = '',
  65. String startDate = '',
  66. String endDate = '',
  67. int page = 1,
  68. int size = 20,
  69. }) async {
  70. final response = await _client.get<Map<String, dynamic>>(
  71. '/OA/GetApprovalList',
  72. queryParameters: {
  73. 'bilId': bilId,
  74. 'status': status,
  75. 'erpCategory': erpCategory,
  76. 'keyword': keyword,
  77. 'startDate': startDate,
  78. 'endDate': endDate,
  79. 'page': page,
  80. 'size': size,
  81. },
  82. );
  83. return response.data!;
  84. }
  85. }
  86. final expenseApplyApprovalListProvider =
  87. FutureProvider.autoDispose.family<List<ExpenseApplyModel>, String>(
  88. (ref, status) async {
  89. ref.watch(expenseApplyRefreshProvider);
  90. ref.watch(expenseApplyDateStartProvider);
  91. ref.watch(expenseApplyDateEndProvider);
  92. ref.watch(expenseApplyKeywordProvider);
  93. final api = ref.read(expenseApplyApprovalApiProvider);
  94. final dateStart = ref.read(expenseApplyDateStartProvider);
  95. final dateEnd = ref.read(expenseApplyDateEndProvider);
  96. final keyword = ref.read(expenseApplyKeywordProvider);
  97. final response = await api.fetchApprovalList(
  98. bilId: 'AE',
  99. keyword: keyword,
  100. status: status.isEmpty ? '' : status,
  101. startDate: dateStart != null ? du.DateUtils.formatDate(dateStart) : '',
  102. endDate: dateEnd != null ? du.DateUtils.formatDate(dateEnd) : '',
  103. );
  104. final list = (response['list'] as List<dynamic>?) ?? [];
  105. return list
  106. .map((e) =>
  107. ApprovalListItem.fromJson(e as Map<String, dynamic>)
  108. .toExpenseApplyModel())
  109. .toList();
  110. },
  111. );