Transactions

This commit is contained in:
Hillel Coren 2022-09-21 14:50:31 +03:00
parent fbac475eba
commit b68e8dd7fe
5 changed files with 134 additions and 6 deletions

View File

@ -118,6 +118,7 @@ class EntityAction extends EnumClass {
static const EntityAction save = _$save;
static const EntityAction accept = _$accept;
static const EntityAction addToInventory = _$addToInventory;
static const EntityAction convert = _$convert;
static const EntityAction convertToExpense = _$convertToExpense;
static const EntityAction convertToPayment = _$convertToPayment;
static const EntityAction merge = _$merge;

View File

@ -83,6 +83,7 @@ const EntityAction _$cancel = const EntityAction._('cancel');
const EntityAction _$save = const EntityAction._('save');
const EntityAction _$accept = const EntityAction._('accept');
const EntityAction _$addToInventory = const EntityAction._('addToInventory');
const EntityAction _$convert = const EntityAction._('convert');
const EntityAction _$convertToExpense =
const EntityAction._('convertToExpense');
const EntityAction _$convertToPayment =
@ -227,6 +228,8 @@ EntityAction _$valueOf(String name) {
return _$accept;
case 'addToInventory':
return _$addToInventory;
case 'convert':
return _$convert;
case 'convertToExpense':
return _$convertToExpense;
case 'convertToPayment':
@ -308,6 +311,7 @@ final BuiltSet<EntityAction> _$values =
_$save,
_$accept,
_$addToInventory,
_$convert,
_$convertToExpense,
_$convertToPayment,
_$merge,

View File

@ -52,6 +52,46 @@ class TransactionRepository {
return transactionResponse.data.toList();
}
Future<TransactionEntity> convertToPayment(Credentials credentials,
String transactionId, List<String> invoiceIds) async {
final url = credentials.url + '/bank_transactions/match';
final dynamic response = await webClient.post(
url,
credentials.token,
data: json.encode(
{
'id': transactionId,
'invoice_ids': invoiceIds.join(','),
},
),
);
final TransactionItemResponse transactionResponse = serializers
.deserializeWith(TransactionItemResponse.serializer, response);
return transactionResponse.data;
}
Future<TransactionEntity> convertToExpense(
Credentials credentials, String transactionId, String vendorId) async {
final url = credentials.url + '/bank_transactions/match';
final dynamic response = await webClient.post(
url,
credentials.token,
data: json.encode(
{
'id': transactionId,
'vendor_id': vendorId,
},
),
);
final TransactionItemResponse transactionResponse = serializers
.deserializeWith(TransactionItemResponse.serializer, response);
return transactionResponse.data;
}
Future<TransactionEntity> saveData(
Credentials credentials, TransactionEntity transaction) async {
final data =

View File

@ -213,9 +213,9 @@ class ConvertTransactionToPaymentSuccess implements StopSaving, PersistData {
}
class ConvertTransactionToPaymentFailure implements StopSaving {
ConvertTransactionToPaymentFailure(this.transaction);
ConvertTransactionToPaymentFailure(this.error);
final TransactionEntity transaction;
final dynamic error;
}
class ConvertTransactionToExpenseRequest implements StartSaving {
@ -237,9 +237,9 @@ class ConvertTransactionToExpenseSuccess implements StopSaving, PersistData {
}
class ConvertTransactionToExpenseFailure implements StopSaving {
ConvertTransactionToExpenseFailure(this.transaction);
ConvertTransactionToExpenseFailure(this.error);
final TransactionEntity transaction;
final dynamic error;
}
class ConvertTransactionsRequest implements StartSaving {
@ -256,9 +256,9 @@ class ConvertTransactionsSuccess implements StopSaving, PersistData {
}
class ConvertTransactionsFailure implements StopSaving {
ConvertTransactionsFailure(this.transactions);
ConvertTransactionsFailure(this.error);
final List<TransactionEntity> transactions;
final dynamic error;
}
class FilterTransactions implements PersistUI {

View File

@ -24,6 +24,9 @@ List<Middleware<AppState>> createStoreTransactionsMiddleware([
final archiveTransaction = _archiveTransaction(repository);
final deleteTransaction = _deleteTransaction(repository);
final restoreTransaction = _restoreTransaction(repository);
final convertTransactions = _convertTransactions(repository);
final convertToPayment = _convertToPayment(repository);
final convertToExpense = _convertToExpense(repository);
return [
TypedMiddleware<AppState, ViewTransactionList>(viewTransactionList),
@ -35,6 +38,11 @@ List<Middleware<AppState>> createStoreTransactionsMiddleware([
TypedMiddleware<AppState, ArchiveTransactionsRequest>(archiveTransaction),
TypedMiddleware<AppState, DeleteTransactionsRequest>(deleteTransaction),
TypedMiddleware<AppState, RestoreTransactionsRequest>(restoreTransaction),
TypedMiddleware<AppState, ConvertTransactionsRequest>(convertTransactions),
TypedMiddleware<AppState, ConvertTransactionToPaymentRequest>(
convertToPayment),
TypedMiddleware<AppState, ConvertTransactionToExpenseRequest>(
convertToExpense),
];
}
@ -164,6 +172,81 @@ Middleware<AppState> _restoreTransaction(TransactionRepository repository) {
};
}
Middleware<AppState> _convertTransactions(TransactionRepository repository) {
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
final action = dynamicAction as ConvertTransactionsRequest;
repository
.bulkAction(store.state.credentials, action.transactionIds,
EntityAction.convert)
.then((List<TransactionEntity> transactions) {
store.dispatch(ConvertTransactionsSuccess(transactions));
if (action.completer != null) {
action.completer.complete(null);
}
}).catchError((Object error) {
print(error);
store.dispatch(ConvertTransactionsFailure(error));
if (action.completer != null) {
action.completer.completeError(error);
}
});
next(action);
};
}
Middleware<AppState> _convertToPayment(TransactionRepository repository) {
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
final action = dynamicAction as ConvertTransactionToPaymentRequest;
repository
.convertToPayment(
store.state.credentials,
action.transactionId,
action.invoiceIds,
)
.then((TransactionEntity transactions) {
store.dispatch(ConvertTransactionToPaymentSuccess(transactions));
if (action.completer != null) {
action.completer.complete(null);
}
}).catchError((Object error) {
print(error);
store.dispatch(ConvertTransactionToPaymentFailure(error));
if (action.completer != null) {
action.completer.completeError(error);
}
});
next(action);
};
}
Middleware<AppState> _convertToExpense(TransactionRepository repository) {
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
final action = dynamicAction as ConvertTransactionToExpenseRequest;
repository
.convertToExpense(
store.state.credentials,
action.transactionId,
action.vendorId,
)
.then((TransactionEntity transactions) {
store.dispatch(ConvertTransactionToExpenseSuccess(transactions));
if (action.completer != null) {
action.completer.complete(null);
}
}).catchError((Object error) {
print(error);
store.dispatch(ConvertTransactionToExpenseFailure(error));
if (action.completer != null) {
action.completer.completeError(error);
}
});
next(action);
};
}
Middleware<AppState> _saveTransaction(TransactionRepository repository) {
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
final action = dynamicAction as SaveTransactionRequest;