angular.module('focaCrearCobranza') .controller('cobranzaController',
[
'$scope',
'$rootScope',
'$timeout',
'$uibModal',
'$location',
'focaCrearCobranzaService',
'focaModalService',
'$filter',
'focaSeguimientoService',
'focaBotoneraLateralService',
'APP',
'focaLoginService',
function($scope, $rootScope, $timeout, $uibModal, $location, focaCrearCobranzaService,
focaModalService, $filter, focaSeguimientoService, focaBotoneraLateralService,
APP, loginService)
{
if(APP === 'cobranza') {
var idCobrador = loginService.getLoginData().vendedorCobrador;
$scope.botonera = focaCrearCobranzaService.getBotonera(idCobrador);
focaCrearCobranzaService.getCobradorById(idCobrador).then(
function(res) {
var cobrador = res.data;
$scope.$broadcast('addCabecera', {
label: 'Cobrador:',
valor: cobrador.NomVen
});
$scope.cobranza.cobrador = cobrador;
}
);
}else {
$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 = [];
$timeout(function() {
focaBotoneraLateralService.showSalir(false);
focaBotoneraLateralService.showPausar(true);
focaBotoneraLateralService.showGuardar(true, $scope.crearCobranza);
focaBotoneraLateralService.addCustomButton('Salir', salir);
});
$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;
focaBotoneraLateralService.startGuardar();
$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.cobranza.cobrador.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.NomVen,
PLA: '',//Numero de planilla, sin uso
ID_MONEDA: $scope.cobranza.moneda.ID,
COTIZACION: $scope.cobranza.cotizacion.VENDEDOR,
idCobrador: $scope.cobranza.cobrador.CodVen
},
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.CodVen,
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) {
focaBotoneraLateralService.endGuardar(true);
$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.NomVen + '
' +
'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');
focaBotoneraLateralService.endGuardar();
$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',
resolve: {
vendedor: function(){ return null; }
}
}
);
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,
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',
resolve: {
sugerido: function() {
var sugerido = $scope.getTotalDeuda() + $scope.getTotalCobrado();
return sugerido < 0 ? sugerido : null;
}
}
}
);
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: $filter('number')(cotizacion.VENDEDOR, '2')
});
}
}, 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.NomVen
});
$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);
}
);
}
function salir() {
var cobranza = {
moneda: $scope.cobranza.moneda,
cotizacion: $scope.cobranza.cotizacion
};
if(JSON.stringify($scope.cobranza) !== JSON.stringify(cobranza)) {
focaModalService
.confirm('¿Esta seguro de que desea salir? ' +
'Se perderán todos los datos cargados.')
.then(function(data) {
if(data) $location.path('/');
});
}else {
$location.path('/');
}
}
obtenerNumeroComprobante();
setearMonedaPorDefecto();
}
]);