Compare View

switch
from
...
to
 
Commits (111)
... ... @@ -4,9 +4,15 @@
4 4 "description": "",
5 5 "main": "index.js",
6 6 "scripts": {
  7 + "frefresh": "gulp uglify && cp tmp/foca-crear-factura.js ../wrapper-facturador/node_modules/foca-crear-factura/dist/foca-crear-factura.min.js",
  8 + "refresh": "gulp uglify && cp tmp/foca-crear-factura.js ../wrapper-demo/node_modules/foca-crear-factura/dist/foca-crear-factura.min.js",
7 9 "test": "echo \"Error: no test specified\" && exit 1",
  10 + "compile": "gulp uglify",
  11 + "gulp-pre-commit": "gulp pre-commit",
  12 + "postinstall": "npm run compile && gulp clean-post-install",
8 13 "install-dev": "npm install -D jasmine-core pre-commit angular angular-ladda ladda@1.0.6 angular-route angular-cookies bootstrap ui-bootstrap4 font-awesome gulp gulp-angular-templatecache gulp-connect gulp-clean gulp-htmlmin gulp-jshint gulp-rename gulp-replace gulp-sequence gulp-uglify-es gulp-uglify jquery jshint pump"
9 14 },
  15 + "pre-commit": "gulp-pre-commit",
