feat: add price history mock data generation and enable date range filtering for price history chart

This commit is contained in:
2026-06-22 03:42:15 -04:00
parent 65b39e8092
commit 778eca758f
2 changed files with 80 additions and 5 deletions

View File

@@ -3,22 +3,53 @@ document.addEventListener("DOMContentLoaded", function () {
const COLORS = ['#0d6efd', '#198754', '#dc3545', '#ffc107', '#0dcaf0'];
let priceChartInstance = null;
let rawChartData = [];
let currentProdId = null;
let currentProdName = "";
window.showHistory = async function (prodId, prodName) {
currentProdId = prodId;
currentProdName = prodName;
const modal = new bootstrap.Modal(document.getElementById('chartModal'));
document.getElementById('chartModalTitle').innerText = 'Fluctuación de Precio: ' + prodName;
modal.show();
const res = await fetch(`/admin/api/productos/${prodId}/historial`);
const data = await res.json();
rawChartData = await res.json();
const zonas = [...new Set(data.map(d => d.zona))];
const fechas = [...new Set(data.map(d => d.fecha.split(' ')[0]))].sort();
// Initialize dates in input fields if not set or reset
const dates = rawChartData.map(d => d.fecha.split(' ')[0]);
if (dates.length > 0) {
document.getElementById('chartFilterDesde').value = dates[0];
document.getElementById('chartFilterHasta').value = dates[dates.length - 1];
} else {
document.getElementById('chartFilterDesde').value = '';
document.getElementById('chartFilterHasta').value = '';
}
renderChart();
};
function renderChart() {
const desde = document.getElementById('chartFilterDesde').value;
const hasta = document.getElementById('chartFilterHasta').value;
let filteredData = rawChartData;
if (desde) {
filteredData = filteredData.filter(d => d.fecha.split(' ')[0] >= desde);
}
if (hasta) {
filteredData = filteredData.filter(d => d.fecha.split(' ')[0] <= hasta);
}
const zonas = [...new Set(filteredData.map(d => d.zona))];
const fechas = [...new Set(filteredData.map(d => d.fecha.split(' ')[0]))].sort();
const datasets = zonas.map((zona, index) => {
let lastPrice = 0;
const dataPoints = fechas.map(f => {
const hits = data.filter(d => d.zona === zona && d.fecha.startsWith(f));
const hits = filteredData.filter(d => d.zona === zona && d.fecha.startsWith(f));
if (hits.length > 0) {
lastPrice = hits[hits.length - 1].price;
}
@@ -51,5 +82,10 @@ document.addEventListener("DOMContentLoaded", function () {
}
}
});
};
}
const btnFilter = document.getElementById('btnFilterChart');
if (btnFilter) {
btnFilter.addEventListener('click', renderChart);
}
});