import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/ui/app/presenters/entity_presenter.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; class ExpensePresenter extends EntityPresenter { static List getDefaultTableFields(UserCompanyEntity userCompany) { return [ ExpenseFields.vendor, ExpenseFields.client, ExpenseFields.expenseDate, ExpenseFields.amount, ExpenseFields.publicNotes, EntityFields.state, ]; } static List getAllTableFields(UserCompanyEntity userCompany) { return [ ...getDefaultTableFields(userCompany), ...EntityPresenter.getBaseFields(), ExpenseFields.number, ExpenseFields.privateNotes, ExpenseFields.shouldBeInvoiced, ExpenseFields.transactionId, ExpenseFields.transactionReference, ExpenseFields.bankId, ExpenseFields.expenseCurrencyId, ExpenseFields.expenseCategoryId, ExpenseFields.expenseCategory, ExpenseFields.paymentDate, ExpenseFields.exchangeRate, ExpenseFields.invoiceCurrencyId, ExpenseFields.taxName1, ExpenseFields.taxName2, ExpenseFields.taxRate1, ExpenseFields.taxRate2, ExpenseFields.clientId, ExpenseFields.invoiceId, ExpenseFields.vendorId, ExpenseFields.customValue1, ExpenseFields.customValue2, ExpenseFields.customValue3, ExpenseFields.customValue4, ExpenseFields.updatedAt, ExpenseFields.archivedAt, ExpenseFields.isDeleted, ExpenseFields.documents, ]; } @override Widget getField({String field, BuildContext context}) { final state = StoreProvider.of(context).state; final expense = entity as ExpenseEntity; switch (field) { case ExpenseFields.vendor: case ExpenseFields.vendorId: return Text((state.vendorState.map[expense.vendorId] ?? VendorEntity()) .listDisplayName); case ExpenseFields.clientId: case ExpenseFields.client: return Text((state.clientState.map[expense.clientId] ?? ClientEntity()) .listDisplayName); case ExpenseFields.expenseDate: return Text(formatDate(expense.paymentDate, context)); case ExpenseFields.amount: return Text(formatNumber(expense.amount, context)); case ExpenseFields.publicNotes: return Text(expense.publicNotes); case ExpenseFields.number: return Text(expense.number); case ExpenseFields.privateNotes: return Text(expense.privateNotes); case ExpenseFields.shouldBeInvoiced: return Text(expense.shouldBeInvoiced.toString()); case ExpenseFields.transactionId: return Text(expense.transactionId); case ExpenseFields.transactionReference: return Text(expense.transactionReference); case ExpenseFields.bankId: return Text(expense.bankId); case ExpenseFields.expenseCurrencyId: return Text(state.staticState.currencyMap[expense.expenseCurrencyId] ?.listDisplayName ?? ''); case ExpenseFields.expenseCategory: case ExpenseFields.expenseCategoryId: return Text(state.expenseCategoryState.map[expense.categoryId] ?.listDisplayName ?? ''); case ExpenseFields.paymentDate: return Text(formatDate(expense.paymentDate, context)); case ExpenseFields.exchangeRate: return Text(formatNumber(expense.exchangeRate, context, formatNumberType: FormatNumberType.double)); case ExpenseFields.invoiceCurrencyId: return Text(state.staticState.currencyMap[expense.invoiceCurrencyId] ?.listDisplayName ?? ''); case ExpenseFields.taxName1: return Text(expense.taxName1); case ExpenseFields.taxName2: return Text(expense.taxName2); case ExpenseFields.taxRate1: return Text(formatNumber(expense.taxRate1, context, formatNumberType: FormatNumberType.double)); case ExpenseFields.taxRate2: return Text(formatNumber(expense.taxRate2, context, formatNumberType: FormatNumberType.double)); case ExpenseFields.invoiceId: return Text( state.invoiceState.map[expense.invoiceId]?.listDisplayName ?? ''); case ExpenseFields.customValue1: return Text(expense.customValue1); case ExpenseFields.customValue2: return Text(expense.customValue2); case ExpenseFields.customValue3: return Text(expense.customValue3); case ExpenseFields.customValue4: return Text(expense.customValue4); case ExpenseFields.updatedAt: return Text(formatDate( convertTimestampToDateString(expense.updatedAt), context)); case ExpenseFields.archivedAt: return Text(formatDate( convertTimestampToDateString(expense.archivedAt), context)); case ExpenseFields.isDeleted: return Text(expense.isDeleted.toString()); case ExpenseFields.documents: return Text('${expense.documents.length}'); } return super.getField(field: field, context: context); } }