From 674b6bc883d76334bb5a368a33d7e12bc18f399b Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Sun, 18 Oct 2020 18:09:18 +0300 Subject: [PATCH] Documents --- lib/data/repositories/expense_repository.dart | 16 +++++++++++ lib/data/repositories/project_repository.dart | 16 +++++++++++ lib/data/repositories/task_repository.dart | 16 +++++++++++ lib/data/repositories/vendor_repository.dart | 16 +++++++++++ lib/redux/expense/expense_middleware.dart | 27 +++++++++++++++++++ lib/redux/project/project_middleware.dart | 27 +++++++++++++++++++ lib/redux/task/task_middleware.dart | 27 +++++++++++++++++++ lib/redux/vendor/vendor_middleware.dart | 27 +++++++++++++++++++ 8 files changed, 172 insertions(+) diff --git a/lib/data/repositories/expense_repository.dart b/lib/data/repositories/expense_repository.dart index b0fb986c4..9de0c5c6c 100644 --- a/lib/data/repositories/expense_repository.dart +++ b/lib/data/repositories/expense_repository.dart @@ -72,4 +72,20 @@ class ExpenseRepository { return expenseResponse.data; } + + Future uploadDocument( + Credentials credentials, BaseEntity entity, String filePath) async { + final fields = { + '_method': 'put', + }; + + final dynamic response = await webClient.post( + '${credentials.url}/expenses/${entity.id}', credentials.token, + data: fields, filePath: filePath, fileIndex: 'documents[]'); + + final ExpenseItemResponse expenseResponse = + serializers.deserializeWith(ExpenseItemResponse.serializer, response); + + return expenseResponse.data; + } } diff --git a/lib/data/repositories/project_repository.dart b/lib/data/repositories/project_repository.dart index 5e7300568..25dd55b55 100644 --- a/lib/data/repositories/project_repository.dart +++ b/lib/data/repositories/project_repository.dart @@ -72,4 +72,20 @@ class ProjectRepository { return projectResponse.data; } + + Future uploadDocument( + Credentials credentials, BaseEntity entity, String filePath) async { + final fields = { + '_method': 'put', + }; + + final dynamic response = await webClient.post( + '${credentials.url}/projects/${entity.id}', credentials.token, + data: fields, filePath: filePath, fileIndex: 'documents[]'); + + final ProjectItemResponse projectResponse = + serializers.deserializeWith(ProjectItemResponse.serializer, response); + + return projectResponse.data; + } } diff --git a/lib/data/repositories/task_repository.dart b/lib/data/repositories/task_repository.dart index 2cbf648ce..a4e6bbf54 100644 --- a/lib/data/repositories/task_repository.dart +++ b/lib/data/repositories/task_repository.dart @@ -76,4 +76,20 @@ class TaskRepository { return taskResponse.data; } + + Future uploadDocument( + Credentials credentials, BaseEntity entity, String filePath) async { + final fields = { + '_method': 'put', + }; + + final dynamic response = await webClient.post( + '${credentials.url}/tasks/${entity.id}', credentials.token, + data: fields, filePath: filePath, fileIndex: 'documents[]'); + + final TaskItemResponse taskResponse = + serializers.deserializeWith(TaskItemResponse.serializer, response); + + return taskResponse.data; + } } diff --git a/lib/data/repositories/vendor_repository.dart b/lib/data/repositories/vendor_repository.dart index 245ada98a..fdfd39ae6 100644 --- a/lib/data/repositories/vendor_repository.dart +++ b/lib/data/repositories/vendor_repository.dart @@ -72,4 +72,20 @@ class VendorRepository { return vendorResponse.data; } + + Future uploadDocument( + Credentials credentials, BaseEntity entity, String filePath) async { + final fields = { + '_method': 'put', + }; + + final dynamic response = await webClient.post( + '${credentials.url}/vendors/${entity.id}', credentials.token, + data: fields, filePath: filePath, fileIndex: 'documents[]'); + + final VendorItemResponse vendorResponse = + serializers.deserializeWith(VendorItemResponse.serializer, response); + + return vendorResponse.data; + } } diff --git a/lib/redux/expense/expense_middleware.dart b/lib/redux/expense/expense_middleware.dart index 4a911c9e9..b92b44025 100644 --- a/lib/redux/expense/expense_middleware.dart +++ b/lib/redux/expense/expense_middleware.dart @@ -25,6 +25,7 @@ List> createStoreExpensesMiddleware([ final archiveExpense = _archiveExpense(repository); final deleteExpense = _deleteExpense(repository); final restoreExpense = _restoreExpense(repository); + final saveDocument = _saveDocument(repository); return [ TypedMiddleware(viewExpenseList), @@ -36,6 +37,7 @@ List> createStoreExpensesMiddleware([ TypedMiddleware(archiveExpense), TypedMiddleware(deleteExpense), TypedMiddleware(restoreExpense), + TypedMiddleware(saveDocument), ]; } @@ -238,3 +240,28 @@ Middleware _loadExpenses(ExpenseRepository repository) { next(action); }; } + +Middleware _saveDocument(ExpenseRepository repository) { + return (Store store, dynamic dynamicAction, NextDispatcher next) { + final action = dynamicAction as SaveExpenseDocumentRequest; + if (store.state.isEnterprisePlan) { + repository + .uploadDocument( + store.state.credentials, action.expense, action.filePath) + .then((expense) { + store.dispatch(SaveExpenseSuccess(expense)); + action.completer.complete(null); + }).catchError((Object error) { + print(error); + store.dispatch(SaveExpenseDocumentFailure(error)); + action.completer.completeError(error); + }); + } else { + const error = 'Uploading documents requires an enterprise plan'; + store.dispatch(SaveExpenseDocumentFailure(error)); + action.completer.completeError(error); + } + + next(action); + }; +} diff --git a/lib/redux/project/project_middleware.dart b/lib/redux/project/project_middleware.dart index 6a7580f2f..90d9c6b7e 100644 --- a/lib/redux/project/project_middleware.dart +++ b/lib/redux/project/project_middleware.dart @@ -25,6 +25,7 @@ List> createStoreProjectsMiddleware([ final archiveProject = _archiveProject(repository); final deleteProject = _deleteProject(repository); final restoreProject = _restoreProject(repository); + final saveDocument = _saveDocument(repository); return [ TypedMiddleware(viewProjectList), @@ -36,6 +37,7 @@ List> createStoreProjectsMiddleware([ TypedMiddleware(archiveProject), TypedMiddleware(deleteProject), TypedMiddleware(restoreProject), + TypedMiddleware(saveDocument), ]; } @@ -245,3 +247,28 @@ Middleware _loadProjects(ProjectRepository repository) { next(action); }; } + +Middleware _saveDocument(ProjectRepository repository) { + return (Store store, dynamic dynamicAction, NextDispatcher next) { + final action = dynamicAction as SaveProjectDocumentRequest; + if (store.state.isEnterprisePlan) { + repository + .uploadDocument( + store.state.credentials, action.project, action.filePath) + .then((project) { + store.dispatch(SaveProjectSuccess(project)); + action.completer.complete(null); + }).catchError((Object error) { + print(error); + store.dispatch(SaveProjectDocumentFailure(error)); + action.completer.completeError(error); + }); + } else { + const error = 'Uploading documents requires an enterprise plan'; + store.dispatch(SaveProjectDocumentFailure(error)); + action.completer.completeError(error); + } + + next(action); + }; +} diff --git a/lib/redux/task/task_middleware.dart b/lib/redux/task/task_middleware.dart index 4cf4d4d40..55c09f64c 100644 --- a/lib/redux/task/task_middleware.dart +++ b/lib/redux/task/task_middleware.dart @@ -25,6 +25,7 @@ List> createStoreTasksMiddleware([ final archiveTask = _archiveTask(repository); final deleteTask = _deleteTask(repository); final restoreTask = _restoreTask(repository); + final saveDocument = _saveDocument(repository); return [ TypedMiddleware(viewTaskList), @@ -36,6 +37,7 @@ List> createStoreTasksMiddleware([ TypedMiddleware(archiveTask), TypedMiddleware(deleteTask), TypedMiddleware(restoreTask), + TypedMiddleware(saveDocument), ]; } @@ -234,3 +236,28 @@ Middleware _loadTasks(TaskRepository repository) { next(action); }; } + +Middleware _saveDocument(TaskRepository repository) { + return (Store store, dynamic dynamicAction, NextDispatcher next) { + final action = dynamicAction as SaveTaskDocumentRequest; + if (store.state.isEnterprisePlan) { + repository + .uploadDocument( + store.state.credentials, action.task, action.filePath) + .then((task) { + store.dispatch(SaveTaskSuccess(task)); + action.completer.complete(null); + }).catchError((Object error) { + print(error); + store.dispatch(SaveTaskDocumentFailure(error)); + action.completer.completeError(error); + }); + } else { + const error = 'Uploading documents requires an enterprise plan'; + store.dispatch(SaveTaskDocumentFailure(error)); + action.completer.completeError(error); + } + + next(action); + }; +} diff --git a/lib/redux/vendor/vendor_middleware.dart b/lib/redux/vendor/vendor_middleware.dart index 1f540902c..19bb7e261 100644 --- a/lib/redux/vendor/vendor_middleware.dart +++ b/lib/redux/vendor/vendor_middleware.dart @@ -25,6 +25,7 @@ List> createStoreVendorsMiddleware([ final archiveVendor = _archiveVendor(repository); final deleteVendor = _deleteVendor(repository); final restoreVendor = _restoreVendor(repository); + final saveDocument = _saveDocument(repository); return [ TypedMiddleware(viewVendorList), @@ -36,6 +37,7 @@ List> createStoreVendorsMiddleware([ TypedMiddleware(archiveVendor), TypedMiddleware(deleteVendor), TypedMiddleware(restoreVendor), + TypedMiddleware(saveDocument), ]; } @@ -242,3 +244,28 @@ Middleware _loadVendors(VendorRepository repository) { next(action); }; } + +Middleware _saveDocument(VendorRepository repository) { + return (Store store, dynamic dynamicAction, NextDispatcher next) { + final action = dynamicAction as SaveVendorDocumentRequest; + if (store.state.isEnterprisePlan) { + repository + .uploadDocument( + store.state.credentials, action.vendor, action.filePath) + .then((vendor) { + store.dispatch(SaveVendorSuccess(vendor)); + action.completer.complete(null); + }).catchError((Object error) { + print(error); + store.dispatch(SaveVendorDocumentFailure(error)); + action.completer.completeError(error); + }); + } else { + const error = 'Uploading documents requires an enterprise plan'; + store.dispatch(SaveVendorDocumentFailure(error)); + action.completer.completeError(error); + } + + next(action); + }; +}