diff --git a/src/operations/index.js b/src/operations/index.js index 04d1145..a09e478 100644 --- a/src/operations/index.js +++ b/src/operations/index.js @@ -34,6 +34,10 @@ var ngResource = require('angular-resource'), ngUiNotification = require('angular-ui-notification'), ngStrap = require('angular-strap'); +var OperationFactory = require('./operation.factory'); +var OperationConfig = require('./operation.config'); +var OperationController = require('./operation.controller'); + module.exports = angular.module('accountant.operations', [ ngResource, ngMessages, @@ -44,167 +48,10 @@ module.exports = angular.module('accountant.operations', [ categoryChartModule ]) - .config(function($resourceProvider) { - // Keep trailing slashes to avoid redirect by flask.. - $resourceProvider.defaults.stripTrailingSlashes = false; - }) + .config(OperationConfig) - .factory('Operation', function($resource) { - return $resource( - '/api/operation/:id', { - id: '@id' - } - ); - }) + .factory('Operation', OperationFactory) - /* - * Controller for the operations. - */ - .controller('OperationController', function($routeParams, $modal, - Notification, Operation, Account) { - - var vm = this; - - /* - * Add an empty operation. - */ - vm.add = function() { - var operation = new Operation({ - // eslint-disable-next-line camelcase - account_id: $routeParams.accountId - }); - - return vm.modify(operation); - }; - - /* - * Load operations. - */ - vm.load = function(minDate, maxDate) { - vm.minDate = minDate; - vm.maxDate = maxDate; - - return Operation.query({ - // eslint-disable-next-line camelcase - account_id: $routeParams.accountId, - begin: minDate ? moment(minDate).format('YYYY-MM-DD') : null, - end: maxDate ? moment(maxDate).format('YYYY-MM-DD') : null - }); - }; - - /* - * Toggle pointed indicator for an operation. - */ - vm.togglePointed = function(operation, rowform) { - operation.pointed = !operation.pointed; - - vm.save(operation); - }; - - /* - * Toggle cancel indicator for an operation. - */ - vm.toggleCanceled = function(operation) { - operation.canceled = !operation.canceled; - - vm.save(operation); - }; - - /* - * Save an operation and return a promise. - */ - vm.save = function(operation) { - operation.confirmed = true; - - return operation.$save().then(function(operation) { - Notification.success('Operation #' + operation.id + ' saved.'); - - vm.operations = vm.load(); - - return operation; - }, function(result){ - Notification.error( - 'Error while saving operation: ' + result.message - ); - }); - }; - - /* - * Delete an operation and return a promise. - */ - vm.confirmDelete = function(operation) { - var title = "Delete operation #" + operation.id; - - $modal({ - templateUrl: operationDeleteTmpl, - controller: function($scope, title, operation, $delete) { - $scope.title = title; - $scope.operation = operation; - $scope.$delete = function() { - $scope.$hide(); - $delete($scope.operation); - }; - }, - locals: { - title: title, - operation: operation, - $delete: vm.delete - } - }); - }; - - vm.delete = function(operation) { - var id = operation.id; - - return operation.$delete().then(function() { - Notification.success('Operation #' + id + ' deleted.'); - - vm.operations = vm.load(); - - return operation; - }, function(result) { - Notification.error( - 'An error occurred while trying to delete operation #' + - id + ':
' + result - ); - }); - }; - - /* - * Open the popup to modify the operation, save it on confirm. - * @returns a promise. - */ - vm.modify = function(operation) { - // FIXME Alexis Lahouze 2017-06-15 i18n - var title = "Operation"; - - if (operation.id) { - title = title + " #" + operation.id; - } - - $modal({ - templateUrl: operationFormTmpl, - controller: function($scope, title, operation, $save) { - $scope.title = title; - $scope.operation = operation; - $scope.$save = function() { - $scope.$hide(); - $save($scope.operation); - }; - }, - locals: { - title: title, - operation: operation, - $save: vm.save - } - }); - }; - - vm.onUpdate = function(minDate, maxDate) { - vm.operations = vm.load(minDate, maxDate); - }; - - vm.account = Account.get({id: $routeParams.accountId}); - }) + .controller('OperationController', OperationController) .name; diff --git a/src/operations/operation.config.js b/src/operations/operation.config.js new file mode 100644 index 0000000..0617c65 --- /dev/null +++ b/src/operations/operation.config.js @@ -0,0 +1,4 @@ +module.exports = function($resourceProvider) { + // Keep trailing slashes to avoid redirect by flask.. + $resourceProvider.defaults.stripTrailingSlashes = false; +}; diff --git a/src/operations/operation.controller.js b/src/operations/operation.controller.js new file mode 100644 index 0000000..ed7f595 --- /dev/null +++ b/src/operations/operation.controller.js @@ -0,0 +1,146 @@ +module.exports = function($routeParams, $modal, Notification, Operation, + Account) { + + var vm = this; + + /* + * Add an empty operation. + */ + vm.add = function() { + var operation = new Operation({ + // eslint-disable-next-line camelcase + account_id: $routeParams.accountId + }); + + return vm.modify(operation); + }; + + /* + * Load operations. + */ + vm.load = function(minDate, maxDate) { + vm.minDate = minDate; + vm.maxDate = maxDate; + + return Operation.query({ + // eslint-disable-next-line camelcase + account_id: $routeParams.accountId, + begin: minDate ? moment(minDate).format('YYYY-MM-DD') : null, + end: maxDate ? moment(maxDate).format('YYYY-MM-DD') : null + }); + }; + + /* + * Toggle pointed indicator for an operation. + */ + vm.togglePointed = function(operation, rowform) { + operation.pointed = !operation.pointed; + + vm.save(operation); + }; + + /* + * Toggle cancel indicator for an operation. + */ + vm.toggleCanceled = function(operation) { + operation.canceled = !operation.canceled; + + vm.save(operation); + }; + + /* + * Save an operation and return a promise. + */ + vm.save = function(operation) { + operation.confirmed = true; + + return operation.$save().then(function(operation) { + Notification.success('Operation #' + operation.id + ' saved.'); + + vm.operations = vm.load(); + + return operation; + }, function(result){ + Notification.error( + 'Error while saving operation: ' + result.message + ); + }); + }; + + /* + * Delete an operation and return a promise. + */ + vm.confirmDelete = function(operation) { + var title = "Delete operation #" + operation.id; + + $modal({ + templateUrl: operationDeleteTmpl, + controller: function($scope, title, operation, $delete) { + $scope.title = title; + $scope.operation = operation; + $scope.$delete = function() { + $scope.$hide(); + $delete($scope.operation); + }; + }, + locals: { + title: title, + operation: operation, + $delete: vm.delete + } + }); + }; + + vm.delete = function(operation) { + var id = operation.id; + + return operation.$delete().then(function() { + Notification.success('Operation #' + id + ' deleted.'); + + vm.operations = vm.load(); + + return operation; + }, function(result) { + Notification.error( + 'An error occurred while trying to delete operation #' + + id + ':
' + result + ); + }); + }; + + /* + * Open the popup to modify the operation, save it on confirm. + * @returns a promise. + */ + vm.modify = function(operation) { + // FIXME Alexis Lahouze 2017-06-15 i18n + var title = "Operation"; + + if (operation.id) { + title = title + " #" + operation.id; + } + + $modal({ + templateUrl: operationFormTmpl, + controller: function($scope, title, operation, $save) { + $scope.title = title; + $scope.operation = operation; + $scope.$save = function() { + $scope.$hide(); + $save($scope.operation); + }; + }, + locals: { + title: title, + operation: operation, + $save: vm.save + } + }); + }; + + vm.onUpdate = function(minDate, maxDate) { + vm.operations = vm.load(minDate, maxDate); + }; + + vm.account = Account.get({id: $routeParams.accountId}); +}; diff --git a/src/operations/operation.factory.js b/src/operations/operation.factory.js new file mode 100644 index 0000000..6e79a00 --- /dev/null +++ b/src/operations/operation.factory.js @@ -0,0 +1,7 @@ +module.exports = function($resource) { + return $resource( + '/api/operation/:id', { + id: '@id' + } + ); +};