angular.module('focaCrearCobranza') .controller('cobranzaController', [ '$scope', '$rootScope', '$timeout', '$uibModal', '$location', 'focaCrearCobranzaService', 'focaModalService', '$cookies', '$filter', 'focaSeguimientoService', 'focaBotoneraLateralService', function($scope, $rootScope, $timeout, $uibModal, $location, focaCrearCobranzaService, focaModalService, $filter, $cookies, focaSeguimientoService, focaBotoneraLateralService) { $scope.botonera = focaCrearCobranzaService.getBotonera(); $scope.datepickerAbierto = false; $scope.cobroDeuda = true; $scope.show = false; $scope.cargando = true; $scope.dateOptions = { maxDate: new Date(), minDate: new Date(2010, 0, 1) }; $scope.cobranza = {}; $scope.fecha = new Date(); $scope.puntoVenta = '0000'; $scope.comprobante = '00000000'; $scope.facturaTabla = []; $scope.cobrosTabla = []; focaCrearCobranzaService.getUsuario($cookies.get('idUsuario')).then(function(data) { $scope.usuario = data.data; }); $timeout(function() { focaBotoneraLateralService.showSalir(true); focaBotoneraLateralService.showPausar(true); focaBotoneraLateralService.showGuardar(true, $scope.crearCobranza); }); $scope.crearCobranza = function() { if(!$scope.cobranza.cliente) { focaModalService.alert('Ingrese Cliente'); return; } if(!$scope.cobranza.cobrador) { focaModalService.alert('Ingrese Cobrador'); return; } if($scope.facturaTabla.length < 1) { focaModalService.alert('Ingrese al menos una factura'); return; } if($scope.getTotalCobrado() + $scope.getTotalDeuda() !== 0) { focaModalService.alert('La diferencia debe ser ' + $scope.cobranza.moneda.SIMBOLO + '0,00'); return; } var cobranza = {}; var cheques = []; var cuerpos = []; //TODO: habilitar edición $scope.editando = false; $scope.saveLoading = true; for (var i = 0; i < $scope.facturaTabla.length; i++) { var cuerpoFactura = { CYV: 'V', TIP: 'C', TCO: 'RC', PVE: $scope.puntoVenta, NCO: $scope.comprobante, LOP: 'L', TIL: $scope.facturaTabla[i].TCO, COM: $scope.facturaTabla[i].numeroFactura + '-' + $scope.rellenar($scope.facturaTabla[i].NCU,2), FEC: $scope.fecha.toISOString().slice(0, 19).replace('T', ' '), IMP: Math.abs($scope.facturaTabla[i].IPA), RES: 0,//caja de tesorería SUBM: 0 }; cuerpos.push(cuerpoFactura); } for (var j = 0; j < $scope.cobrosTabla.length; j++) { var efectivo = $scope.cobrosTabla[j].tipo === 'Efectivo' ? true : false; var cuerpoCobros = { CYV: 'V', TIP: 'C', TCO: 'RC', PVE: $scope.puntoVenta, NCO: $scope.comprobante, LOP: 'P', TIL: 'EF', COM: efectivo ? 'ef(COBRO EN EFECTIVO)' : 'ch(' + $scope.cobrosTabla[j].numero + ')' + $scope.cobrosTabla[j].banco.desbco, FEC: efectivo ? $scope.cobrosTabla[j].fecha .toISOString().slice(0, 19).replace('T', ' ') : $scope.cobrosTabla[j].fechaPresentacion .toISOString().slice(0, 19).replace('T', ' '), IMP: Math.abs($scope.cobrosTabla[j].importe), RES: 0,//caja de tesorería SUBM: 0 }; cuerpos.push(cuerpoCobros); if(!efectivo) { var cheque = { BCO: $scope.cobrosTabla[j].banco.ID, NUM: $scope.comprobante, FEP: $scope.cobrosTabla[j].fechaPresentacion .toISOString().slice(0, 19).replace('T', ' '), FEE: $scope.cobrosTabla[j].fechaEmision .toISOString().slice(0, 19).replace('T', ' '), LUG: $scope.cobrosTabla[j].localidad.NOMBRE, IMP: $scope.cobrosTabla[j].importe, LIB: $scope.cobrosTabla[j].librador, EST: 'C',//'D' depositado, 'E' entregado, 'C' en cartera PCI: $scope.cobrosTabla[j].provincia.ID, LPLA: 0, PLA: 0, VEN: $scope.usuario.CodVen,//Id vendedor CCLIE: $scope.cobranza.cliente.COD,//Id cliente REN: 0, PVEC: $scope.puntoVenta, NCOC: $scope.comprobante, OBSE: $scope.cobrosTabla[j].observaciones, LUV: 0, ORI: 've', FER: '', BIMP: 0, COMP: 'C ' +'RC ' + $scope.puntoVenta + '-' + $scope.comprobante, VAL_E: '',//Cuando egresa por ingresos y egresos en el numero de egreso VAL_I: '',//Cuando Ingresa por ingresos y egresos en el numero ingreso REC_CAJ: 'D', TIPO_C: 0,//?? SALDO_CAJ: 'S', FECHA_INGRESO: $scope.fecha .toISOString().slice(0, 19).replace('T', ' '), Vendedor_valor: 0, FAMILIA: 0, CUIT_LIB: '', COD_LUG: $scope.cobrosTabla[j].localidad.ID,//código lugar SEN: '', NRC: 0, COD_LARGO: '', VN: 0, ID_LECTOR: 0, NATHB: '' }; cheques.push(cheque); } } cobranza = { recibo: { CYV: 'V', TIP: 'C', TCO: 'RC', PVE: $scope.puntoVenta, //Sucursar, punto de venta NCO: $scope.comprobante, //Numero de comprobante FEC: $scope.fecha.toISOString().slice(0, 19).replace('T', ' '), CLI: $scope.cobranza.cliente.COD, ATO: 0, //número de asiento CFE: $scope.cobranza.cobrador.nombre, PLA: '',//Numero de planilla, sin uso ID_MONEDA: $scope.cobranza.moneda.ID, COTIZACION: $scope.cobranza.cotizacion.VENDEDOR, idCobrador: $scope.cobranza.cobrador.id }, cuerpo: cuerpos, cheques: cheques, acobypag: { CYV: 'V', COD: $scope.cobranza.cliente.COD, FEP: $scope.fecha.toISOString().slice(0, 19).replace('T', ' '), TIP: 'C', TCO: 'RC', SUC: $scope.puntoVenta, NCO: $scope.comprobante, IPA: $scope.getTotalCobrado(), SAL: '',//?? TCA: 1, ZONA: 1, FPA: 2,//Forma de pago REC: 0, REP: 0, FER: null, REM: 0, FRE: null,//?? PRO: 'N', FEV: $scope.fecha.toISOString().slice(0, 19).replace('T', ' ') }, datosCobrador: { COD: $scope.cobranza.cobrador.id, PVE: $scope.puntoVenta, NUM: $scope.comprobante, EST: 'C', OBS: 'RC: ' + $scope.comprobante + '-' + $scope.fecha.toLocaleDateString(), DAT1: 'C', CLI: $scope.cobranza.cliente.COD } }; focaCrearCobranzaService.guardarCobranza(cobranza).then( function(result) { $scope.saveLoading = false; focaModalService.alert('Cobranza guardada con éxito'); focaSeguimientoService.guardarPosicion( result.data.numero, 'Cobranza', 'Nº: ' + $filter('comprobante')([ result.data.sucursal, result.data.numero ]) + '
' + 'Vendedor: ' + $scope.cobranza.cobrador.nombre + '
' + 'Total: ' + $filter('currency')($scope.getTotalCobrado()), result.data.sucursal ); $scope.cobranza = { fecha: new Date() }; setearMonedaPorDefecto(); obtenerNumeroComprobante(); $scope.$broadcast('cleanCabecera'); $scope.fecha = new Date(); $scope.facturaTabla = []; $scope.cobrosTabla = []; }, function(error) { focaModalService.alert('Hubo un problema al cargar la cobranza'); $scope.saveLoading = false; console.info(error); } ); }; $scope.seleccionarCobros = function() { $scope.cobroDeuda = false; }; $scope.seleccionarComprobantes = function() { $scope.cobroDeuda = true; }; $scope.seleccionarCobranza = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Cobranzas', templateUrl: 'foca-modal-cobranza.html', controller: 'focaModalCobranzaController', size: 'lg' } ); modalInstance.result.then(function(cobranza) { $scope.editando = true; $scope.facturaTabla = []; $scope.cobrosTabla = []; $scope.$broadcast('cleanCabecera'); $scope.fecha = new Date(cobranza.fecha); $scope.$broadcast('addCabecera', { label: 'Cliente:', valor: cobranza.cliente.NOM }); $scope.$broadcast('addCabecera', { label: 'Cobrador:', valor: cobranza.cobrador }); $scope.facturaTabla = cobranza.facturas; $scope.cobrosTabla = cobranza.cobros; }); }; $scope.seleccionarCliente = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Cliente', templateUrl: 'foca-busqueda-cliente-modal.html', controller: 'focaBusquedaClienteModalController', size: 'lg' } ); modalInstance.result.then( function(cliente) { $scope.$broadcast('addCabecera', { label: 'Cliente:', valor: cliente.nom }); $scope.cobranza.cliente = { COD: cliente.cod, CUIT: cliente.cuit, NOM: cliente.nom }; }, function() { } ); }; $scope.seleccionarFactura = function() { if(!$scope.cobranza.cliente) { focaModalService.alert('Seleccione primero un cliente'); return; } var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Facturas', templateUrl: 'foca-modal-factura.html', controller: 'focaModalFacturaController', size: 'lg', resolve: { parametrosFactura: function() { return { cliente: $scope.cobranza.cliente.COD, simbolo: $scope.cobranza.moneda.SIMBOLO, cotizacion: $scope.cobranza.cotizacion.VENDEDOR, moneda: $scope.cobranza.moneda.ID }; } } } ); modalInstance.result.then( function(facturas) { $scope.facturaTabla = $scope.facturaTabla.concat(facturas); }, function() { } ); }; $scope.seleccionarCheque = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Carga de cheques', templateUrl: 'modal-cheque.html', controller: 'focaModalChequeController', size: 'lg' } ); modalInstance.result.then( function(cheque) { var cobro = { tipo: 'Ch' + '(' + cheque.numero + ')' + ' ' + cheque.banco.desbco, numero: cheque.numero, banco: cheque.banco, fecha: cheque.fechaEmision.toLocaleDateString() + '-' + cheque.fechaPresentacion.toLocaleDateString(), fechaPresentacion: cheque.fechaPresentacion, fechaEmision: cheque.fechaEmision, importe: cheque.importe * $scope.cobranza.cotizacion.VENDEDOR, localidad: cheque.localidad, librador: cheque.librador, provincia: cheque.provincia, observaciones: cheque.observaciones }; $scope.cobrosTabla.push(cobro); }, function() { } ); }; $scope.seleccionarEfectivo = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Carga de cheques', templateUrl: 'modal-efectivo.html', controller: 'focaModalEfectivoController', size: 'sm', resolve: { sugerido: function() { var sugerido = $scope.getTotalDeuda() + $scope.getTotalCobrado(); return sugerido < 0 ? sugerido : null ; } } } ); modalInstance.result.then( function(efectivo) { var cobro = { tipo: 'Efectivo', fecha: new Date(), importe: efectivo * $scope.cobranza.cotizacion.VENDEDOR }; $scope.cobrosTabla = $scope.cobrosTabla.filter(function(a) { return a.tipo !== 'Efectivo'; }); $scope.cobrosTabla.push(cobro); }, function() { } ); }; $scope.seleccionarMoneda = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Moneda', templateUrl: 'modal-moneda.html', controller: 'focaModalMonedaController', size: 'lg' } ); modalInstance.result.then( function(moneda) { $scope.seleccionarCotizacion(moneda); }, function() { } ); }; $scope.seleccionarCotizacion = function(moneda) { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Cotización', templateUrl: 'modal-cotizacion.html', controller: 'focaModalCotizacionController', size: 'lg', resolve: {idMoneda: function() {return moneda.ID;}} } ); modalInstance.result.then( function(cotizacion) { $scope.cobranza.moneda = moneda; $scope.cobranza.cotizacion = cotizacion; if(moneda.DETALLE === 'PESOS ARGENTINOS') { $scope.$broadcast('removeCabecera', 'Moneda:'); $scope.$broadcast('removeCabecera', 'Fecha cotizacion:'); $scope.$broadcast('removeCabecera', 'Cotizacion:'); }else { $scope.$broadcast('addCabecera', { label: 'Moneda:', valor: moneda.DETALLE }); $scope.$broadcast('addCabecera', { label: 'Fecha cotizacion:', valor: $filter('date')(cotizacion.FECHA, 'dd/MM/yyyy') }); $scope.$broadcast('addCabecera', { label: 'Cotizacion:', valor: cotizacion.VENDEDOR }); } }, function() { } ); }; $scope.seleccionarCobrador = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Cobradores', templateUrl: 'modal-cobradores.html', controller: 'focaModalCobradoresController', size: 'lg' } ); modalInstance.result.then( function(cobrador) { $scope.$broadcast('addCabecera', { label: 'Cobrador:', valor: cobrador.nombre }); $scope.cobranza.cobrador = cobrador; }, function() { } ); }; $scope.getTotalDeuda = function() { var total = 0; for (var i = 0; i < $scope.facturaTabla.length; i++) { total += $scope.facturaTabla[i].IPA; } return parseFloat(total.toFixed(2)); }; $scope.getTotalCobrado = function() { var total = 0; for (var i = 0; i < $scope.cobrosTabla.length; i++) { total += $scope.cobrosTabla[i].importe; } return parseFloat(total.toFixed(2)); }; $scope.getSubTotal = function() { if($scope.articuloACargar) { return $scope.articuloACargar.precio * $scope.articuloACargar.cantidad; } }; //Recibe aviso si el teclado está en uso // $rootScope.$on('usarTeclado', function(event, data) { // if(data) { // $scope.mostrarTeclado = true; // return; // } // $scope.mostrarTeclado = false; // }) $scope.selectFocus = function($event) { //Si el teclado esta en uso no selecciona el valor // if($scope.mostrarTeclado) { // return; // } $event.target.select(); }; $scope.salir = function() { $location.path('/'); }; $scope.parsearATexto = function(articulo) { articulo.cantidad = parseFloat(articulo.cantidad); articulo.precio = parseFloat(articulo.precio); }; $scope.rellenar = function(relleno, longitud) { relleno = '' + relleno; while (relleno.length < longitud) { relleno = '0' + relleno; } return relleno; }; $scope.quitarFactura = function(key) { $scope.facturaTabla.splice(key, 1); }; $scope.quitarCobro = function(key) { $scope.cobrosTabla.splice(key, 1); }; function setearMonedaPorDefecto() { var monedaPorDefecto; //Trabajo con la cotización más reciente, por eso uso siempre la primera '[0]' focaCrearCobranzaService.getCotizacionByIdMoneda(1).then(function(res) { monedaPorDefecto = res.data[0]; $scope.cobranza.moneda = monedaPorDefecto; $scope.cobranza.cotizacion = monedaPorDefecto.cotizaciones[0]; }); } function obtenerNumeroComprobante() { focaCrearCobranzaService.getNumeroRecibo().then( function(res) { $scope.puntoVenta = $scope.rellenar(res.data.sucursal, 4); $scope.comprobante = $scope.rellenar(res.data.numeroRecibo, 8); }, function(err) { focaModalService.alert('La terminal no esta configurada correctamente'); console.info(err); } ); } obtenerNumeroComprobante(); setearMonedaPorDefecto(); } ]);