Commit 75c33a9ec8698f26fca4513fa14bf57d0d6b4c09

Authored by Jose Pinto
1 parent be8202bcb5
Exists in master and in 1 other branch develop

titles, disable boton guardar si no es valido

src/js/controller.js
1 angular.module('focaBusquedaCliente') 1 angular.module('focaBusquedaCliente')
2 .controller('focaBusquedaClienteModalController', [ 2 .controller('focaBusquedaClienteModalController', [
3 '$uibModalInstance', 'focaBusquedaClienteService', '$scope', '$filter', 3 '$uibModalInstance', 'focaBusquedaClienteService', '$scope', '$filter',
4 '$uibModal', 'focaModalService', 4 '$uibModal', 'focaModalService', '$timeout',
5 function($uibModalInstance, focaBusquedaClienteService, $scope, $filter, 5 function($uibModalInstance, focaBusquedaClienteService, $scope, $filter,
6 $uibModal, focaModalService) { 6 $uibModal, focaModalService, $timeout) {
7 7
8 $scope.filters = ''; 8 $scope.filters = '';
9 $scope.primerBusqueda = false; 9 $scope.primerBusqueda = false;
10 // pagination 10 // pagination
11 $scope.numPerPage = 10; 11 $scope.numPerPage = 10;
12 $scope.currentPage = 1; 12 $scope.currentPage = 1;
13 $scope.filteredClientes = []; 13 $scope.filteredClientes = [];
14 $scope.currentPageClientes = []; 14 $scope.currentPageClientes = [];
15 $scope.selectedClientes = -1; 15 $scope.selectedClientes = -1;
16 $scope.ingreso = false; 16 $scope.ingreso = false;
17 $scope.regexCuit = new RegExp(/\b(20|23|24|27|30|33|34)(\D)?[0-9]{8}(\D)?[0-9]/g);
18
17 19
18 $scope.cliente = { 20 $scope.cliente = {
19 COD: 0, 21 COD: 0,
20 ES_MAY: true, 22 ES_MAY: true,
21 provincia: { 23 provincia: {
22 NOMBRE: '' 24 NOMBRE: ''
23 }, 25 },
24 localidad: { 26 localidad: {
25 NOMBRE: '' 27 NOMBRE: ''
26 }, 28 },
27 iva: { 29 iva: {
28 NOMBRE: '' 30 NOMBRE: ''
29 }, 31 },
30 actividad: { 32 actividad: {
31 NOM: '' 33 NOM: ''
32 }, 34 },
33 zona: { 35 zona: {
34 NOM: '' 36 NOM: ''
35 }, 37 },
36 tipoFactura: { 38 tipoFactura: {
37 NOMBRE: '' 39 NOMBRE: ''
38 }, 40 },
39 tipoComprobante: { 41 tipoComprobante: {
40 NOMBRE: '' 42 NOMBRE: ''
41 }, 43 },
42 formaPago: { 44 formaPago: {
43 NOMBRE: '' 45 NOMBRE: ''
44 } 46 }
45 }; 47 };
46 48
47 $scope.busquedaPress = function(key) { 49 $scope.busquedaPress = function(key) {
48 if (key === 13) { 50 if (key === 13) {
49 $scope.searchLoading = true; 51 $scope.searchLoading = true;
50 focaBusquedaClienteService.obtenerClientesPorNombreOCuit($scope.filters).then( 52 focaBusquedaClienteService.obtenerClientesPorNombreOCuit($scope.filters).then(
51 function(res) { 53 function(res) {
52 $scope.primerBusqueda = true; 54 $scope.primerBusqueda = true;
53 $scope.clientes = res.data; 55 $scope.clientes = res.data;
54 $scope.search(true); 56 $scope.search(true);
55 primera(); 57 primera();
56 $scope.searchLoading = false; 58 $scope.searchLoading = false;
57 }); 59 });
58 } 60 }
59 }; 61 };
60 62
61 $scope.search = function (pressed) { 63 $scope.search = function (pressed) {
62 if($scope.primerBusqueda) { 64 if($scope.primerBusqueda) {
63 $scope.filteredClientes = $filter('filter')( 65 $scope.filteredClientes = $filter('filter')(
64 $scope.clientes, {$: $scope.filters} 66 $scope.clientes, {$: $scope.filters}
65 ); 67 );
66 68
67 if(pressed && $scope.filteredClientes.length === 0){ 69 if(pressed && $scope.filteredClientes.length === 0){
68 $timeout(function() { 70 $timeout(function() {
69 angular.element('#search')[0].focus(); 71 angular.element('#search')[0].focus();
70 $scope.filters = ''; 72 $scope.filters = '';
71 }); 73 });
72 } 74 }
73 75
74 $scope.lastPage = Math.ceil( 76 $scope.lastPage = Math.ceil(
75 $scope.filteredClientes.length / $scope.numPerPage 77 $scope.filteredClientes.length / $scope.numPerPage
76 ); 78 );
77 79
78 $scope.resetPage(); 80 $scope.resetPage();
79 } 81 }
80 }; 82 };
81 83
82 $scope.resetPage = function () { 84 $scope.resetPage = function () {
83 $scope.currentPage = 1; 85 $scope.currentPage = 1;
84 $scope.selectPage(1); 86 $scope.selectPage(1);
85 }; 87 };
86 88
87 $scope.selectPage = function (page) { 89 $scope.selectPage = function (page) {
88 var start = (page - 1) * $scope.numPerPage; 90 var start = (page - 1) * $scope.numPerPage;
89 var end = start + $scope.numPerPage; 91 var end = start + $scope.numPerPage;
90 $scope.paginas = []; 92 $scope.paginas = [];
91 $scope.paginas = calcularPages(page); 93 $scope.paginas = calcularPages(page);
92 $scope.currentPageClientes = $scope.filteredClientes.slice(start, end); 94 $scope.currentPageClientes = $scope.filteredClientes.slice(start, end);
93 $scope.currentPage = page; 95 $scope.currentPage = page;
94 }; 96 };
95 97
96 $scope.select = function(cliente, esNuevo = false) { 98 $scope.select = function(cliente, esNuevo = false) {
97 cliente.esNuevo = esNuevo; 99 cliente.esNuevo = esNuevo;
98 $uibModalInstance.close(cliente); 100 $uibModalInstance.close(cliente);
99 }; 101 };
100 102
101 $scope.cancel = function() { 103 $scope.cancel = function() {
102 if($scope.ingreso) { 104 if($scope.ingreso) {
103 $scope.ingreso = false; 105 $scope.ingreso = false;
104 }else { 106 }else {
105 $uibModalInstance.dismiss('cancel'); 107 $uibModalInstance.dismiss('cancel');
106 } 108 }
107 }; 109 };
108 110
109 $scope.busquedaDown = function(key) { 111 $scope.busquedaDown = function(key) {
110 if (key === 40) { 112 if (key === 40) {
111 primera(key); 113 primera(key);
112 } 114 }
113 }; 115 };
114 116
115 $scope.itemCliente = function(key) { 117 $scope.itemCliente = function(key) {
116 if (key === 38) { 118 if (key === 38) {
117 anterior(key); 119 anterior(key);
118 } 120 }
119 121
120 if (key === 40) { 122 if (key === 40) {
121 siguiente(key); 123 siguiente(key);
122 } 124 }
123 125
124 if (key === 37) { 126 if (key === 37) {
125 retrocederPagina(); 127 retrocederPagina();
126 } 128 }
127 129
128 if (key === 39) { 130 if (key === 39) {
129 avanzarPagina(); 131 avanzarPagina();
130 } 132 }
131 }; 133 };
132 134
133 $scope.seleccionarProvincia = function(key) { 135 $scope.seleccionarProvincia = function(key) {
134 if(key === 13) { 136 if(key === 13) {
135 var modalInstance = $uibModal.open( 137 var modalInstance = $uibModal.open(
136 { 138 {
137 ariaLabelledBy: 'Búsqueda de provincias', 139 ariaLabelledBy: 'Búsqueda de provincias',
138 templateUrl: 'modal-provincias.html', 140 templateUrl: 'modal-provincias.html',
139 controller: 'focaModalProvinciaController', 141 controller: 'focaModalProvinciaController',
140 size: 'md', 142 size: 'md',
141 resolve: {filters: function() { 143 resolve: {
142 return $scope.cliente.provincia; 144 filters: function() {
143 }} 145 return $scope.cliente.provincia.NOMBRE;
146 }
147 }
144 } 148 }
145 ); 149 );
146 modalInstance.result.then(function(provincia) { 150 modalInstance.result.then(function(provincia) {
147 $scope.cliente.provincia = provincia; 151 $scope.cliente.provincia = provincia;
148 $scope.focused = 3; 152 $scope.focused = 3;
149 }, function() { 153 }, function() {
150 //TODO: función llamada cuando cancela el modal 154 //TODO: función llamada cuando cancela el modal
151 }); 155 });
152 } 156 }
153 }; 157 };
154 $scope.seleccionarLocalidad = function(key) { 158 $scope.seleccionarLocalidad = function(key) {
155 if($scope.cliente.provincia.ID === undefined) { 159 if($scope.cliente.provincia.ID === undefined) {
156 //TODO: Poner modal alert de foca 160 //TODO: Poner modal alert de foca
157 alert('Seleccione una provincia'); 161 alert('Seleccione una provincia');
158 return; 162 return;
159 } 163 }
160 if(key === 13) { 164 if(key === 13) {
161 var modalInstance = $uibModal.open( 165 var modalInstance = $uibModal.open(
162 { 166 {
163 ariaLabelledBy: 'Búsqueda de localidades', 167 ariaLabelledBy: 'Búsqueda de localidades',
164 templateUrl: 'modal-localidades.html', 168 templateUrl: 'modal-localidades.html',
165 controller: 'focaModalLocalidadController', 169 controller: 'focaModalLocalidadController',
166 size: 'md', 170 size: 'md',
167 resolve: { 171 resolve: {
168 filters: { 172 filters: {
169 idProvincia: $scope.cliente.provincia.ID, 173 idProvincia: $scope.cliente.provincia.ID,
170 busqueda: $scope.cliente.localidad.nombre 174 busqueda: $scope.cliente.localidad.nombre
171 } 175 }
172 } 176 }
173 } 177 }
174 ); 178 );
175 modalInstance.result.then(function(localidad) { 179 modalInstance.result.then(function(localidad) {
176 $scope.cliente.localidad = localidad; 180 $scope.cliente.localidad = localidad;
177 $scope.focused = 4; 181 $scope.focused = 4;
178 }, function() { 182 }, function() {
179 //TODO: función llamada cuando cancela el modal 183 //TODO: función llamada cuando cancela el modal
180 }); 184 });
181 } 185 }
182 }; 186 };
183 $scope.seleccionarIva = function(key) { 187 $scope.seleccionarIva = function(key) {
184 if(key === 13) { 188 if(key === 13) {
185 var modalInstance = $uibModal.open( 189 var modalInstance = $uibModal.open(
186 { 190 {
187 ariaLabelledBy: 'Búsqueda de responsabilidad ante el IVA', 191 ariaLabelledBy: 'Búsqueda de responsabilidad ante el IVA',
188 templateUrl: 'modal-iva.html', 192 templateUrl: 'modal-iva.html',
189 controller: 'focaModalIvaController', 193 controller: 'focaModalIvaController',
190 size: 'md', 194 size: 'md',
191 resolve: {filters: function() { 195 resolve: {filters: function() {
192 return $scope.cliente.iva.NOMBRE; 196 return $scope.cliente.iva.NOMBRE;
193 }} 197 }}
194 } 198 }
195 ); 199 );
196 modalInstance.result.then(function(iva) { 200 modalInstance.result.then(function(iva) {
197 $scope.cliente.iva = iva; 201 $scope.cliente.iva = iva;
198 }, function() { 202 }, function() {
199 //TODO: función llamada cuando cancela el modal 203 //TODO: función llamada cuando cancela el modal
200 }); 204 });
201 } 205 }
202 }; 206 };
203 $scope.seleccionarActividad = function(key) { 207 $scope.seleccionarActividad = function(key) {
204 if(key === 13) { 208 if(key === 13) {
205 var modalInstance = $uibModal.open( 209 var modalInstance = $uibModal.open(
206 { 210 {
207 ariaLabelledBy: 'Búsqueda de actividades', 211 ariaLabelledBy: 'Búsqueda de actividades',
208 templateUrl: 'modal-actividad.html', 212 templateUrl: 'modal-actividad.html',
209 controller: 'focaModalActividadController', 213 controller: 'focaModalActividadController',
210 size: 'md', 214 size: 'md',
211 resolve: {filters: function() { 215 resolve: {filters: function() {
212 return $scope.cliente.actividad.NOM; 216 return $scope.cliente.actividad.NOM;
213 }} 217 }}
214 } 218 }
215 ); 219 );
216 modalInstance.result.then(function(actividad) { 220 modalInstance.result.then(function(actividad) {
217 $scope.cliente.actividad = actividad; 221 $scope.cliente.actividad = actividad;
218 }, function() { 222 }, function() {
219 //TODO: función llamada cuando cancela el modal 223 //TODO: función llamada cuando cancela el modal
220 }); 224 });
221 } 225 }
222 }; 226 };
223 $scope.seleccionarZona = function(key) { 227 $scope.seleccionarZona = function(key) {
224 if(key === 13) { 228 if(key === 13) {
225 var modalInstance = $uibModal.open( 229 var modalInstance = $uibModal.open(
226 { 230 {
227 ariaLabelledBy: 'Búsqueda de zonas', 231 ariaLabelledBy: 'Búsqueda de zonas',
228 templateUrl: 'modal-zona.html', 232 templateUrl: 'modal-zona.html',
229 controller: 'focaModalZonaController', 233 controller: 'focaModalZonaController',
230 size: 'md', 234 size: 'md',
231 resolve: {filters: function() { 235 resolve: {filters: function() {
232 return $scope.cliente.zona.NOM; 236 return $scope.cliente.zona.NOM;
233 }} 237 }}
234 } 238 }
235 ); 239 );
236 modalInstance.result.then(function(zona) { 240 modalInstance.result.then(function(zona) {
237 $scope.cliente.zona = zona; 241 $scope.cliente.zona = zona;
238 }, function() { 242 }, function() {
239 //TODO: función llamada cuando cancela el modal 243 //TODO: función llamada cuando cancela el modal
240 }); 244 });
241 } 245 }
242 }; 246 };
243 $scope.seleccionarTipoFactura = function(key) { 247 $scope.seleccionarTipoFactura = function(key) {
244 if(key === 13) { 248 if(key === 13) {
245 var modalInstance = $uibModal.open( 249 var modalInstance = $uibModal.open(
246 { 250 {
247 ariaLabelledBy: 'Búsqueda de tipos de factura', 251 ariaLabelledBy: 'Búsqueda de tipos de factura',
248 templateUrl: 'modal-tipo-factura.html', 252 templateUrl: 'modal-tipo-factura.html',
249 controller: 'focaModalTipoFacturaController', 253 controller: 'focaModalTipoFacturaController',
250 size: 'md', 254 size: 'md',
251 resolve: {filters: function() { 255 resolve: {filters: function() {
252 return $scope.cliente.tipoFactura.NOMBRE; 256 return $scope.cliente.tipoFactura.NOMBRE;
253 }} 257 }}
254 } 258 }
255 ); 259 );
256 modalInstance.result.then(function(tipoFactura) { 260 modalInstance.result.then(function(tipoFactura) {
257 $scope.cliente.tipoFactura = tipoFactura; 261 $scope.cliente.tipoFactura = tipoFactura;
258 }, function() { 262 }, function() {
259 //TODO: función llamada cuando cancela el modal 263 //TODO: función llamada cuando cancela el modal
260 }); 264 });
261 } 265 }
262 }; 266 };
263 $scope.seleccionarTipoComprobante = function(key) { 267 $scope.seleccionarTipoComprobante = function(key) {
264 if(key === 13) { 268 if(key === 13) {
265 var modalInstance = $uibModal.open( 269 var modalInstance = $uibModal.open(
266 { 270 {
267 ariaLabelledBy: 'Búsqueda de tipos de comprobante', 271 ariaLabelledBy: 'Búsqueda de tipos de comprobante',
268 templateUrl: 'modal-tipo-comprobante.html', 272 templateUrl: 'modal-tipo-comprobante.html',
269 controller: 'focaModalTipoComprobanteController', 273 controller: 'focaModalTipoComprobanteController',
270 size: 'md', 274 size: 'md',
271 resolve: {filters: function() { 275 resolve: {filters: function() {
272 return $scope.cliente.tipoComprobante.NOMBRE; 276 return $scope.cliente.tipoComprobante.NOMBRE;
273 }} 277 }}
274 } 278 }
275 ); 279 );
276 modalInstance.result.then(function(tipoComprobante) { 280 modalInstance.result.then(function(tipoComprobante) {
277 $scope.cliente.tipoComprobante = tipoComprobante; 281 $scope.cliente.tipoComprobante = tipoComprobante;
278 }, function() { 282 }, function() {
279 //TODO: función llamada cuando cancela el modal 283 //TODO: función llamada cuando cancela el modal
280 }); 284 });
281 } 285 }
282 }; 286 };
283 $scope.seleccionarFormaPago = function(key) { 287 $scope.seleccionarFormaPago = function(key) {
284 if(key === 13) { 288 if(key === 13) {
285 var modalInstance = $uibModal.open( 289 var modalInstance = $uibModal.open(
286 { 290 {
287 ariaLabelledBy: 'Búsqueda de formas de pago', 291 ariaLabelledBy: 'Búsqueda de formas de pago',
288 templateUrl: 'modal-forma-pago.html', 292 templateUrl: 'modal-forma-pago.html',
289 controller: 'focaModalFormaPagoController', 293 controller: 'focaModalFormaPagoController',
290 size: 'md', 294 size: 'md',
291 resolve: {filters: function() { 295 resolve: {filters: function() {
292 return $scope.cliente.formaPago.NOMBRE; 296 return $scope.cliente.formaPago.NOMBRE;
293 }} 297 }}
294 } 298 }
295 ); 299 );
296 modalInstance.result.then(function(formaPago) { 300 modalInstance.result.then(function(formaPago) {
297 $scope.cliente.formaPago = formaPago; 301 $scope.cliente.formaPago = formaPago;
298 }, function() { 302 }, function() {
299 //TODO: función llamada cuando cancela el modal 303 //TODO: función llamada cuando cancela el modal
300 }); 304 });
301 } 305 }
302 }; 306 };
303 307
304 $scope.guardar = function() { 308 $scope.guardar = function() {
305 309
306 if(!validarForm()) return;
307
308 $scope.cliente.PCX = $scope.cliente.provincia.ID; 310 $scope.cliente.PCX = $scope.cliente.provincia.ID;
309 $scope.cliente.LOX = $scope.cliente.localidad.ID; 311 $scope.cliente.LOX = $scope.cliente.localidad.ID;
310 $scope.cliente.IVA = $scope.cliente.iva.ID; 312 $scope.cliente.IVA = $scope.cliente.iva.ID;
311 $scope.cliente.ACT = $scope.cliente.actividad.ID; 313 $scope.cliente.ACT = $scope.cliente.actividad.ID;
312 $scope.cliente.ZON = $scope.cliente.zona.ID; 314 $scope.cliente.ZON = $scope.cliente.zona.ID;
313 $scope.cliente.TIP = $scope.cliente.tipoFactura.ID; 315 $scope.cliente.TIP = $scope.cliente.tipoFactura.ID;
314 $scope.cliente.TCO = $scope.cliente.tipoComprobante.ID; 316 $scope.cliente.TCO = $scope.cliente.tipoComprobante.ID;
315 $scope.cliente.FPA = $scope.cliente.formaPago.ID; 317 $scope.cliente.FPA = $scope.cliente.formaPago.ID;
316 318
317 delete $scope.cliente.provincia; 319 delete $scope.cliente.provincia;
318 delete $scope.cliente.localidad; 320 delete $scope.cliente.localidad;
319 delete $scope.cliente.iva; 321 delete $scope.cliente.iva;
320 delete $scope.cliente.actividad; 322 delete $scope.cliente.actividad;
321 delete $scope.cliente.zona; 323 delete $scope.cliente.zona;
322 delete $scope.cliente.tipoFactura; 324 delete $scope.cliente.tipoFactura;
323 delete $scope.cliente.tipoComprobante; 325 delete $scope.cliente.tipoComprobante;
324 delete $scope.cliente.formaPago; 326 delete $scope.cliente.formaPago;
325 327
326 focaBusquedaClienteService.guardarCliente($scope.cliente).then(function(res) { 328 focaBusquedaClienteService.guardarCliente($scope.cliente).then(function(res) {
327 $scope.select(res.data, true); 329 $scope.select(res.data, true);
328 }); 330 });
329 }; 331 };
330 332
331 function calcularPages(paginaActual) { 333 function calcularPages(paginaActual) {
332 var paginas = []; 334 var paginas = [];
333 paginas.push(paginaActual); 335 paginas.push(paginaActual);
334 336
335 if (paginaActual - 1 > 1) { 337 if (paginaActual - 1 > 1) {
336 338
337 paginas.unshift(paginaActual - 1); 339 paginas.unshift(paginaActual - 1);
338 if (paginaActual - 2 > 1) { 340 if (paginaActual - 2 > 1) {
339 paginas.unshift(paginaActual - 2); 341 paginas.unshift(paginaActual - 2);
340 } 342 }
341 } 343 }
342 344
343 if (paginaActual + 1 < $scope.lastPage) { 345 if (paginaActual + 1 < $scope.lastPage) {
344 paginas.push(paginaActual + 1); 346 paginas.push(paginaActual + 1);
345 if (paginaActual + 2 < $scope.lastPage) { 347 if (paginaActual + 2 < $scope.lastPage) {
346 paginas.push(paginaActual + 2); 348 paginas.push(paginaActual + 2);
347 } 349 }
348 } 350 }
349 351
350 if (paginaActual !== 1) { 352 if (paginaActual !== 1) {
351 paginas.unshift(1); 353 paginas.unshift(1);
352 } 354 }
353 355
354 if (paginaActual !== $scope.lastPage) { 356 if (paginaActual !== $scope.lastPage) {
355 paginas.push($scope.lastPage); 357 paginas.push($scope.lastPage);
356 } 358 }
357 359
358 return paginas; 360 return paginas;
359 } 361 }
360 362
361 function primera() { 363 function primera() {
362 $scope.selectedClientes = 0; 364 $scope.selectedClientes = 0;
363 } 365 }
364 366
365 function anterior() { 367 function anterior() {
366 if ($scope.selectedClientes === 0 && $scope.currentPage > 1) { 368 if ($scope.selectedClientes === 0 && $scope.currentPage > 1) {
367 retrocederPagina(); 369 retrocederPagina();
368 } else { 370 } else {
369 $scope.selectedClientes--; 371 $scope.selectedClientes--;
370 } 372 }
371 } 373 }
372 374
373 function siguiente() { 375 function siguiente() {
374 if ($scope.selectedClientes < $scope.currentPageClientes.length - 1 ) { 376 if ($scope.selectedClientes < $scope.currentPageClientes.length - 1 ) {
375 $scope.selectedClientes++; 377 $scope.selectedClientes++;
376 } else { 378 } else {
377 avanzarPagina(); 379 avanzarPagina();
378 } 380 }
379 } 381 }
380 382
381 function retrocederPagina() { 383 function retrocederPagina() {
382 if ($scope.currentPage > 1) { 384 if ($scope.currentPage > 1) {
383 $scope.selectPage($scope.currentPage - 1); 385 $scope.selectPage($scope.currentPage - 1);
384 $scope.selectedClientes = $scope.numPerPage - 1; 386 $scope.selectedClientes = $scope.numPerPage - 1;
385 } 387 }
386 } 388 }
387 389
388 function avanzarPagina() { 390 function avanzarPagina() {
389 if ($scope.currentPage < $scope.lastPage) { 391 if ($scope.currentPage < $scope.lastPage) {
390 $scope.selectPage($scope.currentPage + 1); 392 $scope.selectPage($scope.currentPage + 1);
391 $scope.selectedClientes = 0; 393 $scope.selectedClientes = 0;
392 } 394 }
393 } 395 }
394
395 function validarForm() {
396 var regexCuit = new RegExp(/\b(20|23|24|27|30|33|34)(\D)?[0-9]{8}(\D)?[0-9]/g);
397 if(!regexCuit.test($scope.cliente.CUIT)) {
398 focaModalService.alert('Número de CUIT inválido')
399 return false;
400 }
401 return true;
src/views/foca-busqueda-cliente-modal.html
1 <div class="modal-header py-1"> 1 <div class="modal-header py-1">
2 <div class="row w-100"> 2 <div class="row w-100">
3 <div class="col-lg-6"> 3 <div class="col-lg-4">
4 <h5 class="modal-title my-1" ng-hide="ingreso">Búsqueda de Cliente</h5> 4 <h5 class="modal-title my-1" ng-hide="ingreso">Búsqueda de Cliente</h5>
5 <h5 class="modal-title my-1" ng-show="ingreso">Crear Cliente</h5> 5 <h5 class="modal-title my-1" ng-show="ingreso">Crear Cliente</h5>
6 </div> 6 </div>
7 <div ng-show="ingreso" class="col-lg-6"> 7 <div ng-show="ingreso" class="col-lg-6">
8 <div class="custom-control custom-checkbox"> 8 <div class="custom-control custom-checkbox mt-2">
9 <input 9 <input
10 type="checkbox" 10 type="checkbox"
11 class="custom-control-input" 11 class="custom-control-input"
12 id="checkProspecto" 12 id="checkProspecto"
13 ng-model="cliente.ES_PROS"> 13 ng-model="cliente.ES_PROS">
14 <label class="custom-control-label" for="checkProspecto">¿Es prospecto?</label> 14 <label class="custom-control-label" for="checkProspecto">¿Es prospecto?</label>
15 </div> 15 </div>
16 </div> 16 </div>
17 <div class="input-group col-lg-6 pr-0 my-2"> 17 <div class="input-group col-lg-6 offset-lg-2 pr-0 my-2">
18 <button 18 <button
19 class="btn btn-outline-primary mr-2" 19 class="btn btn-outline-primary mr-2"
20 ng-click="ingreso = true" 20 ng-click="ingreso = true"
21 ng-show="!ingreso"> 21 ng-show="!ingreso"
22 title="Nuevo">
22 <i class="fa fa-plus" aria-hidden="true"></i> 23 <i class="fa fa-plus" aria-hidden="true"></i>
23 </button> 24 </button>
24 <input 25 <input
25 ladda="searchLoading" 26 ladda="searchLoading"
26 type="text" 27 type="text"
27 class="form-control form-control-sm" 28 class="form-control form-control-sm"
28 id="search" 29 id="search"
29 placeholder="Busqueda" 30 placeholder="Busqueda"
30 ng-model="filters" 31 ng-model="filters"
31 ng-change="search()" 32 ng-change="search()"
32 ng-keydown="busquedaDown($event.keyCode)" 33 ng-keydown="busquedaDown($event.keyCode)"
33 ng-keypress="busquedaPress($event.keyCode)" 34 ng-keypress="busquedaPress($event.keyCode)"
34 foca-focus="selectedClientes == -1" 35 foca-focus="selectedClientes == -1"
35 ng-focus="selectedClientes = -1" 36 ng-focus="selectedClientes = -1"
36 teclado-virtual 37 teclado-virtual
37 ng-hide="ingreso" 38 ng-hide="ingreso"
38 > 39 >
39 <div class="input-group-append" ng-hide="ingreso"> 40 <div class="input-group-append" ng-hide="ingreso">
40 <button 41 <button
41 ladda="searchLoading" 42 ladda="searchLoading"
42 data-spinner-color="#FF0000" 43 data-spinner-color="#FF0000"
43 class="btn btn-outline-secondary" 44 class="btn btn-outline-secondary"
44 type="button" 45 type="button"
45 ng-click="busquedaPress(13)"> 46 ng-click="busquedaPress(13)">
46 <i class="fa fa-search" aria-hidden="true"></i> 47 <i class="fa fa-search" aria-hidden="true"></i>
47 </button> 48 </button>
48 </div> 49 </div>
49 </div> 50 </div>
50 </div> 51 </div>
51 </div> 52 </div>
52 <div class="modal-body" id="modal-body"> 53 <div class="modal-body" id="modal-body">
53 54
54 <div ng-show="!primerBusqueda && !ingreso"> 55 <div ng-show="!primerBusqueda && !ingreso">
55 Debe realizar una primer búsqueda. 56 Debe realizar una primer búsqueda.
56 </div> 57 </div>
57 58
58 <table ng-show="primerBusqueda && !ingreso" class="table table-striped table-sm"> 59 <table ng-show="primerBusqueda && !ingreso" class="table table-striped table-sm">
59 <thead> 60 <thead>
60 <tr> 61 <tr>
61 <th>Código</th> 62 <th>Código</th>
62 <th>Nombre</th> 63 <th>Nombre</th>
63 <th>CUIT</th> 64 <th>CUIT</th>
64 <th></th> 65 <th></th>
65 </tr> 66 </tr>
66 </thead> 67 </thead>
67 <tbody> 68 <tbody>
68 <tr ng-show="currentPageClientes.length == 0 && primerBusqueda"> 69 <tr ng-show="currentPageClientes.length == 0 && primerBusqueda">
69 <td colspan="4"> 70 <td colspan="4">
70 No se encontraron resultados. 71 No se encontraron resultados.
71 </td> 72 </td>
72 </tr> 73 </tr>
73 <tr 74 <tr
74 class="selectable" 75 class="selectable"
75 ng-repeat="(key, cliente) in currentPageClientes" 76 ng-repeat="(key, cliente) in currentPageClientes"
76 ng-click="select(cliente)"> 77 ng-click="select(cliente)">
77 <td ng-bind="('00000'+cliente.cod).slice(-5)"></td> 78 <td ng-bind="('00000'+cliente.cod).slice(-5)"></td>
78 <td ng-bind="cliente.nom"></td> 79 <td ng-bind="cliente.nom"></td>
79 <td ng-bind="cliente.cuit"></td> 80 <td ng-bind="cliente.cuit"></td>
80 <td> 81 <td>
81 <button 82 <button
82 type="button" 83 type="button"
83 class="btn btn-xs p-1 float-right" 84 class="btn btn-xs p-1 float-right"
84 ng-class="{ 85 ng-class="{
85 'btn-secondary': selectedClientes != key, 86 'btn-secondary': selectedClientes != key,
86 'btn-primary': selectedClientes == key 87 'btn-primary': selectedClientes == key
87 }" 88 }"
88 ng-click="select(cliente)" 89 ng-click="select(cliente)"
89 foca-focus="selectedClientes == {{key}}" 90 foca-focus="selectedClientes == {{key}}"
90 ng-keydown="itemCliente($event.keyCode)" 91 ng-keydown="itemCliente($event.keyCode)"
91 > 92 >
92 <i class="fa fa-circle-thin" aria-hidden="true"></i> 93 <i class="fa fa-circle-thin" aria-hidden="true"></i>
93 </button> 94 </button>
94 </td> 95 </td>
95 </tr> 96 </tr>
96 </tbody> 97 </tbody>
97 </table> 98 </table>
98 99
99 <form name="formCliente"> 100 <form name="formCliente">
100 <uib-tabset class="tabs-right" ng-show="ingreso"> 101 <uib-tabset class="tabs-right" ng-show="ingreso">
101 <uib-tab heading="Datos clientes"> 102 <uib-tab heading="Datos clientes">
102 <div class="row"> 103 <div class="row">
103 <div class="col-3"> 104 <div class="col-3">
104 <label>Código</label> 105 <label>Código</label>
105 <input 106 <input
106 type="text" 107 type="text"
107 class="form-control form-control-sm" 108 class="form-control form-control-sm"
108 ng-model="cliente.codigo" 109 ng-model="cliente.codigo"
109 ng-required="true"
110 readonly 110 readonly
111 /> 111 />
112 </div> 112 </div>
113 <div class="col-9"> 113 <div class="col-9">
114 <label>Nombre</label> 114 <label>Nombre</label>
115 <input 115 <input
116 type="text" 116 type="text"
117 foca-focus="ingreso" 117 foca-focus="ingreso"
118 class="form-control form-control-sm" 118 class="form-control form-control-sm"
119 ng-model="cliente.NOM" 119 ng-model="cliente.NOM"
120 placeholder="Ingrese nombre" 120 placeholder="Ingrese nombre"
121 ng-required="true" 121 ng-required="true"
122 teclado-virtual 122 teclado-virtual
123 /> 123 />
124 </div> 124 </div>
125 </div> 125 </div>
126 <div class="row"> 126 <div class="row">
127 <div class="col-9"> 127 <div class="col-9">
128 <label>Domicilio</label> 128 <label>Domicilio</label>
129 <input 129 <input
130 type="text" 130 type="text"
131 class="form-control form-control-sm" 131 class="form-control form-control-sm"
132 ng-model="cliente.DOM" 132 ng-model="cliente.DOM"
133 placeholder="Ingrese domicilio" 133 placeholder="Ingrese domicilio"
134 ng-required="true" 134 ng-required="true"
135 teclado-virtual 135 teclado-virtual
136 /> 136 />
137 </div> 137 </div>
138 <div class="col-3"> 138 <div class="col-3">
139 <label>Código postal</label> 139 <label>Código postal</label>
140 <input 140 <input
141 type="text" 141 type="text"
142 class="form-control form-control-sm" 142 class="form-control form-control-sm"
143 ng-model="cliente.CPO" 143 ng-model="cliente.CPO"
144 placeholder="Ingrese CP" 144 placeholder="Ingrese CP"
145 ng-required="true" 145 ng-required="true"
146 teclado-virtual 146 teclado-virtual
147 /> 147 />
148 </div> 148 </div>
149 </div> 149 </div>
150 <div class="row"> 150 <div class="row">
151 <div class="col-6"> 151 <div class="col-6">
152 <label>Provincia</label> 152 <label>Provincia</label>
153 <div class="input-group"> 153 <div class="input-group">
154 <input 154 <input
155 type="text" 155 type="text"
156 class="form-control form-control-sm" 156 class="form-control form-control-sm"
157 ng-model="cliente.provincia.NOMBRE" 157 ng-model="cliente.provincia.NOMBRE"
158 ng-keypress="seleccionarProvincia($event.keyCode)" 158 ng-keypress="seleccionarProvincia($event.keyCode)"
159 placeholder="Ingrese provincia" 159 placeholder="Ingrese provincia"
160 ng-required="true" 160 ng-required="true"
161 teclado-virtual 161 teclado-virtual
162 /> 162 />
163 <div class="input-group-append"> 163 <div class="input-group-append">
164 <button 164 <button
165 ladda="searchLoading" 165 ladda="searchLoading"
166 class="btn btn-outline-secondary form-control-sm" 166 class="btn btn-outline-secondary form-control-sm"
167 type="button" 167 type="button"
168 ng-click="seleccionarProvincia(13)" 168 ng-click="seleccionarProvincia(13)"
169 > 169 >
170 <i class="fa fa-search" aria-hidden="true"></i> 170 <i class="fa fa-search" aria-hidden="true"></i>
171 </button> 171 </button>
172 </div> 172 </div>
173 </div> 173 </div>
174 </div> 174 </div>
175 <div class="col-6"> 175 <div class="col-6">
176 <label>Localidad</label> 176 <label>Localidad</label>
177 <div class="input-group"> 177 <div class="input-group">
178 <input 178 <input
179 type="text" 179 type="text"
180 class="form-control form-control-sm" 180 class="form-control form-control-sm"
181 ng-model="cliente.localidad.NOMBRE" 181 ng-model="cliente.localidad.NOMBRE"
182 ng-keypress="seleccionarLocalidad($event.keyCode)" 182 ng-keypress="seleccionarLocalidad($event.keyCode)"
183 placeholder="Ingrese localidad" 183 placeholder="Ingrese localidad"
184 ng-required="true" 184 ng-required="true"
185 teclado-virtual 185 teclado-virtual
186 /> 186 />
187 <div class="input-group-append"> 187 <div class="input-group-append">
188 <button 188 <button
189 ladda="searchLoading" 189 ladda="searchLoading"
190 class="btn btn-outline-secondary form-control-sm" 190 class="btn btn-outline-secondary form-control-sm"
191 type="button" 191 type="button"
192 ng-click="seleccionarLocalidad(13)" 192 ng-click="seleccionarLocalidad(13)"
193 > 193 >
194 <i class="fa fa-search" aria-hidden="true"></i> 194 <i class="fa fa-search" aria-hidden="true"></i>
195 </button> 195 </button>
196 </div> 196 </div>
197 </div> 197 </div>
198 </div> 198 </div>
199 </div> 199 </div>
200 <div class="row"> 200 <div class="row">
201 <div class="col-6"> 201 <div class="col-6">
202 <label>Zona</label> 202 <label>Zona</label>
203 <div class="input-group"> 203 <div class="input-group">
204 <input 204 <input
205 type="text" 205 type="text"
206 class="form-control form-control-sm" 206 class="form-control form-control-sm"
207 ng-model="cliente.zona.NOM" 207 ng-model="cliente.zona.NOM"
208 ng-keypress="seleccionarZona($event.keyCode)" 208 ng-keypress="seleccionarZona($event.keyCode)"
209 placeholder="Ingrese zona" 209 placeholder="Ingrese zona"
210 ng-required="true" 210 ng-required="true"
211 teclado-virtual 211 teclado-virtual
212 /> 212 />
213 <div class="input-group-append"> 213 <div class="input-group-append">
214 <button 214 <button
215 ladda="searchLoading" 215 ladda="searchLoading"
216 class="btn btn-outline-secondary form-control-sm" 216 class="btn btn-outline-secondary form-control-sm"
217 type="button" 217 type="button"
218 ng-click="seleccionarZona(13)" 218 ng-click="seleccionarZona(13)"
219 > 219 >
220 <i class="fa fa-search" aria-hidden="true"></i> 220 <i class="fa fa-search" aria-hidden="true"></i>
221 </button> 221 </button>
222 </div> 222 </div>
223 </div> 223 </div>
224 </div> 224 </div>
225 <div class="col-6"> 225 <div class="col-6">
226 <label>Actividad</label> 226 <label>Actividad</label>
227 <div class="input-group"> 227 <div class="input-group">
228 <input 228 <input
229 type="text" 229 type="text"
230 class="form-control form-control-sm" 230 class="form-control form-control-sm"
231 ng-model="cliente.actividad.NOM" 231 ng-model="cliente.actividad.NOM"
232 ng-keypress="seleccionarActividad($event.keyCode)" 232 ng-keypress="seleccionarActividad($event.keyCode)"
233 placeholder="Ingrese actividad" 233 placeholder="Ingrese actividad"
234 ng-required="true" 234 ng-required="true"
235 teclado-virtual 235 teclado-virtual
236 /> 236 />
237 <div class="input-group-append"> 237 <div class="input-group-append">
238 <button 238 <button
239 ladda="searchLoading" 239 ladda="searchLoading"
240 class="btn btn-outline-secondary form-control-sm" 240 class="btn btn-outline-secondary form-control-sm"
241 type="button" 241 type="button"
242 ng-click="seleccionarActividad(13)" 242 ng-click="seleccionarActividad(13)"
243 > 243 >
244 <i class="fa fa-search" aria-hidden="true"></i> 244 <i class="fa fa-search" aria-hidden="true"></i>
245 </button> 245 </button>
246 </div> 246 </div>
247 </div> 247 </div>
248 </div> 248 </div>
249 </div> 249 </div>
250 <div class="row"> 250 <div class="row">
251 <div class="col-6"> 251 <div class="col-6">
252 <div class="custom-control custom-checkbox"> 252 <div class="custom-control custom-checkbox">
253 <input 253 <input
254 type="checkbox" 254 type="checkbox"
255 class="custom-control-input" 255 class="custom-control-input"
256 id="checkDistribuidor" 256 id="checkDistribuidor"
257 ng-model="cliente.ES_MAY" 257 ng-model="cliente.ES_MAY"
258 checked> 258 checked
259 disabled="disabled">
259 <label class="custom-control-label" for="checkDistribuidor">¿Este cliente es distribuidor?</label> 260 <label class="custom-control-label" for="checkDistribuidor">¿Este cliente es distribuidor?</label>
260 </div> 261 </div>
261 </div> 262 </div>
262 </div> 263 </div>
263 </uib-tab> 264 </uib-tab>
264 <uib-tab heading="Datos impositivos"> 265 <uib-tab heading="Datos impositivos">
265 <div class="row"> 266 <div class="row">
266 <div class="col-7"> 267 <div class="col-7">
267 <label>Responsabilidad ante el IVA</label> 268 <label>Responsabilidad ante el IVA</label>
268 <div class="input-group"> 269 <div class="input-group">
269 <input 270 <input
270 type="text" 271 type="text"
271 class="form-control form-control-sm" 272 class="form-control form-control-sm"
272 ng-model="cliente.iva.NOMBRE" 273 ng-model="cliente.iva.NOMBRE"
273 ng-keypress="seleccionarIva($event.keyCode)" 274 ng-keypress="seleccionarIva($event.keyCode)"
274 ng-required="true" 275 ng-required="true"
275 teclado-virtual 276 teclado-virtual
276 /> 277 />
277 <div class="input-group-append"> 278 <div class="input-group-append">
278 <button 279 <button
279 ladda="searchLoading" 280 ladda="searchLoading"
280 class="btn btn-outline-secondary form-control-sm" 281 class="btn btn-outline-secondary form-control-sm"
281 type="button" 282 type="button"
282 ng-click="seleccionarIva(13)" 283 ng-click="seleccionarIva(13)"
283 > 284 >
284 <i class="fa fa-search" aria-hidden="true"></i> 285 <i class="fa fa-search" aria-hidden="true"></i>
285 </button> 286 </button>
286 </div> 287 </div>
287 </div> 288 </div>
288 </div> 289 </div>
289 <div class="col-5"> 290 <div class="col-5">
290 <label>Factura que emite</label> 291 <label>Factura que emite</label>
291 <div class="input-group"> 292 <div class="input-group">
292 <input 293 <input
293 type="text" 294 type="text"
294 class="form-control form-control-sm" 295 class="form-control form-control-sm"
295 placeholder="Ingrese factura que emite" 296 placeholder="Ingrese factura que emite"
296 ng-model="cliente.tipoFactura.NOMBRE" 297 ng-model="cliente.tipoFactura.NOMBRE"
297 ng-required="true" 298 ng-required="true"
298 ng-keypress="seleccionarTipoFactura(13)" 299 ng-keypress="seleccionarTipoFactura(13)"
299 teclado-virtual> 300 teclado-virtual>
300 <div class="input-group-append"> 301 <div class="input-group-append">
301 <button 302 <button
302 ladda="searchLoading" 303 ladda="searchLoading"
303 class="btn btn-outline-secondary form-control-sm" 304 class="btn btn-outline-secondary form-control-sm"
304 type="button" 305 type="button"
305 ng-click="seleccionarTipoFactura(13)" 306 ng-click="seleccionarTipoFactura(13)"
306 > 307 >
307 <i class="fa fa-search" aria-hidden="true"></i> 308 <i class="fa fa-search" aria-hidden="true"></i>
308 </button> 309 </button>
309 </div> 310 </div>
310 </div> 311 </div>
311 </div> 312 </div>
312 </div> 313 </div>
313 <div class="row"> 314 <div class="row">
314 <div class="col-4"> 315 <div class="col-4">
315 <label>CUIT</label> 316 <label>CUIT</label>
316 <div class="input-group"> 317 <div class="input-group">
317 <input 318 <input
318 type="text" 319 type="text"
319 class="form-control form-control-sm" 320 class="form-control form-control-sm"
320 placeholder="Ingrese CUIT" 321 placeholder="Ingrese CUIT"
321 ng-model="cliente.CUIT" 322 ng-model="cliente.CUIT"
322 ng-required="true" 323 ng-required="true"
324 ng-pattern="regexCuit"
325 ng-maxlength="13"
323 teclado-virtual> 326 teclado-virtual>
324 </div> 327 </div>
325 </div> 328 </div>
326 <div class="col-4"> 329 <div class="col-4">
327 <label>Clase de comprobante</label> 330 <label>Clase de comprobante</label>
328 <div class="input-group"> 331 <div class="input-group">
329 <input 332 <input
330 type="text" 333 type="text"
331 class="form-control form-control-sm" 334 class="form-control form-control-sm"
332 placeholder="Ingrese clase de comprobante" 335 placeholder="Ingrese clase de comprobante"
333 ng-keypress="seleccionarTipoComprobante($event.keyCode)" 336 ng-keypress="seleccionarTipoComprobante($event.keyCode)"
334 ng-model="cliente.tipoComprobante.NOMBRE" 337 ng-model="cliente.tipoComprobante.NOMBRE"
335 ng-required="true" 338 ng-required="true"
336 teclado-virtual> 339 teclado-virtual>
337 <div class="input-group-append"> 340 <div class="input-group-append">
338 <button 341 <button
339 ladda="searchLoading" 342 ladda="searchLoading"
340 class="btn btn-outline-secondary form-control-sm" 343 class="btn btn-outline-secondary form-control-sm"
341 type="button" 344 type="button"
342 ng-click="seleccionarTipoComprobante(13)" 345 ng-click="seleccionarTipoComprobante(13)"
343 > 346 >
344 <i class="fa fa-search" aria-hidden="true"></i> 347 <i class="fa fa-search" aria-hidden="true"></i>
345 </button> 348 </button>
346 </div> 349 </div>
347 </div> 350 </div>
348 </div> 351 </div>
349 <div class="col-4"> 352 <div class="col-4">
350 <label>Forma de pago</label> 353 <label>Forma de pago</label>
351 <div class="input-group"> 354 <div class="input-group">
352 <input 355 <input
353 type="text" 356 type="text"
354 class="form-control form-control-sm" 357 class="form-control form-control-sm"
355 placeholder="Ingrese forma de pago" 358 placeholder="Ingrese forma de pago"
356 ng-model="cliente.formaPago.NOMBRE" 359 ng-model="cliente.formaPago.NOMBRE"
357 ng-required="true" 360 ng-required="true"
358 ng-keypress="seleccionarFormaPago($event.keyCode)" 361 ng-keypress="seleccionarFormaPago($event.keyCode)"
359 teclado-virtual> 362 teclado-virtual>
360 <div class="input-group-append"> 363 <div class="input-group-append">
361 <button 364 <button
362 ladda="searchLoading" 365 ladda="searchLoading"
363 class="btn btn-outline-secondary form-control-sm" 366 class="btn btn-outline-secondary form-control-sm"
364 type="button" 367 type="button"
365 ng-click="seleccionarFormaPago(13)" 368 ng-click="seleccionarFormaPago(13)"
366 > 369 >
367 <i class="fa fa-search" aria-hidden="true"></i> 370 <i class="fa fa-search" aria-hidden="true"></i>
368 </button> 371 </button>
369 </div> 372 </div>
370 </div> 373 </div>
371 </div> 374 </div>
372 </div> 375 </div>
373 </uib-tab> 376 </uib-tab>
374 </uib-tabset> 377 </uib-tabset>
375 </form> 378 </form>
376 </div> 379 </div>
377 <div class="modal-footer py-1"> 380 <div class="modal-footer py-1">
378 <nav ng-show="currentPageClientes.length > 0 && primerBusqueda && !ingreso" class="mr-auto"> 381 <nav ng-show="currentPageClientes.length > 0 && primerBusqueda && !ingreso" class="mr-auto">
379 <ul class="pagination pagination-sm mb-0"> 382 <ul class="pagination pagination-sm mb-0">
380 <li class="page-item" ng-class="{'disabled': currentPage == 1}"> 383 <li class="page-item" ng-class="{'disabled': currentPage == 1}">
381 <a class="page-link" href="javascript:void()" ng-click="selectPage(currentPage - 1)"> 384 <a class="page-link" href="javascript:void()" ng-click="selectPage(currentPage - 1)">
382 <span aria-hidden="true">&laquo;</span> 385 <span aria-hidden="true">&laquo;</span>
383 <span class="sr-only">Anterior</span> 386 <span class="sr-only">Anterior</span>
384 </a> 387 </a>
385 </li> 388 </li>
386 <li 389 <li
387 class="page-item" 390 class="page-item"
388 ng-repeat="pagina in paginas" 391 ng-repeat="pagina in paginas"
389 ng-class="{'active': pagina == currentPage}" 392 ng-class="{'active': pagina == currentPage}"
390 > 393 >
391 <a 394 <a
392 class="page-link" 395 class="page-link"
393 href="javascript:void()" 396 href="javascript:void()"
394 ng-click="selectPage(pagina)" 397 ng-click="selectPage(pagina)"
395 ng-bind="pagina" 398 ng-bind="pagina"
396 ></a> 399 ></a>
397 </li> 400 </li>
398 <li class="page-item" ng-class="{'disabled': currentPage == lastPage}"> 401 <li class="page-item" ng-class="{'disabled': currentPage == lastPage}">
399 <a class="page-link" href="javascript:void()" ng-click="selectPage(currentPage + 1)"> 402 <a class="page-link" href="javascript:void()" ng-click="selectPage(currentPage + 1)">
400 <span aria-hidden="true">&raquo;</span> 403 <span aria-hidden="true">&raquo;</span>
401 <span class="sr-only">Siguiente</span> 404 <span class="sr-only">Siguiente</span>
402 </a> 405 </a>
403 </li> 406 </li>
404 </ul> 407 </ul>
405 </nav> 408 </nav>
406 <button class="btn btn-sm btn-secondary" type="button" ng-click="cancel()">Cancelar</button> 409 <button class="btn btn-sm btn-secondary" type="button" ng-click="cancel()">Cancelar</button>
407 <button class="btn btn-sm btn-primary" type="button" ng-show="ingreso" ng-click="guardar()">Guardar</button> 410 <button
411 class="btn btn-sm btn-primary"
412 type="button"
413 ng-show="ingreso"
414 ng-click="guardar()"
415 ng-disabled="!formCliente.$valid">Guardar</button>
408 </div> 416 </div>