account.controller.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. (function(){
  2. 'use strict';
  3. angular
  4. .module('cloudbudget')
  5. .filter('category', CategoryFilter)
  6. .filter('sub_category', SubcategoryFilter)
  7. .controller('AccountController', AccountController);
  8. function CategoryFilter() {
  9. return function(input, categories) {
  10. if( !input ) {
  11. return '';
  12. }
  13. var category = categories.filter(function(elt, idx) {
  14. return elt._id === input;
  15. });
  16. if( category.length > 0 ) {
  17. return category[0].label;
  18. }
  19. return '';
  20. };
  21. }
  22. function SubcategoryFilter() {
  23. return function(input, category_id, categories) {
  24. if( !input || !category_id) {
  25. return '';
  26. }
  27. var category = categories.filter(function(elt, idx) {
  28. return elt._id === category_id;
  29. })[0];
  30. if( !category ) {
  31. return '';
  32. }
  33. var res = category.sub_categories.filter( function(elt, idx) {
  34. return elt._id === input;
  35. });
  36. if( res.length === 1 ) {
  37. return res[0].label;
  38. } else {
  39. return '';
  40. }
  41. };
  42. }
  43. AccountController.$inject = ['$scope', '$location', '$routeParams', 'FlashService', 'AccountService'];
  44. function AccountController($scope, $location, $routeParams, FlashService, AccountService) {
  45. var vm = this;
  46. $scope.calendar = {
  47. opened: {},
  48. dateFormat: 'dd/MM/yyyy',
  49. dateOptions: {},
  50. open: function($event, which) {
  51. $event.preventDefault();
  52. $event.stopPropagation();
  53. $scope.calendar.opened[which] = true;
  54. }
  55. };
  56. vm.dataLoading = false;
  57. vm.entries = [];
  58. vm.categories = [];
  59. vm.sub_categories = [];
  60. vm.account = undefined;
  61. vm.create = create;
  62. vm.drop = drop;
  63. vm.edit = edit;
  64. vm.updateSubCategory = updateSubCategory;
  65. vm.updateSubCategoryEditForm = updateSubCategoryEditForm;
  66. vm.disabledSubCategories = false;
  67. vm.edit_sub_categories = [];
  68. (function init() {
  69. vm.dataLoading = true;
  70. AccountService.details($routeParams.account_id)
  71. .then(function(response) {
  72. if( response.success ) {
  73. vm.account = response.account;
  74. vm.categories = angular.copy(vm.account.categories);
  75. vm.categories.unshift({_id: '', label: ''});
  76. } else {
  77. FlashService.error(response.message);
  78. }
  79. vm.dataLoading = false;
  80. });
  81. AccountService.list($routeParams.account_id)
  82. .then(function(response) {
  83. if( response.success ) {
  84. vm.entries = response.data.entries;
  85. } else {
  86. FlashService.error(response.message);
  87. }
  88. });
  89. })();
  90. function create() {
  91. vm.dataLoading = true;
  92. AccountService.create(vm.account, vm.entry)
  93. .then( function(response) {
  94. if( response.success) {
  95. vm.entries = response.data.entries;
  96. } else {
  97. FlashService.error(response.message);
  98. }
  99. vm.dataLoading = false;
  100. });
  101. vm.entry = angular.copy({});
  102. $scope.form.$setPristine();
  103. };
  104. function drop(entry) {
  105. vm.dataLoading = true;
  106. AccountService.drop(vm.account, entry)
  107. .then(function(response) {
  108. if( response.success ) {
  109. vm.entries = response.data.entries;
  110. } else {
  111. FlashService.error( response.message );
  112. }
  113. vm.dataLoading = false;
  114. });
  115. };
  116. function edit(altered, origin) {
  117. vm.dataLoading = true;
  118. return AccountService.edit(vm.account, origin._id, altered)
  119. .then( function(response) {
  120. vm.dataLoading = false;
  121. if( response.success ) {
  122. var index = vm.entries.map(function (item) {
  123. return item._id;
  124. }).indexOf(origin._id);
  125. vm.entries[index] = response.data.entries[index];
  126. } else {
  127. var index = vm.entries.map(function (item) {
  128. return item._id;
  129. }).indexOf(origin._id);
  130. vm.entries[index] = origin;
  131. FlashService.error( response.message );
  132. return false;
  133. }
  134. })
  135. };
  136. function updateSubCategory() {
  137. vm.sub_categories = getSubCategories(vm.entry.category);
  138. };
  139. function updateSubCategoryEditForm(category_id) {
  140. vm.edit_sub_categories = getSubCategories(category_id);
  141. vm.disabledSubCategories = !vm.edit_sub_categories || vm.edit_sub_categories.length === 0;
  142. };
  143. function getSubCategories(category_id) {
  144. var categories = vm.categories.filter(function(elt, idx) {
  145. return elt._id === category_id;
  146. });
  147. if( categories.length === 0 ) {
  148. return [];
  149. } else {
  150. return categories[0].sub_categories;
  151. }
  152. }
  153. }
  154. })();