From fe950c5b075c465f2238a37adea4a38bd1da03ed Mon Sep 17 00:00:00 2001 From: Vaibhav Surve Date: Tue, 11 Nov 2025 14:55:37 +0530 Subject: [PATCH] fixed pegination and for rejected status no data displayed --- .../finance/payment_request_controller.dart | 17 +++-- .../payment_request_details_model.dart | 65 +++++++++++++++---- 2 files changed, 62 insertions(+), 20 deletions(-) diff --git a/lib/controller/finance/payment_request_controller.dart b/lib/controller/finance/payment_request_controller.dart index 67e198d..63bd234 100644 --- a/lib/controller/finance/payment_request_controller.dart +++ b/lib/controller/finance/payment_request_controller.dart @@ -63,7 +63,7 @@ class PaymentRequestController extends GetxController { isLoading.value = false; } - // ---------------- Load More ---------------- +// ---------------- Load More ---------------- Future loadMorePaymentRequests() async { if (isLoading.value || !_hasMoreData) return; @@ -74,7 +74,7 @@ class PaymentRequestController extends GetxController { isLoading.value = false; } - // ---------------- Internal API Call ---------------- +// ---------------- Internal API Call ---------------- Future _fetchPaymentRequestsFromApi() async { try { final response = await ApiService.getExpensePaymentRequestListApi( @@ -89,21 +89,26 @@ class PaymentRequestController extends GetxController { // First page, replace the list paymentRequests.assignAll(response.data.data); } else { - // Insert new data at the top for latest first - paymentRequests.insertAll(0, response.data.data); + // Append next page items at the end + paymentRequests.addAll(response.data.data); + } + + // If returned data is less than page size, no more data + if (response.data.data.length < _pageSize) { + _hasMoreData = false; } } else { if (_pageNumber == 1) { errorMessage.value = 'No payment requests found.'; - } else { - _hasMoreData = false; } + _hasMoreData = false; } } catch (e, stack) { errorMessage.value = 'Failed to fetch payment requests.'; logSafe("Exception in _fetchPaymentRequestsFromApi: $e", level: LogLevel.error); logSafe("StackTrace: $stack", level: LogLevel.debug); + _hasMoreData = false; } } diff --git a/lib/model/finance/payment_request_details_model.dart b/lib/model/finance/payment_request_details_model.dart index 6a1d899..aa4779f 100644 --- a/lib/model/finance/payment_request_details_model.dart +++ b/lib/model/finance/payment_request_details_model.dart @@ -113,29 +113,37 @@ class PaymentRequestData { : null, dueDate: DateTime.parse(json['dueDate']), project: Project.fromJson(json['project']), - recurringPayment: json['recurringPayment'], + recurringPayment: json['recurringPayment'] != null + ? RecurringPayment.fromJson(json['recurringPayment']) + : null, expenseCategory: ExpenseCategory.fromJson(json['expenseCategory']), expenseStatus: ExpenseStatus.fromJson(json['expenseStatus']), paidTransactionId: json['paidTransactionId'], paidAt: json['paidAt'] != null ? DateTime.parse(json['paidAt']) : null, paidBy: json['paidBy'] != null ? User.fromJson(json['paidBy']) : null, - isAdvancePayment: json['isAdvancePayment'], + isAdvancePayment: json['isAdvancePayment'] ?? false, createdAt: DateTime.parse(json['createdAt']), createdBy: User.fromJson(json['createdBy']), updatedAt: DateTime.parse(json['updatedAt']), updatedBy: json['updatedBy'] != null ? User.fromJson(json['updatedBy']) : null, - nextStatus: (json['nextStatus'] as List) - .map((e) => NextStatus.fromJson(e)) - .toList(), - updateLogs: (json['updateLogs'] as List) - .map((e) => UpdateLog.fromJson(e)) - .toList(), - attachments: (json['attachments'] as List) - .map((e) => Attachment.fromJson(e)) - .toList(), - isActive: json['isActive'], - isExpenseCreated: json['isExpenseCreated'], + nextStatus: (json['nextStatus'] != null + ? (json['nextStatus'] as List) + .map((e) => NextStatus.fromJson(e)) + .toList() + : []), + updateLogs: (json['updateLogs'] != null + ? (json['updateLogs'] as List) + .map((e) => UpdateLog.fromJson(e)) + .toList() + : []), + attachments: (json['attachments'] != null + ? (json['attachments'] as List) + .map((e) => Attachment.fromJson(e)) + .toList() + : []), + isActive: json['isActive'] ?? true, + isExpenseCreated: json['isExpenseCreated'] ?? false, ); Map toJson() => { @@ -169,6 +177,35 @@ class PaymentRequestData { }; } +class RecurringPayment { + String id; + String recurringPaymentUID; + double amount; + bool isVariable; + + RecurringPayment({ + required this.id, + required this.recurringPaymentUID, + required this.amount, + required this.isVariable, + }); + + factory RecurringPayment.fromJson(Map json) => + RecurringPayment( + id: json['id'], + recurringPaymentUID: json['recurringPaymentUID'], + amount: (json['amount'] as num).toDouble(), + isVariable: json['isVariable'], + ); + + Map toJson() => { + 'id': id, + 'recurringPaymentUID': recurringPaymentUID, + 'amount': amount, + 'isVariable': isVariable, + }; +} + class Currency { String id; String currencyCode; @@ -372,7 +409,7 @@ class NextStatus { class UpdateLog { String id; - ExpenseStatus? status; + ExpenseStatus? status; ExpenseStatus nextStatus; String comment; DateTime updatedAt;