|
@@ -77,7 +77,7 @@
|
|
|
<h3 class="chart-title">Tesserati per Stagione</h3>
|
|
<h3 class="chart-title">Tesserati per Stagione</h3>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="chart-body">
|
|
<div class="chart-body">
|
|
|
- <div style="display: grid; grid-template-columns: 1fr 300px; gap: 1rem; align-items: start;">
|
|
|
|
|
|
|
+ <div style="display: grid; grid-template-columns: 1fr 500px; gap: 1rem; align-items: start;">
|
|
|
<div class="chart-container">
|
|
<div class="chart-container">
|
|
|
<canvas id="members-chart-{{ str_replace('-', '', $seasonFilter) }}"></canvas>
|
|
<canvas id="members-chart-{{ str_replace('-', '', $seasonFilter) }}"></canvas>
|
|
|
</div>
|
|
</div>
|
|
@@ -597,14 +597,18 @@
|
|
|
if (!container) return;
|
|
if (!container) return;
|
|
|
|
|
|
|
|
const seasonLabels = membersData.labels;
|
|
const seasonLabels = membersData.labels;
|
|
|
- const memberCounts = membersData.datasets[0].data;
|
|
|
|
|
|
|
+ const totalDataset = membersData.datasets.find(d => d.label === 'Totale Membri Tesserati');
|
|
|
|
|
+ const cardTypeDatasets = membersData.datasets.filter(d => d.label !== 'Totale Membri Tesserati');
|
|
|
|
|
+
|
|
|
|
|
+ const memberCounts = totalDataset ? totalDataset.data : [];
|
|
|
|
|
|
|
|
let tableHtml = `
|
|
let tableHtml = `
|
|
|
<div class="members-table">
|
|
<div class="members-table">
|
|
|
<div class="table-header">
|
|
<div class="table-header">
|
|
|
<div class="table-cell">Stagione</div>
|
|
<div class="table-cell">Stagione</div>
|
|
|
- <div class="table-cell">Tesserati</div>
|
|
|
|
|
|
|
+ <div class="table-cell">Totale</div>
|
|
|
<div class="table-cell">Variazione</div>
|
|
<div class="table-cell">Variazione</div>
|
|
|
|
|
+ <div class="table-cell">Tipologie</div>
|
|
|
</div>
|
|
</div>
|
|
|
`;
|
|
`;
|
|
|
|
|
|
|
@@ -626,13 +630,38 @@
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // Build card type breakdown
|
|
|
|
|
+ let cardTypeBreakdown = '';
|
|
|
|
|
+ cardTypeDatasets.forEach((dataset, datasetIndex) => {
|
|
|
|
|
+ const count = dataset.data[index] || 0;
|
|
|
|
|
+ if (count > 0) {
|
|
|
|
|
+ const color = dataset.borderColor || '#6b7280';
|
|
|
|
|
+ cardTypeBreakdown += `
|
|
|
|
|
+ <div class="card-type-item">
|
|
|
|
|
+ <span class="card-type-indicator" style="background-color: ${color}"></span>
|
|
|
|
|
+ <span class="card-type-name">${dataset.label}</span>
|
|
|
|
|
+ <span class="card-type-count">${count}</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ `;
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ if (!cardTypeBreakdown) {
|
|
|
|
|
+ cardTypeBreakdown = '<div class="no-card-types">Nessun dettaglio</div>';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
tableHtml += `
|
|
tableHtml += `
|
|
|
- <div class="table-row ${rowClass}">
|
|
|
|
|
- <div class="table-cell season-name">${season}</div>
|
|
|
|
|
- <div class="table-cell members-count">${new Intl.NumberFormat('it-IT').format(current)}</div>
|
|
|
|
|
- <div class="table-cell variation">${variationText}</div>
|
|
|
|
|
- </div>
|
|
|
|
|
- `;
|
|
|
|
|
|
|
+ <div class="table-row ${rowClass}">
|
|
|
|
|
+ <div class="table-cell season-name">${season}</div>
|
|
|
|
|
+ <div class="table-cell members-count">${new Intl.NumberFormat('it-IT').format(current)}</div>
|
|
|
|
|
+ <div class="table-cell variation">${variationText}</div>
|
|
|
|
|
+ <div class="table-cell card-types">
|
|
|
|
|
+ <div class="card-types-container">
|
|
|
|
|
+ ${cardTypeBreakdown}
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ `;
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
tableHtml += '</div>';
|
|
tableHtml += '</div>';
|