angular.module('focaModalDetalleHojaRuta') .controller('focaModalDetalleHojaRutaController', [ '$filter', '$scope', '$uibModalInstance', 'idRemito', 'focaModalDetalleHojaRutaService', 'focaModalService', 'focaSeguimientoService', '$uibModal', function($filter, $scope, $uibModalInstance, idRemito, focaModalDetalleHojaRutaService, focaModalService, focaSeguimientoService, $uibModal) { //Seteo variables $scope.remito = {}; $scope.cisternas = []; $scope.articuloSeleccionado = {}; $scope.aDescargar = []; $scope.cargando = true; //Datos var promesaRemito = focaModalDetalleHojaRutaService .getRemitoById(idRemito); var promesaCisternas = focaModalDetalleHojaRutaService .getCisternasByIdRemito(idRemito); Promise.all([promesaRemito, promesaCisternas]).then(function(res) { $scope.cargando = false; $scope.remito = res[0].data; $scope.cisternas = res[1].data; var articuloAChequear = $scope.remito.articulosRemito.filter( function(articulo) { return !articulo.descargado; }); if(!articuloAChequear.length || $scope.remito.rechazado) { $scope.readonly = true; $scope.cambio($scope.remito.articulosRemito[0]); }else { $scope.cambio(articuloAChequear[0]); } $scope.$digest(); }, function() { focaModalService.alert('El servicio no responde intente más tarde'); $uibModalInstance.dismiss(); }); $scope.cambio = function(articulo) { if(!$scope.articuloSeleccionado.descargado) { $scope.articuloSeleccionado.cantidadDescargada = 0; } $scope.aDescargar = []; $scope.articuloSeleccionado = articulo; }; $scope.descargar = function(key) { if(key === 13) { $scope.cargando = true; var hojaRutaMovimientos = []; var cisternaMovimientos = []; var cisternaCargas = []; var totalADescargar = 0; for(var i = 0; i < $scope.aDescargar.length; i++) { totalADescargar += $scope.aDescargar[i] || 0; } focaModalService .confirm('¿Desea descargar ' + totalADescargar + ' litros de ' + $scope.articuloSeleccionado.descripcion + '?') .then(descargar, function() { $scope.cargando = false; }); } function descargar() { for(var i = 0; i < $scope.cisternas.length; i++) { var descarga = $scope.aDescargar[i]; var cisternaCarga = $scope.cisternas[i].cisternaCarga; if(!descarga) continue; if(descarga > cisternaCarga.cantidad) { focaModalService.alert('La cantidad a descargar no debe ser ' + 'mayor a la cantidad de la cisterna'); $scope.cargando = false; return; } cisternaCarga.cantidad -= descarga; //Guardar var now = new Date(); var cisternaMovimiento = { fecha: now.toISOString().slice(0, 19).replace('T', ' '), cantidad: descarga, metodo: 'descarga', idCisternaCarga: cisternaCarga.id, idRemito: $scope.remito.id }; var hojaRutaMovimiento = { reciboDescarga: $scope.numeroRecibo, idRemito: $scope.remito.id }; delete cisternaCarga.articulo; cisternaCargas.push(cisternaCarga); cisternaMovimientos.push(cisternaMovimiento); hojaRutaMovimientos.push(hojaRutaMovimiento); } var save = { cisternaCargas: cisternaCargas, cisternaMovimientos: cisternaMovimientos, hojaRutaMovimientos: hojaRutaMovimientos, articulo: $scope.articuloSeleccionado }; focaModalDetalleHojaRutaService .postMovimientoHojaRuta(save) .then(guardarSeguimiento) .catch(error); function guardarSeguimiento(res) { focaSeguimientoService .guardarPosicion( 'Entrega de producto', res.data[0].id, $scope.remito.observaciones); $scope.aDescargar = []; $scope.remito.observaciones = ''; $scope.articuloSeleccionado.descargado = true; var siguienteArticulo = $scope.remito.articulosRemito.filter( function(articulo) { return articulo.id != $scope.articuloSeleccionado.id; } ); if(siguienteArticulo.length) { $scope.cambio(siguienteArticulo[0]); } $scope.actualizarPuntoDescarga(); } } }; $scope.cancel = function() { $uibModalInstance.dismiss('cancel'); }; $scope.distribucionDisponible = function() { return $scope.articuloSeleccionado.cantidadDescargada && $scope.articuloSeleccionado.cantidadDescargada <= $scope.articuloSeleccionado.cantidad; }; $scope.actualizarArticulo = function() { $scope.articuloSeleccionado.cantidadDescargada = 0; for(var i = 0; i < $scope.aDescargar.length; i++) { $scope.articuloSeleccionado.cantidadDescargada += parseFloat($scope.aDescargar[i]) || 0; } }; $scope.actualizarPuntoDescarga = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Actualizar punto de descarga', templateUrl: 'modal-actualizar-punto-descarga.html', controller: 'focaModalActualizarPuntoDescargaController', resolve: { notaPedido: function() { return $scope.remito.notaPedido; } }, size: 'lg' } ); modalInstance.result.then(function() { success(); }, function() { success(); }); }; $scope.rechazar = function() { focaModalService .prompt('Aclare el motivo de rechazo') .then(function(motivo) { $scope.cargando = true; var remitoRechazado = $.extend(true, {}, $scope.remito); delete remitoRechazado.articulosRemito; delete remitoRechazado.notaPedido; remitoRechazado.rechazado = true; remitoRechazado.motivoRechazo = motivo; remitoRechazado.fechaRemito = remitoRechazado.fechaRemito.slice(0, 19).replace('T', ' '); focaModalDetalleHojaRutaService.rechazarRemito(remitoRechazado) .then(function(res) { focaSeguimientoService.guardarPosicion( 'Entrega de producto', res.data[1].id, motivo); success(); }) .catch(error); $scope.readonly = true; }); }; //funciones function error(error) { focaModalService.alert('Hubo un error ' + error); } function success() { focaModalService.alert('Operación realizada con éxito'); $scope.cargando = false; } } ] ) .controller('focaModalActualizarPuntoDescargaController', [ '$scope', '$uibModalInstance', 'focaSeguimientoService', 'focaModalService', 'notaPedido', 'focaModalDetalleHojaRutaService', function($scope, $uibModalInstance, focaSeguimientoService, focaModalService, notaPedido, focaModalDetalleHojaRutaService) { $scope.notaPedido = notaPedido; $scope.descripcion = ''; focaSeguimientoService.obtenerPosicion(function(res) { $scope.posicion = res.coords; }); $scope.cancel = function() { if ($scope.ingreso) { $scope.ingreso = false; } else { $uibModalInstance.dismiss(); } }; $scope.select = function(puntoDescarga) { if (!$scope.posicion) { focaModalService.alert('No se pudo obtener la ubicación'); return; } puntoDescarga.latitud = $scope.posicion.latitude; puntoDescarga.longitud = $scope.posicion.longitude; focaModalDetalleHojaRutaService .guardarPuntoDescarga(puntoDescarga) .then(function(res) { $uibModalInstance.close(res.data); }); }; $scope.guardar = function() { if (!$scope.posicion) { focaModalService.alert('No se pudo obtener la ubicación'); return; } focaModalDetalleHojaRutaService .guardarPuntoDescarga({ id: 0, id_cliente: $scope.notaPedido.idCliente, id_da_config_0: $scope.notaPedido.idDomicilio, descripcion: $scope.descripcion, latitud: $scope.posicion.latitude, longitud: $scope.posicion.longitude }) .then(function(res) { $uibModalInstance.close(res.data); }); }; } ] );