controller.js 13.8 KB
angular.module('focaModalDetalleHojaRuta')
    .controller('focaModalDetalleHojaRutaController', 
        [
            '$filter',
            '$scope',
            '$uibModalInstance',
            'parametros',
            'focaModalDetalleHojaRutaService',
            'focaModalService',
            'focaSeguimientoService',
            '$uibModal',
            function($filter, $scope, $uibModalInstance, parametros, focaModalDetalleHojaRutaService,
                focaModalService, focaSeguimientoService, $uibModal)
            {
                //Seteo variables
                $scope.remito = parametros.remito;
                $scope.cisternas = parametros.remito.cisternas;
                $scope.articuloSeleccionado = {};
                $scope.aDescargar = [];
                $scope.cargando = false;

                if ($scope.remito.rechazado) {

                    $scope.readonly = true;
                }

                //Datos
                // var promesaRemito = focaModalDetalleHojaRutaService
                //     .getRemitoById(idRemito);
                // var promesaCisternas = focaModalDetalleHojaRutaService
                //     .getCisternasByIdRemito(idRemito);

                // Promise.all([promesaRemito, promesaCisternas]).then(function(res) {
                //     $scope.cargando = false;
                //     $scope.remito = res[0].data;
                //     $scope.cisternas = res[1].data;
                //     var articuloAChequear = $scope.remito.articulosRemito.filter(
                //         function(articulo) {
                //             return !articulo.descargado;
                //         });
                //     if(!articuloAChequear.length || $scope.remito.rechazado) {
                //         $scope.readonly = true;
                //         $scope.cambio($scope.remito.articulosRemito[0]);
                //     }else {
                //         $scope.cambio(articuloAChequear[0]);
                //     }
                //     $scope.$digest();
                // }, function() {
                //     focaModalService.alert('El servicio no responde intente más tarde');
                //     $uibModalInstance.dismiss();
                // });
                $scope.cambio = function(articulo) {
                    if(!$scope.articuloSeleccionado.descargado) {
                        $scope.articuloSeleccionado.cantidadDescargada = 0;
                    }
                    $scope.aDescargar = [];
                    $scope.articuloSeleccionado = articulo;
                };
                $scope.descargar = function(key) {
                    if(key === 13) {
                        $scope.cargando = true;
                        var hojaRutaMovimientos = [];
                        var cisternaMovimientos = [];
                        var cisternaCargas = [];
                        var totalADescargar = 0;
                        for(var i = 0; i < $scope.aDescargar.length; i++) {
                            totalADescargar += $scope.aDescargar[i] || 0;
                        }
                        focaModalService
                            .confirm('¿Desea descargar ' + totalADescargar + ' litros de ' +
                            $scope.articuloSeleccionado.descripcion + '?')
                            .then(descargar, function() {
                                $scope.cargando = false;
                            });
                    }
                    function descargar() {
                        for(var i = 0; i < $scope.cisternas.length; i++) {
                            var descarga = $scope.aDescargar[i];
                            var cisternaCarga = $scope.cisternas[i].cisternaCarga;
                            if(!descarga) continue;
                            if(descarga > cisternaCarga.cantidad) {
                                focaModalService.alert('La cantidad a descargar no debe ser ' +
                                    'mayor a la cantidad de la cisterna');
                                $scope.cargando = false;
                                return;
                            }
                            cisternaCarga.cantidad -= descarga;

                            //Guardar
                            var now = new Date();
                            var cisternaMovimiento = {
                                fecha: now.toISOString().slice(0, 19).replace('T', ' '),
                                cantidad: descarga,
                                metodo: 'descarga',
                                idCisternaCarga: cisternaCarga.id,
                                idRemito: $scope.remito.id
                            };
                            var hojaRutaMovimiento = {
                                reciboDescarga: $scope.numeroRecibo,
                                idRemito: $scope.remito.id
                            };
                            delete cisternaCarga.articulo;
                            cisternaCargas.push(cisternaCarga);
                            cisternaMovimientos.push(cisternaMovimiento);
                            hojaRutaMovimientos.push(hojaRutaMovimiento);
                        }
                        var save = {
                            cisternaCargas: cisternaCargas,
                            cisternaMovimientos: cisternaMovimientos,
                            hojaRutaMovimientos: hojaRutaMovimientos,
                            articulo: $scope.articuloSeleccionado
                        };

                        focaSeguimientoService.obtenerPosicion(getPosition)

                        var posicion;

                        function getPosition(position) {

                            posicion = {
                                latitud: position.coords.latitude,
                                longitud: position.coords.longitude,
                                actividad: 'Entrega de producto',
                                observaciones: $scope.remito.observaciones
                            }
                        }

                        $scope.aDescargar = [];
                        $scope.remito.observaciones = '';

                        if ($scope.articuloSeleccionado.cantidadDescargada ===
                            $scope.articuloSeleccionado.cantidad ) {

                                $scope.articuloSeleccionado.descargado = true;
                        }

                        var siguienteArticulo = $scope.remito.articulosRemito.filter(
                            function(articulo) {
                                return articulo.id != $scope.articuloSeleccionado.id;
                            }
                        );

                        if (siguienteArticulo.length) {
                            $scope.cambio(siguienteArticulo[0]);
                        }

                        //TODO: enviar puntos de descarga, se quita para la demo.
                        // $scope.actualizarPuntoDescarga();

                        focaModalDetalleHojaRutaService
                            .postMovimientoHojaRuta(save)
                            .then(guardarSeguimiento);

                        function guardarSeguimiento(res) {

                            posicion.idComprobante = res.data[0].id;
                            focaModalDetalleHojaRutaService.guardarPosicion({ posicion: posicion });
                        }
                    }
                };

                $scope.cancel = function() {
                    $uibModalInstance.dismiss('cancel');
                };

                $scope.distribucionDisponible = function() {
                    return $scope.articuloSeleccionado.cantidadDescargada && 
                        $scope.articuloSeleccionado.cantidadDescargada <=
                        $scope.articuloSeleccionado.cantidad;
                };

                $scope.actualizarArticulo = function() {
                    $scope.articuloSeleccionado.cantidadDescargada = 0;
                    for(var i = 0; i < $scope.aDescargar.length; i++) {
                        $scope.articuloSeleccionado.cantidadDescargada +=
                            parseFloat($scope.aDescargar[i]) || 0;
                    }
                };

                $scope.actualizarPuntoDescarga = function() {
                    var modalInstance = $uibModal.open(
                        {
                            ariaLabelledBy: 'Actualizar punto de descarga',
                            templateUrl: 'modal-actualizar-punto-descarga.html',
                            controller: 'focaModalActualizarPuntoDescargaController',
                            resolve: {
                                notaPedido: function() {
                                    return $scope.remito.notaPedido;
                                }
                            },
                            size: 'lg'
                        }
                    );
                    modalInstance.result.then(function() {
                        success().then(function() {
                            $uibModalInstance.close($scope.remito);
                        });
                    }, function() {
                        success().then(function() {
                            $uibModalInstance.close($scope.remito);
                        });
                    });
                };

                $scope.rechazar = function() {
                    focaModalService
                        .prompt({
                            titulo: 'Aclare el motivo de rechazo'
                        })
                        .then(function(motivo) {
                            $scope.cargando = true;
                            var remitoRechazado = $.extend(true, {}, $scope.remito);
                            delete remitoRechazado.articulosRemito;
                            delete remitoRechazado.notaPedido;
                            delete remitoRechazado.cisternas;
                            remitoRechazado.rechazado = true;
                            remitoRechazado.motivoRechazo = motivo;
                            remitoRechazado.fechaRemito =
                                remitoRechazado.fechaRemito.slice(0, 19).replace('T', ' ');

                            focaModalDetalleHojaRutaService.rechazarRemito(remitoRechazado)
                                .then(function(res) {
                                    focaSeguimientoService.guardarPosicion(
                                        'Entrega de producto',
                                        res.data[1].id,
                                        motivo);
                                    success();
                                    })
                                .catch(error);
                            $scope.readonly = true;
                        });
                };

                //funciones
                function error(error) {
                    focaModalService.alert('Hubo un error ' + error);
                }
                function success() {
                    $scope.cargando = false;
                    return focaModalService.alert('Operación realizada con éxito');
                }

                var articuloAChequear = $scope.remito.articulosRemito.filter(
                    function(articulo) {
                        return !articulo.descargado;
                    });

                if (!articuloAChequear.length || $scope.remito.rechazado) {
                    $scope.readonly = true;
                    $scope.cambio($scope.remito.articulosRemito[0]);
                } else {
                    $scope.cambio(articuloAChequear[0]);
                }

            }
        ])
    .controller('focaModalActualizarPuntoDescargaController', 
        [
            '$scope',
            '$uibModalInstance',
            'focaSeguimientoService',
            'focaModalService',
            'notaPedido',
            'focaModalDetalleHojaRutaService',
            function($scope, $uibModalInstance, focaSeguimientoService,
                focaModalService, notaPedido, focaModalDetalleHojaRutaService)
            {
                $scope.notaPedido = notaPedido;
                $scope.descripcion = '';
                focaSeguimientoService.obtenerPosicion(function(res) {
                    $scope.posicion = res.coords;
                });

                $scope.cancel = function() {
                    if ($scope.ingreso) {
                        $scope.ingreso = false;
                    } else {
                        $uibModalInstance.dismiss();
                    }
                };

                $scope.select = function(puntoDescarga) {
                    if (!$scope.posicion) {
                        focaModalService.alert('No se pudo obtener la ubicación');
                        return;
                    }
                    puntoDescarga.latitud = $scope.posicion.latitude;
                    puntoDescarga.longitud = $scope.posicion.longitude;
                    focaModalDetalleHojaRutaService.guardarPuntoDescarga(puntoDescarga);
                    $uibModalInstance.close();
                };

                $scope.guardar = function() {
                    if (!$scope.posicion) {
                        focaModalService.alert('No se pudo obtener la ubicación');
                        return;
                    }
                    focaModalDetalleHojaRutaService
                        .guardarPuntoDescarga({
                            id: 0,
                            id_cliente: $scope.notaPedido.idCliente,
                            id_da_config_0: $scope.notaPedido.idDomicilio,
                            descripcion: $scope.descripcion,
                            latitud: $scope.posicion.latitude,
                            longitud: $scope.posicion.longitude
                        })
                        .then(function(res) {
                            $uibModalInstance.close(res.data);
                        });
                };

            }
        ]
    );