10 16 "repository": {
11 17 "type": "git",
12 18 "url": "http://git.focasoftware.com/npm/foca-crear-factura.git"
src/js/controller.js
1 1 angular.module('focaCrearFactura').controller('facturaController', [
2 2 '$scope', '$uibModal', '$location', '$filter', 'crearFacturaService', '$timeout',
3 3 'focaModalService', 'crearRemitoService', '$rootScope', 'focaBotoneraLateralService',
4   - '$localStorage',
  4 + '$localStorage', 'APP', 'focaLoginService',
5 5 function (
6 6 $scope, $uibModal, $location, $filter, crearFacturaService, $timeout, focaModalService,
7   - crearRemitoService, $rootScope, focaBotoneraLateralService, $localStorage) {
  7 + crearRemitoService, $rootScope, focaBotoneraLateralService, $localStorage, APP, loginServ) {
8 8  
9 9 config();
10 10  
11 11 function config() {
12   - $scope.tmpCantidad = Number;
13   - $scope.tmpPrecio = Number;
  12 + $scope.tmpCantidad = '0';
14 13 $scope.botonera = crearFacturaService.getBotonera();
  14 + $scope.botoneraProductos = [];
15 15 $scope.isNumber = angular.isNumber;
16 16 $scope.datepickerAbierto = false;
17 17 $scope.show = false;
... ... @@ -47,8 +47,8 @@ angular.module('focaCrearFactura').controller('facturaController', [
47 47 $timeout(function () {
48 48 focaBotoneraLateralService.showSalir(false);
49 49 focaBotoneraLateralService.showPausar(true);
50   - focaBotoneraLateralService.showGuardar(true, $scope.crearFactura);
51   - focaBotoneraLateralService.addCustomButton('Salir', salir);
  50 + focaBotoneraLateralService.showGuardar(true, $scope.seleccionarFormaDePago);
  51 + focaBotoneraLateralService.addCustomButton('Salir', $scope.salir);
52 52 });
53 53  
54 54 init();
... ... @@ -67,25 +67,50 @@ angular.module('focaCrearFactura').controller('facturaController', [
67 67 proveedor: {},
68 68 domicilio: { dom: '' },
69 69 moneda: {},
  70 + formaPago: 1, // Por defecto paga contado
70 71 cotizacion: $scope.cotizacionPorDefecto || {},
71   - articulosFactura: []
  72 + articulosFactura: [],
  73 + despachos: []
72 74 };
73 75  
74 76 $scope.factura.articulosFactura = [];
75 77 $scope.idLista = undefined;
76 78  
77   - crearRemitoService.getNumeroRemito().then(
78   - function (res) {
79   - $scope.puntoVenta = rellenar(res.data.sucursal, 4);
80   - $scope.comprobante = rellenar(res.data.numeroRemito, 8);
81   - },
82   - function (err) {
83   - focaModalService.alert('La terminal no esta configurada correctamente');
84   - console.info(err);
85   - }
86   - );
87   -
88 79 $scope.inicial = angular.copy($scope.factura);
  80 +
  81 + getNumeroFactura('B');
  82 +
  83 + if (APP === 'facturador') {
  84 + crearFacturaService
  85 + .getVendedorPlayaById(loginServ.getLoginData().vendedorPlaya)
  86 + .then(function (res) {
  87 +
  88 + validarPlanillaVendedor(res.data)
  89 + .then(function () {
  90 +
  91 + $scope.$broadcast('addCabecera', {
  92 + label: 'Vendedor:',
  93 + valor: $filter('rellenarDigitos')(res.data.CodVen, 3) +
  94 + ' - ' +
  95 + res.data.NomVen
  96 + });
  97 + $scope.$broadcast('addCabecera', {
  98 + label: 'Planilla:',
  99 + valor: res.data.NplVen
  100 + });
  101 +
  102 + $scope.factura.vendedor = res.data;
  103 + $scope.inicial.vendedor = res.data;
  104 +
  105 + getProductosByPlanilla(res.data.NplVen);
  106 + })
  107 + .catch(function (err) {
  108 + console.log(err);
  109 + focaModalService.alert('Ocurrió un error al intentar recuperar' +
  110 + 'el vendedor logeado');
  111 + });
  112 + });
  113 + }
89 114 }
90 115  
91 116 $scope.$watch('factura', function (newValue) {
... ... @@ -95,17 +120,52 @@ angular.module('focaCrearFactura').controller('facturaController', [
95 120 });
96 121 }, true);
97 122  
98   - $scope.crearFactura = function () {
  123 + $scope.seleccionarFormaDePago = function () {
99 124  
100 125 if (!validarGuardar()) return;
101 126  
  127 + if ($scope.factura.formaPago === 2) {
  128 + $scope.crearFactura();
  129 + return;
  130 + }
  131 +
  132 + var modalInstance = $uibModal.open(
  133 + {
  134 + templateUrl: 'modal-forma-pago.html',
  135 + controller: 'focaModalFormaPagoController',
  136 + resolve: {
  137 + parametros: function () {
  138 + return {
  139 + importe: $scope.getTotal()
  140 + };
  141 + },
  142 + },
  143 + size: 'lg',
  144 + }
  145 + );
  146 + modalInstance.result
  147 + .then(function (data) {
  148 +
  149 + if (data.tipo === 'tarjeta') {
  150 + $scope.factura.formaPago = 4;
  151 + } else {
  152 + $scope.factura.formaPago = 1;
  153 + }
  154 +
  155 + $scope.crearFactura(data);
  156 + })
  157 + .catch(function (e) { console.error(e); });
  158 + };
  159 +
  160 + $scope.crearFactura = function (formaPago) {
  161 +
102 162 var save = {
103 163 factura: {
104 164  
105 165 BONIF: 0,
106   - CLI: $scope.factura.cliente.cod,
107   - CUI: $scope.factura.cliente.cuit,
108   - CTA: $scope.factura.cliente.cod,
  166 + CLI: $scope.factura.cliente.COD,
  167 + CUI: $scope.factura.cliente.CUIT,
  168 + CTA: $scope.factura.cliente.COD,
109 169 DC1: '',
110 170 DC2: '',
111 171 DE1: '',
... ... @@ -114,24 +174,24 @@ angular.module('focaCrearFactura').controller('facturaController', [
114 174 DTO: 0,
115 175 FEC: $filter('date')($scope.now, 'yyyy-MM-dd HH:mm:ss'),
116 176 FEC_ANT: '19000101',
117   - FPA: 2,
  177 + FPA: $scope.factura.formaPago,
118 178 IDEXCEPCION: 0,
119   - IDLP: $scope.factura.cliente.mod.trim() || 0,
  179 + IDLP: $scope.factura.cliente.MOD.trim() || 0,
120 180 IDPERSONERIA: 0,
121   - IMI: 0, // TODO
122   - IMI2: 0, // TODO
123   - IMI3: 0, // TODO
  181 + IMI: getImporte('IMI'),
  182 + IMI2: getImporte('IMI2'),
  183 + IMI3: getImporte('IMI3'),
124 184 IMP_LEY: 0,
125   - IRI: 0, // TODO
  185 + IRI: getImporte('IVA'),
126 186 IRS: 0,
127 187 LEG: '',
128 188 LUG: $scope.factura.vendedor.LugVen,
129 189 MK_M: 0,
130   - NEE: 0, // TODO
131   - NET: 0, // TODO
  190 + NEE: getImporte('NEX'),
  191 + NET: getImporte('NET'),
132 192 NFI: '',
133 193 NNP: 0,
134   - NOM: $scope.factura.cliente.nom,
  194 + NOM: $scope.factura.cliente.NOM,
135 195 OPE: $scope.factura.vendedor.CodVen,
136 196 PAG: $scope.getTotal(),
137 197 PER: 0,
... ... @@ -143,19 +203,21 @@ angular.module('focaCrearFactura').controller('facturaController', [
143 203 TCA: 1,
144 204 TCO: 'FT',
145 205 TFI: '',
146   - TIP: $scope.factura.cliente.tipoFactura,
147   - TIV: 0, // TODO
  206 + TIP: $scope.factura.cliente.TIP,
  207 + TIV: $scope.factura.cliente.IVA,
148 208 TOT: $scope.getTotal(),
149   - TUR: 0, // TODO
  209 + TUR: $scope.factura.vendedor.TurVen,
150 210 VEN: $scope.factura.vendedor.CodVen,
151 211 VTO_CLI: '',
152   - ZON: 1, // TODO
  212 + ZON: 1, // TODO: ZON DE APAREMP
153 213 OBSERVACIONES: $scope.factura.observaciones
154 214 },
155   - cuerpo: $scope.articulosFiltro()
  215 + cuerpo: $scope.articulosFiltro(),
  216 + despachos: $scope.factura.despachos,
  217 + formaPago: formaPago
156 218 };
157 219  
158   - crearFacturaService.guardarFactura(save).then(function(res) {
  220 + crearFacturaService.guardarFactura(save).then(function () {
159 221  
160 222 focaBotoneraLateralService.endGuardar(true);
161 223  
... ... @@ -163,9 +225,9 @@ angular.module('focaCrearFactura').controller('facturaController', [
163 225  
164 226 config();
165 227  
166   - }).catch(function(err) {
  228 + }).catch(function (err) {
167 229 focaModalService.alert('Hubo un error al guardar la factura');
168   - console.log(err);
  230 + console.error(err);
169 231 });
170 232  
171 233 };
... ... @@ -178,22 +240,56 @@ angular.module('focaCrearFactura').controller('facturaController', [
178 240 templateUrl: 'foca-busqueda-cliente-modal.html',
179 241 controller: 'focaBusquedaClienteModalController',
180 242 resolve: {
181   - vendedor: function () { return null; },
182   - cobrador: function () { return null; }
  243 + parametros: function () {
  244 + return {
  245 + vendedor: function () { return null; },
  246 + cobrador: function () { return null; }
  247 + };
  248 + }
183 249 },
184 250 size: 'lg'
185 251 }
186 252 );
187 253 modalInstance.result.then(
188 254 function (cliente) {
189   - $scope.factura.cliente = cliente;
  255 + var modalInstance = $uibModal.open(
  256 + {
  257 + templateUrl: 'modal-estado-cuenta.html',
  258 + controller: 'focaModalEstadoCuentaController',
  259 + size: 'lg',
  260 + resolve: {
  261 + parametros: function () {
  262 + return {
  263 + idCliente: cliente.COD,
  264 + nombreCliente: cliente.NOM
  265 + };
  266 + },
  267 + }
  268 + }
  269 + );
  270 + modalInstance.result
  271 + .then(function (data) {
190 272  
191   - $scope.$broadcast('addCabecera', {
192   - label: 'Cliente:',
193   - valor: $filter('rellenarDigitos')(cliente.cod, 3) + ' - ' + cliente.nom
194   - });
  273 + $scope.factura.formaPago = data.formaDePago;
  274 + $scope.factura.cliente = cliente;
  275 +
  276 + getNumeroFactura(cliente.TIP);
  277 +
  278 + $scope.$broadcast('addCabecera', {
  279 + label: 'Cliente:',
  280 + valor: $filter('rellenarDigitos')(cliente.COD, 3) +
  281 + ' - ' + cliente.NOM
  282 + });
195 283  
196   - $filter('filter')($scope.botonera, { label: 'Cliente' })[0].checked = true;
  284 + $filter('filter')($scope.botonera,
  285 + { label: 'Cliente' })[0].checked = true;
  286 +
  287 + $scope.$broadcast('addCabecera', {
  288 + label: 'Forma de pago: ',
  289 + valor: data.tipo
  290 + });
  291 + })
  292 + .catch($scope.seleccionarCliente);
197 293  
198 294 }, function () {
199 295 }
... ... @@ -201,7 +297,7 @@ angular.module('focaCrearFactura').controller('facturaController', [
201 297  
202 298 };
203 299  
204   - $scope.seleccionarVendedor = function() {
  300 + $scope.seleccionarVendedor = function () {
205 301 var parametrosModal = {
206 302 titulo: 'Búsqueda vendedores',
207 303 query: '/vendedor-playa',
... ... @@ -225,9 +321,9 @@ angular.module('focaCrearFactura').controller('facturaController', [
225 321 function (vendedor) {
226 322  
227 323 indicarPassword(vendedor)
228   - .then(function() {
  324 + .then(function () {
229 325 validarPlanillaVendedor(vendedor)
230   - .then(function() {
  326 + .then(function () {
231 327  
232 328 $filter('filter')($scope.botonera, {
233 329 label: 'Vendedor'
... ... @@ -236,8 +332,12 @@ angular.module('focaCrearFactura').controller('facturaController', [
236 332 $scope.$broadcast('addCabecera', {
237 333 label: 'Vendedor:',
238 334 valor: $filter('rellenarDigitos')(vendedor.CodVen, 3) +
239   - ' - ' +
240   - vendedor.NomVen
  335 + ' - ' +
  336 + vendedor.NomVen
  337 + });
  338 + $scope.$broadcast('addCabecera', {
  339 + label: 'Planilla:',
  340 + valor: vendedor.NplVen
241 341 });
242 342  
243 343 $scope.factura.vendedor = vendedor;
... ... @@ -246,8 +346,8 @@ angular.module('focaCrearFactura').controller('facturaController', [
246 346 })
247 347 .catch($scope.seleccionarVendedor);
248 348 })
249   - .catch(function(err) {
250   - console.log(err)
  349 + .catch(function (err) {
  350 + console.error(err);
251 351 });
252 352  
253 353 }, function () { }
... ... @@ -282,7 +382,7 @@ angular.module('focaCrearFactura').controller('facturaController', [
282 382 crearRemitoService.getCotizacionByIdMoneda(1)
283 383 .then(function (res) {
284 384  
285   - cotizacionPArgentino = res.data[0].cotizaciones[0];
  385 + var cotizacionPArgentino = res.data[0].cotizaciones[0];
286 386 cotizacionPArgentino.moneda = moneda;
287 387  
288 388 actualizarCabeceraMoneda(cotizacionPArgentino);
... ... @@ -333,9 +433,10 @@ angular.module('focaCrearFactura').controller('facturaController', [
333 433 });
334 434 };
335 435  
336   -
337 436 $scope.articulosFiltro = function () {
338   - return $scope.factura.articulosFactura;
  437 + return $scope.factura.articulosFactura.filter(function (articulo) {
  438 + return !articulo.desactivado;
  439 + });
339 440 };
340 441  
341 442 $scope.getTotal = function () {
... ... @@ -349,61 +450,263 @@ angular.module('focaCrearFactura').controller('facturaController', [
349 450 return parseFloat(total.toFixed(2));
350 451 };
351 452  
  453 + $scope.quitarDespacho = function (articulo, index) {
  454 +
  455 + if (articulo.SUR === 0) {
  456 + articulo.desactivado = true;
  457 + return;
  458 + }
  459 +
  460 + crearFacturaService
  461 + .setearDespachoDesocupado({
  462 + surtidor: $scope.factura.despachos[index].SUR,
  463 + producto: $scope.factura.despachos[index].PRO,
  464 + carga: $scope.factura.despachos[index].CAR,
  465 + planilla: $scope.factura.despachos[index].PLA
  466 + })
  467 + .then(function () {
  468 + articulo.desactivado = true;
  469 + $scope.factura.despachos.splice(index, 1);
  470 + })
  471 + .catch(function () {
  472 + focaModalService.alert('Hubo un error al desasociar este despacho');
  473 + });
  474 + };
  475 +
  476 + //Recibe aviso si el teclado está en uso
  477 + $rootScope.$on('usarTeclado', function (event, data) {
  478 + if (data) {
  479 + $scope.mostrarTeclado = true;
  480 + return;
  481 + }
  482 + $scope.mostrarTeclado = false;
  483 + });
  484 +
  485 + $scope.selectFocus = function ($event) {
  486 + // Si el teclado esta en uso no selecciona el valor
  487 + if ($scope.mostrarTeclado) {
  488 + return;
  489 + }
  490 + $event.target.select();
  491 + };
  492 +
  493 +
352 494 function getProductosByPlanilla(numeroPlanilla) {
353 495  
354   - crearFacturaService.getProductosByPlanilla(numeroPlanilla).then(function(res) {
  496 + crearFacturaService.getProductosByPlanilla(numeroPlanilla).then(function (res) {
355 497  
356   - res.data.forEach(function (producto) {
  498 + if (!res.data.length) {
357 499  
358   - $scope.botonera.push({
  500 + focaModalService.alert('No hay despachos disponibles por el momento');
  501 + return;
  502 + }
  503 +
  504 + $scope.botoneraProductos.length = 0;
  505 + $scope.topDespachos = res.data[0][0].CID;
  506 +
  507 + res.data.slice(1, res.data.length).forEach(function (producto) {
  508 +
  509 + $scope.botoneraProductos.push({
359 510 label: producto.DetArt,
360   - image: 'productos.png'
  511 + image: producto.nombreImagen,
  512 + imageDefault: 'productoDefault.png'
361 513 });
362 514  
363   -
364 515 crearFuncionesProductos(producto);
  516 + });
365 517  
  518 + $scope.botonera.push({
  519 + label: 'Ultimos despachos',
  520 + image: 'ultimos-despachos.png',
  521 + imageDefault: 'productoDefault.png'
366 522 });
367 523 });
368 524 }
369 525  
  526 + $scope.seleccionarBusquedaProductos = function () {
  527 +
  528 + if (angular.equals({}, $scope.factura.vendedor)) {
  529 +
  530 + focaModalService.alert('Seleccione Vendedor');
  531 + return false;
  532 + }
  533 +
  534 + var modalInstance = $uibModal.open(
  535 + {
  536 + ariaLabelledBy: 'Busqueda de Productos',
  537 + templateUrl: 'modal-busqueda-productos.html',
  538 + controller: 'modalBusquedaProductosCtrl',
  539 + resolve: {
  540 + parametroProducto: {
  541 + idLista: null,
  542 + cotizacion: $scope.factura.cotizacion.VENDEDOR,
  543 + simbolo: $scope.factura.cotizacion.moneda.SIMBOLO,
  544 + buscarTodos: true
  545 + }
  546 + },
  547 + size: 'lg'
  548 + }
  549 + );
  550 +
  551 + modalInstance.result
  552 + .then(function (producto) {
  553 +
  554 + var articulo = {
  555 + TIP: $scope.factura.cliente.TIP,
  556 + TCO: 'FT',
  557 + SUC: parseInt($scope.puntoVenta),
  558 + ORD: $scope.articulosFiltro().length + 1,
  559 + SEC: producto.sector,
  560 + ART: producto.codigo,
  561 + RUB: producto.CodRub,
  562 + DES: producto.descripcionLarga,
  563 + PUN: producto.precio,
  564 + IVA: producto.IMPIVA,
  565 + NET: producto.IvaCO !== 0 ? parseFloat(producto.neto) : 0,
  566 + NEX: producto.IvaCO === 0 ? parseFloat(producto.neto) : 0,
  567 + IMI: producto.ImpInt,
  568 + IMI2: producto.ImpInt2,
  569 + IMI3: producto.ImpInt3,
  570 + PUT: producto.precio,
  571 + SUR: 0,
  572 + PLA: $scope.factura.vendedor.NplVen,
  573 + LUG: $scope.factura.vendedor.LugVen,
  574 + LEG: $scope.factura.vendedor.CodVen,
  575 + TUR: $scope.factura.vendedor.TurVen,
  576 + ORDEN_PRECOMPRA: '',
  577 + ESC: producto.tipoFactura === 'L' ? 1 : 0,
  578 + CMF: 0,
  579 + PTA: 0,
  580 + IVS: 0,
  581 + TIVA: 0,
  582 + CON: 0,
  583 + SINO: '',
  584 + ORD_TRA: 0,
  585 + IMP_DESP: 0,
  586 + PCD: 0,
  587 + RTO: '',
  588 + };
  589 +
  590 + $scope.factura.articulosFactura.push(articulo);
  591 + $scope.cambioEdit(articulo, 'cantidad');
  592 +
  593 + })
  594 + .catch(function (e) { console.error(e); });
  595 + };
  596 +
  597 + $scope.seleccionarUltimosDespachos = function () {
  598 +
  599 + if (angular.equals($scope.factura.cliente, {})) {
  600 + focaModalService.alert('Seleccione cliente');
  601 + return;
  602 + }
  603 +
  604 + var modalInstance = $uibModal.open(
  605 + {
  606 + templateUrl: 'modal-ultimos-despachos.html',
  607 + controller: 'ultimosDespachosController',
  608 + resolve: {
  609 + parametros: function () {
  610 + return {
  611 + planilla: $scope.factura.vendedor.NplVen,
  612 + };
  613 + }
  614 + },
  615 + size: 'md'
  616 + }
  617 + );
  618 +
  619 + modalInstance.result.then(function (producto) {
  620 +
  621 + var articulo = {
  622 + TIP: $scope.factura.cliente.TIP,
  623 + TCO: 'FT',
  624 + SUC: parseInt($scope.puntoVenta),
  625 + ORD: $scope.articulosFiltro().length + 1,
  626 + SEC: producto.despachos[0].SEC,
  627 + ART: producto.despachos[0].PRO,
  628 + RUB: producto.CodRub,
  629 + DES: producto.DetArt,
  630 + CAN: producto.despachos[0].LTS,
  631 + PUN: producto.PreVen,
  632 + IVA: producto.IMPIVA,
  633 + NET: producto.IvaCO !== 0 ? producto.PreNet : 0,
  634 + NEX: producto.IvaCO === 0 ? producto.PreNet : 0,
  635 + IMI: producto.ImpInt,
  636 + IMI2: producto.ImpInt2,
  637 + IMI3: producto.ImpInt3,
  638 + PUT: producto.PreVen,
  639 + SUR: producto.despachos[0].SUR,
  640 + PLA: producto.despachos[0].PLA,
  641 + LUG: producto.despachos[0].LUG,
  642 + LEG: $scope.factura.vendedor.CodVen,
  643 + TUR: $scope.factura.vendedor.TurVen,
  644 + ORDEN_PRECOMPRA: '',
  645 + ESC: producto.tipoFactura === 'L' ? 1 : 0,
  646 + CMF: 0,
  647 + PTA: 0,
  648 + IVS: 0,
  649 + TIVA: 21, // TODO traer POR de la tabla ACODIVA where ID = IvaCO
  650 + CON: 0,
  651 + SINO: '',
  652 + ORD_TRA: 0,
  653 + IMP_DESP: 0,
  654 + PCD: 0,
  655 + RTO: '',
  656 + };
  657 +
  658 + crearFacturaService.setearDespachoOcupado({
  659 + surtidor: producto.despachos[0].SUR,
  660 + producto: producto.despachos[0].PRO,
  661 + carga: producto.despachos[0].CAR
  662 + })
  663 + .then(function () {
  664 + $scope.factura.articulosFactura.push(articulo);
  665 + $scope.factura.despachos.push(producto.despachos[0]);
  666 + })
  667 + .catch(function (err) {
  668 +
  669 + console.error(err);
  670 + focaModalService.alert('El despacho esta en uso');
  671 + });
  672 +
  673 + })
  674 + .catch(function (err) {
  675 + console.error(err);
  676 + });
  677 +
  678 + };
  679 +
370 680 function crearFuncionesProductos(producto) {
371 681  
372   - $scope[nombreFuncion(producto.DetArt)] = function() {
  682 + $scope[nombreFuncion(producto.DetArt)] = function () {
373 683  
374 684 if (angular.equals($scope.factura.cliente, {})) {
375 685 focaModalService.alert('Seleccione cliente');
376 686 return;
377 687 }
378 688  
379   - var parametrosModal = {
380   - titulo: 'Despachos ' + producto.DetArt,
381   - data: producto.despachos,
382   - columnas: [
383   - {
384   - propiedad: 'FEC',
385   - nombre: 'Fecha',
386   - filtro: {
387   - nombre: 'date',
388   - parametro: 'dd/MM/yyyy HH:mm'
  689 + var modalInstance = $uibModal.open(
  690 + {
  691 + templateUrl: 'modal-combustibles.html',
  692 + controller: 'focaModalCombustiblesController',
  693 + resolve: {
  694 + parametros: function () {
  695 + return {
  696 + despachos: producto.despachos,
  697 + nombreProducto: producto.DetArt,
  698 + topDespachos: $scope.topDespachos
  699 + };
389 700 }
390 701 },
391   - {
392   - propiedad: 'IMP',
393   - nombre: 'Importe'
394   - },
395   - {
396   - propiedad: 'LTS',
397   - nombre: 'Litros'
398   - }
399   - ],
400   - size: 'md'
401   - };
  702 + size: 'md'
  703 + }
  704 + );
402 705  
403   - focaModalService.modal(parametrosModal).then(function(despacho) {
  706 + modalInstance.result.then(function (despacho) {
404 707  
405 708 var articulo = {
406   - TIP: $scope.factura.cliente.tipoFactura,
  709 + TIP: $scope.factura.cliente.TIP,
407 710 TCO: 'FT',
408 711 SUC: parseInt($scope.puntoVenta),
409 712 ORD: $scope.articulosFiltro().length + 1,
... ... @@ -412,38 +715,52 @@ angular.module('focaCrearFactura').controller('facturaController', [
412 715 RUB: producto.CodRub,
413 716 DES: producto.DetArt,
414 717 CAN: despacho.LTS,
415   - PUN: producto.PreVen, // TODO
416   - IVA: producto.IMPIVA, // TODO
417   - NET: 0, // TODO
418   - NEX: 0, // TODO
419   - IMI: producto.ImpInt, // TODO
420   - IMI2: producto.ImpInt2, // TODO
421   - IMI3: producto.ImpInt3, // TODO
422   - PUT: producto.PreNet, // TODO
  718 + PUN: producto.PreVen,
  719 + IVA: producto.IMPIVA,
  720 + NET: producto.IvaCO !== 0 ? producto.PreNet : 0,
  721 + NEX: producto.IvaCO === 0 ? producto.PreNet : 0,
  722 + IMI: producto.ImpInt,
  723 + IMI2: producto.ImpInt2,
  724 + IMI3: producto.ImpInt3,
  725 + PUT: producto.PreVen,
423 726 SUR: despacho.SUR,
424 727 PLA: despacho.PLA,
425 728 LUG: despacho.LUG,
426 729 LEG: $scope.factura.vendedor.CodVen,
427 730 TUR: $scope.factura.vendedor.TurVen,
428 731 ORDEN_PRECOMPRA: '',
429   - ESC: producto.tipoFactura == 'L' ? 1 : 0,
  732 + ESC: producto.tipoFactura === 'L' ? 1 : 0,
430 733 CMF: 0,
431 734 PTA: 0,
432 735 IVS: 0,
433   - TIVA: 0,
  736 + TIVA: 21, // TODO traer POR de la tabla ACODIVA where ID = IvaCO
434 737 CON: 0,
435 738 SINO: '',
436 739 ORD_TRA: 0,
437 740 IMP_DESP: 0,
438 741 PCD: 0,
439   - RTO: ''
  742 + RTO: '',
440 743 };
441 744  
442   - $scope.factura.articulosFactura.push(articulo);
  745 + crearFacturaService.setearDespachoOcupado({
  746 + surtidor: despacho.SUR,
  747 + producto: despacho.PRO,
  748 + carga: despacho.CAR
  749 + })
  750 + .then(function () {
  751 + $scope.factura.articulosFactura.push(articulo);
  752 + $scope.factura.despachos.push(despacho);
  753 + })
  754 + .catch(function (err) {
  755 +
  756 + console.error(err);
  757 + focaModalService.alert('El despacho esta en uso');
  758 + });
  759 +
443 760 })
444   - .catch(function (err) {
445   - console.log(err)
446   - });
  761 + .catch(function (err) {
  762 + console.error(err);
  763 + });
447 764  
448 765 };
449 766 }
... ... @@ -451,7 +768,7 @@ angular.module('focaCrearFactura').controller('facturaController', [
451 768 function nombreFuncion(string) {
452 769 var texto = 'seleccionar';
453 770 var arr = string.split(' ');
454   - arr.forEach(function(palabra) {
  771 + arr.forEach(function (palabra) {
455 772 palabra = palabra.charAt(0).toUpperCase() + palabra.slice(1);
456 773 texto += palabra;
457 774 });
... ... @@ -460,48 +777,56 @@ angular.module('focaCrearFactura').controller('facturaController', [
460 777  
461 778 function indicarPassword(vendedor) {
462 779  
463   - return new Promise(function(resolve, reject) {
  780 + return new Promise(function (resolve, reject) {
464 781  
465   - focaModalService
466   - .prompt({
467   - titulo: 'Indique Contraseña',
468   - value: ''
469   - })
470   - .then(function (contraseña) {
  782 + function openPrompt() {
  783 + return focaModalService
  784 + .prompt({
  785 + titulo: 'Indique Contraseña',
  786 + value: '',
  787 + tipo: 'password'
  788 + })
  789 + .then(function (contraseña) {
471 790  
472   - if (contraseña != vendedor.ClaVen.trim()) {
  791 + if (contraseña !== vendedor.ClaVen.trim()) {
473 792  
474   - focaModalService.alert('Clave incorrecta').then(function() {
475   - indicarPassword(vendedor);
476   - });
477   - } else {
478   - resolve();
479   - }
480   - })
481   - .catch(reject);
  793 + focaModalService.alert('Clave incorrecta').then(function () {
  794 + openPrompt(vendedor);
  795 + });
  796 + } else {
  797 + resolve();
  798 + }
  799 + })
  800 + .catch(reject);
  801 + }
  802 +
  803 + openPrompt();
482 804 });
483 805 }
484 806  
485 807 function validarPlanillaVendedor(vendedor) {
486 808  
487   - return new Promise(function(resolve, reject) {
  809 + return new Promise(function (resolve, reject) {
488 810  
489 811 crearFacturaService
490   - .validarPlanillaVendedor(vendedor.CodVen.trim())
491   - .then(function (res) {
  812 + .validarPlanillaVendedor(vendedor.CodVen.toString().trim())
  813 + .then(function (res) {
492 814  
493   - if (!res.data.length) {
  815 + if (!res.data.length) {
494 816  
495   - focaModalService
496   - .alert('No se encontró planilla abierta para el vendedor')
497   - .then(reject);
  817 + focaModalService
  818 + .alert('No se encontró planilla abierta para el vendedor')
  819 + .then(reject);
498 820  
499   - } else {
500   - resolve();
501   - }
  821 + } else {
  822 + resolve();
  823 + }
502 824  
503   - })
504   - .catch(reject);
  825 + })
  826 + .catch(function (err) {
  827 + console.log(err);
  828 + reject();
  829 + });
505 830 });
506 831 }
507 832  
... ... @@ -513,7 +838,7 @@ angular.module('focaCrearFactura').controller('facturaController', [
513 838 return relleno;
514 839 }
515 840  
516   - function salir() {
  841 + $scope.salir = function () {
517 842 var confirmacion = false;
518 843  
519 844 if (!angular.equals($scope.factura, $scope.inicial)) {
... ... @@ -531,7 +856,7 @@ angular.module('focaCrearFactura').controller('facturaController', [
531 856 } else {
532 857 $location.path('/');
533 858 }
534   - }
  859 + };
535 860  
536 861 function setearFactura(factura) {
537 862  
... ... @@ -557,14 +882,14 @@ angular.module('focaCrearFactura').controller('facturaController', [
557 882 }
558 883  
559 884 if (factura.cotizacion && factura.cotizacion.moneda) {
560   - $filter('filter')($scope.botonera, { label: 'Moneda' })[0].checked = true;
  885 + // $filter('filter')($scope.botonera, { label: 'Moneda' })[0].checked = true;
561 886 }
562 887  
563   - if (factura.cliente && factura.cliente.cod) {
  888 + if (factura.cliente && factura.cliente.COD) {
564 889 $scope.cabeceras.push({
565 890 label: 'Cliente:',
566   - valor: $filter('rellenarDigitos')(factura.cliente.cod, 3) + ' - ' +
567   - factura.cliente.nom
  891 + valor: $filter('rellenarDigitos')(factura.cliente.COD, 3) + ' - ' +
  892 + factura.cliente.NOM
568 893 });
569 894  
570 895 $filter('filter')($scope.botonera, { label: 'Cliente' })[0].checked = true;
... ... @@ -594,6 +919,35 @@ angular.module('focaCrearFactura').controller('facturaController', [
594 919 }
595 920 }
596 921  
  922 + $scope.cambioEdit = function (articulo, propiedad) {
  923 + if (propiedad === 'cantidad' && articulo.SUR === 0) {
  924 + articulo.editCantidad = true;
  925 + }
  926 + };
  927 +
  928 + $scope.editarArticulo = function (key, articulo, tmpCantidad) {
  929 + if (key === 13) {
  930 + if (!articulo.cantidad && tmpCantidad.length === 0) {
  931 + focaModalService.alert('Los valores deben ser al menos 1');
  932 + return;
  933 + } else if (tmpCantidad === '0') {
  934 + focaModalService.alert('Esta ingresando un producto con valor 0');
  935 + return;
  936 + } else if (parseInt(tmpCantidad) < 0) {
  937 + focaModalService.alert('Los valores no pueden ser negativos');
  938 + return;
  939 + }
  940 + articulo.CAN = parseInt(tmpCantidad);
  941 + $scope.getTotal();
  942 + articulo.editCantidad = false;
  943 + }
  944 + };
  945 +
  946 + $scope.cancelarEditar = function (articulo) {
  947 + $scope.tmpCantidad = articulo.CAN;
  948 + articulo.editCantidad = false;
  949 + };
  950 +
597 951 function actualizarCabeceraMoneda(cotizacion) {
598 952  
599 953 $scope.factura.articulosFactura.forEach(function (art) {
... ... @@ -629,7 +983,7 @@ angular.module(&#39;focaCrearFactura&#39;).controller(&#39;facturaController&#39;, [
629 983 return false;
630 984 } else if (angular.equals({}, $scope.factura.cliente)) {
631 985  
632   - focaModalService.alert('Seleccione Cliente')
  986 + focaModalService.alert('Seleccione Cliente');
633 987 return false;
634 988 } else if (!$scope.articulosFiltro().length) {
635 989  
... ... @@ -639,5 +993,35 @@ angular.module(&#39;focaCrearFactura&#39;).controller(&#39;facturaController&#39;, [
639 993  
640 994 return true;
641 995 }
  996 +
  997 + //recibo la propiedad por la cual quiero obtener el valor
  998 + function getImporte(propiedad) {
  999 + var importe = 0;
  1000 +
  1001 + $scope.articulosFiltro().forEach(function (articulo) {
  1002 +
  1003 + if (articulo[propiedad]) {
  1004 + importe += articulo[propiedad] * articulo.CAN;
  1005 + }
  1006 + return;
  1007 +
  1008 + });
  1009 +
  1010 + return importe;
  1011 + }
  1012 +
  1013 + function getNumeroFactura(tipoFactura) {
  1014 +
  1015 + crearRemitoService.getNumeroRemito(tipoFactura).then(
  1016 + function (res) {
  1017 + $scope.puntoVenta = rellenar(res.data.sucursal, 4);
  1018 + $scope.comprobante = rellenar(res.data.numeroRemito, 8);
  1019 + },
  1020 + function (err) {
  1021 + focaModalService.alert('La terminal no esta configurada correctamente');
  1022 + console.info(err);
  1023 + }
  1024 + );
  1025 + }
642 1026 }
643 1027 ]);
src/js/controllerCombustibles.js
... ... @@ -0,0 +1,83 @@
  1 +angular.module('focaCrearFactura')
  2 + .controller('focaModalCombustiblesController', [
  3 + '$filter',
  4 + '$scope',
  5 + '$uibModalInstance',
  6 + 'parametros',
  7 + function ($filter, $scope, $uibModalInstance, parametros) {
  8 +
  9 + $scope.mangueras = [];
  10 + $scope.colorTexto = { color: 'black' };
  11 + var productosByMangera = [];
  12 +
  13 + config();
  14 +
  15 + function config() {
  16 +
  17 + $scope.nombreProducto = parametros.nombreProducto;
  18 + setColorNombreProducto();
  19 + parametros.despachos.forEach(function (despacho) {
  20 +
  21 + var findCsu = productosByMangera.filter(function (csu) {
  22 + return csu.csu === despacho.CSU.trim();
  23 + })[0];
  24 +
  25 + if (!findCsu) {
  26 +
  27 + var mangera = {
  28 + csu: despacho.CSU.trim(),
  29 + despachos: [despacho],
  30 + show: true
  31 + };
  32 +
  33 + productosByMangera.unshift(mangera);
  34 + } else {
  35 + findCsu.despachos.push(despacho);
  36 + }
  37 + });
  38 + }
  39 +
  40 + $scope.mangueras = productosByMangera;
  41 +
  42 + $scope.mangueras.forEach(function (producto) {
  43 +
  44 + producto.despachos.splice(parametros.topDespachos, producto.despachos.length);
  45 +
  46 + producto.despachos.sort(function (a, b) {
  47 + return a.FEC - b.FEC;
  48 + });
  49 + });
  50 +
  51 +
  52 + $scope.aceptar = function (despacho) {
  53 + $uibModalInstance.close(despacho);
  54 + };
  55 +
  56 + $scope.cancel = function () {
  57 + $uibModalInstance.dismiss('cancel');
  58 + };
  59 +
  60 + //TODO: Cambiar switch case con los casos de nombres de productos axion
  61 + function setColorNombreProducto() {
  62 +
  63 + // Diesel #FF852E | Euro+Diesel #6C389A | Premium #00A857 | Super #175AA5
  64 + switch ($scope.nombreProducto) {
  65 + case 'NAFTA SUPER XXI':
  66 + $scope.colorTexto = { color: '#FF852E' };
  67 + break;
  68 + case 'GO-INFINIA DIESEL':
  69 + $scope.colorTexto = { color: '#6C389A' };
  70 + break;
  71 + case 'ULTRADIESEL XXI - RED':
  72 + $scope.colorTexto = { color: '#00A857' };
  73 + break;
  74 + case 'NAFTA INFINIA':
  75 + $scope.colorTexto = { color: '#175AA5' };
  76 + break;
  77 + default:
  78 + $scope.colorTexto = { color: 'black' };
  79 + break;
  80 + }
  81 + }
  82 + }
  83 + ]);
src/js/controllerEstadoCuenta.js
... ... @@ -0,0 +1,34 @@
  1 +angular.module('focaCrearFactura')
  2 + .controller('focaModalEstadoCuentaController', [
  3 + '$scope', '$uibModalInstance', 'crearFacturaService', 'parametros',
  4 + function ($scope, $uibModalInstance, crearFacturaService, parametros) {
  5 +
  6 + $scope.estadoCuenta = {
  7 + autorizado: 0.0,
  8 + extracciones: 0.0,
  9 + saldo: 0.0,
  10 + situacion: false,
  11 + facturasVencidas: 0.0
  12 + };
  13 +
  14 + $scope.cliente = parametros;
  15 +
  16 + init();
  17 +
  18 + function init() {
  19 + crearFacturaService.getResumenCuenta(parametros.idCliente)
  20 + .then(function (res) {
  21 + $scope.estadoCuenta = res.data;
  22 + })
  23 + .catch(function (e) { console.error(e); });
  24 + }
  25 +
  26 + $scope.elegirTipoDePago = function (tipoDePago) {
  27 + $uibModalInstance.close(tipoDePago);
  28 + };
  29 +
  30 + $scope.cancel = function () {
  31 + $uibModalInstance.dismiss('cancel');
  32 + };
  33 + }
  34 + ]);
src/js/controllerUltimosDespachos.js
... ... @@ -0,0 +1,59 @@
  1 +angular.module('focaCrearFactura')
  2 + .controller('ultimosDespachosController', [
  3 + '$filter',
  4 + '$scope',
  5 + '$uibModalInstance',
  6 + 'crearFacturaService',
  7 + 'parametros',
  8 + function ($filter, $scope, $uibModalInstance, crearFacturaService, parametros) {
  9 +
  10 + config();
  11 +
  12 + function config() {
  13 +
  14 + $scope.productos = [];
  15 +
  16 + crearFacturaService.getUltimosDespachos(parametros.planilla).then(function (res) {
  17 +
  18 + res.data.slice(1, res.data.length).forEach(function (producto) {
  19 +
  20 + producto.mangueras = [];
  21 +
  22 + producto.despachos.forEach(function (despacho) {
  23 +
  24 + var findCsu = producto.mangueras.filter(function (csu) {
  25 + return csu.csu === despacho.CSU.trim();
  26 + })[0];
  27 +
  28 + if (!findCsu) {
  29 +
  30 + var manguera = {
  31 + csu: despacho.CSU.trim(),
  32 + despachos: [despacho],
  33 + show: true
  34 + };
  35 +
  36 + producto.mangueras.unshift(manguera);
  37 + } else {
  38 + findCsu.despachos.push(despacho);
  39 + }
  40 + });
  41 +
  42 + $scope.productos.push(producto);
  43 + });
  44 +
  45 + console.log($scope.productos);
  46 +
  47 + });
  48 + }
  49 +
  50 + $scope.aceptar = function (despacho) {
  51 + $uibModalInstance.close(despacho);
  52 + };
  53 +
  54 + $scope.cancel = function () {
  55 + $uibModalInstance.dismiss('cancel');
  56 + };
  57 +
  58 + }
  59 + ]);
1 1 angular.module('focaCrearFactura')
2   - .service('crearFacturaService', ['$http', 'API_ENDPOINT',
3   - function($http, API_ENDPOINT) {
4   - var route = API_ENDPOINT.URL;
5   - return {
6   - guardarFactura: function (factura) {
7   - return $http.post(route + '/factura/guardar', factura)
8   - },
9   - getParametros: function() {
10   - return $http.get(API_ENDPOINT.URL + '/parametros/factura');
11   - },
12   - validarPlanillaVendedor: function(idVendedor) {
13   - return $http.get(route + '/turnos/validar-planilla/' + idVendedor);
14   - },
15   - getProductosByPlanilla: function (numeroPlanilla) {
16   - return $http.get(route + '/turnos/productos/' + numeroPlanilla);
17   - },
18   - getBotonera: function() {
19   - return [
20   - {
  2 + .service('crearFacturaService', ['$http', 'API_ENDPOINT', 'APP',
  3 + function ($http, API_ENDPOINT, APP) {
  4 + var route = API_ENDPOINT.URL;
  5 + return {
  6 + guardarFactura: function (factura) {
  7 + return $http.post(route + '/factura/guardar', factura);
  8 + },
  9 + getParametros: function () {
  10 + return $http.get(API_ENDPOINT.URL + '/parametros/factura');
  11 + },
  12 + validarPlanillaVendedor: function (idVendedor) {
  13 + return $http.get(route + '/turnos/validar-planilla/' + idVendedor);
  14 + },
  15 + getProductosByPlanilla: function (numeroPlanilla) {
  16 + return $http.get(route + '/turnos/productos/' + numeroPlanilla);
  17 + },
  18 + getUltimosDespachos: function (numeroPlanilla) {
  19 + return $http.get(route + '/turnos/productos/' + numeroPlanilla + '/true');
  20 + },
  21 + setearDespachoOcupado: function (parametros) {
  22 + return $http.post(route + '/turnos/despacho-en-uso', parametros);
  23 + },
  24 + setearDespachoDesocupado: function (parametros) {
  25 + return $http.post(route + '/turnos/depacho-sin-uso', parametros);
  26 + },
  27 + getResumenCuenta: function (idCliente) {
  28 + return $http.get(route + '/cliente/resumen-cuenta/' + idCliente);
  29 + },
  30 + getVendedorPlayaById: function (id) {
  31 + return $http.get(route + '/vendedor-playa/' + id);
  32 + },
  33 + getBotonera: function () {
  34 + var vendedor = {
21 35 label: 'Vendedor',
22 36 image: 'vendedor.png'
23   - },
24   - {
25   - label: 'Cliente',
26   - image: 'cliente.png'
27   - },
28   - {
29   - label: 'Moneda',
30   - image: 'moneda.png'
31   - },
32   - {
33   - label: 'Observaciones',
34   - image: 'botonObservaciones.png'
  37 + };
  38 + // $scope.botoneraProductos.push({
  39 + // label: 'Busqueda Productos',
  40 + // image: 'buscarProductos.png',
  41 + // imageDefault: 'productoDefault.png'
  42 + // });
  43 + var botones = [
  44 + {
  45 + label: 'Cliente',
  46 + image: 'cliente.png'
  47 + },
  48 + {
  49 + label: 'Busqueda Productos',
  50 + image: 'productos.png'
  51 + }
  52 + // {
  53 + // label: 'Moneda',
  54 + // image: 'moneda.png'
  55 + // },
  56 + // {
  57 + // label: 'Observaciones',
  58 + // image: 'botonObservaciones.png'
  59 + // }
  60 + ];
  61 +
  62 + if (APP !== 'facturador') {
  63 + botones.unshift(vendedor);
35 64 }
36   - ];
37   - }
38   - };
39   - }]);
  65 +
  66 + return botones;
  67 + }
  68 + };
  69 + }
  70 + ]);
src/views/factura.html
1 1 <div class="crear-nota-remito foca-crear row">
2   - <foca-cabecera-facturador
  2 + <foca-cabecera-facturador
3 3 titulo="'Factura'"
4 4 numero="puntoVenta + '-' + comprobante"
5 5 fecha="now"
6 6 class="mb-0 col-lg-12"
7 7 busqueda="seleccionarRemito"
8   - ></foca-cabecera-facturador>
9   - <marquee
10   - bgcolor="#FF9900"
11   - behavior="scroll"
12   - direction="left"
13   - ng-bind="factura.observaciones"
14   - ></marquee>
15   - <div class="col-lg-12">
16   - <div class="row mt-4">
17   - <div class="col-12 col-md-10 col-lg-10 border border-light rounded">
18   - <div class="row p-1 botonera-secundaria px-5 py-2">
  8 + fecha-disabled="true"
  9 + ></foca-cabecera-facturador>
  10 + <marquee
  11 + bgcolor="#FF9900"
  12 + behavior="scroll"
  13 + direction="left"
  14 + ng-bind="factura.observaciones"
  15 + ></marquee>
  16 + <div class="col-12 col-lg-10 p-2">
  17 + <div class="row border border-light rounded m-0">
  18 + <div class="col-12 col-sm-12">
  19 + <div class="row p-1 botonera-secundaria px-3 py-2">
19 20 <div class="col-12">
20   - <foca-botonera-facturador botones="botonera" extra="4" class="row"></foca-botonera-facturador>
  21 + <foca-botonera-facturador
  22 + botones="botonera"
  23 + max="botonera.length"
  24 + class="row">
  25 + </foca-botonera-facturador>
  26 + </div>
  27 + </div>
  28 + <div ng-show="botoneraProductos.length > 0" class="row botonera-secundaria pb-3 px-3">
  29 + <div class="col-12">
  30 + <foca-botonera-productos
  31 + botones="botoneraProductos"
  32 + max="1"
  33 + class="row"
  34 + >
  35 + </foca-botonera-productos>
21 36 </div>
22 37 </div>
23 38 <!-- PC -->
... ... @@ -74,9 +89,9 @@
74 89 foca-tipo-input
75 90 min="1"
76 91 foca-focus="articulo.editCantidad"
77   - ng-keypress="editarArticulo($event.keyCode, articulo, tmpCantidad, tmpPrecio);"
  92 + ng-keypress="editarArticulo($event.keyCode, articulo, tmpCantidad);"
78 93 esc-key="cancelarEditar(articulo)"
79   - ng-focus="selectFocus($event); tmpCantidad = articulo.CAN; tmpPrecio = articulo.PUN"
  94 + ng-focus="selectFocus($event); tmpCantidad = articulo.CAN;"
80 95 teclado-virtual
81 96 >
82 97 <i
... ... @@ -87,25 +102,8 @@
87 102 </i>
88 103 </td>
89 104 <td class="col text-right">
90   - <input
91   - ng-show="articulo.editPrecio"
92   - ng-model="tmpPrecio"
93   - class="form-control"
94   - foca-tipo-input
95   - min="1"
96   - step="0.0001"
97   - foca-focus="articulo.editPrecio"
98   - ng-keypress="editarArticulo($event.keyCode, articulo, tmpCantidad, tmpPrecio);"
99   - esc-key="cancelarEditar(articulo)"
100   - ng-focus="selectFocus($event);
101   - tmpCantidad = articulo.CAN;
102   - tmpPrecio = articulo.PUN"
103   - teclado-virtual
104   - >
105 105 <i
106 106 class="selectable"
107   - ng-click="cambioEdit(articulo, 'precio')"
108   - ng-hide="articulo.editPrecio"
109 107 ng-bind="articulo.PUN | number: 4">
110 108 </i>
111 109 </td>
... ... @@ -116,13 +114,13 @@
116 114 <td class="text-center">
117 115 <button
118 116 class="btn btn-outline-light"
119   - ng-click="quitarArticulo(articulo)"
  117 + ng-click="quitarDespacho(articulo, key)"
120 118 >
121 119 <i class="fa fa-trash"></i>
122 120 </button>
123 121 <button
124 122 class="btn btn-outline-light"
125   - ng-click="editarArticulo(13, articulo, tmpCantidad, tmpPrecio);"
  123 + ng-click="editarArticulo(13, articulo, tmpCantidad);"
126 124 ng-show="articulo.editCantidad || articulo.editPrecio"
127 125 >
128 126 <i class="fa fa-save"></i>
... ... @@ -136,37 +134,162 @@
136 134 <strong>Items:</strong>
137 135 <a ng-bind="articulosFiltro().length"></a>
138 136 </td>
139   - <td class="text-right ml-auto table-celda-total no-border-top">
  137 + <td class="text-right ml-auto table-celda-total no-border-top text-white">
140 138 <h3>Total:</h3>
141 139 </td>
142   - <td class="table-celda-total text-right no-border-top" colspan="1">
  140 + <td class="table-celda-total text-right no-border-top text-white " colspan="1">
143 141 <h3>{{getTotal() | currency: factura.cotizacion.moneda.SIMBOLO}}</h3>
144 142 </td>
145   - <td class="text-right no-border-top">
146   - <button
147   - type="button"
148   - class="btn btn-sm"
149   - >
150   - Totales
151   - </button>
152   - </td>
  143 +
153 144 </tr>
154 145 </tfoot>
155 146 </table>
156 147 </div>
  148 + <!-- MOBILE -->
  149 + <div class="row d-sm-none">
  150 + <div class="col p-0 m-2 mb-5">
  151 + <table class="table table-sm table-striped tabla-articulo">
  152 + <thead>
  153 + <tr class="d-flex">
  154 + <th class="">#</th>
  155 + <th class="col px-0">
  156 + <div class="d-flex">
  157 + <div class="col-4 px-1">Código</div>
  158 + <div class="col-8 px-1">Descripción</div>
  159 + </div>
  160 + <div class="d-flex">
  161 + <div class="col-3 px-1">Cantidad</div>
  162 + <div class="col px-1 text-right">P. Uni.</div>
  163 + <div class="col px-1 text-right">Subtotal</div>
  164 + </div>
  165 + </th>
  166 + <th class="text-center tamaño-boton">
  167 + &nbsp;
  168 + </th>
  169 + </tr>
  170 + </thead>
  171 + <tbody>
  172 + <tr
  173 + ng-repeat="(key, articulo) in articulosFiltro()"
  174 + ng-show="show || key == articulosFiltro().length - 1"
  175 + >
  176 + <td class="w-100 d-flex p-0">
  177 + <div class="p-1 m-auto">
  178 + <span ng-bind="key + 1"></span>
  179 + </div>
  180 + <div class="col px-0">
  181 + <div class="d-flex">
  182 + <div class="col-4 px-1">
  183 + <span
  184 + ng-bind="articulo.SEC + '-' + articulo.ART"
  185 + ></span>
  186 + </div>
  187 + <div class="col-8 px-1">
  188 + <span ng-bind="articulo.DES"></span>
  189 + </div>
  190 + </div>
  191 + <div class="d-flex">
  192 + <div class="col-4 px-1">
  193 + <span
  194 + ng-bind="'x' + articulo.CAN"
  195 + ng-hide="articulo.editCantidad"
  196 + ></span>
  197 + <i
  198 + class="fa fa-pencil text-white-50"
  199 + aria-hidden="true"
  200 + ng-hide="articulo.editCantidad"
  201 + ng-click="articulo.editCantidad = true"
  202 + ></i>
  203 + <input
  204 + ng-show="articulo.editCantidad"
  205 + ng-model="tmpCantidad"
  206 + class="form-control"
  207 + foca-tipo-input
  208 + min="1"
  209 + step="0.001"
  210 + foca-focus="articulo.editCantidad"
  211 + ng-keypress="editarArticulo($event.keyCode, articulo, tmpCantidad)"
  212 + ng-focus="selectFocus($event)"
  213 + >
  214 + </div>
  215 + <div class="col px-1 text-right">
  216 + <span ng-bind="articulo.PUN |
  217 + currency: factura.cotizacion.moneda.SIMBOLO : 4"></span>
  218 + ></span>
  219 + </div>
  220 + <div class="col px-1 text-right">
  221 + <span
  222 + ng-bind="(articulo.PUN * articulo.CAN) |
  223 + currency: factura.cotizacion.moneda.SIMBOLO"
  224 + >
  225 + </span>
  226 + </div>
  227 + </div>
  228 + </div>
  229 + <div class="m-auto p-1">
  230 + <button
  231 + class="btn btn-outline-light"
  232 + ng-click="quitarDespacho(articulo, key)"
  233 + >
  234 + <i class="fa fa-trash"></i>
  235 + </button>
  236 + </div>
  237 + </td>
  238 + </tr>
  239 + </tbody>
  240 + <tfoot>
  241 + <!-- TOOGLE EXPANDIR -->
  242 + <tr>
  243 + <td class="col">
  244 + <button
  245 + class="btn btn-outline-light selectable w-100"
  246 + ng-click="show = !show; masMenos()"
  247 + ng-show="articulosFiltro().length > 0"
  248 + >
  249 + <i
  250 + class="fa fa-chevron-down"
  251 + ng-hide="show"
  252 + aria-hidden="true"
  253 + >
  254 + </i>
  255 + <i
  256 + class="fa fa-chevron-up"
  257 + ng-show="show"
  258 + aria-hidden="true">
  259 + </i>
  260 + </button>
  261 + </td>
  262 + </tr>
  263 + <!-- FOOTER -->
  264 + <tr class="d-flex">
  265 + <td class="m-auto no-border-top" colspan="2">
  266 + <strong>Cantidad Items:</strong>
  267 + <a ng-bind="articulosFiltro().length"></a>
  268 + </td>
  269 + <td class="text-right ml-auto table-celda-total no-border-top">
  270 + <h3>Total:</h3>
  271 + </td>
  272 + <td class="table-celda-total text-right no-border-top">
  273 + <h3>{{getTotal() | currency: factura.cotizacion.moneda.SIMBOLO}}</h3>
  274 + </td>
  275 + </tr>
  276 + </tfoot>
  277 + </table>
  278 + </div>
  279 + </div>
157 280 </div>
158 281 </div>
159 282 </div>
160   - <div class="row d-md-none fixed-bottom">
  283 + <div class="row d-md-none fixed-bottom disable-selection">
161 284 <div class="w-100 bg-dark d-flex px-3 acciones-mobile">
162 285 <span class="ml-3 text-muted" ng-click="salir()">Salir</span>
163 286 <span
164 287 class="mr-3 ml-auto"
165 288 ng-class="saveLoading ? 'text-muted' : ''"
166   - ng-click="crearRemito()"
  289 + ng-click="seleccionarFormaDePago()"
167 290 ladda="saveLoading"
168 291 data-style="expand-left"
169   - >Guardar</span>
  292 + >Pago</span>
170 293 </div>
171 294 </div>
172 295 </div>
src/views/modal-combustibles.html
... ... @@ -0,0 +1,86 @@
  1 +<div class="modal-header py-1">
  2 + <div class="row w-100">
  3 + <div class="col-lg-6">
  4 + <h5 class="modal-title my-1"><b>Despachos Disponibles</b></h5>
  5 + </div>
  6 + </div>
  7 +</div>
  8 +<div class="modal-body" id="modal-body">
  9 +
  10 + <div class="row pb-2 border-bottom">
  11 + <div class="col">
  12 + <p ng-style="colorTexto" class="m-1 h6">
  13 + <b>
  14 + <i class="fa fa-circle" aria-hidden="true"></i>&nbsp;&nbsp;{{nombreProducto}}
  15 + </b>
  16 + </p>
  17 + </div>
  18 + </div>
  19 + <div ng-repeat="(key, manguera) in mangueras">
  20 + <div class="row my-2">
  21 + <div class="col">
  22 + <label>
  23 + <img class="w-50" ng-src="./img/surtidor.png" alt="">
  24 + {{manguera.csu}}
  25 + </label>
  26 + <button
  27 + type="button"
  28 + class="btn p-1 text-secondary float-right border"
  29 + ng-click="manguera.show = !manguera.show">
  30 + <i ng-show="manguera.show" class="fa fa-minus px-1"></i>
  31 + <i ng-show="!manguera.show" class="fa fa-plus px-1"></i>
  32 + </button>
  33 + <table class="table table-sm table-striped" ng-show="manguera.show">
  34 + <tbody>
  35 + <tr ng-repeat="(key, despacho) in manguera.despachos">
  36 + <td class="py-2 py-sm-1" ng-bind="despacho.FEC | date:'dd/MM/yyyy hh:MM:ss'"></td>
  37 + <td class="py-2 py-sm-1" ng-bind="despacho.LTS"></td>
  38 + <td class="py-2 py-sm-1" ng-bind="despacho.IMP | currency: '$'"></td>
  39 + <td class="py-2 py-sm-1">
  40 + <button
  41 + type="button"
  42 + class="btn btn-default btn-xs p-1 float-right"
  43 + title="Seleccionar"
  44 + ng-click="aceptar(despacho)"
  45 + ><i class="fa fa-circle-thin" aria-hidden="true"></i>
  46 + </button>
  47 + </td>
  48 + </tr>
  49 + </tbody>
  50 + </table>
  51 + </div>
  52 + </div>
  53 + </div>
  54 +
  55 +</div>
  56 +<div class="modal-footer py-2">
  57 + <nav ng-show="currentPageProveedores.length > 0 && primerBusqueda" class="mr-auto">
  58 + <ul class="pagination pagination-sm mb-0">
  59 + <li class="page-item" ng-class="{'disabled': currentPage == 1}">
  60 + <a class="page-link" href="javascript:void();" ng-click="selectPage(currentPage - 1)">
  61 + <span aria-hidden="true">&laquo;</span>
  62 + <span class="sr-only">Anterior</span>
  63 + </a>
  64 + </li>
  65 + <li
  66 + class="page-item"
  67 + ng-repeat="pagina in paginas"
  68 + ng-class="{'active': pagina == currentPage}"
  69 + >
  70 + <a
  71 + class="page-link"
  72 + href="javascript:void();"
  73 + ng-click="selectPage(pagina)"
  74 + ng-bind="pagina"
  75 + ></a>
  76 + </li>
  77 + <li class="page-item" ng-class="{'disabled': currentPage == lastPage}">
  78 + <a class="page-link" href="javascript:void();" ng-click="selectPage(currentPage + 1)">
  79 + <span aria-hidden="true">&raquo;</span>
  80 + <span class="sr-only">Siguiente</span>
  81 + </a>
  82 + </li>
  83 + </ul>
  84 + </nav>
  85 + <button class="btn btn-sm btn-secondary" type="button" ng-click="cancel()">Cancelar</button>
  86 +</div>
src/views/modal-estado-cuenta.html
... ... @@ -0,0 +1,82 @@
  1 +<div class="modal-header py-1">
  2 + <div class="row w-100">
  3 + <div class="col-lg-6">
  4 + <h5 class="modal-title text-center my-1">Estado cuenta corriente</h5>
  5 + </div>
  6 + </div>
  7 +</div>
  8 +<div class="modal-body" id="modal-body">
  9 + <div class="row m-3">
  10 + <div class="col">
  11 + <!-- <div class="row mb-2">
  12 + <div class="col text-center">
  13 + <p class="m-0">Autorizado</p>
  14 + <p class="h5 m-0" ng-bind="estadoCuenta.autorizado | currency"></p>
  15 + </div>
  16 + </div> -->
  17 + <div class="row mb-2">
  18 + <div class="col text-center">
  19 + <p class="m-0">Cliente</p>
  20 + <label class="h5" ng-bind="cliente.idCliente"></label>
  21 + <label class="h5">&nbsp;- &nbsp;</label>
  22 + <label class="h5" ng-bind="cliente.nombreCliente"></label>
  23 + </div>
  24 + </div>
  25 + <div class="row border-top mb-2">
  26 + <div class="col text-center">
  27 + <p class="m-0">Saldo</p>
  28 + <p class="h5 m-0" ng-bind="estadoCuenta.saldo | currency"></p>
  29 + </div>
  30 + </div>
  31 + <!-- <div class="row border-top">
  32 + <div class="col text-center">
  33 + <p class="m-0">Situacion</p>
  34 + <h4>
  35 + <p
  36 + ng-show="estadoCuenta.situacion"
  37 + class="badge badge-success m-0 px-3">Permitido
  38 + </p>
  39 + <p
  40 + ng-show="!estadoCuenta.situacion"
  41 + class="badge badge-danger m-0 px-3">No permitido
  42 + </p>
  43 + </h4>
  44 + </div>
  45 + </div>
  46 + <div class="row border-top mb-2">
  47 + <div class="col text-center">
  48 + <p class="m-0">Facturas Vencidas</p>
  49 + <p class="h5 m-0" ng-bind="estadoCuenta.facturasVencidas | currency"></p>
  50 + </div>
  51 + </div> -->
  52 + </div>
  53 + </div>
  54 + <div class="row h-25 align-items-center mx-0 botonera-secundaria">
  55 + <div class="col-6 col-sm-4 offset-sm-2">
  56 + <button
  57 + type="button"
  58 + class="btn btn-sm btn-block btn-tarjeta rounded border p-1"
  59 + ng-disabled="!estadoCuenta.situacion"
  60 + ng-click="elegirTipoDePago({tipo: 'Contado', formaDePago: 1})"
  61 + >
  62 + <img ng-src="./img/contado.png" alt="">
  63 + <p class="m-0">Contado</p>
  64 + </button>
  65 + </div>
  66 + <div class="col-6 col-sm-4">
  67 + <button
  68 + type="button"
  69 + class="btn btn-sm btn-block btn-tarjeta rounded border p-1"
  70 + ng-disabled="!estadoCuenta.situacion"
  71 + foca-focus="true"
  72 + ng-click="elegirTipoDePago({tipo: 'Cuenta Corriente', formaDePago: 2})"
  73 + >
  74 + <img ng-src="./img/cuentaCorriente.png" alt="">
  75 + <p class="m-0">Cta. Corriente</p>
  76 + </button>
  77 + </div>
  78 + </div>
  79 +</div>
  80 +<div class="modal-footer py-2">
  81 + <button class="btn btn-sm btn-secondary" type="button" ng-click="cancel()">Cancelar</button>
  82 +</div>
src/views/modal-seleccionar-cliente.html
... ... @@ -0,0 +1,13 @@
  1 +<div class="modal-header py-1">
  2 + <div class="row w-100">
  3 + <div class="col-lg-6">
  4 + <h5 class="modal-title my-1">Seleccione Cliente</h5>
  5 + </div>
  6 + </div>
  7 +</div>
  8 +<div class="modal-body" id="modal-body">
  9 +
  10 +</div>
  11 +<div class="modal-footer py-1">
  12 + <button class="btn btn-sm btn-secondary" type="button" ng-click="cancel()">Cancelar</button>
  13 +</div>
src/views/modal-ultimos-despachos.html
... ... @@ -0,0 +1,85 @@
  1 +<div class="modal-header py-1">
  2 + <div class="row w-100">
  3 + <div class="col-lg-6">
  4 + <h5 class="modal-title my-1"><b>Últimos Despachos</b></h5>
  5 + </div>
  6 + </div>
  7 +</div>
  8 +<div class="modal-body" id="modal-body">
  9 + <div ng-repeat="(key, producto) in productos">
  10 + <div class="row pb-2 border-bottom">
  11 + <div class="col">
  12 + <p class="m-1 h6">
  13 + <b>
  14 + <i class="fa fa-circle" aria-hidden="true"></i>&nbsp;&nbsp;{{producto.DetArt}}
  15 + </b>
  16 + </p>
  17 + </div>
  18 + </div>
  19 + <div class="row my-2" ng-repeat="(key, manguera) in producto.mangueras">
  20 + <div class="col">
  21 + <label>
  22 + <img class="w-50" ng-src="./img/surtidor.png" alt="">
  23 + {{manguera.csu}}
  24 + </label>
  25 + <button
  26 + type="button"
  27 + class="btn p-1 text-secondary float-right border"
  28 + ng-click="manguera.show = !manguera.show">
  29 + <i ng-show="manguera.show" class="fa fa-minus px-1"></i>
  30 + <i ng-show="!manguera.show" class="fa fa-plus px-1"></i>
  31 + </button>
  32 + <table class="table table-sm table-striped" ng-show="manguera.show">
  33 + <tbody>
  34 + <tr ng-repeat="despacho in manguera.despachos">
  35 + <td class="py-2 py-sm-1" ng-bind="despacho.FEC | date:'dd/MM/yyyy hh:MM:ss'"></td>
  36 + <td class="py-2 py-sm-1" ng-bind="despacho.LTS"></td>
  37 + <td class="py-2 py-sm-1" ng-bind="despacho.IMP | currency: '$'"></td>
  38 + <td class="py-2 py-sm-1">
  39 + <button
  40 + type="button"
  41 + class="btn btn-default btn-xs p-1 float-right"
  42 + title="Seleccionar"
  43 + ng-click="aceptar(producto)"
  44 + ><i class="fa fa-circle-thin" aria-hidden="true"></i>
  45 + </button>
  46 + </td>
  47 + </tr>
  48 + </tbody>
  49 + </table>
  50 + </div>
  51 + </div>
  52 + </div>
  53 +
  54 +</div>
  55 +<div class="modal-footer py-2">
  56 + <nav ng-show="currentPageProveedores.length > 0 && primerBusqueda" class="mr-auto">
  57 + <ul class="pagination pagination-sm mb-0">
  58 + <li class="page-item" ng-class="{'disabled': currentPage == 1}">
  59 + <a class="page-link" href="javascript:void();" ng-click="selectPage(currentPage - 1)">
  60 + <span aria-hidden="true">&laquo;</span>
  61 + <span class="sr-only">Anterior</span>
  62 + </a>
  63 + </li>
  64 + <li
  65 + class="page-item"
  66 + ng-repeat="pagina in paginas"
  67 + ng-class="{'active': pagina == currentPage}"
  68 + >
  69 + <a
  70 + class="page-link"
  71 + href="javascript:void();"
  72 + ng-click="selectPage(pagina)"
  73 + ng-bind="pagina"
  74 + ></a>
  75 + </li>
  76 + <li class="page-item" ng-class="{'disabled': currentPage == lastPage}">
  77 + <a class="page-link" href="javascript:void();" ng-click="selectPage(currentPage + 1)">
  78 + <span aria-hidden="true">&raquo;</span>
  79 + <span class="sr-only">Siguiente</span>
  80 + </a>
  81 + </li>
  82 + </ul>
  83 + </nav>
  84 + <button class="btn btn-sm btn-secondary" type="button" ng-click="cancel()">Cancelar</button>
  85 +</div>