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 { 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: -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; }); }); } function enviarPuntos(){ var result = []; $scope.puntosSeleccionados.forEach(function(idx) { result.push($scope.puntosDescarga[idx]); }); $uibModalInstance.close(result); } }] );