jipie
This commit is contained in:
parent
86dc3b010b
commit
7897621621
5 changed files with 145 additions and 1 deletions
118
templates/components/history_chart_with_dismiss.html.twig
Normal file
118
templates/components/history_chart_with_dismiss.html.twig
Normal file
|
@ -0,0 +1,118 @@
|
|||
<tr id="history-row-{{ drink_type_id }}">
|
||||
<td colspan="3">
|
||||
<div class="card mb-3">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<h5 class="card-title mb-0">{{ title }}</h5>
|
||||
<button type="button" class="btn btn-sm btn-danger"
|
||||
onclick="document.getElementById('history-row-{{ drink_type_id }}').style.display = 'none';">
|
||||
❌ Dismiss
|
||||
</button>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div style="height: 300px; position: relative;">
|
||||
<canvas id="{{ chart_id }}"></canvas>
|
||||
</div>
|
||||
<script type="module">
|
||||
import { Chart } from 'chart.js/auto';
|
||||
|
||||
// Create a unified set of dates from both datasets
|
||||
{% set all_dates = [] %}
|
||||
{% for record in stock_history %}
|
||||
{% set date_str = record.changeDate|date('Y-m-d H:i') %}
|
||||
{% if date_str not in all_dates %}
|
||||
{% set all_dates = all_dates|merge([date_str]) %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% for record in wanted_history %}
|
||||
{% set date_str = record.changeDate|date('Y-m-d H:i') %}
|
||||
{% if date_str not in all_dates %}
|
||||
{% set all_dates = all_dates|merge([date_str]) %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
// Sort dates chronologically
|
||||
{% set all_dates = all_dates|sort %}
|
||||
|
||||
// Create date-indexed maps for both datasets
|
||||
{% set stock_map = {} %}
|
||||
{% for record in stock_history %}
|
||||
{% set date_str = record.changeDate|date('Y-m-d H:i') %}
|
||||
{% set stock_map = stock_map|merge({(date_str): record.newValue}) %}
|
||||
{% endfor %}
|
||||
|
||||
{% set wanted_map = {} %}
|
||||
{% for record in wanted_history %}
|
||||
{% set date_str = record.changeDate|date('Y-m-d H:i') %}
|
||||
{% set wanted_map = wanted_map|merge({(date_str): record.newValue}) %}
|
||||
{% endfor %}
|
||||
|
||||
// Prepare data arrays with values aligned to dates
|
||||
{% set stock_data = [] %}
|
||||
{% set wanted_data = [] %}
|
||||
|
||||
{% for date in all_dates %}
|
||||
{% if date in stock_map|keys %}
|
||||
{% set stock_data = stock_data|merge([stock_map[date]]) %}
|
||||
{% else %}
|
||||
{% set stock_data = stock_data|merge(['null']) %}
|
||||
{% endif %}
|
||||
|
||||
{% if date in wanted_map|keys %}
|
||||
{% set wanted_data = wanted_data|merge([wanted_map[date]]) %}
|
||||
{% else %}
|
||||
{% set wanted_data = wanted_data|merge(['null']) %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
new Chart(document.getElementById('{{ chart_id }}'), {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: [{% for date in all_dates %}'{{ date }}'{{ not loop.last ? ',' }}{% endfor %}],
|
||||
datasets: [{
|
||||
label: 'Stock History',
|
||||
data: [{{ stock_data|join(',') }}],
|
||||
borderColor: 'rgb(75, 192, 192)',
|
||||
tension: 0.1,
|
||||
spanGaps: true
|
||||
},
|
||||
{
|
||||
label: 'Wanted Stock History',
|
||||
data: [{{ wanted_data|join(',') }}],
|
||||
borderColor: 'rgb(255, 99, 132)',
|
||||
tension: 0.1,
|
||||
spanGaps: true
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
responsive: true,
|
||||
maintainAspectRatio: false,
|
||||
plugins: {
|
||||
legend: {
|
||||
position: 'top',
|
||||
labels: {
|
||||
boxWidth: 12,
|
||||
padding: 10
|
||||
}
|
||||
}
|
||||
},
|
||||
scales: {
|
||||
y: {
|
||||
beginAtZero: true,
|
||||
ticks: {
|
||||
maxTicksLimit: 6
|
||||
}
|
||||
},
|
||||
x: {
|
||||
ticks: {
|
||||
maxTicksLimit: 8,
|
||||
maxRotation: 45
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
Loading…
Add table
Add a link
Reference in a new issue