osm-directive.js 8.59 KB
angular.module('focaAdminSeguimiento').directive('osm', function() {
    return {
        restrict: 'E',
        link: function(scope, el, attrs) {
            var contenedor = document.createElement('div');
            el.append(contenedor);
            scope.map = L.map(contenedor).setView([attrs.latitud, attrs.longitud], attrs.zoom);
            L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(scope.map);
        },
        controller: ['$scope', '$filter', function($scope, $filter) {
                $scope.markers = [];
            $scope.$watch('marcadores', function() {
                for(var i in $scope.markers) {
                    $scope.map.removeLayer($scope.markers[i]);
                }
                
                $scope.markers = [];
                var observacion = '';
                
                angular.forEach($scope.marcadores, function(marcador) {
                    if ($scope.parametros.actividad === 'Nota de pedido') {
                        observacion = generarObservacion(getNotaPedido(marcador));
                    }

                    if ($scope.parametros.actividad === 'Cobranza') {
                        observacion = getCobranza(marcador);
                    } 

                    if ($scope.parametros.actividad === 'Entrega de producto') {
                        observacion = getEntrega(marcador);
                    }

                    if (observacion) {
                        $scope.markers.push(
                            L.marker([marcador.latitud, marcador.longitud]).addTo($scope.map)
                            .bindPopup(observacion)
                        );
    
                        $scope.markers[0].openPopup();
                    }
                });

                function getNotaPedido(marcador) {
                    var observacion = [];

                    if (!marcador.notaPedido.id) {
                        return false;
                    }
                    
                    var notaPedido = marcador.notaPedido;
                    var textVendedor = notaPedido.idVendedor + ' - ';

                    if (notaPedido.vendedor) {
                        textVendedor += notaPedido.vendedor.NomVen;
                    }

                    observacion.push(['Vendedor', textVendedor]);
                    
                    if (!$scope.parametros.individual) {
                        observacion.push(['Ultima Nota de Pedido', '']);
                    }
                    
                    var textFecha = $filter('date')(marcador.fecha.slice(0,10), 'dd/MM/yyyy') +
                        ' ' + marcador.fecha.slice(11,19);
                    observacion.push(['Fecha', textFecha]);
                    
                    observacion.push(['Nº',
                        $filter('comprobante')([notaPedido.sucursal, notaPedido.numeroNotaPedido ])
                    ]);

                    if (notaPedido.cliente) {
                        observacion.push(['Cliente', notaPedido.cliente.NOM]);
                    }
                    
                    if ($scope.parametros.individual) {
                        observacion.push(['Total', $filter('currency')(notaPedido.total, '$')]);
                        observacion.unshift(['Orden', marcador.orden]);

                        if (marcador.distancia) {
                            observacion.push(['Distancia a casa central',
                                marcador.distancia + 'km'
                            ]);
                        }
                    } else {
                        observacion.push(['Cantidad de nota de pedido',
                            marcador.cantidad
                        ]);

                        observacion.push(['Total Vendido',
                            $filter('currency')(marcador.total, '$')
                        ]);
                    }

                    console.info(marcador, observacion);
                    return observacion;
                }

                function getCobranza(marcador) {
                    observacion += 'Cobrador: ' + marcador.recibo.cobrador.id + ' - ' +
                        marcador.recibo.CFE + '<br/>';

                    if (!$scope.parametros.individual) {
                        observacion += '<b>Ultima Cobranza</b><br/>';
                    }

                    observacion += 'Fecha: ' +
                        $filter('date')(marcador.fecha.slice(0,10), 'dd/MM/yyyy') + ' ' +
                        marcador.fecha.slice(11,19) + '<br/>';
                    observacion += 'Nº: ' + $filter('comprobante')([
                        marcador.sucursal, marcador.idUsuario]) + '<br/>';
                    observacion += 'Cliente: ' + marcador.recibo.cliente.NOM + '<br/>';
                    
                    if ($scope.parametros.individual) {
                        if (marcador.distancia) {
                            observacion += 'Distancia a casa central: ' +
                                marcador.distancia + 'km' + '<br/>';
                            observacion += 'Total Cobrado: ' +
                                    $filter('currency')(marcador.factura.IPA, '$');
                        }
                    } else {
                        observacion += 'Cantidad de cobranzas: ' +
                            marcador.cantidad + '<br/>';
                        observacion += 'Total Cobrado: ' +
                                $filter('currency')(marcador.factura.IPA, '$');
                    }

                    return observacion;
                }

                function getEntrega(marcador) {
                    var observacion = '';
                    var remito = marcador.hojaRutaMovimiento.remito;
                    observacion += 'Vehiculo: ' +
                        remito.hojaRuta.idVehiculo + ' - ' +
                        remito.hojaRuta.vehiculo.tractor  + '<br/>';
                    observacion += 'Transportista: ' + 
                        remito.hojaRuta.transportista.NOM  + '<br/>';
                    observacion += 'Chofer: ' + 
                        remito.hojaRuta.chofer.nombre  + '<br/>';
                    observacion +=  'Hoja de ruta: ' + $filter('comprobante')([
                            remito.hojaRuta.sucursal, 
                            remito.hojaRuta.numeroHojaRuta
                        ]) + '<br/>';

                    if (!$scope.parametros.individual) {
                        observacion += '<b>Ultimo Remito</b><br/>';
                    }

                    observacion += 'Fecha: ' +
                        $filter('date')(marcador.fecha.slice(0,10), 'dd/MM/yyyy') + ' ' +
                        marcador.fecha.slice(11,19) + '<br/>';
                    
                    observacion +=  'Nº: ' + $filter('comprobante')([
                            remito.sucursal, 
                            remito.numeroRemito
                        ]) + '<br/>';
                    observacion += 'Cliente: ' + 
                        remito.cliente.NOM + '<br/>';
                    
                    if ($scope.parametros.individual) {
                        observacion += 'Producto: ' +
                            remito.articulosRemito[0].descripcion + '<br/>';
                        observacion += 'Cantidad entregada: ' +
                            remito.carga + '<br/>';

                        if (marcador.distancia) {
                            observacion += 'Distancia a casa central: ' + marcador.distancia +
                                'km <br/>';
                        }

                        if (marcador.observaciones) {
                            observacion += 'Observaciones: ' + marcador.observaciones;
                        }
                        observacion = 'Orden: ' + marcador.orden + '<br/>' + observacion;
                    } else {
                        observacion += 'Cantidad de entregas: ' + marcador.cantidad;
                    }

                    return observacion;
                }

                function generarObservacion(array) {
                    var resultado = '';

                    for (var i = 0; i < array.length; i++) {
                        resultado += '<b>' + array[i][0] + ': </b>';
                        resultado += array[i][1];

                        if (i < (array.length - 1)) {
                            resultado += '<br/>';
                        }
                    }

                    return resultado;
                }
            });
        }],
        scope: {
            latitud: '=',
            longitud: '=',
            zoom: '=',
            marcadores: '=',
            parametros: '='
        }
    };
});