Commit 5cd82a974e7050ba41a64c2ec7ebd44fedd52a85
1 parent
a1a52ea7dd
Exists in
master
and in
1 other branch
validacion capacidad cisternas igual a capacidad total vehiculo
Showing
6 changed files
with
123 additions
and
63 deletions
Show diff stats
src/js/controller.js
... | ... | @@ -20,7 +20,7 @@ angular.module('focaAbmVehiculo') |
20 | 20 | if(focaAbmVehiculoService.transportistaSeleccionado.COD) { |
21 | 21 | elegirTransportista(focaAbmVehiculoService.transportistaSeleccionado); |
22 | 22 | } |
23 | - | |
23 | + focaAbmVehiculoService.cleanCisternasLocal(); | |
24 | 24 | $scope.editar = function(id) { |
25 | 25 | $location.path('/vehiculo/' + id + '/' + $scope.idTransportista); |
26 | 26 | }; |
... | ... | @@ -83,18 +83,19 @@ angular.module('focaAbmVehiculo') |
83 | 83 | ]) |
84 | 84 | .controller('focaAbmVehiculoController', [ |
85 | 85 | '$scope', 'focaAbmVehiculoService', '$routeParams', '$location', '$uibModal', |
86 | - 'focaModalService', '$timeout', 'focaBotoneraLateralService', | |
86 | + 'focaModalService', '$timeout', 'focaBotoneraLateralService', '$window', | |
87 | 87 | function($scope, focaAbmVehiculoService, $routeParams, $location, $uibModal, |
88 | - focaModalService, $timeout, focaBotoneraLateralService) { | |
88 | + focaModalService, $timeout, focaBotoneraLateralService, $window) { | |
89 | 89 | $scope.nuevo = $routeParams.idVehiculo === '0' ? true : false; |
90 | 90 | $scope.now = new Date(); |
91 | 91 | $scope.focused = 1; |
92 | 92 | $scope.transportistaStamp = ''; |
93 | + $scope.cisternas = []; | |
93 | 94 | |
94 | 95 | $timeout(function() { |
95 | - focaBotoneraLateralService.showSalir(false); | |
96 | + focaBotoneraLateralService.showSalir(true); | |
96 | 97 | focaBotoneraLateralService.showPausar(false); |
97 | - focaBotoneraLateralService.showCancelar(true, '/vehiculo'); | |
98 | + focaBotoneraLateralService.showCancelar(); | |
98 | 99 | focaBotoneraLateralService.showGuardar(true, $scope.guardar); |
99 | 100 | }); |
100 | 101 | |
... | ... | @@ -130,7 +131,8 @@ angular.module('focaAbmVehiculo') |
130 | 131 | }); |
131 | 132 | focaAbmVehiculoService.getCisternadoPorVehiculo($routeParams.idVehiculo) |
132 | 133 | .then(function(res) { |
133 | - $scope.cisternas = res.data; | |
134 | + //CONCATENA LAS CISTERNAS DEL SERVICIO Y LAS DE LA BASE DE DATOS | |
135 | + $scope.cisternas = focaAbmVehiculoService.getCisternasLocal().concat(res.data); | |
134 | 136 | }); |
135 | 137 | $scope.next = function(key) { |
136 | 138 | if (key === 13) $scope.focused++; |
... | ... | @@ -138,21 +140,38 @@ angular.module('focaAbmVehiculo') |
138 | 140 | $scope.cancelar = function() { |
139 | 141 | $location.path('/vehiculo'); |
140 | 142 | }; |
141 | - $scope.editar = function(id) { | |
142 | - $location.path('/vehiculo/' + $routeParams.idVehiculo + '/cisterna/' + id); | |
143 | + $scope.editar = function(cisterna) { | |
144 | + if(cisterna) { | |
145 | + if(cisterna.idTemp != undefined) { | |
146 | + $location.path('/vehiculo/' + $routeParams.idVehiculo + | |
147 | + '/cisterna/0/' + cisterna.idTemp); | |
148 | + }else { | |
149 | + $location.path('/vehiculo/' + $routeParams.idVehiculo + | |
150 | + '/cisterna/' + cisterna.id); | |
151 | + } | |
152 | + }else { | |
153 | + $location.path('/vehiculo/' + $routeParams.idVehiculo + '/cisterna/0/'); | |
154 | + } | |
143 | 155 | }; |
144 | 156 | $scope.guardar = function() { |
145 | 157 | //Valida si existe numero de unidad |
146 | - existeCodigoUnidad().then(function() { | |
158 | + if(!validaTotalCargas()) { | |
159 | + focaModalService.alert('La suma de las capacidades de las cisternas' + | |
160 | + ' debe ser igual a la capacidad total del vehรญculo'); | |
161 | + return; | |
162 | + } | |
163 | + validaCodigoUnidad().then(function() { | |
147 | 164 | delete $scope.vehiculo.transportista; |
148 | 165 | delete $scope.vehiculo.cisternas; |
149 | 166 | focaAbmVehiculoService.guardarVehiculo($scope.vehiculo) |
150 | - .then(function(res){ | |
167 | + .then(function(res) { | |
151 | 168 | if($scope.nuevo) { |
152 | 169 | $location.path('/vehiculo/' + res.data.id + |
153 | 170 | '/' + res.data.idTransportista); |
154 | - } else { | |
155 | - $location.path('/vehiculo'); | |
171 | + }else { | |
172 | + guardarCisternas().then(function() { | |
173 | + $window.location.assign('/#!/vehiculo'); | |
174 | + }); | |
156 | 175 | } |
157 | 176 | }); |
158 | 177 | }, function(){ |
... | ... | @@ -165,54 +184,52 @@ angular.module('focaAbmVehiculo') |
165 | 184 | cisterna.id + ' ' + cisterna.codigo + ' ?').then( |
166 | 185 | function(data) { |
167 | 186 | if(data) { |
168 | - focaAbmVehiculoService.deleteCisterna(cisterna.id); | |
187 | + if(cisterna.id){ | |
188 | + focaAbmVehiculoService.deleteCisterna(cisterna.id); | |
189 | + } | |
169 | 190 | $scope.cisternas.splice($scope.cisternas.indexOf(cisterna), 1); |
170 | 191 | } |
171 | 192 | } |
172 | 193 | ); |
173 | 194 | }; |
174 | - $scope.seleccionarTransportista = function() { | |
175 | - var modalInstance = $uibModal.open( | |
176 | - { | |
177 | - ariaLabelledBy: 'Busqueda de Transportista', | |
178 | - templateUrl: 'modal-proveedor.html', | |
179 | - controller: 'focaModalProveedorCtrl', | |
180 | - size: 'lg', | |
181 | - resolve: { | |
182 | - transportista: function() { | |
183 | - return true; | |
184 | - } | |
185 | - } | |
186 | - } | |
187 | - ); | |
188 | - modalInstance.result.then( | |
189 | - function(transportista) { | |
190 | - $scope.vehiculo.idTransportista = transportista.COD; | |
191 | - $scope.vehiculo.transportista = transportista; | |
192 | - }, function() { | |
193 | - | |
194 | - } | |
195 | - ); | |
196 | - }; | |
197 | 195 | |
198 | - function existeCodigoUnidad(){ | |
196 | + function validaCodigoUnidad() { | |
199 | 197 | return new Promise(function(resolve, reject) { |
200 | 198 | focaAbmVehiculoService |
201 | - .getVehiculosPorTransportista($routeParams.idTransportista) | |
202 | - .then(function(res){ | |
199 | + .getVehiculosPorTransportista(parseInt($routeParams.idTransportista)) | |
200 | + .then(function(res) { | |
203 | 201 | //Valida si existe numero de unidad |
204 | 202 | var existe = res.data.filter(function(vehiculo) { |
205 | 203 | return vehiculo.codigo === $scope.vehiculo.codigo && |
206 | 204 | vehiculo.id !== $scope.vehiculo.id; |
207 | 205 | }); |
208 | 206 | |
209 | - if(existe.length){ | |
207 | + if(existe.length) { | |
210 | 208 | reject(existe); |
211 | - } else { | |
209 | + }else { | |
212 | 210 | resolve(); |
213 | 211 | } |
214 | 212 | }); |
215 | 213 | }); |
216 | 214 | } |
215 | + | |
216 | + function validaTotalCargas() { | |
217 | + var total = 0; | |
218 | + $scope.cisternas.forEach(function(cisterna) { | |
219 | + total += parseInt(cisterna.capacidad); | |
220 | + }); | |
221 | + return $scope.vehiculo.capacidad == total; | |
222 | + } | |
223 | + | |
224 | + function guardarCisternas() { | |
225 | + var promesas = []; | |
226 | + | |
227 | + focaAbmVehiculoService.getCisternasLocal().forEach(function(cisterna) { | |
228 | + delete cisterna.unidadMedida; | |
229 | + delete cisterna.idTemp; | |
230 | + promesas.push(focaAbmVehiculoService.guardarCisterna(cisterna)); | |
231 | + }); | |
232 | + return Promise.all(promesas); | |
233 | + } | |
217 | 234 | } |
218 | 235 | ]); |
src/js/controllerCisterna.js
1 | 1 | angular.module('focaAbmVehiculo') |
2 | 2 | .controller('focaAbmVehiculoCisternaController', [ |
3 | 3 | '$scope', 'focaAbmVehiculoService', '$routeParams', '$location', '$uibModal', |
4 | - 'focaModalService', 'focaBotoneraLateralService', '$timeout', | |
4 | + 'focaModalService', 'focaBotoneraLateralService', '$timeout', '$window', | |
5 | 5 | function($scope, focaAbmVehiculoService, $routeParams, $location, $uibModal, |
6 | - focaModalService, focaBotoneraLateralService, $timeout) { | |
6 | + focaModalService, focaBotoneraLateralService, $timeout, $window) { | |
7 | 7 | $scope.editar = false; |
8 | 8 | $scope.now = new Date(); |
9 | 9 | $scope.cisterna = { |
... | ... | @@ -17,6 +17,7 @@ angular.module('focaAbmVehiculo') |
17 | 17 | if (key === 13) $scope.focused++; |
18 | 18 | }; |
19 | 19 | $scope.capacidadVechiulo = 0; |
20 | + $scope.transportista = ''; | |
20 | 21 | |
21 | 22 | //SETEO BOTONERA LATERAL |
22 | 23 | $timeout(function() { |
... | ... | @@ -26,16 +27,17 @@ angular.module('focaAbmVehiculo') |
26 | 27 | focaBotoneraLateralService.showGuardar(true, $scope.guardar); |
27 | 28 | }); |
28 | 29 | |
29 | - focaAbmVehiculoService.getCisterna($routeParams.id).then(function(res) { | |
30 | - if(res.data) { | |
31 | - $scope.cisterna = res.data; | |
32 | - $scope.editar = true; | |
33 | - }else { | |
34 | - $scope.editar = false; | |
35 | - } | |
36 | - }); | |
30 | + | |
31 | + if($routeParams.idTemp != undefined) { | |
32 | + $scope.cisterna = focaAbmVehiculoService.getCisternasLocal()[$routeParams.idTemp]; | |
33 | + }else { | |
34 | + focaAbmVehiculoService.getCisterna($routeParams.id).then(function(res) { | |
35 | + if(res.data) $scope.cisterna = res.data; | |
36 | + }); | |
37 | + } | |
37 | 38 | focaAbmVehiculoService.getVehiculo($routeParams.idVehiculo).then(function(res) { |
38 | 39 | var codigo = ('00000' + res.data.transportista.COD).slice(-5); |
40 | + $scope.transportista = res.data.transportista.COD; | |
39 | 41 | $scope.capacidadVechiulo = res.data.capacidad; |
40 | 42 | $scope.$broadcast('addCabecera', { |
41 | 43 | label: 'Transportista:', |
... | ... | @@ -45,6 +47,10 @@ angular.module('focaAbmVehiculo') |
45 | 47 | label: 'Unidad:', |
46 | 48 | valor: res.data.codigo |
47 | 49 | }); |
50 | + $scope.$broadcast('addCabecera', { | |
51 | + label: 'Capacidad total vehรญculo:', | |
52 | + valor: res.data.capacidad | |
53 | + }); | |
48 | 54 | }); |
49 | 55 | $scope.cancelar = function() { |
50 | 56 | $location.path('/vehiculo/' + $routeParams.idVehiculo); |
... | ... | @@ -55,13 +61,24 @@ angular.module('focaAbmVehiculo') |
55 | 61 | return; |
56 | 62 | } |
57 | 63 | validaCodigoCapacidad().then(function() { |
58 | - $scope.cisterna.idVehiculo = $routeParams.idVehiculo; | |
64 | + $scope.cisterna.idVehiculo = parseInt($routeParams.idVehiculo); | |
59 | 65 | delete $scope.cisterna.vehiculo; |
60 | - delete $scope.cisterna.unidadMedida; | |
61 | 66 | delete $scope.cisterna.cisternaCarga.articulo; |
62 | - focaAbmVehiculoService.guardarCisterna($scope.cisterna).then(function(){ | |
63 | - $location.path('/vehiculo/' + $routeParams.idVehiculo); | |
64 | - }); | |
67 | + | |
68 | + if($routeParams.idTemp != undefined) { | |
69 | + //SI SE EDITA UNA CISTERNA LOCALMENTE | |
70 | + focaAbmVehiculoService | |
71 | + .guardarCisternaLocal($scope.cisterna, $routeParams.idTemp); | |
72 | + }else if($scope.cisterna.id) { | |
73 | + //SI SE EDITA UNA CISTERNA PREVIAMENTE GUARDADA | |
74 | + focaAbmVehiculoService.deleteCisterna($scope.cisterna.id); | |
75 | + focaAbmVehiculoService.guardarCisternaLocal($scope.cisterna); | |
76 | + }else { | |
77 | + //SI SE EDITA CREA UNA NUEVA CISTERNA | |
78 | + focaAbmVehiculoService.guardarCisternaLocal($scope.cisterna); | |
79 | + } | |
80 | + $window.location.assign('/#!/vehiculo/' + $routeParams.idVehiculo + | |
81 | + '/' + $scope.transportista); | |
65 | 82 | }, function(err) { |
66 | 83 | focaModalService.alert(err); |
67 | 84 | }); |
... | ... | @@ -88,13 +105,14 @@ angular.module('focaAbmVehiculo') |
88 | 105 | focaAbmVehiculoService |
89 | 106 | .getCisternadoPorVehiculo($routeParams.idVehiculo) |
90 | 107 | .then(function(res) { |
91 | - | |
108 | + var cisternas = focaAbmVehiculoService.getCisternasLocal().concat(res.data); | |
92 | 109 | var totalCargado = 0; |
93 | 110 | |
94 | - res.data.forEach(function(cisterna) { | |
111 | + cisternas.forEach(function(cisterna) { | |
95 | 112 | //SI EL CODIGO YA EXISTE |
96 | 113 | if(cisterna.codigo === $scope.cisterna.codigo && |
97 | - cisterna.id !== $scope.cisterna.id) { | |
114 | + (cisterna.id !== $scope.cisterna.id || | |
115 | + cisterna.idTemp !== $scope.cisterna.idTemp)) { | |
98 | 116 | reject('Cรณdigo de cisterna existente'); |
99 | 117 | } |
100 | 118 | if(cisterna.id !== $scope.cisterna.id) { |
... | ... | @@ -106,7 +124,7 @@ angular.module('focaAbmVehiculo') |
106 | 124 | totalCargado = totalCargado + parseInt($scope.cisterna.capacidad); |
107 | 125 | if(totalCargado > $scope.capacidadVechiulo) { |
108 | 126 | reject('La capacidad total de las cisternas' + |
109 | - ' debe ser menor o igual a la del vehiculo'); | |
127 | + ' no debe ser mayor a la del vehiculo'); | |
110 | 128 | }else { |
111 | 129 | resolve(); |
112 | 130 | } |
src/js/route.js
... | ... | @@ -34,4 +34,13 @@ angular.module('focaAbmVehiculo') |
34 | 34 | templateUrl: 'src/views/foca-abm-cisterna-item.html' |
35 | 35 | }); |
36 | 36 | } |
37 | + ]) | |
38 | + .config([ | |
39 | + '$routeProvider', | |
40 | + function($routeProvider) { | |
41 | + $routeProvider.when('/vehiculo/:idVehiculo/cisterna/:id/:idTemp', { | |
42 | + controller: 'focaAbmVehiculoCisternaController', | |
43 | + templateUrl: 'src/views/foca-abm-cisterna-item.html' | |
44 | + }); | |
45 | + } | |
37 | 46 | ]); |
src/js/service.js
1 | 1 | angular.module('focaAbmVehiculo') |
2 | 2 | .factory('focaAbmVehiculoService', ['$http', 'API_ENDPOINT', function($http, API_ENDPOINT) { |
3 | + var cisternas = []; | |
3 | 4 | return { |
4 | 5 | getVehiculos: function() { |
5 | 6 | return $http.get(API_ENDPOINT.URL + '/vehiculo'); |
... | ... | @@ -22,6 +23,21 @@ angular.module('focaAbmVehiculo') |
22 | 23 | getCisterna: function(id) { |
23 | 24 | return $http.get(API_ENDPOINT.URL + '/cisterna/obtener/' + id); |
24 | 25 | }, |
26 | + getCisternasLocal: function() { | |
27 | + return cisternas; | |
28 | + }, | |
29 | + guardarCisternaLocal: function(cisterna, idTemp) { | |
30 | + if(idTemp){ | |
31 | + cisterna.idTemp = idTemp; | |
32 | + cisternas[idTemp] = cisterna; | |
33 | + }else { | |
34 | + cisterna.idTemp = cisternas.length; | |
35 | + cisternas.push(cisterna); | |
36 | + } | |
37 | + }, | |
38 | + cleanCisternasLocal: function(){ | |
39 | + cisternas = []; | |
40 | + }, | |
25 | 41 | guardarCisterna: function(cisterna) { |
26 | 42 | return $http.post(API_ENDPOINT.URL + '/cisterna/guardar', {cisterna: cisterna}); |
27 | 43 | }, |
src/views/foca-abm-vehiculos-item.html
... | ... | @@ -93,7 +93,7 @@ |
93 | 93 | <button |
94 | 94 | class="btn btn-outline-debo boton-accion" |
95 | 95 | title="Agregar" |
96 | - ng-click="editar(0)"> | |
96 | + ng-click="editar()"> | |
97 | 97 | <i class="fa fa-plus"></i> |
98 | 98 | </button> |
99 | 99 | </th> |
... | ... | @@ -107,7 +107,7 @@ |
107 | 107 | <button |
108 | 108 | class="btn btn-outline-dark boton-accion" |
109 | 109 | title="Editar" |
110 | - ng-click="editar(cisterna.id)" | |
110 | + ng-click="editar(cisterna)" | |
111 | 111 | > |
112 | 112 | <i class="fa fa-pencil"></i> |
113 | 113 | </button> |
src/views/foca-abm-vehiculos-listado.html
... | ... | @@ -44,7 +44,7 @@ |
44 | 44 | <td ng-bind="vehiculo.codigo" class="text-center"></td> |
45 | 45 | <td ng-bind="vehiculo.tractor"></td> |
46 | 46 | <td ng-bind="vehiculo.semi"></td> |
47 | - <td ng-bind="vehiculo.capacidadTotalCisternas" class="text-right"></td> | |
47 | + <td ng-bind="vehiculo.capacidad" class="text-right"></td> | |
48 | 48 | <td class="text-center"> |
49 | 49 | <button |
50 | 50 | class="btn btn-outline-dark boton-accion" |