// Vérifier que les coordonnées sont disponibles avant d'initialiser la carte
if (feature_lon !== null && feature_lat !== null) {
const map = new maplibregl.Map({
style: window.MAP_STYLE_LIGHT,
center: [feature_lon, feature_lat],
zoom: 17,
pitch: 45,
bearing: -17.6,
container: 'map',
antialias: true
});
map.on('load', () => {
const pointData = {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [feature_lon, feature_lat]
},
properties: {
name: '...'
}
}
]
};
// Add the circle as a GeoJSON source
map.addSource('warehouse', {
type: 'geojson',
data: pointData
});
map.addLayer({
'id': 'warehouse',
'type': 'circle',
'source': 'warehouse',
'paint': {
'circle-radius': {
'base': 1.75,
'stops': [
[12, 2],
[22, 300]
]
},
'circle-color': '#0094ff',
'circle-opacity': 0.7
}
});
});
} else {
// Afficher un message si pas de coordonnées
const mapContainer = document.getElementById('map');
if (mapContainer) {
mapContainer.innerHTML = '
Aucune localisation disponible pour cet entrepôt.
';
}
}
// Ajouter les boutons d'action pour chaque ligne du tableau
function actionsFormatter(value, row, index) {
resp = ``;
if (row.lon) {
resp = resp +
`
`;
}
return resp;
}
// Initialisation après le chargement de la page
$( document ).ready(function() {
$('#warehouse-locations-table').bootstrapTable();
});
// Filtrage des produits
document.addEventListener('DOMContentLoaded', function() {
const searchInput = document.getElementById('product-search');
const alertsOnlyCheckbox = document.getElementById('show-alerts-only');
const stockOnlyCheckbox = document.getElementById('show-stock-only');
const noResultsDiv = document.getElementById('no-results');
if (!searchInput || !alertsOnlyCheckbox || !stockOnlyCheckbox) return;
function filterProducts() {
const searchTerm = searchInput.value.toLowerCase().trim();
const showAlertsOnly = alertsOnlyCheckbox.checked;
const showStockOnly = stockOnlyCheckbox.checked;
const allRows = document.querySelectorAll('.product-row');
const categorySections = document.querySelectorAll('.category-section');
let visibleCount = 0;
// Filtrer chaque ligne de produit
allRows.forEach(row => {
const productName = row.getAttribute('data-product-name') || '';
const productCode = row.getAttribute('data-product-code') || '';
const isAlert = row.getAttribute('data-is-alert') === 'true';
const stock = parseInt(row.getAttribute('data-stock') || '0', 10);
const matchesSearch = !searchTerm ||
productName.includes(searchTerm) ||
productCode.includes(searchTerm);
const matchesAlert = !showAlertsOnly || isAlert;
const matchesStock = !showStockOnly || stock > 0;
if (matchesSearch && matchesAlert && matchesStock) {
row.style.display = '';
visibleCount++;
} else {
row.style.display = 'none';
}
});
// Masquer les catégories vides
categorySections.forEach(section => {
const visibleRows = section.querySelectorAll('.product-row:not([style*="display: none"])');
if (visibleRows.length === 0) {
section.style.display = 'none';
} else {
section.style.display = '';
// Mettre à jour le badge de comptage
const badge = section.querySelector('.category-header .badge');
if (badge) {
badge.textContent = visibleRows.length;
}
}
});
// Afficher le message "aucun résultat"
if (visibleCount === 0) {
noResultsDiv.classList.remove('d-none');
} else {
noResultsDiv.classList.add('d-none');
}
}
// Écouter les événements de filtre
searchInput.addEventListener('input', filterProducts);
alertsOnlyCheckbox.addEventListener('change', filterProducts);
stockOnlyCheckbox.addEventListener('change', filterProducts);
// Filtrage initial (au cas où les paramètres sont déjà définis)
filterProducts();
});