feat: rename Expense Type to Expense Category across controllers, models, and views for consistency

This commit is contained in:
Vaibhav Surve 2025-11-19 17:20:44 +05:30
parent 5dd09869ad
commit 92c739045c
8 changed files with 20 additions and 20 deletions

View File

@ -58,7 +58,7 @@ class DashboardController extends GetxController {
final Rx<PendingExpensesData?> pendingExpensesData = final Rx<PendingExpensesData?> pendingExpensesData =
Rx<PendingExpensesData?>(null); Rx<PendingExpensesData?>(null);
// ========================= // =========================
// Expense Type Report // Expense Category Report
// ========================= // =========================
final RxBool isExpenseTypeReportLoading = false.obs; final RxBool isExpenseTypeReportLoading = false.obs;
final Rx<ExpenseTypeReportData?> expenseTypeReportData = final Rx<ExpenseTypeReportData?> expenseTypeReportData =
@ -355,15 +355,15 @@ class DashboardController extends GetxController {
if (response != null && response.success) { if (response != null && response.success) {
expenseTypeReportData.value = response.data; expenseTypeReportData.value = response.data;
logSafe('Expense Type Report fetched successfully.', logSafe('Expense Category Report fetched successfully.',
level: LogLevel.info); level: LogLevel.info);
} else { } else {
expenseTypeReportData.value = null; expenseTypeReportData.value = null;
logSafe('Failed to fetch Expense Type Report.', level: LogLevel.error); logSafe('Failed to fetch Expense Category Report.', level: LogLevel.error);
} }
} catch (e, st) { } catch (e, st) {
expenseTypeReportData.value = null; expenseTypeReportData.value = null;
logSafe('Error fetching Expense Type Report', logSafe('Error fetching Expense Category Report',
level: LogLevel.error, error: e, stackTrace: st); level: LogLevel.error, error: e, stackTrace: st);
} finally { } finally {
isExpenseTypeReportLoading.value = false; isExpenseTypeReportLoading.value = false;

View File

@ -196,7 +196,7 @@ class AddExpenseController extends GetxController {
'Location: ${locationController.text}', 'Location: ${locationController.text}',
'Transaction Date: ${transactionDateController.text}', 'Transaction Date: ${transactionDateController.text}',
'No. of Persons: ${noOfPersonsController.text}', 'No. of Persons: ${noOfPersonsController.text}',
'Expense Type: ${selectedExpenseType.value?.name}', 'Expense Category: ${selectedExpenseType.value?.name}',
'Payment Mode: ${selectedPaymentMode.value?.name}', 'Payment Mode: ${selectedPaymentMode.value?.name}',
'Paid By: ${selectedPaidBy.value?.name}', 'Paid By: ${selectedPaidBy.value?.name}',
'Attachments: ${attachments.length}', 'Attachments: ${attachments.length}',
@ -445,7 +445,7 @@ class AddExpenseController extends GetxController {
return null; return null;
} }
if (expenseType == null) { if (expenseType == null) {
_errorSnackbar("Expense type not selected"); _errorSnackbar("Expense Category not selected");
return null; return null;
} }
if (paymentMode == null) { if (paymentMode == null) {
@ -517,7 +517,7 @@ class AddExpenseController extends GetxController {
final missing = <String>[]; final missing = <String>[];
if (selectedProject.value.isEmpty) missing.add("Project"); if (selectedProject.value.isEmpty) missing.add("Project");
if (selectedExpenseType.value == null) missing.add("Expense Type"); if (selectedExpenseType.value == null) missing.add("Expense Category");
if (selectedPaymentMode.value == null) missing.add("Payment Mode"); if (selectedPaymentMode.value == null) missing.add("Payment Mode");
if (selectedPaidBy.value == null) missing.add("Paid By"); if (selectedPaidBy.value == null) missing.add("Paid By");
if (amountController.text.trim().isEmpty) missing.add("Amount"); if (amountController.text.trim().isEmpty) missing.add("Amount");

View File

@ -213,7 +213,7 @@ class ExpenseController extends GetxController {
selectedCreatedByEmployees.clear(); selectedCreatedByEmployees.clear();
} }
/// Fetch master data: expense types, payment modes, and expense status /// Fetch master data: Expense Categorys, payment modes, and expense status
Future<void> fetchMasterData() async { Future<void> fetchMasterData() async {
try { try {
final expenseTypesData = await ApiService.getMasterExpenseTypes(); final expenseTypesData = await ApiService.getMasterExpenseTypes();

View File

@ -1329,14 +1329,14 @@ class ApiService {
return null; return null;
} }
/// Get Expense Type Report /// Get Expense Category Report
static Future<ExpenseTypeReportResponse?> getExpenseTypeReportApi({ static Future<ExpenseTypeReportResponse?> getExpenseTypeReportApi({
required String projectId, required String projectId,
required DateTime startDate, required DateTime startDate,
required DateTime endDate, required DateTime endDate,
}) async { }) async {
const endpoint = ApiEndpoints.getExpenseTypeReport; const endpoint = ApiEndpoints.getExpenseTypeReport;
logSafe("Fetching Expense Type Report for projectId: $projectId"); logSafe("Fetching Expense Category Report for projectId: $projectId");
try { try {
final response = await _getRequest( final response = await _getRequest(
@ -1349,13 +1349,13 @@ class ApiService {
); );
if (response == null) { if (response == null) {
logSafe("Expense Type Report request failed: null response", logSafe("Expense Category Report request failed: null response",
level: LogLevel.error); level: LogLevel.error);
return null; return null;
} }
final jsonResponse = final jsonResponse =
_parseResponseForAllData(response, label: "Expense Type Report"); _parseResponseForAllData(response, label: "Expense Category Report");
if (jsonResponse != null) { if (jsonResponse != null) {
return ExpenseTypeReportResponse.fromJson(jsonResponse); return ExpenseTypeReportResponse.fromJson(jsonResponse);
@ -2428,11 +2428,11 @@ class ApiService {
: null); : null);
} }
/// Fetch Master Expense Types /// Fetch Master Expense Categorys
static Future<List<dynamic>?> getMasterExpenseTypes() async { static Future<List<dynamic>?> getMasterExpenseTypes() async {
const endpoint = ApiEndpoints.getMasterExpenseCategory; const endpoint = ApiEndpoints.getMasterExpenseCategory;
return _getRequest(endpoint).then((res) => res != null return _getRequest(endpoint).then((res) => res != null
? _parseResponse(res, label: 'Master Expense Types') ? _parseResponse(res, label: 'Master Expense Categorys')
: null); : null);
} }

View File

@ -203,7 +203,7 @@ class _ChartHeader extends StatelessWidget {
final selectedType = controller.selectedExpenseType.value; final selectedType = controller.selectedExpenseType.value;
return PopupMenuButton<String>( return PopupMenuButton<String>(
tooltip: 'Filter by Expense Type', tooltip: 'Filter by Expense Category',
onSelected: (String value) { onSelected: (String value) {
if (value == 'all') { if (value == 'all') {
controller.updateSelectedExpenseType(null); controller.updateSelectedExpenseType(null);

View File

@ -112,7 +112,7 @@ class _AddExpenseBottomSheetState extends State<_AddExpenseBottomSheet>
return false; return false;
} }
if (controller.selectedExpenseType.value == null) { if (controller.selectedExpenseType.value == null) {
_showError("Please select an expense type"); _showError("Please select an Expense Category");
return false; return false;
} }
if (controller.selectedPaymentMode.value == null) { if (controller.selectedPaymentMode.value == null) {
@ -178,10 +178,10 @@ class _AddExpenseBottomSheetState extends State<_AddExpenseBottomSheet>
_buildDropdownField<ExpenseTypeModel>( _buildDropdownField<ExpenseTypeModel>(
icon: Icons.category_outlined, icon: Icons.category_outlined,
title: "Expense Type", title: "Expense Category",
requiredField: true, requiredField: true,
value: controller.selectedExpenseType.value?.name ?? value: controller.selectedExpenseType.value?.name ??
"Select Expense Type", "Select Expense Category",
onTap: () => _showOptionList<ExpenseTypeModel>( onTap: () => _showOptionList<ExpenseTypeModel>(
controller.expenseTypes.toList(), controller.expenseTypes.toList(),
(e) => e.name, (e) => e.name,

View File

@ -312,7 +312,7 @@ class Project {
}; };
} }
/// --- Expense Type --- /// --- Expense Category ---
class ExpenseType { class ExpenseType {
final String id; final String id;
final String name; final String name;

View File

@ -598,7 +598,7 @@ class _InvoiceDetailsTable extends StatelessWidget {
// List of all label-value pairs // List of all label-value pairs
final details = [ final details = [
{'label': 'Expense Type', 'value': expense.expensesType.name}, {'label': 'Expense Category', 'value': expense.expensesType.name},
{'label': 'Payment Mode', 'value': expense.paymentMode.name}, {'label': 'Payment Mode', 'value': expense.paymentMode.name},
{'label': 'Transaction Date', 'value': transactionDate}, {'label': 'Transaction Date', 'value': transactionDate},
{'label': 'Created At', 'value': createdAt}, {'label': 'Created At', 'value': createdAt},