Transactions

This commit is contained in:
Hillel Coren 2022-09-23 08:58:06 +03:00
parent 0e6814a4b0
commit 19078e2bc9
8 changed files with 96 additions and 27 deletions

View File

@ -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();

View File

@ -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,8 +722,7 @@ class _$TransactionEntity extends TransactionEntity {
$jc(
$jc(
$jc(
$jc($jc($jc(0, amount.hashCode), currencyId.hashCode),
category.hashCode),
$jc($jc($jc($jc(0, amount.hashCode), currencyId.hashCode), category.hashCode),
baseType.hashCode),
accountType.hashCode),
date.hashCode),
@ -720,6 +732,7 @@ class _$TransactionEntity extends TransactionEntity {
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'),

View File

@ -86,7 +86,7 @@ class TransactionRepository {
{
'id': transactionId,
'vendor_id': vendorId,
'ninja_category_id': categoryId,
'category_id': categoryId,
},
),
);

View File

@ -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,

View File

@ -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,

View File

@ -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);
}

View File

@ -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,

View File

@ -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,6 +56,26 @@ class _TransactionViewState extends State<TransactionView> {
secondValue: formatDate(transaction.date, context),
),
ListDivider(),
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(
@ -67,6 +89,7 @@ class _TransactionViewState extends State<TransactionView> {
),
),
],
],
),
);
}