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) {
var icon = new L.Icon({
iconUrl: 'img/marker-icon-2x-blue.png',
shadowUrl: 'img/marker-shadow.png',
iconSize: [25, 41],
iconAnchor: [12, 41],
popupAnchor: [1, -34],
shadowSize: [41, 41]
});
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 (marcador.hojaRutaMovimiento.remito.rechazado) {
icon = new L.Icon({
iconUrl: 'img/marker-icon-2x-yellow.png',
shadowUrl: 'img/marker-shadow.png',
iconSize: [25, 41],
iconAnchor: [12, 41],
popupAnchor: [1, -34],
shadowSize: [41, 41]
});
} else {
icon = new L.Icon({
iconUrl: 'img/marker-icon-2x-green.png',
shadowUrl: 'img/marker-shadow.png',
iconSize: [25, 41],
iconAnchor: [12, 41],
popupAnchor: [1, -34],
shadowSize: [41, 41]
});
}
}
if (marcador.visita) icon.options.iconUrl = 'img/marker-icon-2x-yellow.png';
if (observacion) {
$scope.markers.push(
L.marker(
[marcador.latitud, marcador.longitud],
{icon: icon}).addTo($scope.map)
.bindPopup(observacion)
);
$scope.markers[0].openPopup();
}
});
function getNotaPedido(marcador) {
var observacion = [];
if(marcador.visita) {
return getVisita(marcador);
} else if(!marcador.notaPedido.id) {
return false;
}
var notaPedido = marcador.notaPedido;
if (notaPedido.vendedor) {
observacion.push([
'Vendedor',
notaPedido.vendedor.NUM + ' - ' + notaPedido.vendedor.NOM
]);
}
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, '$')
]);
}
return observacion;
}
function getCobranza(marcador) {
if(marcador.visita) {
return generarObservacion(getVisita(marcador));
}
observacion = '';
observacion += 'Cobrador: ' + marcador.recibo.cobrador.NUM + ' - ' +
marcador.recibo.CFE + '
';
if (!$scope.parametros.individual) {
observacion += 'Ultima Cobranza
';
}
observacion += 'Fecha: ' +
$filter('date')(marcador.fecha.slice(0,10), 'dd/MM/yyyy') + ' ' +
marcador.fecha.slice(11,19) + '
';
observacion += 'Nº: ' + $filter('comprobante')([
marcador.recibo.PVE, marcador.recibo.NCO]) + '
';
observacion += 'Cliente: ' + marcador.recibo.cliente.NOM + '
';
var totalCobrado = 0;
for (var i = 0; i < marcador.recibo.cuerpos.length; i++) {
if (marcador.recibo.cuerpos[i].LOP === 'P') {
totalCobrado += marcador.recibo.cuerpos[i].IMP;
}
}
if ($scope.parametros.individual) {
if (marcador.distancia) {
observacion += 'Distancia a casa central: ' +
marcador.distancia + 'km' + '
';
observacion += 'Total Cobrado: ' +
$filter('currency')(totalCobrado, '$');
}
} else {
observacion += 'Cantidad de cobranzas: ' +
marcador.cantidad + '
';
observacion += 'Total Cobrado: ' +
$filter('currency')(totalCobrado, '$');
}
return observacion;
}
function getEntrega(marcador) {
var observacion = '';
var remito = marcador.hojaRutaMovimiento.remito;
observacion += 'Vehiculo: ' +
remito.hojaRuta.vehiculo.codigo + ' - ' +
remito.hojaRuta.vehiculo.tractor + '
';
observacion += 'Transportista: ' +
remito.hojaRuta.transportista.NOM + '
';
observacion += 'Chofer: ' +
remito.hojaRuta.chofer.nombre + '
';
observacion += 'Hoja de ruta: ' + $filter('comprobante')([
remito.hojaRuta.sucursal,
remito.hojaRuta.numeroHojaRuta
]) + '
';
if (!$scope.parametros.individual) {
observacion += 'Ultimo Remito
';
}
observacion += 'Fecha: ' +
$filter('date')(marcador.fecha.slice(0,10), 'dd/MM/yyyy') + ' ' +
marcador.fecha.slice(11,19) + '
';
observacion += 'Nº: ' + $filter('comprobante')([
remito.sucursal,
remito.numeroRemito
]) + '
';
observacion += 'Cliente: ' +
remito.cliente.NOM + '
';
if ($scope.parametros.individual) {
// observacion += 'Producto: ' +
// remito.articulosRemito[0].descripcion + '
';
// observacion += 'Cantidad entregada: ' +
// remito.carga + '
';
if (marcador.distancia) {
observacion += 'Distancia a casa central: ' + marcador.distancia +
'km
';
}
observacion = 'Orden: ' + marcador.orden + '
' + observacion;
} else {
observacion += 'Cantidad de entregas: ' + marcador.cantidad;
}
observacion += '
';
if (remito.rechazado) {
observacion += 'Motivo del rechazo: ' + remito.motivoRechazo;
}
return observacion;
}
function getVisita(marcador) {
var observacion = [];
var textFecha = $filter('date')(marcador.fecha.slice(0,10), 'dd/MM/yyyy') +
' ' + marcador.fecha.slice(11,19);
var prospecto = marcador.visita.cliente.ES_PROS;
var tipoVisitante =
(marcador.visita.tipoVisitante) === 1 ? 'Vendedor' : 'Cobrador';
var visitante = marcador.visita.visitante.NUM + ' - ' +
marcador.visita.visitante.NOM;
observacion.push([tipoVisitante, visitante]);
observacion.push(['Fecha', textFecha]);
observacion.push(['Cliente', marcador.visita.cliente.NOM]);
observacion.push(['Es prospecto', (prospecto) ? 'Si' : 'No']);
return observacion;
}
function generarObservacion(array) {
var resultado = '';
for (var i = 0; i < array.length; i++) {
resultado += '' + array[i][0] + ': ';
resultado += array[i][1];
if (i < (array.length - 1)) {
resultado += '
';
}
}
return resultado;
}
});
$scope.$on('moveMap', function(evt, data) {
var center = new L.LatLng(data.latitud, data.longitud);
$scope.map.flyTo(center, 11, {duration: 0.5});
$scope.markers[data.indice].openPopup();
});
}],
scope: {
latitud: '=',
longitud: '=',
zoom: '=',
marcadores: '=',
parametros: '='
}
};
});