Commit 98399df5099e93c8464d57532f1978c6cc1458cf

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

Merge branch 'master' into 'master'

formulario crear cliente

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