172 lines
11 KiB
Twig
172 lines
11 KiB
Twig
{% extends 'base.html.twig' %}
|
|
|
|
{% block title %}Évolutions des objets - {{ stats.name }}{% endblock %}
|
|
|
|
{% block stylesheets %}
|
|
{{ parent() }}
|
|
<link href='{{ asset('css/city-sidebar.css') }}' rel='stylesheet' />
|
|
{% endblock %}
|
|
|
|
{% block body %}
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<!-- Sidebar de navigation -->
|
|
<div class="col-12">
|
|
{% include 'admin/_city_sidebar.html.twig' with {'stats': stats, 'active_menu': 'stats_evolutions'} %}
|
|
</div>
|
|
|
|
<!-- Contenu principal -->
|
|
<div class="col-md-9 col-lg-10 main-content">
|
|
<div class="p-4">
|
|
<h1>Évolutions des objets à {{ stats.name }} ({{ stats.zone }})</h1>
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<strong>Variation des décomptes d'objets par type</strong>
|
|
</div>
|
|
<div class="card-body">
|
|
<table class="table table-bordered table-striped table-hover table-responsive table-sort">
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th class="text-end">Décompte actuel</th>
|
|
{% for p in periods %}
|
|
<th class="text-end">Évolution sur {{ p }}</th>
|
|
{% endfor %}
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for type, evo in evolutions %}
|
|
<tr>
|
|
<td style="min-width: 15rem;">
|
|
<a href="{{ path('admin_followup_theme_graph', {'insee_code': stats.zone, 'theme': type}) }}" class="btn btn-outline-secondary btn-sm ms-2"
|
|
title="Voir le graphe détaillé">
|
|
<i class="bi bi-bar-chart"></i>
|
|
</a>
|
|
{{ tag_emoji(type) }} {{ type }}
|
|
</td>
|
|
<td class="text-end">{{ evo.now }}</td>
|
|
{% for p in periods %}
|
|
<td class="text-end{% if evo[p] is not null and evo[p] != 0 %} bg-success-subtle{% if evo[p] < 0 %} bg-danger-subtle{% endif %}{% endif %}">
|
|
{% if evo[p] is not null %}
|
|
{% if evo[p] > 0 %}
|
|
<i class="bi bi-arrow-up text-success"></i>
|
|
{% elseif evo[p] < 0 %}
|
|
<i class="bi bi-arrow-down text-danger"></i>
|
|
{% endif %}
|
|
{{ evo[p] > 0 ? '+' ~ evo[p] : evo[p] }}
|
|
{% else %}
|
|
<span class="text-muted">-</span>
|
|
{% endif %}
|
|
</td>
|
|
{% endfor %}
|
|
</tr>
|
|
{% else %}
|
|
<tr><td colspan="5" class="text-muted">Aucune donnée d'évolution trouvée.</td></tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="row mt-5">
|
|
<div class="col-md-4">
|
|
<h3>Lieux modifiés cette semaine</h3>
|
|
{% if places_7j|length > 0 %}
|
|
<ul class="list-group mb-4">
|
|
{% for place in places_7j %}
|
|
<li class="list-group-item d-flex justify-content-between align-items-center">
|
|
<span>
|
|
<strong>
|
|
<a href="{{ path('app_public_edit', {'zipcode': place.zipCode, 'name': (place.name|default('sans-nom'))|url_encode, 'uuid': place.uuidForUrl}) }}">
|
|
{{ place.name ?: '(sans nom)' }}
|
|
</a>
|
|
</strong><br>
|
|
<small>
|
|
{% if place.street %}
|
|
<a href="{{ path('app_public_street', {'cityId': stats.zone, 'streetName': place.street|url_encode }) }}">{{ place.street }}</a>
|
|
{# {% else %}
|
|
<span class="text-muted">(inconnue)</span> #}
|
|
{% endif %}
|
|
{{ place.housenumber }}
|
|
</small>
|
|
</span>
|
|
<span>
|
|
<span class="badge bg-primary">{{ place.getModifiedDate() ? place.getModifiedDate()|date('Y-m-d H:i') : '' }}</span>
|
|
<a href="https://www.openstreetmap.org/{{ place.osmKind }}/{{ place.osmId }}" target="_blank" class="btn btn-outline-secondary btn-sm ms-2" title="Voir sur OSM"><i class="bi bi-globe"></i></a>
|
|
</span>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
{% else %}
|
|
<p class="text-muted">Aucun lieu modifié dans les 7 derniers jours.</p>
|
|
{% endif %}
|
|
</div>
|
|
<div class="col-md-4">
|
|
<h3>Ce mois-ci</h3>
|
|
{% if places_30j|length > 0 %}
|
|
<ul class="list-group mb-4">
|
|
{% for place in places_30j %}
|
|
<li class="list-group-item d-flex justify-content-between align-items-center">
|
|
<span>
|
|
<strong>
|
|
<a href="{{ path('app_public_edit', {'zipcode': place.zipCode, 'name': (place.name|default('sans-nom'))|url_encode, 'uuid': place.uuidForUrl}) }}">
|
|
{{ place.name ?: '(sans nom)' }}
|
|
</a>
|
|
</strong><br>
|
|
<small>
|
|
{% if place.street %}
|
|
<a href="{{ path('app_public_street', {'cityId': stats.zone, 'streetName': place.street|url_encode }) }}">{{ place.street }}</a>
|
|
{# {% else %}
|
|
<span class="text-muted">(inconnue)</span> #}
|
|
{% endif %}
|
|
{{ place.housenumber }}
|
|
</small>
|
|
</span>
|
|
<span>
|
|
<span class="badge bg-primary">{{ place.getModifiedDate() ? place.getModifiedDate()|date('Y-m-d H:i') : '' }}</span>
|
|
<a href="https://www.openstreetmap.org/{{ place.osmKind }}/{{ place.osmId }}" target="_blank" class="btn btn-outline-secondary btn-sm ms-2" title="Voir sur OSM"><i class="bi bi-globe"></i></a>
|
|
</span>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
{% else %}
|
|
<p class="text-muted">Aucun lieu modifié dans les 30 derniers jours.</p>
|
|
{% endif %}
|
|
</div>
|
|
<div class="col-md-4">
|
|
<h3>6 derniers mois</h3>
|
|
{% if places_6mois|length > 0 %}
|
|
<ul class="list-group mb-4">
|
|
{% for place in places_6mois %}
|
|
<li class="list-group-item d-flex justify-content-between align-items-center">
|
|
<span>
|
|
<strong>
|
|
<a href="{{ path('app_public_edit', {'zipcode': place.zipCode, 'name': (place.name|default('sans-nom'))|url_encode, 'uuid': place.uuidForUrl}) }}">
|
|
{{ place.name ?: '(sans nom)' }}
|
|
</a>
|
|
</strong><br>
|
|
<small>
|
|
{% if place.street %}
|
|
<a href="{{ path('app_public_street', {'cityId': stats.zone, 'streetName': place.street|url_encode }) }}">{{ place.street }}</a>
|
|
{# {% else %}
|
|
<span class="text-muted">(inconnue)</span> #}
|
|
{% endif %}
|
|
{{ place.housenumber }}
|
|
</small>
|
|
</span>
|
|
<span>
|
|
<span class="badge bg-primary">{{ place.getModifiedDate() ? place.getModifiedDate()|date('Y-m-d H:i') : '' }}</span>
|
|
<a href="https://www.openstreetmap.org/{{ place.osmKind }}/{{ place.osmId }}" target="_blank" class="btn btn-outline-secondary btn-sm ms-2" title="Voir sur OSM"><i class="bi bi-globe"></i></a>
|
|
</span>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
{% else %}
|
|
<p class="text-muted">Aucun lieu modifié dans les 6 derniers mois.</p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|