controller.js 10.5 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: filters.domicilio.Latitud ,
                    longitud: filters.domicilio.Longitud 
                };

                $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: filters.domicilio.Latitud,
                            longitud: filters.domicilio.Longitud
                        };
                        $scope.editando = false;
                    } else {
                        $uibModalInstance.dismiss('cancel');
                    }
                };

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

                $scope.guardar = function(key) {
                    if(key === 13) {
                        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: filters.domicilio.Latitud,
                                longitud: filters.domicilio.Longitud
                            };
                            $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;
                        });
                    });
                }
                function enviarPuntos() {
                    var result = [];
                    $scope.puntosSeleccionados.forEach(function(idx) {
                        result.push($scope.puntosDescarga[idx]);
                    });
                    $uibModalInstance.close(result);
                }
            }]
        );