Commit 844610fb5768738fb98f08fae49e1f30467cb210
Exists in
master
and in
1 other branch
Merge branch 'master' into 'master'
Master See merge request !1
Showing
12 changed files
Show diff stats
.gitignore
| File was created | 1 | /node_modules | |
| 2 | /dist | ||
| 3 | /tmp | ||
| 4 | package-lock\.json | ||
| 5 | src/etc/develop.js | ||
| 6 |
.jshintrc
| File was created | 1 | { | |
| 2 | /* | ||
| 3 | * ENVIRONMENTS | ||
| 4 | * ================= | ||
| 5 | */ | ||
| 6 | |||
| 7 | // Define globals exposed by modern browsers. | ||
| 8 | "browser": true, | ||
| 9 | |||
| 10 | // Define globals exposed by jQuery. | ||
| 11 | "jquery": true, | ||
| 12 | |||
| 13 | // Define globals exposed by Node.js. | ||
| 14 | "node": true, | ||
| 15 | |||
| 16 | // Allow ES6. | ||
| 17 | "esversion": 6, | ||
| 18 | |||
| 19 | /* | ||
| 20 | * ENFORCING OPTIONS | ||
| 21 | * ================= | ||
| 22 | */ | ||
| 23 | |||
| 24 | // Force all variable names to use either camelCase style or UPPER_CASE | ||
| 25 | // with underscores. | ||
| 26 | "camelcase": true, | ||
| 27 | |||
| 28 | // Prohibit use of == and != in favor of === and !==. | ||
| 29 | "eqeqeq": true, | ||
| 30 | |||
| 31 | // Enforce tab width of 2 spaces. | ||
| 32 | "indent": 4, | ||
| 33 | |||
| 34 | // Prohibit use of a variable before it is defined. | ||
| 35 | "latedef": false, | ||
| 36 | |||
| 37 | // Enforce line length to 100 characters | ||
| 38 | "maxlen": 100, | ||
| 39 | |||
| 40 | // Require capitalized names for constructor functions. | ||
| 41 | "newcap": true, | ||
| 42 | |||
| 43 | // Enforce use of single quotation marks for strings. | ||
| 44 | "quotmark": "single", | ||
| 45 | |||
| 46 | // Enforce placing 'use strict' at the top function scope | ||
| 47 | "strict": false, | ||
| 48 | |||
| 49 | // Prohibit use of explicitly undeclared variables. | ||
| 50 | "undef": true, | ||
| 51 | |||
| 52 | // Warn when variables are defined but never used. | ||
| 53 | "unused": true, | ||
| 54 | |||
| 55 | // Para que funcione en angular | ||
| 56 | "predef": ["angular", "alert", "spyOn", "expect", "it", "inject", "beforeEach", "describe"], | ||
| 57 | /* | ||
| 58 | * RELAXING OPTIONS | ||
| 59 | * ================= | ||
| 60 | */ | ||
| 61 | |||
| 62 | // Suppress warnings about == null comparisons. | ||
| 63 | "eqnull": true | ||
| 64 | } | ||
| 65 |
gulpfile.js
| File was created | 1 | const templateCache = require('gulp-angular-templatecache'); | |
| 2 | const concat = require('gulp-concat'); | ||
| 3 | const htmlmin = require('gulp-htmlmin'); | ||
| 4 | const rename = require('gulp-rename'); | ||
| 5 | const uglify = require('gulp-uglify-es').default; | ||
| 6 | const gulp = require('gulp'); | ||
| 7 | const pump = require('pump'); | ||
| 8 | const jshint = require('gulp-jshint'); | ||
| 9 | const replace = require('gulp-replace'); | ||
| 10 | const connect = require('gulp-connect'); | ||
| 11 | const clean = require('gulp-clean'); | ||
| 12 | const header = require('gulp-header'); | ||
| 13 | const footer =require('gulp-footer'); | ||
| 14 | |||
| 15 | var paths = { | ||
| 16 | srcJS: 'src/js/*.js', | ||
| 17 | srcViews: 'src/views/*.html', | ||
| 18 | specs: 'spec/*.js', | ||
| 19 | tmp: 'tmp', | ||
| 20 | dist: 'dist/' | ||
| 21 | }; | ||
| 22 | |||
| 23 | gulp.task('templates', function() { | ||
| 24 | return pump( | ||
| 25 | [ | ||
| 26 | gulp.src(paths.srcViews), | ||
| 27 | replace('views/', ''), | ||
| 28 | htmlmin(), | ||
| 29 | templateCache('views.js', { | ||
| 30 | module: 'focaAbmCliente', | ||
| 31 | root: '' | ||
| 32 | }), | ||
| 33 | gulp.dest(paths.tmp) | ||
| 34 | ] | ||
| 35 | ); | ||
| 36 | }); | ||
| 37 | |||
| 38 | gulp.task('uglify', ['templates', 'uglify-spec'], function() { | ||
| 39 | return pump( | ||
| 40 | [ | ||
| 41 | gulp.src([ | ||
| 42 | paths.srcJS, | ||
| 43 | 'tmp/views.js' | ||
| 44 | ]), | ||
| 45 | concat('foca-abm-cliente.js'), | ||
| 46 | replace("src/views/", ''), | ||
| 47 | gulp.dest(paths.tmp), | ||
| 48 | rename('foca-abm-cliente.min.js'), | ||
| 49 | uglify(), | ||
| 50 | gulp.dest(paths.dist) | ||
| 51 | ] | ||
| 52 | ); | ||
| 53 | }); | ||
| 54 | |||
| 55 | gulp.task('uglify-spec', function() { | ||
| 56 | return pump([ | ||
| 57 | gulp.src(paths.specs), | ||
| 58 | concat('foca-abm-cliente.spec.js'), | ||
| 59 | replace("src/views/", ''), | ||
| 60 | header("describe('Módulo foca-abm-cliente', function() { \n"), | ||
| 61 | footer("});"), | ||
| 62 | gulp.dest(paths.dist) | ||
| 63 | ]); | ||
| 64 | }); | ||
| 65 | |||
| 66 | gulp.task('clean', function() { | ||
| 67 | return gulp.src(['tmp', 'dist'], {read: false}) | ||
| 68 | .pipe(clean()); | ||
| 69 | }); | ||
| 70 | |||
| 71 | gulp.task('pre-commit', function() { | ||
| 72 | pump( | ||
| 73 | [ | ||
| 74 | gulp.src([paths.srcJS, paths.specs]), | ||
| 75 | jshint('.jshintrc'), | ||
| 76 | jshint.reporter('default'), | ||
| 77 | jshint.reporter('fail') | ||
| 78 | ] | ||
| 79 | ); | ||
| 80 | |||
| 81 | gulp.start('uglify'); | ||
| 82 | }); | ||
| 83 | |||
| 84 | gulp.task('clean-post-install', function() { | ||
| 85 | return gulp.src(['src', 'tmp', '.jshintrc','readme.md', '.gitignore', 'gulpfile.js', | ||
| 86 | 'index.html', 'spec', 'test.html'], {read: false}) | ||
| 87 | .pipe(clean()); | ||
| 88 | }); | ||
| 89 | |||
| 90 | gulp.task('compile', ['templates', 'uglify']); | ||
| 91 | |||
| 92 | gulp.task('watch', function() { | ||
| 93 | gulp.watch([paths.srcJS, paths.srcViews], ['uglify']); | ||
| 94 | }); | ||
| 95 | |||
| 96 | gulp.task('webserver', function() { | ||
| 97 | pump [ | ||
| 98 | connect.server({port: 3000}) | ||
| 99 | ] | ||
| 100 | }); | ||
| 101 | |||
| 102 | gulp.task('default', ['webserver']); | ||
| 103 |
package.json
| File was created | 1 | { | |
| 2 | "name": "foca-abm-cliente", | ||
| 3 | "version": "0.0.1", | ||
| 4 | "description": "Abm de cliente", | ||
| 5 | "main": "index.html", | ||
| 6 | "scripts": { | ||
| 7 | "test": "test.html", | ||
| 8 | "compile": "gulp uglify", | ||
| 9 | "gulp-pre-commit": "gulp pre-commit", | ||
| 10 | "postinstall": "npm run compile && gulp clean-post-install", | ||
| 11 | "install-dev": "npm install -D angular bootstrap ui-bootstrap4 font-awesome jquery gulp gulp-connect jasmine-core pre-commit gulp-angular-templatecache gulp-htmlmin gulp-jshint gulp-rename gulp-replace gulp-uglify-es gulp-uglify gulp-clean jshint pump git+http://git.focasoftware.com/npm/foca-modal.git" | ||
| 12 | }, | ||
| 13 | "pre-commit": [ | ||
| 14 | "gulp-pre-commit" | ||
| 15 | ], | ||
| 16 | "repository": { | ||
| 17 | "type": "git", | ||
| 18 | "url": "http://git.focasoftware.com/npm/foca-abm-cliente.git" | ||
| 19 | }, | ||
| 20 | "author": "Foca Software", | ||
| 21 | "license": "ISC", | ||
| 22 | "peerDependencies": { | ||
| 23 | "angular": "^1.7.x", | ||
| 24 | "angular-route": "^1.7.x", | ||
| 25 | "bootstrap": "^4.1.x", | ||
| 26 | "jquery": "^3.3.x", | ||
| 27 | "font-awesome": "^4.7.x", | ||
| 28 | "gulp": "^3.9.x", | ||
| 29 | "gulp-concat": "2.6.x", | ||
| 30 | "gulp-jshint": "^2.1.x", | ||
| 31 | "gulp-rename": "^1.4.x", | ||
| 32 | "gulp-replace": "^1.0.x", | ||
| 33 | "gulp-uglify-es": "^1.0.x", | ||
| 34 | "jshint": "^2.9.x", | ||
| 35 | "pump": "^3.0.x" | ||
| 36 | }, | ||
| 37 | "devDependencies": { | ||
| 38 | "angular": "^1.7.8", | ||
| 39 | "angular-mocks": "^1.7.8", | ||
| 40 | "angular-route": "^1.7.8", | ||
| 41 | "bootstrap": "^4.2.1", | ||
| 42 | "foca-directivas": "git+http://git.focasoftware.com/npm/foca-directivas.git", | ||
| 43 | "foca-modal": "git+http://git.focasoftware.com/npm/foca-modal.git", | ||
| 44 | "font-awesome": "^4.7.0", | ||
| 45 | "gulp": "^3.9.1", | ||
| 46 | "gulp-angular-templatecache": "^2.2.7", | ||
| 47 | "gulp-clean": "^0.4.0", | ||
| 48 | "gulp-connect": "^5.7.0", | ||
| 49 | "gulp-header": "^2.0.7", | ||
| 50 | "gulp-htmlmin": "^5.0.1", | ||
| 51 | "gulp-jshint": "^2.1.0", | ||
| 52 | "gulp-rename": "^1.4.0", | ||
| 53 | "gulp-replace": "^1.0.0", | ||
| 54 | "gulp-uglify": "^3.0.1", | ||
| 55 | "gulp-uglify-es": "^1.0.4", | ||
| 56 | "jasmine-core": "^3.4.0", | ||
| 57 | "jquery": "^3.4.1", | ||
| 58 | "jshint": "^2.10.2", | ||
| 59 | "pre-commit": "^1.2.2", | ||
| 60 | "pump": "^3.0.0", | ||
| 61 | "ui-bootstrap4": "^3.0.6" | ||
| 62 | } | ||
| 63 | } | ||
| 64 |
src/etc/develop.js.ejemplo
| File was created | 1 | angular.module('focaAbmCliente') | |
| 2 | .constant("API_ENDPOINT", { | ||
| 3 | 'URL': '//127.0.0.1:9000' | ||
| 4 | }); | ||
| 5 |
src/js/app.js
| File was created | 1 | angular.module('focaAbmCliente', ['ngRoute']); | |
| 2 |
src/js/controller.js
| File was created | 1 | angular.module('focaAbmCliente') | |
| 2 | .controller('focaAbmClienteController', [ | ||
| 3 | '$scope', 'focaBotoneraLateralService', '$timeout', '$uibModal','focaModalService', | ||
| 4 | 'focaAbmClienteService','$filter', | ||
| 5 | function($scope, focaBotoneraLateralService, $timeout, $uibModal,focaModalService, | ||
| 6 | focaAbmClienteService, $filter) { | ||
| 7 | $scope.cliente= { | ||
| 8 | NOM: undefined, | ||
| 9 | COD: undefined | ||
| 10 | }; | ||
| 11 | $scope.vendedor = {}; | ||
| 12 | |||
| 13 | $scope.botonCliente = [{ | ||
| 14 | label: 'Cliente', | ||
| 15 | image: 'cliente.png' | ||
| 16 | }]; | ||
| 17 | |||
| 18 | $scope.botonera = [ | ||
| 19 | { | ||
| 20 | label: 'Datos Cliente', | ||
| 21 | image: 'datoscliente.png', | ||
| 22 | }, | ||
| 23 | { | ||
| 24 | label: 'Domicilios de entrega', | ||
| 25 | image: 'dimiciliodeentrega.png' | ||
| 26 | }, | ||
| 27 | { | ||
| 28 | label: 'Precio y Condiciones', | ||
| 29 | image: 'precios-condiciones.png' | ||
| 30 | } | ||
| 31 | ]; | ||
| 32 | |||
| 33 | //SETEO BOTONERA LATERAL | ||
| 34 | $timeout(function() { | ||
| 35 | focaBotoneraLateralService.showSalir(true); | ||
| 36 | focaBotoneraLateralService.showPausar(false); | ||
| 37 | focaBotoneraLateralService.showCancelar(false); | ||
| 38 | focaBotoneraLateralService.showGuardar(false); | ||
| 39 | }); | ||
| 40 | |||
| 41 | $scope.seleccionarCliente = function() { | ||
| 42 | var datos = null; | ||
| 43 | focaAbmClienteService.getAllClientes() | ||
| 44 | .then(function (res) { | ||
| 45 | datos = res.data; | ||
| 46 | focaModalService.modal({ | ||
| 47 | titulo: 'Clientes', | ||
| 48 | data: datos, | ||
| 49 | size: 'md', | ||
| 50 | columnas: [ | ||
| 51 | { | ||
| 52 | propiedad: 'COD', | ||
| 53 | nombre: 'Codigo' | ||
| 54 | }, | ||
| 55 | { | ||
| 56 | propiedad: 'NOM', | ||
| 57 | nombre: 'Nombre' | ||
| 58 | }, | ||
| 59 | { | ||
| 60 | propiedad: 'CUIT', | ||
| 61 | nombre: 'CUIT' | ||
| 62 | } | ||
| 63 | ], | ||
| 64 | }).then(function (res) { | ||
| 65 | $scope.cliente.NOM = res.NOM; | ||
| 66 | $scope.cliente.COD = res.COD; | ||
| 67 | $scope.$broadcast('addCabecera', { | ||
| 68 | label: 'Cliente:', | ||
| 69 | valor: $filter('rellenarDigitos') | ||
| 70 | ($scope.cliente.COD, 5) + ' - ' + $scope.cliente.NOM | ||
| 71 | }); | ||
| 72 | }).catch(function (e) { | ||
| 73 | console.log(e); | ||
| 74 | }); | ||
| 75 | }); | ||
| 76 | }; | ||
| 77 | |||
| 78 | $scope.seleccionarDatosCliente = function () { | ||
| 79 | if ($scope.cliente.NOM === undefined || $scope.cliente.COD === undefined) { | ||
| 80 | focaModalService.alert('Seleccione cliente'); | ||
| 81 | return; | ||
| 82 | } else { | ||
| 83 | var modalInstanceCliente = $uibModal.open( | ||
| 84 | { | ||
| 85 | ariaLabelledBy: '', | ||
| 86 | templateUrl: 'foca-modal-cliente.html', | ||
| 87 | controller: 'focaModalClienteController', | ||
| 88 | resolve: { | ||
| 89 | idCliente: function () { return $scope.cliente.COD; }, | ||
| 90 | }, | ||
| 91 | size: 'lg', | ||
| 92 | } | ||
| 93 | ); | ||
| 94 | modalInstanceCliente.result | ||
| 95 | .then( function(data) { | ||
| 96 | if (data) { | ||
| 97 | $scope.cliente.NOM = data.NOM; | ||
| 98 | $scope.$broadcast('cleanCabecera'); | ||
| 99 | $scope.$broadcast('addCabecera', { | ||
| 100 | label: 'Cliente:', | ||
| 101 | valor: $filter('rellenarDigitos')($scope.cliente.NOM) | ||
| 102 | }); | ||
| 103 | } | ||
| 104 | }); | ||
| 105 | } | ||
| 106 | }; | ||
| 107 | |||
| 108 | $scope.seleccionarDomiciliosDeEntrega = function () { | ||
| 109 | if ($scope.cliente.NOM === undefined || $scope.cliente.COD === undefined) { | ||
| 110 | focaModalService.alert('Seleccione un cliente'); | ||
| 111 | return; | ||
| 112 | } | ||
| 113 | var modalInstanceDomicilio = $uibModal.open( | ||
| 114 | { | ||
| 115 | ariaLabelledBy: 'Busqueda de Domicilios', | ||
| 116 | templateUrl: 'modal-domicilio.html', | ||
| 117 | controller: 'focaModalDomicilioController', | ||
| 118 | resolve: { | ||
| 119 | idCliente: function () { return $scope.cliente.COD; }, | ||
| 120 | esNuevo: function () { return $scope.cliente.esNuevo; } | ||
| 121 | }, | ||
| 122 | size: 'lg', | ||
| 123 | } | ||
| 124 | ); | ||
| 125 | modalInstanceDomicilio.result.then( function(data) { | ||
| 126 | if (data) { | ||
| 127 | $scope.$broadcast('addCabecera', { | ||
| 128 | label: 'Domicilio:', | ||
| 129 | valor: data.Calle + ' ' + data.Numero + ' - ' + data.Localidad + | ||
| 130 | ' - ' + data.Provincia | ||
| 131 | }); | ||
| 132 | } | ||
| 133 | }); | ||
| 134 | }; | ||
| 135 | |||
| 136 | $scope.seleccionarPrecioYCondiciones = function () { | ||
| 137 | |||
| 138 | if ($scope.cliente.NOM === undefined || $scope.cliente.COD === undefined) { | ||
| 139 | focaModalService.alert('Seleccione cliente'); | ||
| 140 | return; | ||
| 141 | } | ||
| 142 | var modalInstance = $uibModal.open( | ||
| 143 | { | ||
| 144 | ariaLabelledBy: 'Busqueda de Precio Condición', | ||
| 145 | templateUrl: 'modal-precio-condicion.html', | ||
| 146 | controller: 'focaModalPrecioCondicionController', | ||
| 147 | size: 'lg', | ||
| 148 | resolve: { | ||
| 149 | idListaPrecio: function () { | ||
| 150 | return $scope.cliente.MOD || null; | ||
| 151 | } | ||
| 152 | } | ||
| 153 | } | ||
| 154 | ); | ||
| 155 | |||
| 156 | modalInstance.result.then( function (data) { | ||
| 157 | if (data) { | ||
| 158 | console.log('Data: ', data); | ||
| 159 | } | ||
| 160 | |||
| 161 | }, function () { | ||
| 162 | |||
| 163 | } | ||
| 164 | ); | ||
| 165 | }; | ||
| 166 | |||
| 167 | |||
| 168 | } | ||
| 169 | ]); | ||
| 170 |
src/js/controllerCliente.js
| File was created | 1 | angular.module('focaAbmCliente') | |
| 2 | .controller('focaModalClienteController', [ | ||
| 3 | '$scope', '$timeout', '$uibModalInstance', 'focaModalService', | ||
| 4 | 'focaAbmClienteService', 'idCliente', | ||
| 5 | function ($scope, $timeout, $uibModalInstance, focaModalService, | ||
| 6 | focaAbmClienteService, idCliente) { | ||
| 7 | $scope.cliente = { | ||
| 8 | provincia: {}, | ||
| 9 | localidad: {}, | ||
| 10 | zona: {}, | ||
| 11 | actividad: {}, | ||
| 12 | cobrador: {}, | ||
| 13 | vendedor: {}, | ||
| 14 | iva: {}, | ||
| 15 | tipoFactura: {}, | ||
| 16 | tipoComprobante: {}, | ||
| 17 | formaPago: {} | ||
| 18 | }; | ||
| 19 | $scope.regexCuit = new RegExp(/\b(20|23|24|27|30|33|34)(\D)?[0-9]{8}(\D)?[0-9]/); | ||
| 20 | $scope.vendedor = {}; | ||
| 21 | |||
| 22 | focaAbmClienteService.obtenerClientePorCodigo(idCliente) | ||
| 23 | .then(function (res) { | ||
| 24 | var data = res.data[0]; | ||
| 25 | $scope.cliente.codigo = data.COD; | ||
| 26 | $scope.cliente.DOM = data.DOM; | ||
| 27 | $scope.cliente.NOM = data.NOM; | ||
| 28 | $scope.cliente.CPO = data.CPO; | ||
| 29 | $scope.cliente.provincia.ID = data.PCX; | ||
| 30 | $scope.cliente.provincia.NOMBRE = data.PCI; | ||
| 31 | $scope.cliente.localidad.ID = data.LOX; | ||
| 32 | $scope.cliente.localidad.NOMBRE = data.LOC; | ||
| 33 | $scope.cliente.zona.ID = data.zona.ID; | ||
| 34 | $scope.cliente.zona.NOM = data.zona.NOM; | ||
| 35 | $scope.cliente.actividad.NOM = data.actividad.NOM; | ||
| 36 | $scope.cliente.actividad.ID = data.actividad.ID; | ||
| 37 | $scope.cliente.cobrador.NOM = data.cobrador ? data.cobrador.NOM : ''; | ||
| 38 | $scope.cliente.cobrador.NUM = data.cobrador ? data.cobrador.NUM : undefined; | ||
| 39 | $scope.cliente.cobrador.ID = data.cobrador ? data.cobrador.id : undefined; | ||
| 40 | $scope.vendedor.NOM = data.vendedor.NOM; | ||
| 41 | $scope.vendedor.id = data.vendedor.id; | ||
| 42 | $scope.cliente.MAIL = data.MAIL; | ||
| 43 | $scope.cliente.TEL = data.TEL; | ||
| 44 | $scope.cliente.iva.NOMBRE = data.iva.NOMBRE; | ||
| 45 | $scope.cliente.tipoFactura.NOMBRE = data.tipoFactura.NOMBRE; | ||
| 46 | $scope.cliente.tipoFactura.ID = data.tipoFactura.ID; | ||
| 47 | var cuit = data.CUIT.split('-'); | ||
| 48 | $scope.cliente.cuit1 = cuit[0]; | ||
| 49 | $scope.cliente.cuit2 = cuit[1]; | ||
| 50 | $scope.cliente.cuit3 = cuit[2]; | ||
| 51 | $scope.cliente.tipoComprobante.NOMBRE = data.tipoComprobante.NOMBRE; | ||
| 52 | $scope.cliente.tipoComprobante.ID = data.tipoComprobante.ID; | ||
| 53 | $scope.cliente.formaPago.NOMBRE = data.formaPago.NOMBRE; | ||
| 54 | $scope.cliente.formaPago.ID = data.formaPago.ID; | ||
| 55 | $scope.cliente.ES_PROS = data.ES_PROS; | ||
| 56 | $scope.cliente.ES_MAY = data.ES_MAY; | ||
| 57 | $scope.editando = true; | ||
| 58 | }) | ||
| 59 | .catch(function (e) { console.log(e); }); | ||
| 60 | |||
| 61 | $scope.cancel = function () { | ||
| 62 | $uibModalInstance.dismiss('cancel'); | ||
| 63 | }; | ||
| 64 | |||
| 65 | $scope.guardar = function () { | ||
| 66 | if (!$scope.cliente.NOM) { | ||
| 67 | focaModalService.alert('Ingrese Nombre'); | ||
| 68 | return; | ||
| 69 | } else if (!$scope.cliente.CPO) { | ||
| 70 | focaModalService.alert('Ingrese Codigo Postal'); | ||
| 71 | return; | ||
| 72 | } else if (!$scope.cliente.provincia.NOMBRE) { | ||
| 73 | focaModalService.alert('Seleccione una provincia'); | ||
| 74 | return; | ||
| 75 | } else if (!$scope.cliente.DOM) { | ||
| 76 | focaModalService.alert('Ingrese Domicilio'); | ||
| 77 | return; | ||
| 78 | } else if (!$scope.cliente.localidad.NOMBRE) { | ||
| 79 | focaModalService.alert('Seleccione una localidad'); | ||
| 80 | return; | ||
| 81 | } else if (!$scope.cliente.zona.NOM) { | ||
| 82 | focaModalService.alert('Seleccione una zona'); | ||
| 83 | return; | ||
| 84 | } else if (!$scope.cliente.actividad.NOM) { | ||
| 85 | focaModalService.alert('Seleccione actividad'); | ||
| 86 | return; | ||
| 87 | } else if (!$scope.cliente.cobrador.NUM) { | ||
| 88 | focaModalService.alert('Seleccione un cobrador'); | ||
| 89 | return; | ||
| 90 | } else if (!$scope.vendedor.NOM) { | ||
| 91 | focaModalService.alert('Seleccione un vendedor'); | ||
| 92 | return; | ||
| 93 | } else if ($scope.cliente.MAIL && !validateEmails($scope.cliente.MAIL)) { | ||
| 94 | focaModalService.alert('Ingrese un formato de email válido'); | ||
| 95 | return; | ||
| 96 | } else if (!$scope.cliente.TEL) { | ||
| 97 | focaModalService.alert('Ingrese un numero de telefono'); | ||
| 98 | return; | ||
| 99 | } else if (!$scope.cliente.iva.NOMBRE) { | ||
| 100 | focaModalService.alert('Seleccione responsabilidad ante el IVA'); | ||
| 101 | return; | ||
| 102 | } else if (!$scope.cliente.tipoFactura.NOMBRE) { | ||
| 103 | focaModalService.alert('Seleccione tipo de Factura'); | ||
| 104 | return; | ||
| 105 | } else if (!$scope.cliente.cuit1 && !$scope.cliente.cuit2 && !$scope.cliente.cuit3) { | ||
| 106 | focaModalService.alert('Ingrese CUIT'); | ||
| 107 | return; | ||
| 108 | } else if (!$scope.cliente.cuit1 || !$scope.cliente.cuit2 || !$scope.cliente.cuit3) { | ||
| 109 | focaModalService.alert('Ingrese CUIT válido'); | ||
| 110 | return; | ||
| 111 | } else if (!$scope.regexCuit.test($scope.cliente.cuit1 + $scope.cliente.cuit2 + $scope.cliente.cuit3)) { | ||
| 112 | focaModalService.alert('Ingrese CUIT con formato: XX-XXXXXXXX-X'); | ||
| 113 | return; | ||
| 114 | } else if (!$scope.cliente.tipoComprobante.NOMBRE) { | ||
| 115 | focaModalService.alert('Seleccione un Comprobante'); | ||
| 116 | return; | ||
| 117 | } else if (!$scope.cliente.formaPago.NOMBRE) { | ||
| 118 | focaModalService.alert('Seleccione una forma de pago'); | ||
| 119 | return; | ||
| 120 | } | ||
| 121 | $scope.cliente.actividad.ID = parseInt($scope.cliente.actividad.ID); | ||
| 122 | var cliente = crearCopia(); | ||
| 123 | focaAbmClienteService | ||
| 124 | .guardarCliente(cliente) | ||
| 125 | .then(function () { | ||
| 126 | $uibModalInstance.close(cliente); | ||
| 127 | }) | ||
| 128 | .catch(function (e) { | ||
| 129 | console.log(e); | ||
| 130 | }); | ||
| 131 | }; | ||
| 132 | $scope.seleccionarProvincia = function (key) { | ||
| 133 | if (key === 13) { | ||
| 134 | var parametrosModal = { | ||
| 135 | searchText: $scope.cliente.provincia.NOMBRE, | ||
| 136 | query: '/provincia', | ||
| 137 | columnas: [ | ||
| 138 | { | ||
| 139 | propiedad: 'ID', | ||
| 140 | nombre: 'Codigo', | ||
| 141 | filtro: { | ||
| 142 | nombre: 'rellenarDigitos', | ||
| 143 | parametro: 3 | ||
| 144 | } | ||
| 145 | }, | ||
| 146 | { | ||
| 147 | propiedad: 'NOMBRE', | ||
| 148 | nombre: 'Nombre' | ||
| 149 | } | ||
| 150 | ], | ||
| 151 | titulo: 'Búsqueda de provincias', | ||
| 152 | size: 'md' | ||
| 153 | }; | ||
| 154 | focaModalService.modal(parametrosModal).then(function (provincia) { | ||
| 155 | $scope.cliente.provincia = provincia; | ||
| 156 | $timeout(function () { | ||
| 157 | $scope.focused = 4; | ||
| 158 | }); | ||
| 159 | }, function () { | ||
| 160 | //TODO: función llamada cuando cancela el modal | ||
| 161 | }); | ||
| 162 | } | ||
| 163 | }; | ||
| 164 | $scope.seleccionarLocalidad = function (key) { | ||
| 165 | if ($scope.cliente.provincia.ID === undefined) { | ||
| 166 | focaModalService.alert('Seleccione una provincia'); | ||
| 167 | return; | ||
| 168 | } | ||
| 169 | if (key === 13) { | ||
| 170 | var parametrosModal = { | ||
| 171 | searchText: $scope.cliente.localidad.NOMBRE, | ||
| 172 | query: '/localidad/' + parseInt($scope.cliente.provincia.ID), | ||
| 173 | columnas: [ | ||
| 174 | { | ||
| 175 | propiedad: 'ID', | ||
| 176 | nombre: 'Código', | ||
| 177 | }, | ||
| 178 | { | ||
| 179 | propiedad: 'NOMBRE', | ||
| 180 | nombre: 'Nombre' | ||
| 181 | } | ||
| 182 | ], | ||
| 183 | titulo: 'Búsqueda de localidades', | ||
| 184 | size: 'md' | ||
| 185 | }; | ||
| 186 | focaModalService.modal(parametrosModal).then(function (localidad) { | ||
| 187 | $scope.cliente.localidad = localidad; | ||
| 188 | $timeout(function () { | ||
| 189 | $scope.focused = 5; | ||
| 190 | }); | ||
| 191 | }, function () { | ||
| 192 | //TODO: función llamada cuando cancela el modal | ||
| 193 | }); | ||
| 194 | } | ||
| 195 | }; | ||
| 196 | $scope.seleccionarZona = function (key) { | ||
| 197 | if (key === 13) { | ||
| 198 | var parametrosModal = { | ||
| 199 | searchText: $scope.cliente.zona.NOM, | ||
| 200 | query: '/zona', | ||
| 201 | columnas: [ | ||
| 202 | { | ||
| 203 | propiedad: 'ID', | ||
| 204 | nombre: 'Código', | ||
| 205 | filtro: { | ||
| 206 | nombre: 'rellenarDigitos', | ||
| 207 | parametro: 3 | ||
| 208 | } | ||
| 209 | }, | ||
| 210 | { | ||
| 211 | propiedad: 'NOM', | ||
| 212 | nombre: 'Nombre' | ||
| 213 | } | ||
| 214 | ], | ||
| 215 | titulo: 'Búsqueda de zonas', | ||
| 216 | size: 'md' | ||
| 217 | }; | ||
| 218 | focaModalService.modal(parametrosModal).then( | ||
| 219 | function (zona) { | ||
| 220 | $scope.cliente.zona = zona; | ||
| 221 | $timeout(function () { | ||
| 222 | $scope.focused = 6; | ||
| 223 | }); | ||
| 224 | }, function () { | ||
| 225 | // funcion ejecutada cuando se cancela el modal | ||
| 226 | }); | ||
| 227 | } | ||
| 228 | }; | ||
| 229 | $scope.seleccionarActividad = function (key) { | ||
| 230 | if (key === 13) { | ||
| 231 | var parametrosModal = { | ||
| 232 | searchText: $scope.cliente.actividad.NOM, | ||
| 233 | query: '/actividad', | ||
| 234 | columnas: [ | ||
| 235 | { | ||
| 236 | propiedad: 'ID', | ||
| 237 | nombre: 'Código', | ||
| 238 | filtro: { | ||
| 239 | nombre: 'rellenarDigitos', | ||
| 240 | parametro: 3 | ||
| 241 | } | ||
| 242 | }, | ||
| 243 | { | ||
| 244 | propiedad: 'NOM', | ||
| 245 | nombre: 'Nombre' | ||
| 246 | } | ||
| 247 | ], | ||
| 248 | titulo: 'Búsqueda de actividades', | ||
| 249 | size: 'md' | ||
| 250 | }; | ||
| 251 | focaModalService.modal(parametrosModal).then( | ||
| 252 | function (actividad) { | ||
| 253 | $scope.cliente.actividad = actividad; | ||
| 254 | $timeout(function () { | ||
| 255 | $scope.focused = 7; | ||
| 256 | }); | ||
| 257 | }, function () { | ||
| 258 | // funcion ejecutada cuando se cancela el modal | ||
| 259 | }); | ||
| 260 | } | ||
| 261 | }; | ||
| 262 | $scope.seleccionarCobrador = function (key) { | ||
| 263 | if (key === 13) { | ||
| 264 | var parametrosModal = { | ||
| 265 | searchText: $scope.cliente.cobrador.NOM, | ||
| 266 | query: '/cobrador', | ||
| 267 | columnas: [ | ||
| 268 | { | ||
| 269 | propiedad: 'NUM', | ||
| 270 | nombre: 'Código' | ||
| 271 | }, | ||
| 272 | { | ||
| 273 | propiedad: 'NOM', | ||
| 274 | nombre: 'Nombre' | ||
| 275 | } | ||
| 276 | ], | ||
| 277 | titulo: 'Búsqueda de cobradores', | ||
| 278 | size: 'md' | ||
| 279 | }; | ||
| 280 | focaModalService.modal(parametrosModal).then( | ||
| 281 | function (cobrador) { | ||
| 282 | $scope.cliente.cobrador = cobrador; | ||
| 283 | }, function () { | ||
| 284 | // funcion ejecutada cuando se cancela el modal | ||
| 285 | }); | ||
| 286 | } | ||
| 287 | }; | ||
| 288 | $scope.seleccionarVendedor = function (key) { | ||
| 289 | if (key === 13) { | ||
| 290 | var parametrosModal = { | ||
| 291 | titulo: 'Búsqueda vendedores', | ||
| 292 | query: '/vendedor', | ||
| 293 | columnas: [ | ||
| 294 | { | ||
| 295 | propiedad: 'NUM', | ||
| 296 | nombre: 'Código', | ||
| 297 | filtro: { | ||
| 298 | nombre: 'rellenarDigitos', | ||
| 299 | parametro: 3 | ||
| 300 | } | ||
| 301 | }, | ||
| 302 | { | ||
| 303 | propiedad: 'NOM', | ||
| 304 | nombre: 'Nombre' | ||
| 305 | } | ||
| 306 | ], | ||
| 307 | size: 'md' | ||
| 308 | }; | ||
| 309 | focaModalService.modal(parametrosModal).then( | ||
| 310 | function (vendedor) { | ||
| 311 | $scope.vendedor = vendedor; | ||
| 312 | }, function () { | ||
| 313 | // funcion ejecutada cuando se cancela el modal | ||
| 314 | }); | ||
| 315 | } | ||
| 316 | }; | ||
| 317 | $scope.seleccionarIva = function (key) { | ||
| 318 | if (key === 13) { | ||
| 319 | var parametrosModal = { | ||
| 320 | query: '/iva', | ||
| 321 | searchText: $scope.cliente.iva.NOMBRE, | ||
| 322 | columnas: [ | ||
| 323 | { | ||
| 324 | propiedad: 'ID', | ||
| 325 | nombre: 'Código', | ||
| 326 | filtro: { | ||
| 327 | nombre: 'rellenarDigitos', | ||
| 328 | parametro: 3 | ||
| 329 | } | ||
| 330 | }, | ||
| 331 | { | ||
| 332 | propiedad: 'NOMBRE', | ||
| 333 | nombre: 'Nombre' | ||
| 334 | } | ||
| 335 | ], | ||
| 336 | titulo: 'Búsqueda de responsabilidad ante el IVA', | ||
| 337 | size: 'md' | ||
| 338 | }; | ||
| 339 | focaModalService.modal(parametrosModal).then( | ||
| 340 | function (iva) { | ||
| 341 | if (iva) { | ||
| 342 | delete $scope.cliente.tipoFactura.NOMBRE; | ||
| 343 | } | ||
| 344 | $scope.cliente.iva = iva; | ||
| 345 | $timeout(function () { | ||
| 346 | $scope.focused = 12; | ||
| 347 | }); | ||
| 348 | }, function () { | ||
| 349 | // funcion ejecutada cuando se cancela el modal | ||
| 350 | }); | ||
| 351 | } | ||
| 352 | }; | ||
| 353 | $scope.seleccionarTipoFactura = function (key) { | ||
| 354 | |||
| 355 | if ($scope.cliente.iva.NOMBRE == '') { | ||
| 356 | focaModalService.alert('Seleccione una responsabilidad ante el IVA'); | ||
| 357 | return; | ||
| 358 | } | ||
| 359 | |||
| 360 | if (key === 13) { | ||
| 361 | var datos; | ||
| 362 | if ($scope.cliente.iva.ID == 1) { | ||
| 363 | datos = [ | ||
| 364 | { | ||
| 365 | ID: 'A', | ||
| 366 | NOMBRE: 'Factura A' | ||
| 367 | }, | ||
| 368 | { | ||
| 369 | ID: 'M', | ||
| 370 | NOMBRE: 'Factura M' | ||
| 371 | }, | ||
| 372 | { | ||
| 373 | ID: 'R', | ||
| 374 | NOMBRE: 'Remito' | ||
| 375 | } | ||
| 376 | ]; | ||
| 377 | } else { | ||
| 378 | datos = [ | ||
| 379 | { | ||
| 380 | ID: 'B', | ||
| 381 | NOMBRE: 'Factura B' | ||
| 382 | }, | ||
| 383 | { | ||
| 384 | ID: 'R', | ||
| 385 | NOMBRE: 'Remito' | ||
| 386 | } | ||
| 387 | ]; | ||
| 388 | } | ||
| 389 | focaModalService.modal({ | ||
| 390 | titulo: 'Seleccionar Factura', | ||
| 391 | data: datos, | ||
| 392 | size: 'md', | ||
| 393 | columnas: [ | ||
| 394 | { | ||
| 395 | propiedad: 'ID', | ||
| 396 | NOMBRE: 'Codigo' | ||
| 397 | }, | ||
| 398 | { | ||
| 399 | propiedad: 'NOMBRE', | ||
| 400 | NOMBRE: 'Factura' | ||
| 401 | } | ||
| 402 | ], | ||
| 403 | }).then(function (res) { | ||
| 404 | $scope.cliente.tipoFactura = res; | ||
| 405 | }); | ||
| 406 | } | ||
| 407 | }; | ||
| 408 | $scope.pasarCampoCuit = function (numeroCuit) { | ||
| 409 | if (numeroCuit === 1 && $scope.cliente.cuit1.length === 2) { | ||
| 410 | $scope.cuitActivo = 2; | ||
| 411 | } else if (numeroCuit === 2 && $scope.cliente.cuit2.length === 8) { | ||
| 412 | $scope.cuitActivo = 3; | ||
| 413 | } | ||
| 414 | }; | ||
| 415 | $scope.seleccionarTipoComprobante = function (key) { | ||
| 416 | if (key === 13) { | ||
| 417 | var parametrosModal = { | ||
| 418 | searchText: $scope.cliente.tipoComprobante.NOMBRE, | ||
| 419 | query: '/tipo-comprobante', | ||
| 420 | columnas: [ | ||
| 421 | { | ||
| 422 | propiedad: 'ID', | ||
| 423 | nombre: 'Código' | ||
| 424 | }, | ||
| 425 | { | ||
| 426 | propiedad: 'NOMBRE', | ||
| 427 | nombre: 'Nombre' | ||
| 428 | } | ||
| 429 | ], | ||
| 430 | titulo: 'Búsqueda de tipos de comprobante', | ||
| 431 | size: 'md' | ||
| 432 | }; | ||
| 433 | focaModalService.modal(parametrosModal).then( | ||
| 434 | function (tipoComprobante) { | ||
| 435 | $scope.cliente.tipoComprobante = tipoComprobante; | ||
| 436 | $timeout(function () { | ||
| 437 | $scope.focused = 17; | ||
| 438 | }); | ||
| 439 | }, function () { | ||
| 440 | // funcion ejecutada cuando se cancela el modal | ||
| 441 | }); | ||
| 442 | } | ||
| 443 | }; | ||
| 444 | $scope.seleccionarFormaPago = function (key) { | ||
| 445 | if (key === 13) { | ||
| 446 | var parametrosModal = { | ||
| 447 | searchText: $scope.cliente.formaPago.NOMBRE, | ||
| 448 | query: '/forma-pago', | ||
| 449 | columnas: [ | ||
| 450 | { | ||
| 451 | propiedad: 'ID', | ||
| 452 | nombre: 'Código', | ||
| 453 | filtro: { | ||
| 454 | nombre: 'rellenarDigitos', | ||
| 455 | parametro: 3 | ||
| 456 | } | ||
| 457 | }, | ||
| 458 | { | ||
| 459 | propiedad: 'NOMBRE', | ||
| 460 | nombre: 'Nombre' | ||
| 461 | } | ||
| 462 | ], | ||
| 463 | titulo: 'Búsqueda de formas de pago', | ||
| 464 | size: 'md' | ||
| 465 | }; | ||
| 466 | focaModalService.modal(parametrosModal).then( | ||
| 467 | function (formaPago) { | ||
| 468 | $scope.cliente.formaPago = formaPago; | ||
| 469 | }, function () { | ||
| 470 | // funcion ejecutada cuando se cancela el modal | ||
| 471 | }); | ||
| 472 | } | ||
| 473 | }; | ||
| 474 | |||
| 475 | function crearCopia() { | ||
| 476 | var cliente = angular.copy($scope.cliente); | ||
| 477 | cliente.COD = cliente.codigo; | ||
| 478 | cliente.CPO = cliente.CPO; | ||
| 479 | cliente.PCX = parseInt(cliente.provincia.ID); | ||
| 480 | cliente.LOX = parseInt(cliente.localidad.ID); | ||
| 481 | cliente.LOC = cliente.localidad.NOMBRE; | ||
| 482 | cliente.PCI = cliente.provincia.NOMBRE; | ||
| 483 | cliente.IVA = cliente.iva.ID; | ||
| 484 | cliente.ACT = cliente.actividad.ID; | ||
| 485 | cliente.ZON = (parseInt(cliente.zona.ID)).toString(); | ||
| 486 | cliente.TIP = cliente.tipoFactura.ID; | ||
| 487 | cliente.TCO = cliente.tipoComprobante.ID; | ||
| 488 | cliente.FPA = cliente.formaPago.ID; | ||
| 489 | cliente.VEN = $scope.vendedor.id; | ||
| 490 | cliente.CUIT = `${cliente.cuit1}-${cliente.cuit2}-${cliente.cuit3}`; | ||
| 491 | cliente.idCobrador = cliente.cobrador.ID; | ||
| 492 | |||
| 493 | delete cliente.codigo; | ||
| 494 | delete cliente.provincia; | ||
| 495 | delete cliente.localidad; | ||
| 496 | delete cliente.iva; | ||
| 497 | delete cliente.actividad; | ||
| 498 | delete cliente.zona; | ||
| 499 | delete cliente.tipoFactura; | ||
| 500 | delete cliente.tipoComprobante; | ||
| 501 | delete cliente.formaPago; | ||
| 502 | delete cliente.cobrador; | ||
| 503 | delete cliente.cuit1; | ||
| 504 | delete cliente.cuit2; | ||
| 505 | delete cliente.cuit3; | ||
| 506 | delete cliente.vendedor; | ||
| 507 | |||
| 508 | return cliente; | ||
| 509 | } | ||
| 510 | function validateEmails(emails) { | ||
| 511 | var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; | ||
| 512 | var arr = emails.split(','); | ||
| 513 | var result = true; | ||
| 514 | arr.forEach(function (email) { | ||
| 515 | var val = String(email).trim().toLowerCase(); | ||
| 516 | if (!re.test(val)) result = false; | ||
| 517 | }); | ||
| 518 | return result; | ||
| 519 | } | ||
| 520 | } | ||
| 521 | ]); | ||
| 522 |
src/js/route.js
| File was created | 1 | angular.module('focaAbmCliente') | |
| 2 | .config([ | ||
| 3 | '$routeProvider', | ||
| 4 | function($routeProvider) { | ||
| 5 | $routeProvider.when('/cliente', { | ||
| 6 | controller: 'focaAbmClienteController', | ||
| 7 | templateUrl: 'src/views/foca-abm-cliente.html' | ||
| 8 | }); | ||
| 9 | } | ||
| 10 | ]); | ||
| 11 | |||
| 12 |
src/js/service.js
| File was created | 1 | angular.module('focaAbmCliente') | |
| 2 | .factory('focaAbmClienteService', ['$http', 'API_ENDPOINT', function($http, API_ENDPOINT) { | ||
| 3 | return { | ||
| 4 | getAllClientes: function () { | ||
| 5 | return $http.get(API_ENDPOINT.URL + '/cliente'); | ||
| 6 | }, | ||
| 7 | obtenerClientePorCodigo: function (cod) { | ||
| 8 | return $http.get(API_ENDPOINT.URL + '/cliente-codigo/' + cod ); | ||
| 9 | }, | ||
| 10 | guardarCliente: function (cliente) { | ||
| 11 | return $http.post(API_ENDPOINT.URL + '/cliente', { cliente: cliente }); | ||
| 12 | } | ||
| 13 | }; | ||
| 14 | }]); | ||
| 15 |
src/views/foca-abm-cliente.html
| File was created | 1 | <div class="row"> | |
| 2 | <foca-cabecera-facturador | ||
| 3 | titulo="'Cliente'" | ||
| 4 | fecha="now" | ||
| 5 | class="mb-0 col-lg-12" | ||
| 6 | ></foca-cabecera-facturador> | ||
| 7 | </div> | ||
| 8 | <div class="row"> | ||
| 9 | <div class="col-12 col-md-10 p-0 mt-4 border border-white rounded"> | ||
| 10 | <div class="row px-5 py-2 botonera-secundaria"> | ||
| 11 | <div class="col-12"> | ||
| 12 | <foca-botonera-facturador | ||
| 13 | botones="botonCliente" | ||
| 14 | max="1" | ||
| 15 | class="row" | ||
| 16 | > | ||
| 17 | </foca-botonera-facturador> | ||
| 18 | </div> | ||
| 19 | </div> | ||
| 20 | <div class="col-12 col-md-12 p-0 border border-white rounded"> | ||
| 21 | <div class="row px-5 py-2 botonera-secundaria"> | ||
| 22 | <div class="col-12"> | ||
| 23 | <foca-botonera-facturador botones="botonera" max="6" class="row"></foca-botonera-facturador> | ||
| 24 | </div> | ||
| 25 | </div> | ||
| 26 | </div> | ||
| 27 | </div> | ||
| 28 |
src/views/foca-modal-cliente.html
| File was created | 1 | <div class="modal-header py-1"> | |
| 2 | <div class="row w-100"> | ||
| 3 | <div class="col-lg-4 col-7"> | ||
| 4 | <h5 class="modal-title my-1">Editar Cliente</h5> | ||
| 5 | </div> | ||
| 6 | <div class="col-lg-6 col-5 front-index"> | ||
| 7 | <div class="custom-control custom-checkbox mt-2"> | ||
| 8 | <input | ||
| 9 | type="checkbox" | ||
| 10 | class="custom-control-input" | ||
| 11 | id="checkProspecto" | ||
| 12 | ng-model="cliente.ES_PROS"> | ||
| 13 | <label class="custom-control-label" for="checkProspecto">¿Es prospecto?</label> | ||
| 14 | </div> | ||
| 15 | </div> | ||
| 16 | </div> | ||
| 17 | </div> | ||
| 18 | <div class="modal-body" id="modal-body"> | ||
| 19 | <form name="formCliente"> | ||
| 20 | <fieldset> | ||
| 21 | <uib-tabset class="tabs-right"> | ||
| 22 | <uib-tab heading="Datos cliente"> | ||
| 23 | <div class="row"> | ||
| 24 | <div class="col-3 mt-2"> | ||
| 25 | <label>Código</label> | ||
| 26 | <input | ||
| 27 | type="text" | ||
| 28 | class="form-control form-control-sm" | ||
| 29 | ng-model="cliente.codigo" | ||
| 30 | readonly | ||
| 31 | /> | ||
| 32 | </div> | ||
| 33 | <div class="col-9 mt-2"> | ||
| 34 | <label>Nombre</label> | ||
| 35 | <input | ||
| 36 | type="text" | ||
| 37 | class="form-control form-control-sm" | ||
| 38 | ng-model="cliente.NOM" | ||
| 39 | teclado-virtual | ||
| 40 | placeholder="Ingrese nombre" | ||
| 41 | ng-required="true" | ||
| 42 | foca-focus="focused == 1" | ||
| 43 | ng-focus="focus(1)" | ||
| 44 | ng-keypress="next($event.keyCode)" | ||
| 45 | /> | ||
| 46 | </div> | ||
| 47 | </div> | ||
| 48 | <div class="row"> | ||
| 49 | <div class="col-md-9 col-12 mt-2"> | ||
| 50 | <label>Domicilio</label> | ||
| 51 | <input | ||
| 52 | type="text" | ||
| 53 | class="form-control form-control-sm" | ||
| 54 | ng-model="cliente.DOM" | ||
| 55 | teclado-virtual | ||
| 56 | placeholder="Ingrese domicilio" | ||
| 57 | ng-required="true" | ||
| 58 | ng-focus="focus(2)" | ||
| 59 | foca-focus="focused == 2" | ||
| 60 | ng-keypress="next($event.keyCode)" | ||
| 61 | /> | ||
| 62 | </div> | ||
| 63 | <div class="col-md-3 col-12 mt-2"> | ||
| 64 | <label>Código postal</label> | ||
| 65 | <input | ||
| 66 | type="text" | ||
| 67 | class="form-control form-control-sm" | ||
| 68 | ng-model="cliente.CPO" | ||
| 69 | placeholder="Ingrese CP" | ||
| 70 | ng-required="true" | ||
| 71 | ng-focus="focus(3)" | ||
| 72 | foca-focus="focused == 3" | ||
| 73 | ng-keypress="next($event.keyCode)" | ||
| 74 | teclado-virtual | ||
| 75 | /> | ||
| 76 | </div> | ||
| 77 | </div> | ||
| 78 | <div class="row"> | ||
| 79 | <div class="col-md-6 col-12 mt-2"> | ||
| 80 | <label>Provincia</label> | ||
| 81 | <div class="input-group"> | ||
| 82 | <input | ||
| 83 | type="text" | ||
| 84 | class="form-control form-control-sm" | ||
| 85 | ng-model="cliente.provincia.NOMBRE" | ||
| 86 | ng-keypress="seleccionarProvincia($event.keyCode)" | ||
| 87 | placeholder="Seleccione provincia" | ||
| 88 | ng-required="true" | ||
| 89 | ng-focus="focus(4)" | ||
| 90 | foca-focus="focused == 4" | ||
| 91 | teclado-virtual | ||
| 92 | /> | ||
| 93 | <button | ||
| 94 | ng-show="cliente.provincia.NOMBRE !== ''" | ||
| 95 | type="button" | ||
| 96 | class="clear-input" | ||
| 97 | ng-click= | ||
| 98 | "cliente.provincia.NOMBRE = ''; | ||
| 99 | cliente.provincia.ID = undefined" | ||
| 100 | ><i class="fa fa-times"></i> | ||
| 101 | </button> | ||
| 102 | <div class="input-group-append"> | ||
| 103 | <button | ||
| 104 | ladda="searchLoading" | ||
| 105 | class="btn btn-outline-secondary" | ||
| 106 | type="button" | ||
| 107 | ng-click="seleccionarProvincia(13)" | ||
| 108 | ><i class="fa fa-search" aria-hidden="true"></i> | ||
| 109 | </button> | ||
| 110 | </div> | ||
| 111 | </div> | ||
| 112 | </div> | ||
| 113 | <div class="col-md-6 col-12 mt-2"> | ||
| 114 | <label>Localidad</label> | ||
| 115 | <div class="input-group"> | ||
| 116 | <input | ||
| 117 | type="text" | ||
| 118 | class="form-control form-control-sm" | ||
| 119 | ng-model="cliente.localidad.NOMBRE" | ||
| 120 | ng-keypress="seleccionarLocalidad($event.keyCode)" | ||
| 121 | placeholder="Seleccione localidad" | ||
| 122 | ng-required="true" | ||
| 123 | foca-focus="focused == 5" | ||
| 124 | ng-focus="focus(5)" | ||
| 125 | teclado-virtual | ||
| 126 | /> | ||
| 127 | <button | ||
| 128 | ng-show="cliente.localidad.NOMBRE !== ''" | ||
| 129 | type="button" | ||
| 130 | class="clear-input" | ||
| 131 | ng-click="cliente.localidad.NOMBRE = ''" | ||
| 132 | ><i class="fa fa-times"></i> | ||
| 133 | </button> | ||
| 134 | <div class="input-group-append"> | ||
| 135 | <button | ||
| 136 | ladda="searchLoading" | ||
| 137 | class="btn btn-outline-secondary" | ||
| 138 | type="button" | ||
| 139 | ng-click="seleccionarLocalidad(13)" | ||
| 140 | ><i class="fa fa-search" aria-hidden="true"></i> | ||
| 141 | </button> | ||
| 142 | </div> | ||
| 143 | </div> | ||
| 144 | </div> | ||
| 145 | </div> | ||
| 146 | <div class="row"> | ||
| 147 | <div class="col-md-6 col-12 mt-2"> | ||
| 148 | <label>Zona</label> | ||
| 149 | <div class="input-group"> | ||
| 150 | <input | ||
| 151 | type="text" | ||
| 152 | class="form-control form-control-sm" | ||
| 153 | ng-model="cliente.zona.NOM" | ||
| 154 | ng-keypress="seleccionarZona($event.keyCode)" | ||
| 155 | placeholder="Seleccione zona" | ||
| 156 | ng-required="true" | ||
| 157 | ng-focus="focus(6)" | ||
| 158 | foca-focus="focused == 6" | ||
| 159 | teclado-virtual | ||
| 160 | /> | ||
| 161 | <button | ||
| 162 | ng-show="cliente.zona.NOM !== ''" | ||
| 163 | type="button" | ||
| 164 | class="clear-input" | ||
| 165 | ng-click="cliente.zona.NOM = ''" | ||
| 166 | ><i class="fa fa-times"></i> | ||
| 167 | </button> | ||
| 168 | <div class="input-group-append"> | ||
| 169 | <button | ||
| 170 | ladda="searchLoading" | ||
| 171 | class="btn btn-outline-secondary" | ||
| 172 | type="button" | ||
| 173 | ng-click="seleccionarZona(13)" | ||
| 174 | ><i class="fa fa-search" aria-hidden="true"></i> | ||
| 175 | </button> | ||
| 176 | </div> | ||
| 177 | </div> | ||
| 178 | </div> | ||
| 179 | <div class="col-md-6 col-12 mt-2"> | ||
| 180 | <label> Actividad </label> | ||
| 181 | <div class="input-group"> | ||
| 182 | <input | ||
| 183 | type="text" | ||
| 184 | class="form-control form-control-sm" | ||
| 185 | ng-model="cliente.actividad.NOM" | ||
| 186 | ng-keypress="seleccionarActividad($event.keyCode)" | ||
| 187 | placeholder="Seleccione actividad" | ||
| 188 | ng-required="true" | ||
| 189 | ng-focus="focus(7)" | ||
| 190 | foca-focus="focused == 7" | ||
| 191 | teclado-virtual | ||
| 192 | /> | ||
| 193 | <button | ||
| 194 | ng-show="cliente.actividad.NOM !== ''" | ||
| 195 | type="button" | ||
| 196 | class="clear-input" | ||
| 197 | ng-click="cliente.actividad.NOM = ''" | ||
| 198 | ><i class="fa fa-times"></i> | ||
| 199 | </button> | ||
| 200 | <div class="input-group-append"> | ||
| 201 | <button | ||
| 202 | ladda="searchLoading" | ||
| 203 | class="btn btn-outline-secondary" | ||
| 204 | type="button" | ||
| 205 | ng-click="seleccionarActividad(13)" | ||
| 206 | ><i class="fa fa-search" aria-hidden="true"></i> | ||
| 207 | </button> | ||
| 208 | </div> | ||
| 209 | </div> | ||
| 210 | </div> | ||
| 211 | </div> | ||
| 212 | <div class="row"> | ||
| 213 | <div class="col-md-6 col-12 mt-2"> | ||
| 214 | <label>Cobrador</label> | ||
| 215 | <div class="input-group"> | ||
| 216 | <input | ||
| 217 | type="text" | ||
| 218 | class="form-control form-control-sm" | ||
| 219 | ng-model="cliente.cobrador.NOM" | ||
| 220 | ng-keypress="seleccionarCobrador($event.keyCode)" | ||
| 221 | placeholder="Seleccione cobrador" | ||
| 222 | ng-focus="focus(8)" | ||
| 223 | foca-focus="focused == 8" | ||
| 224 | teclado-virtual | ||
| 225 | /> | ||
| 226 | <button | ||
| 227 | ng-show="cliente.cobrador.NOM !== ''" | ||
| 228 | type="button" | ||
| 229 | class="clear-input" | ||
| 230 | ng-click="cliente.cobrador.NOM = ''" | ||
| 231 | ><i class="fa fa-times"></i> | ||
| 232 | </button> | ||
| 233 | <div class="input-group-append"> | ||
| 234 | <button | ||
| 235 | ladda="searchLoading" | ||
| 236 | class="btn btn-outline-secondary" | ||
| 237 | type="button" | ||
| 238 | ng-click="seleccionarCobrador(13)" | ||
| 239 | ><i class="fa fa-search" aria-hidden="true"></i> | ||
| 240 | </button> | ||
| 241 | </div> | ||
| 242 | </div> | ||
| 243 | </div> | ||
| 244 | <div class="col-md-6 col-12 mt-2"> | ||
| 245 | <label>Vendedor</label> | ||
| 246 | <div class="input-group"> | ||
| 247 | <input | ||
| 248 | type="text" | ||
| 249 | class="form-control form-control-sm" | ||
| 250 | ng-model="vendedor.NOM" | ||
| 251 | ng-keypress="seleccionarVendedor($event.keyCode)" | ||
| 252 | placeholder="Seleccione vendedor" | ||
| 253 | ng-focus="focus(9)" | ||
| 254 | foca-focus="focused == 9" | ||
| 255 | teclado-virtual | ||
| 256 | /> | ||
| 257 | <button | ||
| 258 | ng-show="vendedor.NOM !== ''" | ||
| 259 | type="button" | ||
| 260 | class="clear-input" | ||
| 261 | ng-click="vendedor.NOM = ''" | ||
| 262 | ><i class="fa fa-times"></i> | ||
| 263 | </button> | ||
| 264 | <div class="input-group-append"> | ||
| 265 | <button | ||
| 266 | ladda="searchLoading" | ||
| 267 | class="btn btn-outline-secondary" | ||
| 268 | type="button" | ||
| 269 | ng-click="seleccionarVendedor(13)" | ||
| 270 | ><i class="fa fa-search" aria-hidden="true"></i> | ||
| 271 | </button> | ||
| 272 | </div> | ||
| 273 | </div> | ||
| 274 | </div> | ||
| 275 | <div class="col-md-6 col-12 mt-2"> | ||
| 276 | <label>Email</label> | ||
| 277 | <div class="input-group"> | ||
| 278 | <input | ||
| 279 | type="text" | ||
| 280 | class="form-control form-control-sm" | ||
| 281 | placeholder="Ingrese Email" | ||
| 282 | ng-model="cliente.MAIL" | ||
| 283 | ng-required="true" | ||
| 284 | ng-keypress="next($event.keyCode)" | ||
| 285 | ng-focus="focus(10)" | ||
| 286 | foca-focus="focused == 10" | ||
| 287 | teclado-virtual> | ||
| 288 | </div> | ||
| 289 | </div> | ||
| 290 | <div class="col-md-6 col-12 mt-2"> | ||
| 291 | <label>Telefono</label> | ||
| 292 | <div class="input-group"> | ||
| 293 | <input | ||
| 294 | foca-tipo-input | ||
| 295 | limite-numeros-max="20" | ||
| 296 | class="form-control form-control-sm" | ||
| 297 | placeholder="Ingrese Telefono" | ||
| 298 | ng-model="cliente.TEL" | ||
| 299 | ng-required="true" | ||
| 300 | ng-keypress="next($event.keyCode)" | ||
| 301 | ng-focus="focus(11)" | ||
| 302 | foca-focus="focused == 11" | ||
| 303 | teclado-virtual> | ||
| 304 | </div> | ||
| 305 | </div> | ||
| 306 | </div> | ||
| 307 | <div class="row"> | ||
| 308 | <div class="col-6 d-flex mt-3"> | ||
| 309 | <div class="custom-control custom-checkbox mt-auto"> | ||
| 310 | <input | ||
| 311 | type="checkbox" | ||
| 312 | class="custom-control-input" | ||
| 313 | id="checkDistribuidor" | ||
| 314 | ng-model="cliente.ES_MAY" | ||
| 315 | checked | ||
| 316 | disabled="disabled"> | ||
| 317 | <label class="custom-control-label" for="checkDistribuidor">¿Este cliente es distribuidor?</label> | ||
| 318 | </div> | ||
| 319 | </div> | ||
| 320 | </div> | ||
| 321 | </uib-tab> | ||
| 322 | <uib-tab heading="Datos impositivos"> | ||
| 323 | <div class="row"> | ||
| 324 | <div class="col-md-7 col-12 mt-2"> | ||
| 325 | <label>Responsabilidad ante el IVA</label> | ||
| 326 | <div class="input-group"> | ||
| 327 | <input | ||
| 328 | type="text" | ||
| 329 | class="form-control form-control-sm" | ||
| 330 | placeholder="Seleccione responsabilidad ante el IVA" | ||
| 331 | ng-model="cliente.iva.NOMBRE" | ||
| 332 | ng-keypress="seleccionarIva($event.keyCode)" | ||
| 333 | ng-required="true" | ||
| 334 | ng-focus="focus(12)" | ||
| 335 | foca-focus="focused == 12" | ||
| 336 | teclado-virtual | ||
| 337 | /> | ||
| 338 | <button | ||
| 339 | ng-show="cliente.iva.NOMBRE !== ''" | ||
| 340 | type="button" | ||
| 341 | class="clear-input" | ||
| 342 | ng-click="cliente.iva.NOMBRE = ''" | ||
| 343 | ><i class="fa fa-times"></i> | ||
| 344 | </button> | ||
| 345 | <div class="input-group-append"> | ||
| 346 | <button | ||
| 347 | ladda="searchLoading" | ||
| 348 | class="btn btn-outline-secondary" | ||
| 349 | type="button" | ||
| 350 | ng-click="seleccionarIva(13)" | ||
| 351 | ><i class="fa fa-search" aria-hidden="true"></i> | ||
| 352 | </button> | ||
| 353 | </div> | ||
| 354 | </div> | ||
| 355 | </div> | ||
| 356 | <div class="col-md-5 col-12 mt-2"> | ||
| 357 | <label>Factura que emite</label> | ||
| 358 | <div class="input-group"> | ||
| 359 | <input | ||
| 360 | type="text" | ||
| 361 | class="form-control form-control-sm" | ||
| 362 | placeholder="Seleccione factura que emite" | ||
| 363 | ng-model="cliente.tipoFactura.NOMBRE" | ||
| 364 | ng-required="true" | ||
| 365 | ng-keypress="seleccionarTipoFactura(13)" | ||
| 366 | ng-focus="focus(13)" | ||
| 367 | foca-focus="focused == 13" | ||
| 368 | teclado-virtual> | ||
| 369 | <button | ||
| 370 | ng-show="cliente.tipoFactura.NOMBRE !== ''" | ||
| 371 | type="button" | ||
| 372 | class="clear-input" | ||
| 373 | ng-click="cliente.tipoFactura.NOMBRE = ''" | ||
| 374 | ><i class="fa fa-times"></i> | ||
| 375 | </button> | ||
| 376 | <div class="input-group-append"> | ||
| 377 | <button | ||
| 378 | ladda="searchLoading" | ||
| 379 | class="btn btn-outline-secondary" | ||
| 380 | type="button" | ||
| 381 | ng-click="seleccionarTipoFactura(13)" | ||
| 382 | ><i class="fa fa-search" aria-hidden="true"></i> | ||
| 383 | </button> | ||
| 384 | </div> | ||
| 385 | </div> | ||
| 386 | </div> | ||
| 387 | </div> | ||
| 388 | <div class="row"> | ||
| 389 | <div class= "col-md-4 col-12 mt-2"> | ||
| 390 | <label>CUIT</label> | ||
| 391 | <div class="d-flex"> | ||
| 392 | <input | ||
| 393 | type="text" | ||
| 394 | class="text-center form-control form-control-sm col-2" | ||
| 395 | limite-numeros-max="2" | ||
| 396 | ng-model="cliente.cuit1" | ||
| 397 | ng-required="true" | ||
| 398 | ng-keypress="pasarCampoCuit(1)" | ||
| 399 | ng-focus="focus(14)" | ||
| 400 | foca-focus="focused == 14" | ||
| 401 | teclado-virtual | ||
| 402 | foca-tipo-input | ||
| 403 | > | ||
| 404 | <span class="m-1"> - </span> | ||
| 405 | <input | ||
| 406 | type="text" | ||
| 407 | class="text-center form-control form-control-sm col-5" | ||
| 408 | maxlength="8" | ||
| 409 | limite-numeros-max="8" | ||
| 410 | ng-keypress="pasarCampoCuit(2)" | ||
| 411 | ng-model="cliente.cuit2" | ||
| 412 | ng-required="true" | ||
| 413 | ng-focus="focus(15)" | ||
| 414 | foca-focus="cuitActivo == 2 || focused == 15" | ||
| 415 | teclado-virtual | ||
| 416 | foca-tipo-input | ||
| 417 | > | ||
| 418 | <span class="m-1"> - </span> | ||
| 419 | <input | ||
| 420 | type="text" | ||
| 421 | class="text-center form-control form-control-sm col-2" | ||
| 422 | maxlength="1" | ||
| 423 | limite-numeros-max="1" | ||
| 424 | ng-keypress="pasarCampoCuit(3)" | ||
| 425 | ng-model="cliente.cuit3" | ||
| 426 | ng-required="true" | ||
| 427 | ng-focus="focus(16)" | ||
| 428 | foca-focus="cuitActivo == 3 || focused == 16" | ||
| 429 | teclado-virtual | ||
| 430 | foca-tipo-input | ||
| 431 | > | ||
| 432 | </div> | ||
| 433 | </div> | ||
| 434 | <div class="col-md-4 col-12 mt-2"> | ||
| 435 | <label>Clase de comprobante</label> | ||
| 436 | <div class="input-group"> | ||
| 437 | <input | ||
| 438 | type="text" | ||
| 439 | class="form-control form-control-sm" | ||
| 440 | placeholder="Seleccione clase de comprobante" | ||
| 441 | ng-keypress="seleccionarTipoComprobante($event.keyCode)" | ||
| 442 | ng-model="cliente.tipoComprobante.NOMBRE" | ||
| 443 | ng-required="true" | ||
| 444 | ng-focus="focus(17)" | ||
| 445 | foca-focus="focused == 17" | ||
| 446 | teclado-virtual> | ||
| 447 | <button | ||
| 448 | ng-show="cliente.tipoComprobante.NOMBRE !== ''" | ||
| 449 | type="button" | ||
| 450 | class="clear-input" | ||
| 451 | ng-click="cliente.tipoComprobante.NOMBRE = ''" | ||
| 452 | ><i class="fa fa-times"></i> | ||
| 453 | </button> | ||
| 454 | <div class="input-group-append"> | ||
| 455 | <button | ||
| 456 | ladda="searchLoading" | ||
| 457 | class="btn btn-outline-secondary" | ||
| 458 | type="button" | ||
| 459 | ng-click="seleccionarTipoComprobante(13)" | ||
| 460 | ><i class="fa fa-search" aria-hidden="true"></i> | ||
| 461 | </button> | ||
| 462 | </div> | ||
| 463 | </div> | ||
| 464 | </div> | ||
| 465 | <div class="col-md-4 col-12 mt-2"> | ||
| 466 | <label>Forma de pago</label> | ||
| 467 | <div class="input-group"> | ||
| 468 | <input | ||
| 469 | type="text" | ||
| 470 | class="form-control form-control-sm" | ||
| 471 | placeholder="Seleccione forma de pago" | ||
| 472 | ng-model="cliente.formaPago.NOMBRE" | ||
| 473 | ng-required="true" | ||
| 474 | ng-keypress="seleccionarFormaPago($event.keyCode)" | ||
| 475 | ng-focus="focus(18)" | ||
| 476 | foca-focus="focused == 18" | ||
| 477 | teclado-virtual> | ||
| 478 | <button | ||
| 479 | ng-show="cliente.formaPago.NOMBRE !== ''" | ||
| 480 | type="button" | ||
| 481 | class="clear-input" | ||
| 482 | ng-click="cliente.formaPago.NOMBRE = ''" | ||
| 483 | ><i class="fa fa-times"></i> | ||
| 484 | </button> | ||
| 485 | <div class="input-group-append"> | ||
| 486 | <button | ||
| 487 | ladda="searchLoading" | ||
| 488 | class="btn btn-outline-secondary" | ||
| 489 | type="button" | ||
| 490 | ng-click="seleccionarFormaPago(13)" | ||
| 491 | ><i class="fa fa-search" aria-hidden="true"></i> | ||
| 492 | </button> | ||
| 493 | </div> | ||
| 494 | </div> | ||
| 495 | </div> | ||
| 496 | </div> | ||
| 497 | </uib-tab> | ||
| 498 | </uib-tabset> | ||
| 499 | </fieldset> | ||
| 500 | </form> | ||
| 501 | </div> | ||
| 502 | <div class="modal-footer py-1"> | ||
| 503 | <button | ||
| 504 | class="btn btn-sm btn-secondary" | ||
| 505 | type="button" | ||
| 506 | data-dismiss="modal" | ||
| 507 | ng-click="cancel()">Cancelar | ||
| 508 | </button> | ||
| 509 | <button | ||
| 510 | class="btn btn-sm btn-primary" | ||
| 511 | type="button" | ||
| 512 | ng-click="guardar()" | ||
| 513 | >Guardar | ||
| 514 | </button> | ||
| 515 | </div> | ||
| 516 |