controllerDetalleVehiculo.js 6.77 KB
angular.module('focaLogisticaPedidoRuta')
    .controller('focaDetalleVehiculo',
        ['$scope',
        '$uibModalInstance',
        'idVehiculo',
        'idRemito',
        'focaModalService',
        '$filter',
        'focaLogisticaPedidoRutaService',
        function($scope, $uibModalInstance, idVehiculo, idRemito, focaModalService, $filter,
            focaLogisticaPedidoRutaService
        ) {
            //seteo variables
            $scope.idRemito = idRemito;
            $scope.articulos = [];
            $scope.vehiculo = {};
            $scope.remito = {};
            $scope.aCargar = [];
            var cisternaMovimientos = [];
            focaLogisticaPedidoRutaService.obtenerVehiculoById(idVehiculo).then(
                function(res) {
                    $scope.vehiculo = res.data;
                }
            );
            if (idRemito !== -1) {
                focaLogisticaPedidoRutaService.obtenerRemitoById(idRemito).then(
                    function(res) {
                        $scope.remito = res.data;
                        if($scope.remito.idUsuarioProceso) {
                            focaModalService.alert('El remito esta siendo cargado por otro usario');
                            $uibModalInstance.close();
                        }
                        $scope.articulos = res.data.articulosRemito;
                    }
                );    
            }
            $scope.aceptar = function() {
                $scope.cargando = true;
                var cisternaCargas = [];
                for (var i = 0; i < $scope.vehiculo.cisternas.length; i++) {
                    delete $scope.vehiculo.cisternas[i].cisternaCarga.articulo;
                    cisternaCargas.push($scope.vehiculo.cisternas[i].cisternaCarga);
                }
                var cisterna = {
                    cisternaMovimientos: cisternaMovimientos,
                    cisternaCargas: cisternaCargas,
                    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(vehiculo) {
                for(var i = 0; i < vehiculo.cisternas.length; i++) {
                    var cisterna = vehiculo.cisternas[i];
                    var aCargar = parseFloat($scope.aCargar[i]);
                    //validaciones
                    if(!aCargar) {
                        continue;
                    }
                    if(aCargar > cisterna.disponible) {
                        focaModalService.alert('La cantidad cargada supera la capacidad de la' +
                            'cisterna ' + cisterna.codigo);
                        return;
                    }
                    //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
                    };
                    cisternaMovimientos.push(cisternaMovimiento);
                }
                var articuloSiguiente = $scope.articulos.filter(
                    function(filter) {
                        return filter.cargado !== true;
                    }
                );
                if(articuloSiguiente.length > 0) {
                    $scope.cambioArticulo(articuloSiguiente[0]);
                }
                $scope.aCargar = [];
            };
            $scope.calcularPorcentaje = function(cisterna) {
                if(!cisterna.cisternaCarga.cantidad) {
                    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.cambioArticulo = function(articulo) {
                articulo.checked = true;
                $scope.articuloSeleccionado = articulo;
            };
            $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.tieneArticulosPendientes = function() {
                var articulosDescargados = $scope.articulos.filter(function(filter) {
                    return filter.cargado === true;
                });
                if(articulosDescargados.length === $scope.articulos.length)  {
                    return false;
                }
                return true;
            };
    }]);