angular.module('focaCrearHojaRuta') .controller('hojaRutaCtrl', [ '$scope', '$uibModal', '$location', '$filter', '$timeout', 'focaCrearHojaRutaService', 'focaModalService', 'focaBotoneraLateralService', 'focaLoginService', '$localStorage', function($scope, $uibModal, $location, $filter, $timeout, focaCrearHojaRutaService, focaModalService, focaBotoneraLateralService, focaLoginSrv, $localStorage) { config(); function config() { $scope.botonera = focaCrearHojaRutaService.getBotonera(); $scope.datepickerAbierto = false; $scope.show = false; $scope.cargando = true; $scope.now = new Date(); $scope.puntoVenta = $filter('rellenarDigitos')(0, 4); $scope.comprobante = $filter('rellenarDigitos')(0, 8); //SETEO BOTONERA LATERAL $timeout(function() { focaBotoneraLateralService.showSalir(false); focaBotoneraLateralService.showPausar(true); focaBotoneraLateralService.showGuardar(true, $scope.crearHojaRuta); focaBotoneraLateralService.addCustomButton('Salir', salir); }); init(); $timeout(function() {getLSHojaRuta();}); } function init() { $scope.$broadcast('cleanCabecera'); $scope.hojaRuta = { fecha: new Date(), litros: 0, chofer: {}, vehiculo: { capacidad: 0 }, transportista: {}, tarifario: { costo: null }, remitosTabla: [] }; $scope.idLista = undefined; focaCrearHojaRutaService.getNumeroHojaRuta().then( function(res) { $scope.puntoVenta = $filter('rellenarDigitos')(res.data.sucursal, 4); $scope.comprobante = $filter('rellenarDigitos')(res.data.numeroHojaRuta, 8); }, function(err) { focaModalService.alert('La terminal no esta configurada correctamente'); console.info(err); } ); $scope.inicial = angular.copy($scope.hojaRuta); } $scope.$watch('hojaRuta', function(newValue, oldValue) { focaBotoneraLateralService.setPausarData({ label: 'hojaRuta', val: newValue }); }, true); $scope.crearHojaRuta = function() { if (!$scope.hojaRuta.remitosTabla.length) { focaModalService.alert('Ingrese Remitos'); return; } if (!$scope.hojaRuta.chofer.id) { focaModalService.alert('Ingrese Chofer'); return; } if (!$scope.hojaRuta.vehiculo.id) { focaModalService.alert('Ingrese Vehiculo'); return; } if (!$scope.hojaRuta.transportista.COD) { focaModalService.alert('Ingrese Transportista'); return; } if (!$scope.hojaRuta.tarifario.costo) { focaModalService.alert('Ingrese Tarifario'); return; } if (!$scope.hojaRuta.datosExtra) { focaModalService.alert('Ingrese Datos extra'); return; } var date = new Date(); var save = { hojaRuta: { id: 0, fechaCreacion: new Date(date.getTime()).toISOString().slice(0, 19) .replace('T', ' '), idTransportista: $scope.hojaRuta.transportista.COD, idChofer: $scope.hojaRuta.chofer.id, idVehiculo: $scope.hojaRuta.vehiculo.id, tarifaFlete: $scope.hojaRuta.tarifario.costo, fechaReparto: new Date($scope.hojaRuta.fechaReparto).toISOString().substring(0, 10), estado: 0 }, remitos: $scope.hojaRuta.remitosTabla }; save.hojaRuta = angular.extend({}, save.hojaRuta, $scope.hojaRuta.datosExtra); focaCrearHojaRutaService.crearHojaRuta(save).then( function(data) { focaModalService.alert( 'Hoja ruta creada Nº: ' + $filter('rellenarDigitos')(data.data.sucursal, 4) + '-' + $filter('rellenarDigitos')(data.data.numeroHojaRuta, 8) ); init(); }, function(error) { focaModalService.alert('Hubo un error al crear la hoja de ruta'); console.info(error); } ); }; $scope.seleccionarTransportista = function() { if (eligioPreConfirmado()) return; var parametrosModal = { titulo: 'Búsqueda de transportista', query: '/transportista', columnas: [ { nombre: 'Código', propiedad: 'COD' }, { nombre: 'Nombre', propiedad: 'NOM' }, { nombre: 'CUIT', propiedad: 'CUIT' } ] }; focaModalService.modal(parametrosModal).then( function(proveedor) { $scope.hojaRuta.transportista = proveedor; $scope.$broadcast('addCabecera', { label: 'Transportista:', valor: $filter('rellenarDigitos')(proveedor.COD, 5) + ' - ' + proveedor.NOM }); }, function() { } ); }; $scope.seleccionarChofer = function() { var parametrosModal = { titulo: 'Búsqueda de Chofer', query: '/chofer', columnas: [ { propiedad: 'id', nombre: 'Código', filtro: { nombre: 'rellenarDigitos', parametro: 3 } }, { propiedad: 'nombre', nombre: 'Nombre' }, { propiedad: 'dni', nombre: 'DNI' }, { propiedad: 'telefono', nombre: 'Teléfono' } ] }; focaModalService.modal(parametrosModal).then( function(chofer) { $scope.hojaRuta.chofer = chofer; $scope.$broadcast('addCabecera', { label: 'Chofer:', valor: $filter('rellenarDigitos')(chofer.id, 3) + ' - ' +chofer.nombre }); }, function() { // funcion ejecutada cuando se cancela el modal } ); }; $scope.seleccionarVehiculo = function() { if (!eligioFecha() || eligioPreConfirmado()) return; modalVehiculos(); }; $scope.seleccionarTarifario = function() { focaModalService .prompt({ titulo: 'Tarifa flete', value: $scope.hojaRuta.tarifario.costo }) .then(function(costo) { if (isNaN(costo)) { focaModalService .alert('Ingrese un valor válido') .then(function() { $scope.seleccionarTarifario(); }); return; } $scope.hojaRuta.tarifario.costo = costo; $scope.$broadcast('addCabecera', { label: 'Tarifario:', valor: costo }); }); }; $scope.seleccionarRemitos = function() { if (eligioPreConfirmado() || !eligioFecha() || !eligioVehiculo()) return; var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Remito', templateUrl: 'foca-modal-remito.html', controller: 'focaModalRemitoController', size: 'lg', resolve: {usadoPor: function() {return 'hojaRuta';}} } ); modalInstance.result.then( function(remito) { // TODO: borrar cuando no se use definitivamente // for (var i = $scope.hojaRuta.remitosTabla.length - 1; i >= 0; i--) { // if ($scope.hojaRuta.remitosTabla[i].id === remito.id) { // focaModalService.alert('Remito ya incluido'); // return; // } // } // var litros = 0; // for (var j = remito.articulosRemito.length - 1; j >= 0; j--) { // litros = litros + parseFloat(remito.articulosRemito[j].cantidad); // } // if ($scope.hojaRuta.litros >= $scope.hojaRuta.vehiculo.capacidad) { // focaModalService.alert( // 'Debe ingresar toda la información para el transporte' // ); // return; // } //if($scope.hojaRuta.litros + litros >= $scope.hojaRuta.vehiculo.capacidad) // { // var litrostotales = litros; // litros = $scope.hojaRuta.vehiculo.capacidad - $scope.hojaRuta.litros; // focaModalService.alert( // 'La carga excede la capacidad disponible del vehiculo. ' + // 'Excedente no cargado: ' + (litrostotales - litros) + ' litros' // ); // } // remito.litros = litros; // $scope.hojaRuta.litros = $scope.hojaRuta.litros + litros; $scope.cargarCisterna(remito.id).then(function(response) { $scope.hojaRuta.remitosTabla.push(remito); if (!response) $scope.seleccionarRemitos(); }, function() { $scope.seleccionarRemitos(); }); }, function() { // funcion ejecutada cuando se cancela el modal } ); }; $scope.seleccionarVehiculosPrecargados = function() { if (!eligioFecha()) return; modalVehiculos(true); }; $scope.cargarCisterna = function(idRemito) { if (!eligioFecha() || !$scope.hojaRuta.vehiculo.id) return; var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Vehiculo', templateUrl: 'foca-detalle-vehiculo.html', controller: 'focaDetalleVehiculo', size: 'lg', resolve: { idVehiculo: function() {return $scope.hojaRuta.vehiculo.id;}, idRemito: function() {return idRemito;}, fechaReparto: function() {return $scope.hojaRuta.fechaReparto;} } } ); return modalInstance.result; }; $scope.seleccionarFechaEntrega = function() { if (!$scope.hojaRuta.fechaReparto) { elegirFecha(); return; } focaModalService .confirm('Si cambia la fecha se perderán los datos actuales') .then(function() { elegirFecha(); }, function() { return ; }); }; $scope.seleccionarDatosExtra = function() { var datosHojaRuta = $scope.hojaRuta.datosExtra; var modalInstance = $uibModal.open( { templateUrl: 'foca-modal-datos-hoja-ruta.html', controller: 'focaModalDatosHojaRutaCtrl', size: 'lg', resolve: { parametrosDatos: function() { return { datosHojaRuta: datosHojaRuta }; } } } ); return modalInstance.result.then(function(datosExtra) { $scope.hojaRuta.datosExtra = datosExtra; }, function() { //se ejecuta cuando se cancela el modal }); }; $scope.desasociarRemito = function(key, idRemito) { var idsRemito = [idRemito]; focaModalService.confirm('¿Está seguro que desea desasociar este remito del' + ' vehículo?').then(function() { focaCrearHojaRutaService.desasociarRemitos(idsRemito, $scope.hojaRuta.vehiculo.id, $scope.hojaRuta.remitosTabla.length <= 1) .then(function() { $scope.hojaRuta.remitosTabla.splice(key, 1); focaModalService.alert('Remito desasociado con éxito'); }); }); }; $scope.verProductosRemito = function(idRemito) { var parametrosModal = { titulo: 'Articulos remito', query: '/articulos/remito/' + idRemito, soloMostrar: true, columnas: [ { nombre: 'Código', propiedad: 'codigo' }, { nombre: 'Descripción', propiedad: 'descripcion' }, { nombre: 'Cantidad', propiedad: 'cantidad' } ] }; focaModalService.modal(parametrosModal).then(); }; function elegirFecha() { var fechaEntrega = { titulo: 'Fecha de entrega', minDate: new Date() }; focaModalService.modalFecha(fechaEntrega).then(function(fecha) { $scope.$broadcast('addCabecera', { label: 'Fecha de entrega: ', valor: fecha.toLocaleDateString() }); $scope.hojaRuta.fechaReparto = fecha; }); } function eligioPreConfirmado() { if ($scope.eligioPreConfirmado) { focaModalService.alert('No puede elegir si eligió un vehiculo pre cargado'); return true; } return false; } function eligioFecha() { if (!$scope.hojaRuta.fechaReparto) { focaModalService.alert('Primero seleccione fecha de reparto'); return false; } return true; } function eligioVehiculo() { if (!$scope.hojaRuta.vehiculo.id) { focaModalService.alert('Primero seleccione vehiculo'); return false; } return true; } function modalVehiculos(preCargados) { var parametrosModal = {}; if (preCargados) { parametrosModal.query = '/vehiculo/obtener/pre-confirmados/' + new Date($scope.hojaRuta.fechaReparto).toISOString().substring(0, 10); parametrosModal.titulo = 'Búsqueda de vehiculos pre confirmados'; } else { parametrosModal.query = '/vehiculo'; parametrosModal.titulo = 'Búsqueda de vehículos'; } parametrosModal.columnas = [ { propiedad: 'codigo', nombre: 'Código' }, { propiedad: 'tractor', nombre: 'tractor' }, { propiedad: 'semi', nombre: 'Semi' } ]; focaModalService.modal(parametrosModal).then(function(vehiculo) { if (!preCargados && vehiculoEnUso(vehiculo)) return; $scope.hojaRuta.vehiculo = vehiculo; $scope.hojaRuta.transportista = vehiculo.transportista; if (preCargados) { $scope.eligioPreConfirmado = true; $scope.hojaRuta.vehiculo = vehiculo; $scope.$broadcast('addCabecera', { label: 'Transportista:', valor: $filter('rellenarDigitos')(vehiculo.transportista.COD, 5) + ' - ' + vehiculo.transportista.NOM }); focaCrearHojaRutaService .getRemitosByIdVehiculo(vehiculo.id, $scope.hojaRuta.fechaReparto) .then(function(res) { $scope.hojaRuta.remitosTabla = res.data; }); } else { focaCrearHojaRutaService .getRemitosByIdVehiculo(vehiculo.id, $scope.hojaRuta.fechaReparto, true) .then(function(res) { $scope.hojaRuta.remitosTabla = res.data; }); } $scope.$broadcast('addCabecera', { label: 'Tractor:', valor: vehiculo.tractor }); $scope.$broadcast('addCabecera', { label: 'Semi:', valor: vehiculo.semi }); $scope.$broadcast('addCabecera', { label: 'Capacidad:', valor: vehiculo.capacidad }); }); } function vehiculoEnUso(vehiculo) { var idUsuario = focaLoginSrv.getLoginData().vendedorCobrador; for (var i = 0; i < vehiculo.cisternas.length; i++) { for (var j = 0; j < vehiculo.cisternas[i].cisternasCarga.length; j++) { var cisternaCarga = vehiculo.cisternas[i].cisternasCarga[j]; if (cisternaCarga.fechaReparto.substring(0, 10) === new Date($scope.hojaRuta.fechaReparto).toISOString().substring(0, 10) && cisternaCarga.idUsuarioProceso && cisternaCarga.idUsuarioProceso !== idUsuario) { focaModalService.alert('El vehículo está siendo usado por otro' + ' usuario'); return true; } } } return false; } function salir() { var confirmacion = false; if (!angular.equals($scope.hojaRuta, $scope.inicial)) { confirmacion = true; } if (confirmacion) { focaModalService.confirm( '¿Está seguro de que desea salir? Se perderán todos los datos cargados.' ).then(function(data) { if (data) { $location.path('/'); } }); } else { $location.path('/'); } } function setearHojaRuta(hojaRuta) { $scope.$broadcast('cleanCabecera'); var cabeceras = []; if (hojaRuta.fechaReparto) { cabeceras.push({ label: 'Fecha de entrega:', valor: $filter('date')(hojaRuta.fechaReparto, 'dd/MM/yyyy') }); } if (hojaRuta.transportista.COD) { cabeceras.push({ label: 'Transportista:', valor: $filter('rellenarDigitos')(hojaRuta.transportista.COD, 5) + ' - ' + hojaRuta.transportista.NOM }); } if (hojaRuta.chofer.id) { cabeceras.push({ label: 'Chofer:', valor: $filter('rellenarDigitos')(hojaRuta.chofer.id, 3) + ' - ' + hojaRuta.chofer.nombre }); } if (hojaRuta.vehiculo.id) { cabeceras.push({ label: 'Tractor:', valor: hojaRuta.vehiculo.tractor }); cabeceras.push({ label: 'Semi:', valor: hojaRuta.vehiculo.semi }); cabeceras.push({ label: 'Capacidad:', valor: hojaRuta.vehiculo.capacidad }); } if (hojaRuta.tarifario.costo) { cabeceras.push({ label: 'Tarifario:', valor: hojaRuta.tarifario.costo }); } addArrayCabecera(cabeceras); $scope.hojaRuta = hojaRuta; } function getLSHojaRuta() { var hojaRuta = JSON.parse($localStorage.hojaRuta || null); if (hojaRuta) { setearHojaRuta(hojaRuta); delete $localStorage.hojaRuta; } } function addArrayCabecera(array) { for(var i = 0; i < array.length; i++) { $scope.$broadcast('addCabecera', { label: array[i].label, valor: array[i].valor }); } } } ]);