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

View File

@ -52,6 +52,46 @@ class TransactionRepository {
return transactionResponse.data.toList(); 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( Future<TransactionEntity> saveData(
Credentials credentials, TransactionEntity transaction) async { Credentials credentials, TransactionEntity transaction) async {
final data = final data =

View File

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

View File

@ -24,6 +24,9 @@ List<Middleware<AppState>> createStoreTransactionsMiddleware([
final archiveTransaction = _archiveTransaction(repository); final archiveTransaction = _archiveTransaction(repository);
final deleteTransaction = _deleteTransaction(repository); final deleteTransaction = _deleteTransaction(repository);
final restoreTransaction = _restoreTransaction(repository); final restoreTransaction = _restoreTransaction(repository);
final convertTransactions = _convertTransactions(repository);
final convertToPayment = _convertToPayment(repository);
final convertToExpense = _convertToExpense(repository);
return [ return [
TypedMiddleware<AppState, ViewTransactionList>(viewTransactionList), TypedMiddleware<AppState, ViewTransactionList>(viewTransactionList),
@ -35,6 +38,11 @@ List<Middleware<AppState>> createStoreTransactionsMiddleware([
TypedMiddleware<AppState, ArchiveTransactionsRequest>(archiveTransaction), TypedMiddleware<AppState, ArchiveTransactionsRequest>(archiveTransaction),
TypedMiddleware<AppState, DeleteTransactionsRequest>(deleteTransaction), TypedMiddleware<AppState, DeleteTransactionsRequest>(deleteTransaction),
TypedMiddleware<AppState, RestoreTransactionsRequest>(restoreTransaction), 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) { Middleware<AppState> _saveTransaction(TransactionRepository repository) {
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) { return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
final action = dynamicAction as SaveTransactionRequest; final action = dynamicAction as SaveTransactionRequest;