Add participant field to transactions

This commit is contained in:
Hillel Coren 2024-01-17 15:12:40 +02:00
parent ee13090a7d
commit 81e1d47dfe
4 changed files with 23 additions and 17 deletions

View File

@ -67,6 +67,7 @@ class TransactionFields {
static const String accountType = 'account_type'; static const String accountType = 'account_type';
static const String defaultCategory = 'default_category'; static const String defaultCategory = 'default_category';
static const String participantName = 'participant_name'; static const String participantName = 'participant_name';
static const String participant = 'participant';
} }
abstract class TransactionEntity extends Object abstract class TransactionEntity extends Object

View File

@ -1,6 +1,5 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';

View File

@ -34,6 +34,7 @@ enum TransactionReportFields {
created_at, created_at,
updated_at, updated_at,
record_state, record_state,
participant,
participant_name, participant_name,
} }
@ -183,6 +184,9 @@ ReportResult transactionReport(
case TransactionReportFields.participant_name: case TransactionReportFields.participant_name:
value = transaction.participantName; value = transaction.participantName;
break; break;
case TransactionReportFields.participant:
value = transaction.participant;
break;
} }
if (!ReportResult.matchField( if (!ReportResult.matchField(

View File

@ -35,6 +35,7 @@ class TransactionPresenter extends EntityPresenter {
TransactionFields.category, TransactionFields.category,
TransactionFields.payment, TransactionFields.payment,
TransactionFields.defaultCategory, TransactionFields.defaultCategory,
TransactionFields.participant,
TransactionFields.participantName, TransactionFields.participantName,
]; ];
} }
@ -42,23 +43,23 @@ class TransactionPresenter extends EntityPresenter {
@override @override
Widget getField({String? field, required BuildContext context}) { Widget getField({String? field, required BuildContext context}) {
final state = StoreProvider.of<AppState>(context).state; final state = StoreProvider.of<AppState>(context).state;
final transaction = entity as TransactionEntity?; final transaction = entity as TransactionEntity;
switch (field) { switch (field) {
case TransactionFields.status: case TransactionFields.status:
return EntityStatusChip(entity: transaction, showState: true); return EntityStatusChip(entity: transaction, showState: true);
case TransactionFields.date: case TransactionFields.date:
return Text(formatDate(transaction!.date, context)); return Text(formatDate(transaction.date, context));
case TransactionFields.defaultCategory: case TransactionFields.defaultCategory:
return Text(transaction!.category); return Text(transaction.category);
case TransactionFields.amount: case TransactionFields.amount:
return Align( return Align(
alignment: Alignment.centerRight, alignment: Alignment.centerRight,
child: Text(formatNumber(transaction!.amount, context, child: Text(formatNumber(transaction.amount, context,
currencyId: transaction.currencyId)!), currencyId: transaction.currencyId)!),
); );
case TransactionFields.deposit: case TransactionFields.deposit:
if (!transaction!.isDeposit) { if (!transaction.isDeposit) {
return SizedBox(); return SizedBox();
} }
return Align( return Align(
@ -67,7 +68,7 @@ class TransactionPresenter extends EntityPresenter {
currencyId: transaction.currencyId)!), currencyId: transaction.currencyId)!),
); );
case TransactionFields.withdrawal: case TransactionFields.withdrawal:
if (!transaction!.isWithdrawal) { if (!transaction.isWithdrawal) {
return SizedBox(); return SizedBox();
} }
return Align( return Align(
@ -76,27 +77,29 @@ class TransactionPresenter extends EntityPresenter {
currencyId: transaction.currencyId)!), currencyId: transaction.currencyId)!),
); );
case TransactionFields.description: case TransactionFields.description:
return Text(transaction!.description); return Text(transaction.description);
case TransactionFields.participantName: case TransactionFields.participantName:
return Text(transaction!.participantName); return Text(transaction.participantName);
case TransactionFields.participant:
return Text(transaction.participant);
case TransactionFields.accountType: case TransactionFields.accountType:
final bankAccount = final bankAccount =
state.bankAccountState.get(transaction!.bankAccountId); state.bankAccountState.get(transaction.bankAccountId);
return Text(toTitleCase(bankAccount.type)); return Text(toTitleCase(bankAccount.type));
case TransactionFields.bankAccount: case TransactionFields.bankAccount:
final bankAccount = final bankAccount =
state.bankAccountState.get(transaction!.bankAccountId); state.bankAccountState.get(transaction.bankAccountId);
return LinkTextRelatedEntity( return LinkTextRelatedEntity(
entity: bankAccount, relation: transaction); entity: bankAccount, relation: transaction);
case TransactionFields.payment: case TransactionFields.payment:
final payment = state.paymentState.get(transaction!.paymentId); final payment = state.paymentState.get(transaction.paymentId);
return LinkTextRelatedEntity(entity: payment, relation: transaction); return LinkTextRelatedEntity(entity: payment, relation: transaction);
case TransactionFields.invoices: case TransactionFields.invoices:
return ConstrainedBox( return ConstrainedBox(
constraints: BoxConstraints(maxWidth: kTableColumnWidthMax), constraints: BoxConstraints(maxWidth: kTableColumnWidthMax),
child: Wrap( child: Wrap(
clipBehavior: Clip.antiAlias, clipBehavior: Clip.antiAlias,
children: transaction!.invoiceIds children: transaction.invoiceIds
.split(',') .split(',')
.map((invoiceId) => state.invoiceState.map[invoiceId]) .map((invoiceId) => state.invoiceState.map[invoiceId])
.whereNotNull() .whereNotNull()
@ -113,7 +116,7 @@ class TransactionPresenter extends EntityPresenter {
constraints: BoxConstraints(maxWidth: kTableColumnWidthMax), constraints: BoxConstraints(maxWidth: kTableColumnWidthMax),
child: Wrap( child: Wrap(
clipBehavior: Clip.antiAlias, clipBehavior: Clip.antiAlias,
children: transaction!.expenseId children: transaction.expenseId
.split(',') .split(',')
.map((expenseId) => state.expenseState.map[expenseId]) .map((expenseId) => state.expenseState.map[expenseId])
.whereNotNull() .whereNotNull()
@ -126,11 +129,10 @@ class TransactionPresenter extends EntityPresenter {
), ),
); );
case TransactionFields.vendor: case TransactionFields.vendor:
final vendor = state.vendorState.get(transaction!.vendorId); final vendor = state.vendorState.get(transaction.vendorId);
return LinkTextRelatedEntity(entity: vendor, relation: transaction); return LinkTextRelatedEntity(entity: vendor, relation: transaction);
case TransactionFields.category: case TransactionFields.category:
final category = final category = state.expenseCategoryState.get(transaction.categoryId);
state.expenseCategoryState.get(transaction!.categoryId);
return LinkTextRelatedEntity(entity: category, relation: transaction); return LinkTextRelatedEntity(entity: category, relation: transaction);
} }