controller.js 9.28 KB
angular.module('focaModalPuntoDescarga')
    .controller('focaModalPuntoDescargaController', [
        '$timeout',
        '$filter',
        '$scope',
        '$uibModalInstance',
        'focaModalPuntoDescargaService',
        'filters',
        'focaModalService',
        function($timeout, $filter, $scope, $uibModalInstance,
            focaModalPuntoDescargaService, filters, focaModalService) {

            $scope.cantidadArticulo = 0;
            $scope.articuloSeleccionado = 0;
            $scope.ivas = [];
            $scope.puntosSeleccionados = [];
            $scope.editando = false;
            $scope.puntoDescarga = {
                id: 0,
                id_cliente: filters.idCliente,
                id_da_config_0: filters.idDomicilio,
                latitud: -32.89214159952345,
                longitud: -68.84572999101856
            };
            $scope.articulos = angular.copy(filters.articulos);
            $scope.articulos.map(function(articulo) {
                articulo.restante = articulo.cantidad;
            });
            actualizarTabla();
            cargarPuntos(filters.puntosDescarga);

            $scope.cancel = function() {
                if($scope.ingreso) {
                    $scope.ingreso = false;
                    $scope.puntoDescarga = {
                        id: 0,
                        id_cliente: filters.idCliente,
                        id_da_config_0: filters.idDomicilio,
                        latitud: -32.89214159952345,
                        longitud: -68.84572999101856
                    };
                    $scope.editando = false;
                }else {
                    $uibModalInstance.dismiss('cancel');
                }
            };

            $scope.aceptar = function() {
                if($scope.cargaArticulos) {
                    cargarArticulos();
                }else if(!$scope.puntosSeleccionados.length){
                    $uibModalInstance.dismiss('cancel');
                }else {
                    verCargaArticulos();
                }
            };

            $scope.guardar = function() {
                focaModalPuntoDescargaService
                    .guardarPuntoDescarga($scope.puntoDescarga)
                    .then(function() {
                        actualizarTabla();
                        $scope.ingreso = false;
                        $scope.puntoDescarga = {
                            id: 0,
                            id_cliente: filters.idCliente,
                            id_da_config_0: filters.idDomicilio,
                            latitud: -32.89214159952345,
                            longitud: -68.84572999101856
                        };
                        $scope.editando = false;
                    });
            };

            $scope.editar = function(id) {
                focaModalPuntoDescargaService.getPuntoDescargaById(id).then(function(res) {
                    $scope.puntoDescarga = res.data;
                    $scope.ingreso = true;
                    $scope.editando = true;
                });
            };

            $scope.eliminar = function(idx, puntoDescarga) {
                focaModalService.confirm('¿Está seguro que desea borrar el punto de descarga '+
                    puntoDescarga.descripcion + '?').then(function(data) {
                        if(data) {
                            focaModalPuntoDescargaService
                                .eliminarPuntoDescarga(puntoDescarga.id)
                                .then(function() {
                                    $scope.puntosDescarga.splice(idx, 1);
                                });
                        }
                    });
            };

            $scope.seleccionarPunto = function(idx, esCheckbox) {
                var indexPunto = $scope.puntosSeleccionados.indexOf(idx);
                if(indexPunto !== -1) {
                    if(!esCheckbox){
                        $scope.puntosDescarga[idx].seleccionado = false;
                    }
                    $scope.puntosSeleccionados.splice(indexPunto, 1);
                }else {
                    if(!esCheckbox){
                        $scope.puntosDescarga[idx].seleccionado = true;
                    }
                    $scope.puntosSeleccionados.push(idx);
                }
            };

            $scope.agregarArticulo = function(punto, key) {
                key = (typeof key  === 'undefined') ? 13 : key;

                if(key === 13){
                    var articulo = $scope.articulos[$scope.articuloSeleccionado],
                    cantidadRestante = articulo.restante - punto.cantidadACargar;

                    if(cantidadRestante < 0) {
                        focaModalService
                            .alert('La cantidad a cargar debe ser menor o igual al restante');
                    }else if(punto.cantidadACargar <= 0) {
                        focaModalService
                            .alert('La cantidad a cargar debe ser mayor que cero');
                    }else {
                        punto.cargado += parseInt(punto.cantidadACargar);
                        articulo.restante = cantidadRestante;
                        var existeArticulo = punto.articulosAgregados.filter(
                            function (articuloAAgregar) {
                                return articuloAAgregar.id === articulo.idArticulo;
                            });
                        //Si el articulo ya fue agregado
                        if(existeArticulo.length) {
                            //Solo sumo cantidad
                            var total = parseInt(existeArticulo[0].cantidad) +
                                parseInt(punto.cantidadACargar);
                            existeArticulo[0].cantidad = total;
                        }else {
                            //Agrego el articulo con la cantidad
                            punto.articulosAgregados.push({
                                id: articulo.idArticulo,
                                descripcion: articulo.descripcion,
                                cantidad: punto.cantidadACargar,
                                index: $scope.articuloSeleccionado
                            });
                        }
                        punto.cantidadACargar = 0;
                    }
                }
            };

            $scope.quitarArticulo = function(articulo, idx, punto) {
                var articuloAEliminar = $scope.articulos.filter(function(art) {
                    return art.id === articulo.id;
                });
                var restante = parseInt(articuloAEliminar[0].restante);
                restante += parseInt(articulo.cantidad);
                articuloAEliminar[0].restante = restante;

                punto.cargado -= parseInt(punto.articulosAgregados[idx].cantidad);
                punto.articulosAgregados.splice(idx, 1);
            };

            function actualizarTabla() {
                focaModalPuntoDescargaService
                    .getPuntosDescargaByClienDom(filters.idDomicilio, filters.idCliente)
                    .then(function(res) {
                        $scope.puntosDescarga = res.data;
                    });
            }
            function verCargaArticulos() {
                $scope.puntosACargar = [];
                $scope.cargaArticulos = true;
                $scope.puntosSeleccionados.forEach(function(idx) {
                    $scope.puntosACargar.push($scope.puntosDescarga[idx]);
                });

                $scope.puntosACargar.map(function(punto) {
                    punto.articulosAgregados = [];
                    punto.cantidadACargar = 0;
                    punto.cargado = 0;
                });
            }
            function cargarArticulos() {
                $uibModalInstance.close($scope.puntosACargar);
            }
            function cargarPuntos(puntosDescarga) {
                //Si existen puntos ya cargados
                if(puntosDescarga) {
                    if(!puntosDescarga[0].cargado) {
                        agregarTotalCargado(puntosDescarga);
                    }
                    $scope.puntosACargar = puntosDescarga;
                    $scope.cargaArticulos = true;
                    //Recorro los puntos
                    puntosDescarga.forEach(function(punto) {
                        //Recorro los articulos cargados en cada punto
                        punto.articulosAgregados.forEach(function(articulo) {
                            var articuloARestar = $scope.articulos.filter(function(art) {
                                return art.idArticulo === articulo.id;
                            });
                            articuloARestar[0].restante -= articulo.cantidad;
                        });
                    });
                }
            }
            function agregarTotalCargado(puntosDescarga) {
                puntosDescarga.map(function(punto) {
                    punto.cantidadACargar = 0;
                    punto.cargado = 0;
                });
                //Agrego cantidad de combustible cargada en los puntos de descarga
                puntosDescarga.forEach(function(punto) {
                    punto.articulosAgregados.forEach(function(articulo) {
                        punto.cargado += articulo.cantidad;
                    });
                });
            }
        }]
    );