controller.js 15.6 KB
angular.module('focaCrearHojaRuta') .controller('hojaRutaCtrl',
    [
        '$scope',
        '$uibModal',
        '$location',
        '$filter',
        '$timeout',
        'focaCrearHojaRutaService',
        'focaModalService',
        'focaBotoneraLateralService',
        function($scope, $uibModal, $location, $filter, $timeout,
            focaCrearHojaRutaService, focaModalService, focaBotoneraLateralService) {

            $scope.botonera = focaCrearHojaRutaService.getBotonera();
            $scope.datepickerAbierto = false;

            $scope.show = false;
            $scope.cargando = true;

            function nuevaHojaRuta() {
                $scope.hojaRuta = {
                    fecha: new Date(),
                    litros: 0,
                    chofer: {},
                    vehiculo: {
                        capacidad: 0
                    },
                    transportista: {},
                    tarifario: {
                        costo: null
                    }
                };
            }
            nuevaHojaRuta();
            $scope.showCabecera = true;

            $scope.now = new Date();
            $scope.puntoVenta = '0000';
            $scope.comprobante = '00000000';
            $scope.remitosTabla = [];
            $scope.idLista = undefined;

            //SETEO BOTONERA LATERAL
            $timeout(function() {
                focaBotoneraLateralService.showSalir(true);
                focaBotoneraLateralService.showPausar(true);
                focaBotoneraLateralService.showGuardar(true, $scope.crearHojaRuta);
            });

            focaCrearHojaRutaService.getNumeroHojaRuta().then(
                function(res) {
                    $scope.puntoVenta = $scope.rellenar(res.data.sucursal, 4);
                    $scope.comprobante = $scope.rellenar(res.data.numeroHojaRuta, 8);
                },
                function(err) {
                    focaModalService.alert('La terminal no esta configurada correctamente');
                    console.info(err);
                }
            );
            $scope.crearHojaRuta = function() {
                if(!$scope.remitosTabla.length) {
                    focaModalService.alert('Ingrese Remitos');
                    return;
                }
                if(!$scope.hojaRuta.chofer.id) {
                    focaModalService.alert('Ingrese Chofer');
                    return;
                }
                if(!$scope.hojaRuta.vehiculo.id) {
                    focaModalService.alert('Ingrese Vehiculo');
                    return;
                }
                if(!$scope.hojaRuta.transportista.COD) {
                    focaModalService.alert('Ingrese Transportista');
                    return;
                }
                if(!$scope.hojaRuta.tarifario.costo) {
                    focaModalService.alert('Ingrese Tarifario');
                    return;
                }
                var date = new Date();
                var save = {
                    hojaRuta: {
                        id: 0,
                        fechaCreacion: new Date(date.getTime()).toISOString().slice(0, 19)
                            .replace('T', ' '),
                        idTransportista: $scope.hojaRuta.transportista.COD,
                        idChofer: $scope.hojaRuta.chofer.id,
                        idVehiculo: $scope.hojaRuta.vehiculo.id,
                        tarifaFlete: $scope.hojaRuta.tarifario.costo,
                        fechaReparto: $scope.fechaReparto.toISOString().substring(0, 10),
                        estado: 0
                    },
                    remitos: $scope.remitosTabla
                };

                focaCrearHojaRutaService.crearHojaRuta(save).then(
                    function(data) {
                        focaModalService.alert(
                            'Hoja ruta creada Nº: ' +
                            $scope.rellenar(data.data.sucursal, 4) +
                            '-' +
                            $scope.rellenar(data.data.numeroHojaRuta, 8)
                        );
                        nuevaHojaRuta();
                        $scope.remitosTabla = [];
                        $scope.$broadcast('cleanCabecera');

                        focaCrearHojaRutaService.getNumeroHojaRuta().then(function(res) {
                            $scope.comprobante = $scope.rellenar(res.data.numeroHojaRuta, 8);
                        });
                    },
                    function(error) {
                        focaModalService.alert('Hubo un error al crear la hoja de ruta');
                        console.info(error);
                    }
                );
            };

            $scope.seleccionarTransportista = function() {
            if(eligioPreConfirmado()) return;
                var modalInstance = $uibModal.open(
                    {
                        ariaLabelledBy: 'Busqueda de Transportista',
                        templateUrl: 'modal-proveedor.html',
                        controller: 'focaModalProveedorCtrl',
                        size: 'lg',
                        resolve: {
                            transportista: function() {
                                return true;
                            }
                        }
                    }
                );
                modalInstance.result.then(
                    function(proveedor) {
                        $scope.hojaRuta.transportista = proveedor;
                        $scope.$broadcast('addCabecera', {
                            label: 'Transportista:',
                            valor: proveedor.NOM
                        });
                    }, function() {

                    }
                );
            };

            $scope.seleccionarChofer = function() {
                var modalInstance = $uibModal.open(
                    {
                        ariaLabelledBy: 'Busqueda de Chofer',
                        templateUrl: 'modal-chofer.html',
                        controller: 'focaModalChoferController',
                        size: 'lg'
                    }
                );

                modalInstance.result.then(
                    function(chofer) {
                        $scope.hojaRuta.chofer = chofer;
                        $scope.$broadcast('addCabecera', {
                            label: 'Chofer:',
                            valor: chofer.nombre
                        });
                    }, function() {
                        // funcion ejecutada cuando se cancela el modal
                    }
                );
            };

            $scope.seleccionarVehiculo = function() {
                if(eligioPreConfirmado()) return;
                modalVehiculos();
            };

            $scope.seleccionarTarifario = function() {
                var modalInstance = $uibModal.open(
                    {
                        ariaLabelledBy: 'Busqueda de Tarifario',
                        templateUrl: 'modal-tarifa-flete.html',
                        controller: 'focaModalTarifaFleteController',
                        size: 'lg',
                        resolve: {
                            parametrosTarifaFlete: function() {
                                return $scope.hojaRuta.tarifario.costo;
                            }
                        }
                    }
                );

                modalInstance.result.then(
                    function(tarifario) {
                        $scope.hojaRuta.tarifario = tarifario;
                        $scope.$broadcast('addCabecera', {
                            label: 'Tarifario:',
                            valor: tarifario.costo
                        });
                    }, function() {
                        // funcion ejecutada cuando se cancela el modal
                    }
                );
            };

            $scope.seleccionarRemitos = function() {
                if(eligioPreConfirmado() || !eligioFecha() || !eligioVehiculo()) return;
                var modalInstance = $uibModal.open(
                    {
                        ariaLabelledBy: 'Busqueda de Remito',
                        templateUrl: 'foca-modal-remito.html',
                        controller: 'focaModalRemitoController',
                        size: 'lg',
                        resolve: {usadoPor: function() {return 'hojaRuta';}}
                    }
                );
                modalInstance.result.then(
                    function(remito) {
                        // TODO: borrar cuando no se use definitivamente
                        // for (var i = $scope.remitosTabla.length - 1; i >= 0; i--) {
                        //     if ($scope.remitosTabla[i].id === remito.id) {
                        //         focaModalService.alert('Remito ya incluido');
                        //         return;
                        //     }
                        // }

                        // var litros = 0;
                        // for (var j = remito.articulosRemito.length - 1; j >= 0; j--) {
                        //     litros = litros + parseFloat(remito.articulosRemito[j].cantidad);
                        // }

                        // if ($scope.hojaRuta.litros >= $scope.hojaRuta.vehiculo.capacidad) {
                        //     focaModalService.alert(
                        //         'Debe ingresar toda la información para el transporte'
                        //     );
                        //     return;
                        // }

                        //if($scope.hojaRuta.litros + litros >= $scope.hojaRuta.vehiculo.capacidad)
                        // {
                        //     var litrostotales = litros;
                        //     litros = $scope.hojaRuta.vehiculo.capacidad - $scope.hojaRuta.litros;
                        //     focaModalService.alert(
                        //         'La carga excede la capacidad disponible del vehiculo. ' +
                        //         'Excedente no cargado: ' + (litrostotales - litros) + ' litros'
                        //     );
                        // }

                        // remito.litros = litros;
                        // $scope.hojaRuta.litros = $scope.hojaRuta.litros + litros;
                        $scope.cargarCisterna(remito.id).then(function() {
                            $scope.remitosTabla.push(remito);
                        }, function() {
                            // funcion ejecutada cuando se cancela el modal
                        });
                    }, function() {
                        // funcion ejecutada cuando se cancela el modal
                    }
                );
            };

            $scope.seleccionarVehiculosPrecargados = function() {
                if(!eligioFecha()) return;
                modalVehiculos(true);
            };

            $scope.cargarCisterna = function(idRemito) {
                if(!eligioFecha() || !$scope.hojaRuta.vehiculo.id) return;
                var modalInstance = $uibModal.open(
                    {
                        ariaLabelledBy: 'Busqueda de Vehiculo',
                        templateUrl: 'foca-detalle-vehiculo.html',
                        controller: 'focaDetalleVehiculo',
                        size: 'lg',
                        resolve: {
                            idVehiculo: function() {return $scope.hojaRuta.vehiculo.id;},
                            idRemito: function() {return idRemito;},
                            fechaReparto: function() {return $scope.fechaReparto;}
                        }
                    }
                );
                return modalInstance.result;
            };

            $scope.seleccionarFechaEntrega = function() {
                if(!$scope.fechaReparto) {
                    elegirFecha();
                    return;
                }
                focaModalService
                    .confirm('Si cambia la fecha se perderán los datos actuales')
                    .then(function() {
                        elegirFecha();
                    }, function() {
                        return ;
                    });
            };

            function elegirFecha() {
                focaModalService.modalFecha('Fecha de entrega').then(function(fecha) {
                    $scope.$broadcast('addCabecera', {
                        label: 'Fecha de entrega:',
                        valor: fecha.toLocaleDateString()
                    });
                    $scope.fechaReparto = fecha;
                    nuevaHojaRuta();
                });
            }

            $scope.rellenar = function(relleno, longitud) {
                relleno = '' + relleno;
                while (relleno.length < longitud) {
                    relleno = '0' + relleno;
                }
                return relleno;
            };

            function eligioPreConfirmado() {
                if($scope.eligioPreConfirmado) {
                    focaModalService.alert('No puede elegir si eligió un vehiculo pre cargado');
                        return true;
                }
                return false;
            }

            function eligioFecha() {
                if(!$scope.fechaReparto) {
                    focaModalService.alert('Primero seleccione fecha de reparto');
                    return false;
                }
                return true;
            }

            function eligioVehiculo() {
                if(!$scope.hojaRuta.vehiculo.id) {
                    focaModalService.alert('Primero seleccione vehiculo');
                    return false;
                }
                return true;
            }

            function modalVehiculos(preCargados) {
                var query = '';
                var titulo = '';
                if(preCargados) {
                    query = '/vehiculo/obtener/pre-confirmados/' + $scope.fechaReparto
                        .toISOString().substring(0, 10);
                    titulo = 'Búsqueda de vehiculos pre confirmados';
                }else {
                    query = '/vehiculo';
                    titulo = 'Búsqueda de vehículos';
                }
                var columnas = {
                    nombre: ['Código', 'tractor', 'Semi'],
                    propiedad: ['codigo', 'tractor', 'semi']
                };
                focaModalService.modal(columnas, query, titulo).then(function(vehiculo) {
                    $scope.hojaRuta.vehiculo = vehiculo;
                    $scope.hojaRuta.transportista = vehiculo.transportista;
                    if(preCargados) {
                        $scope.eligioPreConfirmado = true;
                        $scope.hojaRuta.vehiculo = vehiculo;
                        $scope.$broadcast('addCabecera', {
                            label: 'Transportista:',
                            valor: vehiculo.transportista.NOM
                        });
                        focaCrearHojaRutaService
                            .getRemitosByIdVehiculo(vehiculo.id, $scope.fechaReparto)
                                .then(function(res) {
                                    $scope.remitosTabla = res.data;
                                });
                    }
                    $scope.$broadcast('addCabecera', {
                        label: 'Tractor:',
                        valor: vehiculo.tractor
                    });
                    $scope.$broadcast('addCabecera', {
                        label: 'Semi:',
                        valor: vehiculo.semi
                    });
                    $scope.$broadcast('addCabecera', {
                        label: 'Capacidad:',
                        valor: vehiculo.capacidad
                    });
                });
            }
        }
    ]);