admin: voivodeship breakdown
parent
5062e9215f
commit
464e7cf127
|
@ -1,7 +1,7 @@
|
|||
import flask_admin
|
||||
from formity.extensions import admin, db, ModelView, AdminSecurityMixin
|
||||
from wtforms import TextAreaField
|
||||
from formity.models import FaceshieldRequest, RequestChange, Status
|
||||
from formity.models import FaceshieldRequest, RequestChange, Status, PostalCode
|
||||
from spaceauth import current_user
|
||||
import enum
|
||||
from sqlalchemy import inspect, func
|
||||
|
@ -42,12 +42,17 @@ class IndexView(AdminSecurityMixin, flask_admin.AdminIndexView):
|
|||
func.sum(FaceshieldRequest.faceshield_front_required).label('faceshield_front_required'),
|
||||
func.sum(FaceshieldRequest.faceshield_front_delivered).label('faceshield_front_delivered'),
|
||||
).group_by(FaceshieldRequest.status).all()
|
||||
stats.sort(key=lambda v: v.status.value)
|
||||
|
||||
for rec in stats:
|
||||
print(dir(rec))
|
||||
vstats = FaceshieldRequest.query.select_from(FaceshieldRequest).with_entities(
|
||||
PostalCode.voivodeship.label('voivodeship'),
|
||||
func.count().label('count'),
|
||||
func.sum(FaceshieldRequest.faceshield_full_required).label('faceshield_full_required'),
|
||||
func.sum(FaceshieldRequest.faceshield_full_delivered).label('faceshield_full_delivered'),
|
||||
func.sum(FaceshieldRequest.faceshield_front_required).label('faceshield_front_required'),
|
||||
func.sum(FaceshieldRequest.faceshield_front_delivered).label('faceshield_front_delivered'),
|
||||
).join(FaceshieldRequest.postalcode_info).group_by(PostalCode.voivodeship).order_by(func.count().desc()).all()
|
||||
|
||||
return self.render('admin_index.html', stats=stats)
|
||||
return self.render('admin_index.html', stats=stats, vstats=vstats)
|
||||
|
||||
|
||||
class FaceshieldRequestAdmin(ModelView):
|
||||
|
|
|
@ -1,32 +1,51 @@
|
|||
{% extends "admin/master.html" %}
|
||||
{% block body %}
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<h1>Fullfillment stats</h1>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<h1>Fullfillment stats</h1>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Status</th>
|
||||
<th>Count</th>
|
||||
<th>Delivered / Requested (full)</th>
|
||||
<th>Delivered / Requested (front)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for rec in stats %}
|
||||
<tr>
|
||||
<th>Status</th>
|
||||
<th>Count</th>
|
||||
<th>Requested (full)</th>
|
||||
<th>Delivered (full)</th>
|
||||
<th>Requested (front)</th>
|
||||
<th>Delivered (front)</th>
|
||||
<td>{{ rec.status.name }}</td>
|
||||
<td>{{ rec.count }}</td>
|
||||
<td>{{ rec.faceshield_full_delivered }} / {{ rec.faceshield_full_required }}</td>
|
||||
<td>{{ rec.faceshield_front_delivered }} / {{ rec.faceshield_front_required }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for rec in stats %}
|
||||
<tr>
|
||||
<td>{{ rec.status.name }}</td>
|
||||
<td>{{ rec.count }}</td>
|
||||
<td>{{ rec.faceshield_full_required }}</td>
|
||||
<td>{{ rec.faceshield_full_delivered }}</td>
|
||||
<td>{{ rec.faceshield_front_required }}</td>
|
||||
<td>{{ rec.faceshield_front_delivered }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h1>Voivodeship breakdown</h1>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Voivodeship</th>
|
||||
<th>Count</th>
|
||||
<th>Delivered / Requested (full)</th>
|
||||
<th>Delivered / Requested (front)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for rec in vstats %}
|
||||
<tr>
|
||||
<td>{{ rec.voivodeship }}</td>
|
||||
<td>{{ rec.count }}</td>
|
||||
<td>{{ rec.faceshield_full_delivered }} / {{ rec.faceshield_full_required }}</td>
|
||||
<td>{{ rec.faceshield_front_delivered }} / {{ rec.faceshield_front_required }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
Loading…
Reference in New Issue