Commit 9265e9b918337360c43d852411551237588310d5

Authored by Nicolás Guarnieri
Exists in master and in 1 other branch develop

Merge branch 'master' of git.focasoftware.com:npm/foca-busqueda-cliente

1 { 1 {
2 /* 2 /*
3 * ENVIRONMENTS 3 * ENVIRONMENTS
4 * ================= 4 * =================
5 */ 5 */
6 6
7 // Define globals exposed by modern browsers. 7 // Define globals exposed by modern browsers.
8 "browser": true, 8 "browser": true,
9 9
10 // Define globals exposed by jQuery. 10 // Define globals exposed by jQuery.
11 "jquery": true, 11 "jquery": true,
12 12
13 // Define globals exposed by Node.js. 13 // Define globals exposed by Node.js.
14 "node": true, 14 "node": true,
15 15
16 // Allow ES6. 16 // Allow ES6.
17 "esversion": 6, 17 "esversion": 6,
18 18
19 /* 19 /*
20 * ENFORCING OPTIONS 20 * ENFORCING OPTIONS
21 * ================= 21 * =================
22 */ 22 */
23 23
24 // Force all variable names to use either camelCase style or UPPER_CASE 24 // Force all variable names to use either camelCase style or UPPER_CASE
25 // with underscores. 25 // with underscores.
26 "camelcase": true, 26 "camelcase": true,
27 27
28 // Prohibit use of == and != in favor of === and !==. 28 // Prohibit use of == and != in favor of === and !==.
29 "eqeqeq": true, 29 "eqeqeq": true,
30 30
31 // Enforce tab width of 2 spaces. 31 // Enforce tab width of 2 spaces.
32 "indent": 4, 32 "indent": 4,
33 33
34 // Prohibit use of a variable before it is defined. 34 // Prohibit use of a variable before it is defined.
35 "latedef": true, 35 "latedef": false,
36 36
37 // Enforce line length to 100 characters 37 // Enforce line length to 100 characters
38 "maxlen": 100, 38 "maxlen": 100,
39 39
40 // Require capitalized names for constructor functions. 40 // Require capitalized names for constructor functions.
41 "newcap": true, 41 "newcap": true,
42 42
43 // Enforce use of single quotation marks for strings. 43 // Enforce use of single quotation marks for strings.
44 "quotmark": "single", 44 "quotmark": "single",
45 45
46 // Enforce placing 'use strict' at the top function scope 46 // Enforce placing 'use strict' at the top function scope
47 "strict": false, 47 "strict": false,
48 48
49 // Prohibit use of explicitly undeclared variables. 49 // Prohibit use of explicitly undeclared variables.
50 "undef": true, 50 "undef": true,
51 51
52 // Warn when variables are defined but never used. 52 // Warn when variables are defined but never used.
53 "unused": true, 53 "unused": true,
54 54
55 // Para que funcione en angular 55 // Para que funcione en angular
56 "predef": ["angular", "alert", "spyOn", "expect", "it", "inject", "beforeEach", "describe"], 56 "predef": ["angular", "alert", "spyOn", "expect", "it", "inject", "beforeEach", "describe"],
57 /* 57 /*
58 * RELAXING OPTIONS 58 * RELAXING OPTIONS
59 * ================= 59 * =================
60 */ 60 */
61 61
62 // Suppress warnings about == null comparisons. 62 // Suppress warnings about == null comparisons.
63 "eqnull": true 63 "eqnull": true
64 } 64 }
65 65
1 const templateCache = require('gulp-angular-templatecache'); 1 const templateCache = require('gulp-angular-templatecache');
2 const concat = require('gulp-concat'); 2 const concat = require('gulp-concat');
3 const htmlmin = require('gulp-htmlmin'); 3 const htmlmin = require('gulp-htmlmin');
4 const rename = require('gulp-rename'); 4 const rename = require('gulp-rename');
5 const uglify = require('gulp-uglify-es').default; 5 const uglify = require('gulp-uglify-es').default;
6 const gulp = require('gulp'); 6 const gulp = require('gulp');
7 const pump = require('pump'); 7 const pump = require('pump');
8 const jshint = require('gulp-jshint'); 8 const jshint = require('gulp-jshint');
9 const replace = require('gulp-replace'); 9 const replace = require('gulp-replace');
10 const connect = require('gulp-connect'); 10 const connect = require('gulp-connect');
11 const clean = require('gulp-clean'); 11 const clean = require('gulp-clean');
12 12
13 var paths = { 13 var paths = {
14 srcJS: 'src/js/*.js', 14 srcJS: 'src/js/*.js',
15 srcViews: 'src/views/*.html', 15 srcViews: 'src/views/*.html',
16 tmp: 'tmp', 16 tmp: 'tmp',
17 dist: 'dist/' 17 dist: 'dist/'
18 }; 18 };
19 19
20 gulp.task('clean', function(){ 20 gulp.task('clean', function(){
21 return gulp.src(['tmp', 'dist'], {read: false}) 21 return gulp.src(['tmp', 'dist'], {read: false})
22 .pipe(clean()); 22 .pipe(clean());
23 }); 23 });
24 24
25 gulp.task('templates', ['clean'], function() { 25 gulp.task('templates', ['clean'], function() {
26 return pump( 26 return pump(
27 [ 27 [
28 gulp.src(paths.srcViews), 28 gulp.src(paths.srcViews),
29 htmlmin(), 29 htmlmin(),
30 templateCache('views.js', { 30 templateCache('views.js', {
31 module: 'focaBusquedaCliente', 31 module: 'focaBusquedaCliente',
32 root: '' 32 root: ''
33 }), 33 }),
34 gulp.dest(paths.tmp) 34 gulp.dest(paths.tmp)
35 ] 35 ]
36 ); 36 );
37 }); 37 });
38 38
39 gulp.task('uglify', ['templates'], function() { 39 gulp.task('uglify', ['templates'], function() {
40 return pump( 40 return pump(
41 [ 41 [
42 gulp.src([ 42 gulp.src([
43 paths.srcJS, 43 paths.srcJS,
44 'tmp/views.js' 44 'tmp/views.js'
45 ]), 45 ]),
46 concat('foca-busqueda-cliente.js'), 46 concat('foca-busqueda-cliente.js'),
47 replace("['ui.bootstrap', 'focaDirectivas', 'angular-ladda']", '[]'),
48 replace('src/views/', ''), 47 replace('src/views/', ''),
49 gulp.dest(paths.tmp), 48 gulp.dest(paths.tmp),
50 rename('foca-busqueda-cliente.min.js'), 49 rename('foca-busqueda-cliente.min.js'),
51 uglify(), 50 uglify(),
52 gulp.dest(paths.dist) 51 gulp.dest(paths.dist)
53 ] 52 ]
54 ); 53 );
55 }); 54 });
56 55
57 gulp.task('pre-commit', function() { 56 gulp.task('pre-commit', function() {
58 return pump( 57 return pump(
59 [ 58 [
60 gulp.src(paths.srcJS), 59 gulp.src(paths.srcJS),
61 jshint('.jshintrc'), 60 jshint('.jshintrc'),
62 jshint.reporter('default'), 61 jshint.reporter('default'),
63 jshint.reporter('fail') 62 jshint.reporter('fail')
64 ] 63 ]
65 ); 64 );
66 }); 65 });
67 66
68 67
69 gulp.task('webserver', function() { 68 gulp.task('webserver', function() {
70 pump [ 69 pump [
71 connect.server({port: 3000}) 70 connect.server({port: 3000})
72 ] 71 ]
73 }); 72 });
74 73
75 gulp.task('clean-post-install', function() { 74 gulp.task('clean-post-install', function() {
76 return gulp.src(['src', 'tmp', '.jshintrc','readme.md', '.gitignore', 'gulpfile.js', 75 return gulp.src(['src', 'tmp', '.jshintrc','readme.md', '.gitignore', 'gulpfile.js',
77 'index.html'], {read: false}) 76 'index.html'], {read: false})
78 .pipe(clean()); 77 .pipe(clean());
79 }); 78 });
80 79
81 gulp.task('default', ['webserver']); 80 gulp.task('default', ['webserver']);
82 81
83 gulp.task('watch', function(){ 82 gulp.task('watch', function(){
84 gulp.watch([paths.srcJS, paths.srcViews], ['uglify']); 83 gulp.watch([paths.srcJS, paths.srcViews], ['uglify']);
85 }); 84 });
86 85
1 { 1 {
2 "name": "foca-busqueda-cliente", 2 "name": "foca-busqueda-cliente",
3 "version": "1.0.0", 3 "version": "1.0.0",
4 "description": "Búsqueda de clientes", 4 "description": "Búsqueda de clientes",
5 "main": "dist/foca-abm-sectores.js", 5 "main": "dist/foca-busqueda-cliente.min.js",
6 "scripts": { 6 "scripts": {
7 "test": "echo \"Error: no test specified\" && exit 1", 7 "test": "echo \"Error: no test specified\" && exit 1",
8 "gulp-pre-commit": "gulp pre-commit",
8 "compile": "gulp uglify", 9 "compile": "gulp uglify",
9 "postinstall": "npm run compile && gulp clean-post-install", 10 "postinstall": "npm run compile && gulp clean-post-install",
10 "install-dev": "npm install -D angular bootstrap angular-ladda ladda@1.0.6 angular-ui-bootstrap ui-bootstrap4 font-awesome jquery pre-commit jshint pump jasmine-core gulp gulp-connect gulp-angular-templatecache gulp-concat gulp-htmlmin gulp-jshint gulp-rename gulp-replace gulp-uglify-es gulp-clean gulp-uglify git+http://git.focasoftware.com/npm/foca-directivas.git" 11 "install-dev": "npm install -D angular bootstrap angular-ladda ladda@1.0.6 angular-ui-bootstrap ui-bootstrap4 font-awesome jquery pre-commit jshint pump jasmine-core gulp gulp-connect gulp-angular-templatecache gulp-concat gulp-htmlmin gulp-jshint gulp-rename gulp-replace gulp-uglify-es gulp-clean gulp-uglify git+http://git.focasoftware.com/npm/foca-directivas.git"
11 }, 12 },
13 "pre-commit": [
14 "gulp-pre-commit"
15 ],
12 "repository": { 16 "repository": {
13 "type": "git", 17 "type": "git",
14 "url": "http://git.focasoftware.com/npm/foca-busqueda-cliente.git" 18 "url": "http://git.focasoftware.com/npm/foca-busqueda-cliente.git"
15 }, 19 },
16 "author": "Foca Software", 20 "author": "Foca Software",
17 "license": "ISC", 21 "license": "ISC",
18 "peerDependencies": { 22 "peerDependencies": {
19 "angular": "^1.7.x", 23 "angular": "^1.7.x",
20 "bootstrap": "^4.1.x", 24 "bootstrap": "^4.1.x",
21 "jquery": "^3.3.x", 25 "jquery": "^3.3.x",
22 "font-awesome": "^4.7.x", 26 "font-awesome": "^4.7.x",
23 "gulp": "^3.9.x", 27 "gulp": "^3.9.x",
24 "gulp-concat": "2.6.x", 28 "gulp-concat": "2.6.x",
25 "gulp-jshint": "^2.1.x", 29 "gulp-jshint": "^2.1.x",
26 "gulp-rename": "^1.4.x", 30 "gulp-rename": "^1.4.x",
27 "gulp-replace": "^1.0.x", 31 "gulp-replace": "^1.0.x",
28 "gulp-uglify-es": "^1.0.x", 32 "gulp-uglify-es": "^1.0.x",
29 "jshint": "^2.9.x", 33 "jshint": "^2.9.x",
30 "pump": "^3.0.x" 34 "pump": "^3.0.x"
31 }, 35 },
32 "devDependencies": { 36 "devDependencies": {
33 "angular": "^1.7.4", 37 "angular": "^1.7.6",
34 "angular-ladda": "^0.4.3", 38 "angular-ladda": "^0.4.3",
35 "angular-ui-bootstrap": "^2.5.6", 39 "angular-ui-bootstrap": "^2.5.6",
36 "bootstrap": "^4.1.3", 40 "bootstrap": "^4.2.1",
37 "foca-directivas": "git+http://git.focasoftware.com/npm/foca-directivas.git", 41 "foca-directivas": "git+http://git.focasoftware.com/npm/foca-directivas.git",
38 "font-awesome": "^4.7.0", 42 "font-awesome": "^4.7.0",
39 "gulp": "^3.9.1", 43 "gulp": "^3.9.1",
40 "gulp-angular-templatecache": "^2.2.1", 44 "gulp-angular-templatecache": "^2.2.6",
41 "gulp-clean": "^0.4.0", 45 "gulp-clean": "^0.4.0",
42 "gulp-concat": "^2.6.1", 46 "gulp-concat": "^2.6.1",
43 "gulp-connect": "^5.6.1", 47 "gulp-connect": "^5.7.0",
44 "gulp-htmlmin": "^5.0.1", 48 "gulp-htmlmin": "^5.0.1",
45 "gulp-jshint": "^2.1.0", 49 "gulp-jshint": "^2.1.0",
46 "gulp-rename": "^1.4.0", 50 "gulp-rename": "^1.4.0",
47 "gulp-replace": "^1.0.0", 51 "gulp-replace": "^1.0.0",
48 "gulp-uglify": "^3.0.1", 52 "gulp-uglify": "^3.0.1",
49 "gulp-uglify-es": "^1.0.4", 53 "gulp-uglify-es": "^1.0.4",
50 "jasmine-core": "^3.2.1", 54 "jasmine-core": "^3.3.0",
51 "jquery": "^3.3.1", 55 "jquery": "^3.3.1",
52 "jshint": "^2.9.6", 56 "jshint": "^2.9.7",
53 "ladda": "1.0.6", 57 "ladda": "^1.0.6",
54 "pre-commit": "^1.2.2", 58 "pre-commit": "^1.2.2",
55 "pump": "^3.0.0", 59 "pump": "^3.0.0",
56 "ui-bootstrap4": "^3.0.5" 60 "ui-bootstrap4": "^3.0.6"
57 } 61 }
58 } 62 }
59 63
1 angular.module('focaBusquedaCliente', [ 1 angular.module('focaBusquedaCliente', []);
2 'ui.bootstrap',
3 'focaDirectivas',
4 'angular-ladda',
5 'focaModal'
6 ]);
7 2
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', 'vendedor',
5 function($uibModalInstance, focaBusquedaClienteService, $scope, $filter, 5 function($uibModalInstance, focaBusquedaClienteService, $scope, $filter,
6 $uibModal, focaModalService) { 6 $uibModal, focaModalService, $timeout, vendedor) {
7 7
8 $scope.vendedor = vendedor ? vendedor : {};
8 $scope.filters = ''; 9 $scope.filters = '';
9 $scope.primerBusqueda = false; 10 $scope.primerBusqueda = false;
10 // pagination 11 // pagination
11 $scope.numPerPage = 10; 12 $scope.numPerPage = 10;
12 $scope.currentPage = 1; 13 $scope.currentPage = 1;
13 $scope.filteredClientes = []; 14 $scope.filteredClientes = [];
14 $scope.currentPageClientes = []; 15 $scope.currentPageClientes = [];
15 $scope.selectedClientes = -1; 16 $scope.selectedClientes = -1;
16 $scope.ingreso = false; 17 $scope.ingreso = false;
18 $scope.regexCuit = new RegExp(/\b(20|23|24|27|30|33|34)(\D)?[0-9]{8}(\D)?[0-9]/g);
19 $scope.focused = 1;
17 20
18 $scope.cliente = { 21 $scope.cliente = {
19 COD: 0, 22 COD: 0,
20 ES_MAY: true, 23 ES_MAY: true,
21 provincia: { 24 provincia: {
22 NOMBRE: '' 25 NOMBRE: ''
23 }, 26 },
24 localidad: { 27 localidad: {
25 NOMBRE: '' 28 NOMBRE: ''
26 }, 29 },
27 iva: { 30 iva: {
28 NOMBRE: '' 31 NOMBRE: ''
29 }, 32 },
30 actividad: { 33 actividad: {
31 NOM: '' 34 NOM: ''
32 }, 35 },
33 zona: { 36 zona: {
34 NOM: '' 37 NOM: ''
35 }, 38 },
36 tipoFactura: { 39 tipoFactura: {
37 NOMBRE: '' 40 NOMBRE: ''
38 }, 41 },
39 tipoComprobante: { 42 tipoComprobante: {
40 NOMBRE: '' 43 NOMBRE: ''
41 }, 44 },
42 formaPago: { 45 formaPago: {
43 NOMBRE: '' 46 NOMBRE: ''
47 },
48 cobrador: {
49 NomVen: ''
44 } 50 }
45 }; 51 };
46 52
47 $scope.busquedaPress = function(key) { 53 $scope.busquedaPress = function(key) {
48 if (key === 13) { 54 if (key === 13) {
55 var funcion = ($scope.vendedor.CodVen) ?
56 'obtenerClientesPorNombreOCuitByVendedor' : 'obtenerClientesPorNombreOCuit';
57
49 $scope.searchLoading = true; 58 $scope.searchLoading = true;
50 focaBusquedaClienteService.obtenerClientesPorNombreOCuit($scope.filters).then( 59 focaBusquedaClienteService
51 function(res) { 60 [funcion]($scope.filters, $scope.vendedor.CodVen)
52 $scope.primerBusqueda = true; 61 .then(
53 $scope.clientes = res.data; 62 function(res) {
54 $scope.search(true); 63 $scope.primerBusqueda = true;
55 primera(); 64 $scope.clientes = res.data;
56 $scope.searchLoading = false; 65 $scope.search(true);
66 primera();
67 $scope.searchLoading = false;
57 }); 68 });
58 } 69 }
59 }; 70 };
60 71
61 $scope.search = function (pressed) { 72 $scope.search = function (pressed) {
62 if($scope.primerBusqueda) { 73 if($scope.primerBusqueda) {
63 $scope.filteredClientes = $filter('filter')( 74 $scope.filteredClientes = $filter('filter')(
64 $scope.clientes, {$: $scope.filters} 75 $scope.clientes, {$: $scope.filters}
65 ); 76 );
66 77
67 if(pressed && $scope.filteredClientes.length === 0){ 78 if(pressed && $scope.filteredClientes.length === 0){
68 $timeout(function() { 79 $timeout(function() {
69 angular.element('#search')[0].focus(); 80 angular.element('#search')[0].focus();
70 $scope.filters = ''; 81 $scope.filters = '';
71 }); 82 });
72 } 83 }
73 84
74 $scope.lastPage = Math.ceil( 85 $scope.lastPage = Math.ceil(
75 $scope.filteredClientes.length / $scope.numPerPage 86 $scope.filteredClientes.length / $scope.numPerPage
76 ); 87 );
77 88
78 $scope.resetPage(); 89 $scope.resetPage();
79 } 90 }
80 }; 91 };
81 92
82 $scope.resetPage = function () { 93 $scope.resetPage = function () {
83 $scope.currentPage = 1; 94 $scope.currentPage = 1;
84 $scope.selectPage(1); 95 $scope.selectPage(1);
85 }; 96 };
86 97
87 $scope.selectPage = function (page) { 98 $scope.selectPage = function (page) {
88 var start = (page - 1) * $scope.numPerPage; 99 var start = (page - 1) * $scope.numPerPage;
89 var end = start + $scope.numPerPage; 100 var end = start + $scope.numPerPage;
90 $scope.paginas = []; 101 $scope.paginas = [];
91 $scope.paginas = calcularPages(page); 102 $scope.paginas = calcularPages(page);
92 $scope.currentPageClientes = $scope.filteredClientes.slice(start, end); 103 $scope.currentPageClientes = $scope.filteredClientes.slice(start, end);
93 $scope.currentPage = page; 104 $scope.currentPage = page;
94 }; 105 };
95 106
96 $scope.select = function(cliente, esNuevo = false) { 107 $scope.select = function(cliente, esNuevo = false) {
97 cliente.esNuevo = esNuevo; 108 cliente.esNuevo = esNuevo;
98 $uibModalInstance.close(cliente); 109 $uibModalInstance.close(cliente);
99 }; 110 };
100 111
101 $scope.cancel = function() { 112 $scope.cancel = function() {
102 if($scope.ingreso) { 113 if($scope.ingreso) {
103 $scope.ingreso = false; 114 $scope.ingreso = false;
104 }else { 115 }else {
105 $uibModalInstance.dismiss('cancel'); 116 $uibModalInstance.dismiss('cancel');
106 } 117 }
107 }; 118 };
108 119
109 $scope.busquedaDown = function(key) { 120 $scope.busquedaDown = function(key) {
110 if (key === 40) { 121 if (key === 40) {
111 primera(key); 122 primera(key);
112 } 123 }
113 }; 124 };
114 125
115 $scope.itemCliente = function(key) { 126 $scope.itemCliente = function(key) {
116 if (key === 38) { 127 if (key === 38) {
117 anterior(key); 128 anterior(key);
118 } 129 }
119 130
120 if (key === 40) { 131 if (key === 40) {
121 siguiente(key); 132 siguiente(key);
122 } 133 }
123 134
124 if (key === 37) { 135 if (key === 37) {
125 retrocederPagina(); 136 retrocederPagina();
126 } 137 }
127 138
128 if (key === 39) { 139 if (key === 39) {
129 avanzarPagina(); 140 avanzarPagina();
130 } 141 }
131 }; 142 };
132 143
144 $scope.focus = function(val) {
145 $scope.focused = val;
146 };
147
148 $scope.next = function(key) {
149 if (key === 13) $scope.focused++;
150 };
151
133 $scope.seleccionarProvincia = function(key) { 152 $scope.seleccionarProvincia = function(key) {
134 if(key === 13) { 153 if(key === 13) {
135 var modalInstance = $uibModal.open( 154 var parametrosModal = {
136 { 155 query: '/provincia',
137 ariaLabelledBy: 'Búsqueda de provincias', 156 columnas: [
138 templateUrl: 'modal-provincias.html', 157 {
139 controller: 'focaModalProvinciaController', 158 propiedad: 'ID',
140 size: 'md', 159 nombre: 'Codigo',
141 resolve: {filters: function() { 160 filtro: {
142 return $scope.cliente.provincia; 161 nombre: 'rellenarDigitos',
143 }} 162 parametro: 3}
144 } 163 },
145 ); 164 {
146 modalInstance.result.then(function(provincia) { 165 propiedad: 'NOMBRE',
166 nombre: 'Nombre'
167 }
168 ],
169 titulo:'Búsqueda de provincias',
170 size: 'md'
171 };
172 focaModalService.modal(parametrosModal).then(function(provincia) {
147 $scope.cliente.provincia = provincia; 173 $scope.cliente.provincia = provincia;
148 $scope.focused = 3; 174 $timeout(function() {
175 $scope.focused = 5;
176 });
149 }, function() { 177 }, function() {
150 //TODO: función llamada cuando cancela el modal 178 //TODO: función llamada cuando cancela el modal
151 }); 179 });
152 } 180 }
153 }; 181 };
154 $scope.seleccionarLocalidad = function(key) { 182 $scope.seleccionarLocalidad = function(key) {
155 if($scope.cliente.provincia.ID === undefined) { 183 if($scope.cliente.provincia.ID === undefined) {
156 //TODO: Poner modal alert de foca 184 focaModalService.alert('Seleccione una provincia');
157 alert('Seleccione una provincia');
158 return; 185 return;
159 } 186 }
160 if(key === 13) { 187 if(key === 13) {
161 var modalInstance = $uibModal.open( 188 var parametrosModal = {
162 { 189 query: '/localidad/' + $scope.cliente.provincia.ID,
163 ariaLabelledBy: 'Búsqueda de localidades', 190 columnas: [
164 templateUrl: 'modal-localidades.html', 191 {
165 controller: 'focaModalLocalidadController', 192 propiedad: 'ID',
166 size: 'md', 193 nombre: 'Código',
167 resolve: { 194 filtro: {
168 filters: { 195 nombre: 'rellenarDigitos',
169 idProvincia: $scope.cliente.provincia.ID, 196 parametro: 3
170 busqueda: $scope.cliente.localidad.nombre
171 } 197 }
198 },
199 {
200 propiedad: 'NOMBRE',
201 nombre: 'Nombre'
172 } 202 }
173 } 203 ],
174 ); 204 titulo:'Búsqueda de localidades',
175 modalInstance.result.then(function(localidad) { 205 size: 'md'
206 };
207 focaModalService.modal(parametrosModal).then(function(localidad) {
176 $scope.cliente.localidad = localidad; 208 $scope.cliente.localidad = localidad;
177 $scope.focused = 4; 209 $timeout(function() {
210 $scope.focused = 6;
211 });
178 }, function() { 212 }, function() {
179 //TODO: función llamada cuando cancela el modal 213 //TODO: función llamada cuando cancela el modal
180 }); 214 });
181 } 215 }
182 }; 216 };
183 $scope.seleccionarIva = function(key) { 217 $scope.seleccionarIva = function(key) {
184 if(key === 13) { 218 if(key === 13) {
185 var modalInstance = $uibModal.open( 219 var parametrosModal = {
186 { 220 query: '/iva',
187 ariaLabelledBy: 'Búsqueda de responsabilidad ante el IVA', 221 columnas: [
188 templateUrl: 'modal-iva.html', 222 {
189 controller: 'focaModalIvaController', 223 propiedad: 'ID',
190 size: 'md', 224 nombre: 'Código',
191 resolve: {filters: function() { 225 filtro: {
192 return $scope.cliente.iva.NOMBRE; 226 nombre: 'rellenarDigitos',
193 }} 227 parametro: 3
194 } 228 }
195 ); 229 },
196 modalInstance.result.then(function(iva) { 230 {
197 $scope.cliente.iva = iva; 231 propiedad: 'NOMBRE',
198 }, function() { 232 nombre: 'Nombre'
199 //TODO: función llamada cuando cancela el modal 233 }
200 }); 234 ],
235 titulo:'Búsqueda de responsabilidad ante el IVA',
236 size: 'md'
237 };
238 focaModalService.modal(parametrosModal).then(
239 function(iva) {
240 $scope.cliente.iva = iva;
241 $timeout(function() {
242 $scope.focused = 10;
243 });
244 }, function() {
245 // funcion ejecutada cuando se cancela el modal
246 });
201 } 247 }
202 }; 248 };
203 $scope.seleccionarActividad = function(key) { 249 $scope.seleccionarActividad = function(key) {
204 if(key === 13) { 250 if(key === 13) {
205 var modalInstance = $uibModal.open( 251 var parametrosModal = {
206 { 252 query: '/actividad',
207 ariaLabelledBy: 'Búsqueda de actividades', 253 columnas: [
208 templateUrl: 'modal-actividad.html', 254 {
209 controller: 'focaModalActividadController', 255 propiedad: 'ID',
210 size: 'md', 256 nombre: 'Código',
211 resolve: {filters: function() { 257 filtro: {
212 return $scope.cliente.actividad.NOM; 258 nombre: 'rellenarDigitos',
213 }} 259 parametro: 3
214 } 260 }
215 ); 261 },
216 modalInstance.result.then(function(actividad) { 262 {
217 $scope.cliente.actividad = actividad; 263 propiedad: 'NOM',
218 }, function() { 264 nombre: 'Nombre'
219 //TODO: función llamada cuando cancela el modal 265 }
220 }); 266 ],
267 titulo: 'Búsqueda de actividades',
268 size: 'md'
269 };
270 focaModalService.modal(parametrosModal).then(
271 function(actividad) {
272 $scope.cliente.actividad = actividad;
273 $timeout(function() {
274 $scope.focused = 8;
275 });
276 }, function() {
277 // funcion ejecutada cuando se cancela el modal
278 });
221 } 279 }
222 }; 280 };
223 $scope.seleccionarZona = function(key) { 281 $scope.seleccionarZona = function(key) {
224 if(key === 13) { 282 if(key === 13) {
225 var modalInstance = $uibModal.open( 283 var parametrosModal = {
226 { 284 query: '/zona',
227 ariaLabelledBy: 'Búsqueda de zonas', 285 columnas: [
228 templateUrl: 'modal-zona.html', 286 {
229 controller: 'focaModalZonaController', 287 propiedad: 'ID',
230 size: 'md', 288 nombre: 'Código',
231 resolve: {filters: function() { 289 filtro: {
232 return $scope.cliente.zona.NOM; 290 nombre: 'rellenarDigitos',
233 }} 291 parametro: 3
234 } 292 }
235 ); 293 },
236 modalInstance.result.then(function(zona) { 294 {
237 $scope.cliente.zona = zona; 295 propiedad: 'NOM',
238 }, function() { 296 nombre: 'Nombre'
239 //TODO: función llamada cuando cancela el modal 297 }
240 }); 298 ],
299 titulo: 'Búsqueda de zonas',
300 size: 'md'
301 };
302 focaModalService.modal(parametrosModal).then(
303 function(zona) {
304 $scope.cliente.zona = zona;
305 $timeout(function() {
306 $scope.focused = 7;
307 });
308 }, function() {
309 // funcion ejecutada cuando se cancela el modal
310 });
241 } 311 }
242 }; 312 };
243 $scope.seleccionarTipoFactura = function(key) { 313 $scope.seleccionarTipoFactura = function(key) {
244 if(key === 13) { 314 if(key === 13) {
245 var modalInstance = $uibModal.open( 315 var parametrosModal = {
246 { 316 query: '/tipo-factura',
247 ariaLabelledBy: 'Búsqueda de tipos de factura', 317 columnas: [
248 templateUrl: 'modal-tipo-factura.html', 318 {
249 controller: 'focaModalTipoFacturaController', 319 propiedad: 'ID',
250 size: 'md', 320 nombre: 'Código'
251 resolve: {filters: function() { 321 },
252 return $scope.cliente.tipoFactura.NOMBRE; 322 {
253 }} 323 propiedad: 'NOMBRE',
254 } 324 nombre: 'Nombre'
255 ); 325 }
256 modalInstance.result.then(function(tipoFactura) { 326 ],
257 $scope.cliente.tipoFactura = tipoFactura; 327 titulo: 'Búsqueda de tipos de factura',
258 }, function() { 328 size: 'md'
259 //TODO: función llamada cuando cancela el modal 329 };
260 }); 330 focaModalService.modal(parametrosModal).then(
331 function(tipoFactura) {
332 $scope.cliente.tipoFactura = tipoFactura;
333 $timeout(function() {
334 $scope.focused = 11;
335 });
336 }, function() {
337 // funcion ejecutada cuando se cancela el modal
338 });
261 } 339 }
262 }; 340 };
263 $scope.seleccionarTipoComprobante = function(key) { 341 $scope.seleccionarTipoComprobante = function(key) {
264 if(key === 13) { 342 if(key === 13) {
265 var modalInstance = $uibModal.open( 343 var parametrosModal = {
266 { 344 query: '/tipo-comprobante',
267 ariaLabelledBy: 'Búsqueda de tipos de comprobante', 345 columnas: [
268 templateUrl: 'modal-tipo-comprobante.html', 346 {
269 controller: 'focaModalTipoComprobanteController', 347 propiedad: 'ID',
270 size: 'md', 348 nombre: 'Código'
271 resolve: {filters: function() { 349 },
272 return $scope.cliente.tipoComprobante.NOMBRE; 350 {
273 }} 351 propiedad: 'NOMBRE',
274 } 352 nombre: 'Nombre'
275 ); 353 }
276 modalInstance.result.then(function(tipoComprobante) { 354 ],
277 $scope.cliente.tipoComprobante = tipoComprobante; 355 titulo: 'Búsqueda de tipos de comprobante',
278 }, function() { 356 size: 'md'
279 //TODO: función llamada cuando cancela el modal 357 };
280 }); 358 focaModalService.modal(parametrosModal).then(
359 function(tipoComprobante) {
360 $scope.cliente.tipoComprobante = tipoComprobante;
361 $timeout(function() {
362 $scope.focused = 13;
363 });
364 }, function() {
365 // funcion ejecutada cuando se cancela el modal
366 });
281 } 367 }
282 }; 368 };
283 $scope.seleccionarFormaPago = function(key) { 369 $scope.seleccionarFormaPago = function(key) {
284 if(key === 13) { 370 if(key === 13) {
285 var modalInstance = $uibModal.open( 371 var parametrosModal = {
286 { 372 query: '/forma-pago',
287 ariaLabelledBy: 'Búsqueda de formas de pago', 373 columnas: [
288 templateUrl: 'modal-forma-pago.html', 374 {
289 controller: 'focaModalFormaPagoController', 375 propiedad: 'ID',
290 size: 'md', 376 nombre: 'Código',
291 resolve: {filters: function() { 377 filtro: {
292 return $scope.cliente.formaPago.NOMBRE; 378 nombre: 'rellenarDigitos',
293 }} 379 parametro: 3
294 } 380 }
295 ); 381 },
296 modalInstance.result.then(function(formaPago) { 382 {
297 $scope.cliente.formaPago = formaPago; 383 propiedad: 'NOMBRE',
298 }, function() { 384 nombre: 'Nombre'
299 //TODO: función llamada cuando cancela el modal 385 }
300 }); 386 ],
387 titulo: 'Búsqueda de formas de pago',
388 size: 'md'
389 };
390 focaModalService.modal(parametrosModal).then(
391 function(formaPago) {
392 $scope.cliente.formaPago = formaPago;
393 }, function() {
394 // funcion ejecutada cuando se cancela el modal
395 });
396 }
397 };
398 $scope.seleccionarCobrador = function(key) {
399 if(key === 13) {
400 var parametrosModal = {
401 query: '/cobrador',
402 columnas: [
403 {
404 propiedad: 'CodVen',
405 nombre: 'Código'
406 },
407 {
408 propiedad: 'NomVen',
409 nombre: 'Nombre'
410 }
411 ],
412 titulo: 'Búsqueda de cobradores',
413 size: 'md'
414 };
415 focaModalService.modal(parametrosModal).then(
416 function(cobrador) {
417 $scope.cliente.cobrador = cobrador;
418 }, function() {
419 // funcion ejecutada cuando se cancela el modal
420 });
301 } 421 }
302 }; 422 };
303 423
304 $scope.guardar = function() { 424 $scope.guardar = function() {
305 425
306 if(!validarForm()) return;
307
308 $scope.cliente.PCX = $scope.cliente.provincia.ID; 426 $scope.cliente.PCX = $scope.cliente.provincia.ID;
309 $scope.cliente.LOX = $scope.cliente.localidad.ID; 427 $scope.cliente.LOX = $scope.cliente.localidad.ID;
310 $scope.cliente.IVA = $scope.cliente.iva.ID; 428 $scope.cliente.IVA = $scope.cliente.iva.ID;
311 $scope.cliente.ACT = $scope.cliente.actividad.ID; 429 $scope.cliente.ACT = $scope.cliente.actividad.ID;
312 $scope.cliente.ZON = $scope.cliente.zona.ID; 430 $scope.cliente.ZON = $scope.cliente.zona.ID;
313 $scope.cliente.TIP = $scope.cliente.tipoFactura.ID; 431 $scope.cliente.TIP = $scope.cliente.tipoFactura.ID;
314 $scope.cliente.TCO = $scope.cliente.tipoComprobante.ID; 432 $scope.cliente.TCO = $scope.cliente.tipoComprobante.ID;
315 $scope.cliente.FPA = $scope.cliente.formaPago.ID; 433 $scope.cliente.FPA = $scope.cliente.formaPago.ID;
434 $scope.cliente.VEN = $scope.vendedor.CodVen;
435 $scope.cliente.idCobrador = $scope.cliente.cobrador.CodVen;
316 436
317 delete $scope.cliente.provincia; 437 delete $scope.cliente.provincia;
318 delete $scope.cliente.localidad; 438 delete $scope.cliente.localidad;
319 delete $scope.cliente.iva; 439 delete $scope.cliente.iva;
320 delete $scope.cliente.actividad; 440 delete $scope.cliente.actividad;
321 delete $scope.cliente.zona; 441 delete $scope.cliente.zona;
322 delete $scope.cliente.tipoFactura; 442 delete $scope.cliente.tipoFactura;
323 delete $scope.cliente.tipoComprobante; 443 delete $scope.cliente.tipoComprobante;
324 delete $scope.cliente.formaPago; 444 delete $scope.cliente.formaPago;
325 445 delete $scope.cliente.cobrador;
326 focaBusquedaClienteService.guardarCliente($scope.cliente).then(function(res) { 446
327 $scope.select(res.data, true); 447 focaBusquedaClienteService
328 }); 448 .guardarCliente($scope.cliente)
449 .then(function(res) {
450 var cliente = {
451 cod: res.data.COD,
452 cuit: res.data.CUIT,
453 esNuevo: res.data.esNuevo,
454 nom: res.data.NOM
455 };
456 $scope.select(cliente, true);
457 });
329 }; 458 };
330 459
331 function calcularPages(paginaActual) { 460 function calcularPages(paginaActual) {
332 var paginas = []; 461 var paginas = [];
333 paginas.push(paginaActual); 462 paginas.push(paginaActual);
334 463
335 if (paginaActual - 1 > 1) { 464 if (paginaActual - 1 > 1) {
336 465
337 paginas.unshift(paginaActual - 1); 466 paginas.unshift(paginaActual - 1);
338 if (paginaActual - 2 > 1) { 467 if (paginaActual - 2 > 1) {
339 paginas.unshift(paginaActual - 2); 468 paginas.unshift(paginaActual - 2);
340 } 469 }
341 } 470 }
342 471
343 if (paginaActual + 1 < $scope.lastPage) { 472 if (paginaActual + 1 < $scope.lastPage) {
344 paginas.push(paginaActual + 1); 473 paginas.push(paginaActual + 1);
345 if (paginaActual + 2 < $scope.lastPage) { 474 if (paginaActual + 2 < $scope.lastPage) {
346 paginas.push(paginaActual + 2); 475 paginas.push(paginaActual + 2);
347 } 476 }
348 } 477 }
349 478
350 if (paginaActual !== 1) { 479 if (paginaActual !== 1) {
351 paginas.unshift(1); 480 paginas.unshift(1);
352 } 481 }
353 482
354 if (paginaActual !== $scope.lastPage) { 483 if (paginaActual !== $scope.lastPage) {
355 paginas.push($scope.lastPage); 484 paginas.push($scope.lastPage);
356 } 485 }
357 486
358 return paginas; 487 return paginas;
359 } 488 }
360 489
361 function primera() { 490 function primera() {
362 $scope.selectedClientes = 0; 491 $scope.selectedClientes = 0;
363 } 492 }
364 493
365 function anterior() { 494 function anterior() {
366 if ($scope.selectedClientes === 0 && $scope.currentPage > 1) { 495 if ($scope.selectedClientes === 0 && $scope.currentPage > 1) {
367 retrocederPagina(); 496 retrocederPagina();
368 } else { 497 } else {
369 $scope.selectedClientes--; 498 $scope.selectedClientes--;
370 } 499 }
371 } 500 }
372 501
373 function siguiente() { 502 function siguiente() {
374 if ($scope.selectedClientes < $scope.currentPageClientes.length - 1 ) { 503 if ($scope.selectedClientes < $scope.currentPageClientes.length - 1 ) {
375 $scope.selectedClientes++; 504 $scope.selectedClientes++;
376 } else { 505 } else {
377 avanzarPagina(); 506 avanzarPagina();
378 } 507 }
379 } 508 }
380 509
381 function retrocederPagina() { 510 function retrocederPagina() {
382 if ($scope.currentPage > 1) { 511 if ($scope.currentPage > 1) {
383 $scope.selectPage($scope.currentPage - 1); 512 $scope.selectPage($scope.currentPage - 1);
384 $scope.selectedClientes = $scope.numPerPage - 1; 513 $scope.selectedClientes = $scope.numPerPage - 1;
385 } 514 }
386 } 515 }
387 516
388 function avanzarPagina() { 517 function avanzarPagina() {
389 if ($scope.currentPage < $scope.lastPage) { 518 if ($scope.currentPage < $scope.lastPage) {
390 $scope.selectPage($scope.currentPage + 1); 519 $scope.selectPage($scope.currentPage + 1);
391 $scope.selectedClientes = 0; 520 $scope.selectedClientes = 0;
392 } 521 }
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 obtenerClientesPorNombreOCuitByVendedor: function(nombreOCuit, idVendedor) {
5 return $http.get(API_ENDPOINT.URL + '/cliente'); 5 return $http.post(API_ENDPOINT.URL + '/cliente/listar',
6 }, 6 {nombreOCuit: nombreOCuit, idVendedor: idVendedor});
7 obtenerCliente: function(id) {
8 return $http.get(API_ENDPOINT.URL + '/cliente/' + id);
9 }, 7 },
10 obtenerClientesPorNombreOCuit: function(nombreOCuit) { 8 obtenerClientesPorNombreOCuit: function(nombreOCuit) {
11 return $http.post(API_ENDPOINT.URL + '/cliente', {nombreOCuit: nombreOCuit}); 9 return $http.post(API_ENDPOINT.URL + '/cliente/listar',
10 {nombreOCuit: nombreOCuit});
12 }, 11 },
13 guardarCliente: function(cliente) { 12 guardarCliente: function(cliente) {
14 return $http.post(API_ENDPOINT.URL + '/cliente', {cliente: cliente}); 13 return $http.post(API_ENDPOINT.URL + '/cliente', {cliente: cliente});
15 } 14 }
16 }; 15 };
17 }]); 16 }]);
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 col-7">
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 col-5 front-index">
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 && vendedor.CodVen"
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 cliente">
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"
118 class="form-control form-control-sm" 117 class="form-control form-control-sm"
119 ng-model="cliente.NOM" 118 ng-model="cliente.NOM"
119 teclado-virtual
120 placeholder="Ingrese nombre" 120 placeholder="Ingrese nombre"
121 ng-required="true" 121 ng-required="true"
122 teclado-virtual 122 foca-focus="focused == 1 || ingreso"
123 ng-focus="focus(1)"
124 ng-keypress="next($event.keyCode)"
123 /> 125 />
124 </div> 126 </div>
125 </div> 127 </div>
126 <div class="row"> 128 <div class="row">
127 <div class="col-9"> 129 <div class="col-md-9 col-12">
128 <label>Domicilio</label> 130 <label>Domicilio</label>
129 <input 131 <input
130 type="text" 132 type="text"
131 class="form-control form-control-sm" 133 class="form-control form-control-sm"
132 ng-model="cliente.DOM" 134 ng-model="cliente.DOM"
135 teclado-virtual
133 placeholder="Ingrese domicilio" 136 placeholder="Ingrese domicilio"
134 ng-required="true" 137 ng-required="true"
135 teclado-virtual 138 ng-focus="focus(2)"
139 foca-focus="focused == 2"
140 ng-keypress="next($event.keyCode)"
136 /> 141 />
137 </div> 142 </div>
138 <div class="col-3"> 143 <div class="col-md-3 col-12">
139 <label>Código postal</label> 144 <label>Código postal</label>
140 <input 145 <input
141 type="text" 146 type="text"
142 class="form-control form-control-sm" 147 class="form-control form-control-sm"
143 ng-model="cliente.CPO" 148 ng-model="cliente.CPO"
144 placeholder="Ingrese CP" 149 placeholder="Ingrese CP"
145 ng-required="true" 150 ng-required="true"
151 ng-focus="focus(3)"
152 foca-focus="focused == 3"
153 ng-keypress="next($event.keyCode)"
146 teclado-virtual 154 teclado-virtual
147 /> 155 />
148 </div> 156 </div>
149 </div> 157 </div>
150 <div class="row"> 158 <div class="row">
151 <div class="col-6"> 159 <div class="col-md-6 col-12">
152 <label>Provincia</label> 160 <label>Provincia</label>
153 <div class="input-group"> 161 <div class="input-group">
154 <input 162 <input
155 type="text" 163 type="text"
156 class="form-control form-control-sm" 164 class="form-control form-control-sm"
157 ng-model="cliente.provincia.NOMBRE" 165 ng-model="cliente.provincia.NOMBRE"
158 ng-keypress="seleccionarProvincia($event.keyCode)" 166 ng-keypress="seleccionarProvincia($event.keyCode)"
159 placeholder="Ingrese provincia" 167 placeholder="Ingrese provincia"
160 ng-required="true" 168 ng-required="true"
169 ng-focus="focus(4)"
170 foca-focus="focused == 4"
161 teclado-virtual 171 teclado-virtual
162 /> 172 />
163 <div class="input-group-append"> 173 <div class="input-group-append">
164 <button 174 <button
165 ladda="searchLoading" 175 ladda="searchLoading"
166 class="btn btn-outline-secondary form-control-sm" 176 class="btn btn-outline-secondary form-control-sm"
167 type="button" 177 type="button"
168 ng-click="seleccionarProvincia(13)" 178 ng-click="seleccionarProvincia(13)"
169 > 179 >
170 <i class="fa fa-search" aria-hidden="true"></i> 180 <i class="fa fa-search" aria-hidden="true"></i>
171 </button> 181 </button>
172 </div> 182 </div>
173 </div> 183 </div>
174 </div> 184 </div>
175 <div class="col-6"> 185 <div class="col-md-6 col-12">
176 <label>Localidad</label> 186 <label>Localidad</label>
177 <div class="input-group"> 187 <div class="input-group">
178 <input 188 <input
179 type="text" 189 type="text"
180 class="form-control form-control-sm" 190 class="form-control form-control-sm"
181 ng-model="cliente.localidad.NOMBRE" 191 ng-model="cliente.localidad.NOMBRE"
182 ng-keypress="seleccionarLocalidad($event.keyCode)" 192 ng-keypress="seleccionarLocalidad($event.keyCode)"
183 placeholder="Ingrese localidad" 193 placeholder="Ingrese localidad"
184 ng-required="true" 194 ng-required="true"
195 foca-focus="focused == 5"
196 ng-focus="focus(5)"
185 teclado-virtual 197 teclado-virtual
186 /> 198 />
187 <div class="input-group-append"> 199 <div class="input-group-append">
188 <button 200 <button
189 ladda="searchLoading" 201 ladda="searchLoading"
190 class="btn btn-outline-secondary form-control-sm" 202 class="btn btn-outline-secondary form-control-sm"
191 type="button" 203 type="button"
192 ng-click="seleccionarLocalidad(13)" 204 ng-click="seleccionarLocalidad(13)"
193 > 205 >
194 <i class="fa fa-search" aria-hidden="true"></i> 206 <i class="fa fa-search" aria-hidden="true"></i>
195 </button> 207 </button>
196 </div> 208 </div>
197 </div> 209 </div>
198 </div> 210 </div>
199 </div> 211 </div>
200 <div class="row"> 212 <div class="row">
201 <div class="col-6"> 213 <div class="col-md-6 col-12">
202 <label>Zona</label> 214 <label>Zona</label>
203 <div class="input-group"> 215 <div class="input-group">
204 <input 216 <input
205 type="text" 217 type="text"
206 class="form-control form-control-sm" 218 class="form-control form-control-sm"
207 ng-model="cliente.zona.NOM" 219 ng-model="cliente.zona.NOM"
208 ng-keypress="seleccionarZona($event.keyCode)" 220 ng-keypress="seleccionarZona($event.keyCode)"
209 placeholder="Ingrese zona" 221 placeholder="Ingrese zona"
210 ng-required="true" 222 ng-required="true"
223 ng-focus="focus(6)"
224 foca-focus="focused == 6"
211 teclado-virtual 225 teclado-virtual
212 /> 226 />
213 <div class="input-group-append"> 227 <div class="input-group-append">
214 <button 228 <button
215 ladda="searchLoading" 229 ladda="searchLoading"
216 class="btn btn-outline-secondary form-control-sm" 230 class="btn btn-outline-secondary form-control-sm"
217 type="button" 231 type="button"
218 ng-click="seleccionarZona(13)" 232 ng-click="seleccionarZona(13)"
219 > 233 >
220 <i class="fa fa-search" aria-hidden="true"></i> 234 <i class="fa fa-search" aria-hidden="true"></i>
221 </button> 235 </button>
222 </div> 236 </div>
223 </div> 237 </div>
224 </div> 238 </div>
225 <div class="col-6"> 239 <div class="col-md-6 col-12">
226 <label>Actividad</label> 240 <label>Actividad</label>
227 <div class="input-group"> 241 <div class="input-group">
228 <input 242 <input
229 type="text" 243 type="text"
230 class="form-control form-control-sm" 244 class="form-control form-control-sm"
231 ng-model="cliente.actividad.NOM" 245 ng-model="cliente.actividad.NOM"
232 ng-keypress="seleccionarActividad($event.keyCode)" 246 ng-keypress="seleccionarActividad($event.keyCode)"
233 placeholder="Ingrese actividad" 247 placeholder="Ingrese actividad"
234 ng-required="true" 248 ng-required="true"
249 ng-focus="focus(7)"
250 foca-focus="focused == 7"
235 teclado-virtual 251 teclado-virtual
236 /> 252 />
237 <div class="input-group-append"> 253 <div class="input-group-append">
238 <button 254 <button
239 ladda="searchLoading" 255 ladda="searchLoading"
240 class="btn btn-outline-secondary form-control-sm" 256 class="btn btn-outline-secondary form-control-sm"
241 type="button" 257 type="button"
242 ng-click="seleccionarActividad(13)" 258 ng-click="seleccionarActividad(13)"
243 > 259 >
244 <i class="fa fa-search" aria-hidden="true"></i> 260 <i class="fa fa-search" aria-hidden="true"></i>
245 </button> 261 </button>
246 </div> 262 </div>
247 </div> 263 </div>
248 </div> 264 </div>
249 </div> 265 </div>
250 <div class="row"> 266 <div class="row">
251 <div class="col-6"> 267 <div class="col-md-6 col-12">
252 <div class="custom-control custom-checkbox"> 268 <label>Cobrador</label>
269 <div class="input-group">
270 <input
271 type="text"
272 class="form-control form-control-sm"
273 ng-model="cliente.cobrador.NomVen"
274 ng-keypress="seleccionarCobrador($event.keyCode)"
275 placeholder="Ingrese cobrador"
276 ng-focus="focus(8)"
277 foca-focus="focused == 8"
278 teclado-virtual
279 />
280 <div class="input-group-append">
281 <button
282 ladda="searchLoading"
283 class="btn btn-outline-secondary form-control-sm"
284 type="button"
285 ng-click="seleccionarCobrador(13)"
286 >
287 <i class="fa fa-search" aria-hidden="true"></i>
288 </button>
289 </div>
290 </div>
291 </div>
292 <div class="col-md-6 col-12">
293 <label>Vendedor</label>
294 <div class="input-group">
295 <input
296 type="text"
297 class="form-control form-control-sm"
298 ng-model="vendedor.NomVen"
299 disabled="true"
300 />
301 </div>
302 </div>
303 </div>
304 <div class="row">
305 <div class="col-6 d-flex">
306 <div class="custom-control custom-checkbox mt-auto">
253 <input 307 <input
254 type="checkbox" 308 type="checkbox"
255 class="custom-control-input" 309 class="custom-control-input"
256 id="checkDistribuidor" 310 id="checkDistribuidor"
257 ng-model="cliente.ES_MAY" 311 ng-model="cliente.ES_MAY"
258 checked> 312 checked
313 disabled="disabled">
259 <label class="custom-control-label" for="checkDistribuidor">¿Este cliente es distribuidor?</label> 314 <label class="custom-control-label" for="checkDistribuidor">¿Este cliente es distribuidor?</label>
260 </div> 315 </div>
261 </div> 316 </div>
262 </div> 317 </div>
263 </uib-tab> 318 </uib-tab>
264 <uib-tab heading="Datos impositivos"> 319 <uib-tab heading="Datos impositivos">
265 <div class="row"> 320 <div class="row">
266 <div class="col-7"> 321 <div class="col-md-7 col-12">
267 <label>Responsabilidad ante el IVA</label> 322 <label>Responsabilidad ante el IVA</label>
268 <div class="input-group"> 323 <div class="input-group">
269 <input 324 <input
270 type="text" 325 type="text"
271 class="form-control form-control-sm" 326 class="form-control form-control-sm"
327 placeholder="Ingrese responsabilidad ante el IVA"
272 ng-model="cliente.iva.NOMBRE" 328 ng-model="cliente.iva.NOMBRE"
273 ng-keypress="seleccionarIva($event.keyCode)" 329 ng-keypress="seleccionarIva($event.keyCode)"
274 ng-required="true" 330 ng-required="true"
331 ng-focus="focus(9)"
332 foca-focus="focused == 9"
275 teclado-virtual 333 teclado-virtual
276 /> 334 />
277 <div class="input-group-append"> 335 <div class="input-group-append">
278 <button 336 <button
279 ladda="searchLoading" 337 ladda="searchLoading"
280 class="btn btn-outline-secondary form-control-sm" 338 class="btn btn-outline-secondary form-control-sm"
281 type="button" 339 type="button"
282 ng-click="seleccionarIva(13)" 340 ng-click="seleccionarIva(13)"
283 > 341 >
284 <i class="fa fa-search" aria-hidden="true"></i> 342 <i class="fa fa-search" aria-hidden="true"></i>
285 </button> 343 </button>
286 </div> 344 </div>
287 </div> 345 </div>
288 </div> 346 </div>
289 <div class="col-5"> 347 <div class="col-md-5 col-12">
290 <label>Factura que emite</label> 348 <label>Factura que emite</label>
291 <div class="input-group"> 349 <div class="input-group">
292 <input 350 <input
293 type="text" 351 type="text"
294 class="form-control form-control-sm" 352 class="form-control form-control-sm"
295 placeholder="Ingrese factura que emite" 353 placeholder="Ingrese factura que emite"
296 ng-model="cliente.tipoFactura.NOMBRE" 354 ng-model="cliente.tipoFactura.NOMBRE"
297 ng-required="true" 355 ng-required="true"
298 ng-keypress="seleccionarTipoFactura(13)" 356 ng-keypress="seleccionarTipoFactura(13)"
357 ng-focus="focus(10)"
358 foca-focus="focused == 10"
299 teclado-virtual> 359 teclado-virtual>
300 <div class="input-group-append"> 360 <div class="input-group-append">
301 <button 361 <button
302 ladda="searchLoading" 362 ladda="searchLoading"
303 class="btn btn-outline-secondary form-control-sm" 363 class="btn btn-outline-secondary form-control-sm"
304 type="button" 364 type="button"
305 ng-click="seleccionarTipoFactura(13)" 365 ng-click="seleccionarTipoFactura(13)"
306 > 366 >
307 <i class="fa fa-search" aria-hidden="true"></i> 367 <i class="fa fa-search" aria-hidden="true"></i>
308 </button> 368 </button>
309 </div> 369 </div>
310 </div> 370 </div>
311 </div> 371 </div>
312 </div> 372 </div>
313 <div class="row"> 373 <div class="row">
314 <div class="col-4"> 374 <div class="col-md-4 col-12">
315 <label>CUIT</label> 375 <label>CUIT</label>
316 <div class="input-group"> 376 <div class="input-group">
317 <input 377 <input
318 type="text" 378 type="text"
319 class="form-control form-control-sm" 379 class="form-control form-control-sm"
320 placeholder="Ingrese CUIT" 380 placeholder="Ingrese CUIT"
321 ng-model="cliente.CUIT" 381 ng-model="cliente.CUIT"
322 ng-required="true" 382 ng-required="true"
383 ng-pattern="regexCuit"
384 ng-maxlength="13"
385 ng-keypress="next($event.keyCode)"
386 ng-focus="focus(11)"
387 foca-focus="focused == 11"
323 teclado-virtual> 388 teclado-virtual>
324 </div> 389 </div>
325 </div> 390 </div>
326 <div class="col-4"> 391 <div class="col-md-4 col-12">
327 <label>Clase de comprobante</label> 392 <label>Clase de comprobante</label>
328 <div class="input-group"> 393 <div class="input-group">
329 <input 394 <input
330 type="text" 395 type="text"
331 class="form-control form-control-sm" 396 class="form-control form-control-sm"
332 placeholder="Ingrese clase de comprobante" 397 placeholder="Ingrese clase de comprobante"
333 ng-keypress="seleccionarTipoComprobante($event.keyCode)" 398 ng-keypress="seleccionarTipoComprobante($event.keyCode)"
334 ng-model="cliente.tipoComprobante.NOMBRE" 399 ng-model="cliente.tipoComprobante.NOMBRE"
335 ng-required="true" 400 ng-required="true"
401 ng-focus="focus(12)"
402 foca-focus="focused == 12"
336 teclado-virtual> 403 teclado-virtual>
337 <div class="input-group-append"> 404 <div class="input-group-append">
338 <button 405 <button
339 ladda="searchLoading" 406 ladda="searchLoading"
340 class="btn btn-outline-secondary form-control-sm" 407 class="btn btn-outline-secondary form-control-sm"
341 type="button" 408 type="button"
342 ng-click="seleccionarTipoComprobante(13)" 409 ng-click="seleccionarTipoComprobante(13)"
343 > 410 >
344 <i class="fa fa-search" aria-hidden="true"></i> 411 <i class="fa fa-search" aria-hidden="true"></i>
345 </button> 412 </button>
346 </div> 413 </div>
347 </div> 414 </div>
348 </div> 415 </div>
349 <div class="col-4"> 416 <div class="col-md-4 col-12">
350 <label>Forma de pago</label> 417 <label>Forma de pago</label>
351 <div class="input-group"> 418 <div class="input-group">
352 <input 419 <input
353 type="text" 420 type="text"
354 class="form-control form-control-sm" 421 class="form-control form-control-sm"
355 placeholder="Ingrese forma de pago" 422 placeholder="Ingrese forma de pago"
356 ng-model="cliente.formaPago.NOMBRE" 423 ng-model="cliente.formaPago.NOMBRE"
357 ng-required="true" 424 ng-required="true"
358 ng-keypress="seleccionarFormaPago($event.keyCode)" 425 ng-keypress="seleccionarFormaPago($event.keyCode)"
426 ng-focus="focus(13)"
427 foca-focus="focused == 13"
359 teclado-virtual> 428 teclado-virtual>
360 <div class="input-group-append"> 429 <div class="input-group-append">
361 <button 430 <button
362 ladda="searchLoading" 431 ladda="searchLoading"
363 class="btn btn-outline-secondary form-control-sm" 432 class="btn btn-outline-secondary form-control-sm"
364 type="button" 433 type="button"
365 ng-click="seleccionarFormaPago(13)" 434 ng-click="seleccionarFormaPago(13)"
366 > 435 >
367 <i class="fa fa-search" aria-hidden="true"></i> 436 <i class="fa fa-search" aria-hidden="true"></i>
368 </button> 437 </button>
369 </div> 438 </div>
370 </div> 439 </div>
371 </div> 440 </div>
372 </div> 441 </div>
373 </uib-tab> 442 </uib-tab>
374 </uib-tabset> 443 </uib-tabset>
375 </form> 444 </form>
376 </div> 445 </div>
377 <div class="modal-footer py-1"> 446 <div class="modal-footer py-1">
378 <nav ng-show="currentPageClientes.length > 0 && primerBusqueda && !ingreso" class="mr-auto"> 447 <nav ng-show="currentPageClientes.length > 0 && primerBusqueda && !ingreso" class="mr-auto">
379 <ul class="pagination pagination-sm mb-0"> 448 <ul class="pagination pagination-sm mb-0">
380 <li class="page-item" ng-class="{'disabled': currentPage == 1}"> 449 <li class="page-item" ng-class="{'disabled': currentPage == 1}">
381 <a class="page-link" href="javascript:void()" ng-click="selectPage(currentPage - 1)"> 450 <a class="page-link" href="javascript:void()" ng-click="selectPage(currentPage - 1)">
382 <span aria-hidden="true">&laquo;</span> 451 <span aria-hidden="true">&laquo;</span>
383 <span class="sr-only">Anterior</span> 452 <span class="sr-only">Anterior</span>
384 </a> 453 </a>
385 </li> 454 </li>
386 <li 455 <li
387 class="page-item" 456 class="page-item"
388 ng-repeat="pagina in paginas" 457 ng-repeat="pagina in paginas"
389 ng-class="{'active': pagina == currentPage}" 458 ng-class="{'active': pagina == currentPage}"
390 > 459 >
391 <a 460 <a
392 class="page-link" 461 class="page-link"
393 href="javascript:void()" 462 href="javascript:void()"
394 ng-click="selectPage(pagina)" 463 ng-click="selectPage(pagina)"
395 ng-bind="pagina" 464 ng-bind="pagina"
396 ></a> 465 ></a>
397 </li> 466 </li>
398 <li class="page-item" ng-class="{'disabled': currentPage == lastPage}"> 467 <li class="page-item" ng-class="{'disabled': currentPage == lastPage}">
399 <a class="page-link" href="javascript:void()" ng-click="selectPage(currentPage + 1)"> 468 <a class="page-link" href="javascript:void()" ng-click="selectPage(currentPage + 1)">
400 <span aria-hidden="true">&raquo;</span> 469 <span aria-hidden="true">&raquo;</span>
401 <span class="sr-only">Siguiente</span> 470 <span class="sr-only">Siguiente</span>
402 </a> 471 </a>
403 </li> 472 </li>
404 </ul> 473 </ul>
405 </nav> 474 </nav>
406 <button class="btn btn-sm btn-secondary" type="button" ng-click="cancel()">Cancelar</button> 475 <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> 476 <button
477 class="btn btn-sm btn-primary"
478 type="button"
479 ng-show="ingreso"
480 ng-click="guardar()"
481 ng-disabled="!formCliente.$valid">Guardar</button>