Transactions
This commit is contained in:
parent
0e6814a4b0
commit
19078e2bc9
|
|
@ -52,6 +52,7 @@ class TransactionFields {
|
|||
static const String deposit = 'deposit';
|
||||
static const String withdrawal = 'withdrawal';
|
||||
static const String currency = 'currency';
|
||||
static const String vendor = 'vendor';
|
||||
static const String category = 'category';
|
||||
static const String bankAccountId = 'bank_account_id';
|
||||
static const String bankAccount = 'bank_account';
|
||||
|
|
@ -83,6 +84,7 @@ abstract class TransactionEntity extends Object
|
|||
date: convertDateTimeToSqlDate(),
|
||||
description: '',
|
||||
expenseId: '',
|
||||
vendorId: '',
|
||||
invoiceIds: '',
|
||||
statusId: '',
|
||||
baseType: TYPE_DEPOSIT,
|
||||
|
|
@ -134,6 +136,9 @@ abstract class TransactionEntity extends Object
|
|||
@BuiltValueField(wireName: 'expense_id')
|
||||
String get expenseId;
|
||||
|
||||
@BuiltValueField(wireName: 'vendor_id')
|
||||
String get vendorId;
|
||||
|
||||
@BuiltValueField(wireName: 'transaction_id')
|
||||
int get transactionId;
|
||||
|
||||
|
|
@ -148,6 +153,8 @@ abstract class TransactionEntity extends Object
|
|||
|
||||
double get deposit => isDeposit ? amount : 0;
|
||||
|
||||
bool get isConverted => statusId == kTransactionStatusConverted;
|
||||
|
||||
@override
|
||||
List<EntityAction> getActions(
|
||||
{UserCompanyEntity userCompany,
|
||||
|
|
@ -174,6 +181,7 @@ abstract class TransactionEntity extends Object
|
|||
TransactionEntity transaction,
|
||||
String sortField,
|
||||
bool sortAscending,
|
||||
BuiltMap<String, VendorEntity> vendorMap,
|
||||
BuiltMap<String, InvoiceEntity> invoiceMap,
|
||||
BuiltMap<String, ExpenseEntity> expenseMap,
|
||||
BuiltMap<String, ExpenseCategoryEntity> expenseCategoryMap,
|
||||
|
|
@ -219,6 +227,13 @@ abstract class TransactionEntity extends Object
|
|||
.toLowerCase()
|
||||
.compareTo(expenseB.listDisplayName.toLowerCase());
|
||||
break;
|
||||
case TransactionFields.vendor:
|
||||
final vendorA = vendorMap[transactionA.vendorId] ?? VendorEntity();
|
||||
final vendorB = vendorMap[transactionB.vendorId] ?? VendorEntity();
|
||||
response = vendorA.listDisplayName
|
||||
.toLowerCase()
|
||||
.compareTo(vendorB.listDisplayName.toLowerCase());
|
||||
break;
|
||||
case TransactionFields.category:
|
||||
final categoryA = expenseCategoryMap[transactionA.categoryId] ??
|
||||
ExpenseCategoryEntity();
|
||||
|
|
|
|||
|
|
@ -157,6 +157,9 @@ class _$TransactionEntitySerializer
|
|||
'expense_id',
|
||||
serializers.serialize(object.expenseId,
|
||||
specifiedType: const FullType(String)),
|
||||
'vendor_id',
|
||||
serializers.serialize(object.vendorId,
|
||||
specifiedType: const FullType(String)),
|
||||
'transaction_id',
|
||||
serializers.serialize(object.transactionId,
|
||||
specifiedType: const FullType(int)),
|
||||
|
|
@ -264,6 +267,10 @@ class _$TransactionEntitySerializer
|
|||
result.expenseId = serializers.deserialize(value,
|
||||
specifiedType: const FullType(String)) as String;
|
||||
break;
|
||||
case 'vendor_id':
|
||||
result.vendorId = serializers.deserialize(value,
|
||||
specifiedType: const FullType(String)) as String;
|
||||
break;
|
||||
case 'transaction_id':
|
||||
result.transactionId = serializers.deserialize(value,
|
||||
specifiedType: const FullType(int)) as int;
|
||||
|
|
@ -574,6 +581,8 @@ class _$TransactionEntity extends TransactionEntity {
|
|||
@override
|
||||
final String expenseId;
|
||||
@override
|
||||
final String vendorId;
|
||||
@override
|
||||
final int transactionId;
|
||||
@override
|
||||
final bool isChanged;
|
||||
|
|
@ -609,6 +618,7 @@ class _$TransactionEntity extends TransactionEntity {
|
|||
this.categoryId,
|
||||
this.invoiceIds,
|
||||
this.expenseId,
|
||||
this.vendorId,
|
||||
this.transactionId,
|
||||
this.isChanged,
|
||||
this.createdAt,
|
||||
|
|
@ -642,6 +652,8 @@ class _$TransactionEntity extends TransactionEntity {
|
|||
invoiceIds, 'TransactionEntity', 'invoiceIds');
|
||||
BuiltValueNullFieldError.checkNotNull(
|
||||
expenseId, 'TransactionEntity', 'expenseId');
|
||||
BuiltValueNullFieldError.checkNotNull(
|
||||
vendorId, 'TransactionEntity', 'vendorId');
|
||||
BuiltValueNullFieldError.checkNotNull(
|
||||
transactionId, 'TransactionEntity', 'transactionId');
|
||||
BuiltValueNullFieldError.checkNotNull(
|
||||
|
|
@ -677,6 +689,7 @@ class _$TransactionEntity extends TransactionEntity {
|
|||
categoryId == other.categoryId &&
|
||||
invoiceIds == other.invoiceIds &&
|
||||
expenseId == other.expenseId &&
|
||||
vendorId == other.vendorId &&
|
||||
transactionId == other.transactionId &&
|
||||
isChanged == other.isChanged &&
|
||||
createdAt == other.createdAt &&
|
||||
|
|
@ -709,17 +722,17 @@ class _$TransactionEntity extends TransactionEntity {
|
|||
$jc(
|
||||
$jc(
|
||||
$jc(
|
||||
$jc($jc($jc(0, amount.hashCode), currencyId.hashCode),
|
||||
category.hashCode),
|
||||
baseType.hashCode),
|
||||
accountType.hashCode),
|
||||
date.hashCode),
|
||||
bankAccountId.hashCode),
|
||||
description.hashCode),
|
||||
statusId.hashCode),
|
||||
categoryId.hashCode),
|
||||
invoiceIds.hashCode),
|
||||
expenseId.hashCode),
|
||||
$jc($jc($jc($jc(0, amount.hashCode), currencyId.hashCode), category.hashCode),
|
||||
baseType.hashCode),
|
||||
accountType.hashCode),
|
||||
date.hashCode),
|
||||
bankAccountId.hashCode),
|
||||
description.hashCode),
|
||||
statusId.hashCode),
|
||||
categoryId.hashCode),
|
||||
invoiceIds.hashCode),
|
||||
expenseId.hashCode),
|
||||
vendorId.hashCode),
|
||||
transactionId.hashCode),
|
||||
isChanged.hashCode),
|
||||
createdAt.hashCode),
|
||||
|
|
@ -746,6 +759,7 @@ class _$TransactionEntity extends TransactionEntity {
|
|||
..add('categoryId', categoryId)
|
||||
..add('invoiceIds', invoiceIds)
|
||||
..add('expenseId', expenseId)
|
||||
..add('vendorId', vendorId)
|
||||
..add('transactionId', transactionId)
|
||||
..add('isChanged', isChanged)
|
||||
..add('createdAt', createdAt)
|
||||
|
|
@ -812,6 +826,10 @@ class TransactionEntityBuilder
|
|||
String get expenseId => _$this._expenseId;
|
||||
set expenseId(String expenseId) => _$this._expenseId = expenseId;
|
||||
|
||||
String _vendorId;
|
||||
String get vendorId => _$this._vendorId;
|
||||
set vendorId(String vendorId) => _$this._vendorId = vendorId;
|
||||
|
||||
int _transactionId;
|
||||
int get transactionId => _$this._transactionId;
|
||||
set transactionId(int transactionId) => _$this._transactionId = transactionId;
|
||||
|
|
@ -869,6 +887,7 @@ class TransactionEntityBuilder
|
|||
_categoryId = $v.categoryId;
|
||||
_invoiceIds = $v.invoiceIds;
|
||||
_expenseId = $v.expenseId;
|
||||
_vendorId = $v.vendorId;
|
||||
_transactionId = $v.transactionId;
|
||||
_isChanged = $v.isChanged;
|
||||
_createdAt = $v.createdAt;
|
||||
|
|
@ -919,6 +938,7 @@ class TransactionEntityBuilder
|
|||
categoryId: BuiltValueNullFieldError.checkNotNull(categoryId, 'TransactionEntity', 'categoryId'),
|
||||
invoiceIds: BuiltValueNullFieldError.checkNotNull(invoiceIds, 'TransactionEntity', 'invoiceIds'),
|
||||
expenseId: BuiltValueNullFieldError.checkNotNull(expenseId, 'TransactionEntity', 'expenseId'),
|
||||
vendorId: BuiltValueNullFieldError.checkNotNull(vendorId, 'TransactionEntity', 'vendorId'),
|
||||
transactionId: BuiltValueNullFieldError.checkNotNull(transactionId, 'TransactionEntity', 'transactionId'),
|
||||
isChanged: isChanged,
|
||||
createdAt: BuiltValueNullFieldError.checkNotNull(createdAt, 'TransactionEntity', 'createdAt'),
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ class TransactionRepository {
|
|||
{
|
||||
'id': transactionId,
|
||||
'vendor_id': vendorId,
|
||||
'ninja_category_id': categoryId,
|
||||
'category_id': categoryId,
|
||||
},
|
||||
),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -5,12 +5,13 @@ import 'package:built_collection/built_collection.dart';
|
|||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||
import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart';
|
||||
|
||||
var memoizedDropdownTransactionList = memo9(
|
||||
var memoizedDropdownTransactionList = memo10(
|
||||
(BuiltMap<String, TransactionEntity> transactionMap,
|
||||
BuiltList<String> transactionList,
|
||||
StaticState staticState,
|
||||
BuiltMap<String, UserEntity> userMap,
|
||||
BuiltMap<String, InvoiceEntity> invoiceMap,
|
||||
BuiltMap<String, VendorEntity> vendorMap,
|
||||
BuiltMap<String, ExpenseEntity> expenseMap,
|
||||
BuiltMap<String, ExpenseCategoryEntity> expenseCategoryMap,
|
||||
BuiltMap<String, BankAccountEntity> bankAccountMap,
|
||||
|
|
@ -21,6 +22,7 @@ var memoizedDropdownTransactionList = memo9(
|
|||
staticState,
|
||||
userMap,
|
||||
invoiceMap,
|
||||
vendorMap,
|
||||
expenseMap,
|
||||
expenseCategoryMap,
|
||||
bankAccountMap,
|
||||
|
|
@ -32,6 +34,7 @@ List<String> dropdownTransactionsSelector(
|
|||
StaticState staticState,
|
||||
BuiltMap<String, UserEntity> userMap,
|
||||
BuiltMap<String, InvoiceEntity> invoiceMap,
|
||||
BuiltMap<String, VendorEntity> vendorMap,
|
||||
BuiltMap<String, ExpenseEntity> expenseMap,
|
||||
BuiltMap<String, ExpenseCategoryEntity> expenseCategoryMap,
|
||||
BuiltMap<String, BankAccountEntity> bankAccountMap,
|
||||
|
|
@ -50,16 +53,17 @@ List<String> dropdownTransactionsSelector(
|
|||
final transactionA = transactionMap[transactionAId];
|
||||
final transactionB = transactionMap[transactionBId];
|
||||
return transactionA.compareTo(transactionB, TransactionFields.date, true,
|
||||
invoiceMap, expenseMap, expenseCategoryMap, bankAccountMap);
|
||||
vendorMap, invoiceMap, expenseMap, expenseCategoryMap, bankAccountMap);
|
||||
});
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
var memoizedFilteredTransactionList = memo8((SelectionState selectionState,
|
||||
var memoizedFilteredTransactionList = memo9((SelectionState selectionState,
|
||||
BuiltMap<String, TransactionEntity> transactionMap,
|
||||
BuiltList<String> transactionList,
|
||||
BuiltMap<String, InvoiceEntity> invoiceMap,
|
||||
BuiltMap<String, VendorEntity> vendorMap,
|
||||
BuiltMap<String, ExpenseEntity> expenseMap,
|
||||
BuiltMap<String, ExpenseCategoryEntity> expenseCategoryMap,
|
||||
BuiltMap<String, BankAccountEntity> bankAccountMap,
|
||||
|
|
@ -69,6 +73,7 @@ var memoizedFilteredTransactionList = memo8((SelectionState selectionState,
|
|||
transactionMap,
|
||||
transactionList,
|
||||
invoiceMap,
|
||||
vendorMap,
|
||||
expenseMap,
|
||||
expenseCategoryMap,
|
||||
bankAccountMap,
|
||||
|
|
@ -79,6 +84,7 @@ List<String> filteredTransactionsSelector(
|
|||
BuiltMap<String, TransactionEntity> transactionMap,
|
||||
BuiltList<String> transactionList,
|
||||
BuiltMap<String, InvoiceEntity> invoiceMap,
|
||||
BuiltMap<String, VendorEntity> vendorMap,
|
||||
BuiltMap<String, ExpenseEntity> expenseMap,
|
||||
BuiltMap<String, ExpenseCategoryEntity> expenseCategoryMap,
|
||||
BuiltMap<String, BankAccountEntity> bankAccountMap,
|
||||
|
|
@ -112,6 +118,7 @@ List<String> filteredTransactionsSelector(
|
|||
transactionB,
|
||||
transactionListState.sortField,
|
||||
transactionListState.sortAscending,
|
||||
vendorMap,
|
||||
invoiceMap,
|
||||
expenseMap,
|
||||
expenseCategoryMap,
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@ class TransactionListVM {
|
|||
state.transactionState.map,
|
||||
state.transactionState.list,
|
||||
state.invoiceState.map,
|
||||
state.vendorState.map,
|
||||
state.expenseState.map,
|
||||
state.expenseCategoryState.map,
|
||||
state.bankAccountState.map,
|
||||
|
|
|
|||
|
|
@ -97,8 +97,10 @@ class TransactionPresenter extends EntityPresenter {
|
|||
case TransactionFields.expense:
|
||||
final expense = state.expenseState.get(transaction.expenseId);
|
||||
return LinkTextRelatedEntity(entity: expense, relation: transaction);
|
||||
case TransactionFields.vendor:
|
||||
final vendor = state.vendorState.get(transaction.vendorId);
|
||||
return LinkTextRelatedEntity(entity: vendor, relation: transaction);
|
||||
case TransactionFields.category:
|
||||
return Text(transaction.categoryId);
|
||||
final category = state.expenseCategoryState.get(transaction.categoryId);
|
||||
return LinkTextRelatedEntity(entity: category, relation: transaction);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ class TransactionScreenVM {
|
|||
state.transactionState.map,
|
||||
state.transactionState.list,
|
||||
state.invoiceState.map,
|
||||
state.vendorState.map,
|
||||
state.expenseState.map,
|
||||
state.expenseCategoryState.map,
|
||||
state.bankAccountState.map,
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:invoiceninja_flutter/constants.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/buttons/elevated_button.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/date_picker.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
|
||||
|
|
@ -36,6 +37,7 @@ class _TransactionViewState extends State<TransactionView> {
|
|||
final viewModel = widget.viewModel;
|
||||
final transaction = viewModel.transaction;
|
||||
final localization = AppLocalization.of(context);
|
||||
final state = viewModel.state;
|
||||
|
||||
return ViewScaffold(
|
||||
isFilter: widget.isFilter,
|
||||
|
|
@ -54,18 +56,39 @@ class _TransactionViewState extends State<TransactionView> {
|
|||
secondValue: formatDate(transaction.date, context),
|
||||
),
|
||||
ListDivider(),
|
||||
if (false)
|
||||
Expanded(
|
||||
child: _MatchDeposits(
|
||||
viewModel: viewModel,
|
||||
if (transaction.isConverted) ...[
|
||||
if (true)
|
||||
...transaction.invoiceIds
|
||||
.split(',')
|
||||
.map((invoiceId) => state.invoiceState.get(invoiceId))
|
||||
.map((invoice) =>
|
||||
EntityListTile(entity: invoice, isFilter: false))
|
||||
else ...[
|
||||
EntitiesListTile(
|
||||
entity: state.vendorState.get(transaction.vendorId),
|
||||
isFilter: false),
|
||||
EntitiesListTile(
|
||||
entity:
|
||||
state.expenseCategoryState.get(transaction.categoryId),
|
||||
isFilter: false),
|
||||
EntitiesListTile(
|
||||
entity: state.expenseState.get(transaction.expenseId),
|
||||
isFilter: false),
|
||||
]
|
||||
] else ...[
|
||||
if (false)
|
||||
Expanded(
|
||||
child: _MatchDeposits(
|
||||
viewModel: viewModel,
|
||||
),
|
||||
)
|
||||
else
|
||||
Expanded(
|
||||
child: _MatchWithdrawals(
|
||||
viewModel: viewModel,
|
||||
),
|
||||
),
|
||||
)
|
||||
else
|
||||
Expanded(
|
||||
child: _MatchWithdrawals(
|
||||
viewModel: viewModel,
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in New Issue