controllerDetalleVehiculo.js 9.44 KB
angular.module('focaLogisticaPedidoRuta')
    .controller('focaDetalleVehiculo',
        ['$scope',
        '$uibModalInstance',
        'idVehiculo',
        'idRemito',
        'focaModalService',
        '$filter',
        'focaLogisticaPedidoRutaService',
        function($scope, $uibModalInstance, idVehiculo, idRemito, focaModalService, $filter,
            focaLogisticaPedidoRutaService
        ) {
            //seteo variables
            $scope.cargandoDatos = true;
            $scope.idRemito = idRemito;
            $scope.articulos = [];
            $scope.vehiculo = {};
            $scope.cisternas = [];
            $scope.cisternasCarga = [];
            $scope.remito = {};
            $scope.aCargar = [];
            var cisternaMovimientos = [];
            var promesaRemito;
            var promesaVehiculo = focaLogisticaPedidoRutaService.obtenerVehiculoById(idVehiculo);
            var promesaCisternas = focaLogisticaPedidoRutaService
                .obtenerCisternasPorFecha(idVehiculo);
            if(idRemito !== -1) {
                promesaRemito = focaLogisticaPedidoRutaService.obtenerRemitoById(idRemito);
            }
            Promise.all([promesaVehiculo, promesaCisternas, promesaRemito]).then(function(res) {
                $scope.cargandoDatos = false;
                $scope.vehiculo = res[0].data;
                $scope.cisternas = res[1].data;
                if(!res[2]) return;
                $scope.remito = res[2].data;
                if($scope.remito.idUsuarioProceso) {
                    focaModalService.alert('Remito ya asignado');
                    $uibModalInstance.close();
                }
                $scope.articulos = $scope.remito.articulosRemito;
                $scope.seleccionarArticulo($scope.articulos[0]);
            });
            $scope.aceptar = function() {
                $scope.cargando = true;
                for(var i = 0; i < $scope.cisternasCarga.length; i++) {
                    delete $scope.cisternasCarga[i].articulo;
                }
                var cisterna = {
                    cisternaMovimientos: cisternaMovimientos,
                    cisternaCargas: $scope.cisternasCarga,
                    idVehiculo: $scope.vehiculo.id
                };
                focaLogisticaPedidoRutaService.guardarCisternas(cisterna, $scope.remito.id)
                    .then(function() {
                        focaModalService.alert('Cisternas cargadas con éxito').then(function() {
                            $scope.cargando = false;
                            $uibModalInstance.close();
                        });
                    }).catch(function(error) {
                        $scope.cargando = false;
                        $uibModalInstance.close();
                        if (error.status === 403.1) {
                            focaModalService.alert('ERROR: El vehículo esta en uso');
                        }
                        if(error.status === 403.2) {
                            focaModalService.alert('ERROR: Otro usario ya cargó este remito');
                            return;
                        }
                        focaModalService.alert('Hubo un error al cargar las cisternas');
                });
            };
            $scope.cancelar = function() {
                $uibModalInstance.close();
            };
            $scope.cargarACisternas = function() {
                for(var i = 0; i < $scope.cisternas.length; i++) {
                    var cisterna = $scope.cisternas[i];
                    var aCargar = parseFloat($scope.aCargar[i]);
                    var fechaReparto = focaLogisticaPedidoRutaService.fecha;
                    //validaciones
                    if(!aCargar) {
                        continue;
                    }
                    //cargar
                    if(cisterna.cisternaCarga.cantidad) {
                        cisterna.cisternaCarga.cantidad += aCargar;
                    }else {
                        cisterna.cisternaCarga.cantidad = aCargar;
                        cisterna.cisternaCarga.idProducto = $scope.articuloSeleccionado.idArticulo;
                    }
                    cisterna.disponible = cisterna.capacidad - cisterna.cisternaCarga.cantidad;
                
                    cisterna.cisternaCarga.articulo = {
                        DetArt: $scope.articuloSeleccionado.descripcion
                    };
                    $filter('filter')($scope.articulos, {id: $scope.articuloSeleccionado.id})[0]
                        .cargado = true;

                    $scope.calcularPorcentaje(cisterna);
                    //Guardar
                    var now = new Date();
                    var cisternaMovimiento = {
                        fecha: now.toISOString().slice(0, 19).replace('T', ' '),
                        cantidad: aCargar,
                        metodo: 'carga',
                        idCisternaCarga: cisterna.cisternaCarga.id,
                        idRemito: $scope.remito.id
                    };
                    cisterna.cisternaCarga.fechaReparto = fechaReparto;
                    cisterna.cisternaCarga.idCisterna = cisterna.id;
                    $scope.cisternasCarga.push(cisterna.cisternaCarga);
                    cisternaMovimientos.push(cisternaMovimiento);
                }
                var articuloSiguiente = $scope.articulos.filter(
                    function(filter) {
                        return filter.cargado !== true;
                    }
                );
                if(articuloSiguiente.length > 0) {
                    $scope.seleccionarArticulo(articuloSiguiente[0]);
                }
            };
            $scope.calcularPorcentaje = function(cisterna) {
                if(!cisterna.cisternaCarga) {
                    cisterna.cisternaCarga = {
                        cantidad: 0
                    };
                }
                var porcentaje = (cisterna.cisternaCarga.cantidad * 100 /
                    cisterna.capacidad) + '%';
                var elementHtml = document.getElementById(cisterna.id);
                if(elementHtml) {
                    elementHtml.style.width = porcentaje;
                }
            };
            $scope.seleccionarArticulo = function(articulo) {
                $scope.articuloSeleccionado = articulo;
                $scope.cisternaDisponible();
                $scope.autoCompletar();
                $scope.actualizarArticulo();
            };
            $scope.actualizarArticulo = function () {
                $scope.articuloSeleccionado.cantidadCargada = 0;
                for (var i = 0; i < $scope.aCargar.length; i++) {
                    $scope.articuloSeleccionado.cantidadCargada +=
                        parseFloat($scope.aCargar[i]) || 0;
                }
            };
            $scope.autoCompletar = function() {
                $scope.aCargar = [];
                var disponible = $filter('filter')($scope.cisternas, {disabled: false});
                var index = $scope.cisternas.indexOf(disponible[0]);
                $scope.aCargar[index] = $scope.articuloSeleccionado.cantidad;
            };
            $scope.cisternaDisponible = function() {
                for(var i = 0; i < $scope.cisternas.length; i++) {
                    if($scope.articuloSeleccionado.cantidad > $scope.cisternas[i].disponible) {
                        $scope.cisternas[i].disabled = true;
                        continue;
                    }
                    if($scope.cisternas[i].cisternaCarga &&
                        $scope.cisternas[i].cisternaCarga.idProducto &&
                        $scope.articuloSeleccionado.idArticulo !==
                        $scope.cisternas[i].cisternaCarga.idProducto)
                    {
                        $scope.cisternas[i].disabled = true;
                        continue;
                    }
                    $scope.cisternas[i].disabled = false;
                }
            };
            $scope.rellenarInput = function(input) {
                if(!$scope.articuloSeleccionado) return;
                if($scope.articuloSeleccionado.cantidad -
                $scope.articuloSeleccionado.cantidadCargada === 0) {
                    return input;
                }
                if(!input) input = 0;
                input = parseFloat(input);
                input += parseFloat($scope.articuloSeleccionado.cantidad -
                    $scope.articuloSeleccionado.cantidadCargada);
                return input;
            };
            $scope.distribucionDisponible = function() {
                if(!$scope.articuloSeleccionado || $scope.articuloSeleccionado.cantidad -
                    $scope.articuloSeleccionado.cantidadCargada !== 0 ||
                    !$scope.tieneArticulosPendientes()) {
                        return false;
                }
                return true;
            };
            $scope.tieneArticulosPendientes = function() {
                var algunValorNegativo = $scope.aCargar.filter(function(p) {
                    return p < 0;
                });
                if(algunValorNegativo.length) {
                    return false;
                }
                var articulosDescargados = $scope.articulos.filter(function(filter) {
                    return filter.cargado === true;
                });
                if(articulosDescargados.length === $scope.articulos.length)  {
                    $scope.aCargar = [];
                    return false;
                }
                return true;
            };
    }]);