summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederick Yin <fkfd@fkfd.me>2022-02-04 20:44:07 +0800
committerFrederick Yin <fkfd@fkfd.me>2022-02-04 20:44:07 +0800
commit87c661557186a4975fa94977ac1ac1be9bd87d2e (patch)
tree394f718b68c83a992fffe61b8b29e3497a25e9aa
parent15dd33f6b1db117716e16f1dfee281efd9b43a2a (diff)
Supply Jinja with full umbrella data sorted by status
-rw-r--r--jimbrella/admin.py34
-rw-r--r--jimbrella/templates/admin/index.html19
2 files changed, 33 insertions, 20 deletions
diff --git a/jimbrella/admin.py b/jimbrella/admin.py
index 9cbf4c8..d5df4d4 100644
--- a/jimbrella/admin.py
+++ b/jimbrella/admin.py
@@ -30,18 +30,34 @@ def check_privilege():
@bp.route("/")
def index():
- umbrellas = db.read()
- # count # of umbrellas in each status
- status_count = {
- status: len([u for u in umbrellas if u["status"] == status])
- for status in ("available", "lent", "overdue")
+ umbrellas = [dict(umb) for umb in db.read()]
+ # sort umbrellas by their status
+ statuses = {
+ "available": [],
+ "lent": [],
+ "overdue": [],
}
+ for umb in umbrellas:
+ if umb["status"] == "available":
+ statuses["available"].append(umb)
+ elif umb["status"] in ("lent", "overdue"):
+ statuses[umb["status"]].append(umb)
+ try:
+ lent_at = isoparse(umb["lent_at"])
+ umb["lent_at"] = human_datetime(lent_at)
+ umb["lent_time_ago"] = (
+ human_timedelta(datetime.now(tz=CST) - lent_at) + " ago"
+ )
+ except ValueError:
+ umb["lent_at"] = "Invalid date"
+ umb["lent_time_ago"] = ""
+
return render_template(
"admin/index.html",
- umbrellas=len(umbrellas),
- available=status_count["available"],
- lent=status_count["lent"],
- overdue=status_count["overdue"],
+ umbrellas=umbrellas,
+ available=statuses["available"],
+ lent=statuses["lent"],
+ overdue=statuses["overdue"],
mobile=user_agent(request.user_agent.string).is_mobile,
)
diff --git a/jimbrella/templates/admin/index.html b/jimbrella/templates/admin/index.html
index 73ae5f6..50b88ae 100644
--- a/jimbrella/templates/admin/index.html
+++ b/jimbrella/templates/admin/index.html
@@ -15,22 +15,19 @@
<div class="banner overdue">
<h2 class="banner-heading">Overdue</h2>
<span class="proportion">
- <strong class="big">{{ overdue }}</strong> / {{ umbrellas }}
+ <strong class="big">{{ overdue|length }}</strong> / {{ umbrellas|length }}
</span>
<div class="table-container">
{% if mobile %}
<table class="data">
{% for umb in overdue %}
<tr class="{{ umb.status }}">
- <th class="big far" rowspan=4>#{{ umb.serial }}</th>
+ <th class="big far" rowspan=4>#{{ umb.id }}</th>
<td>{{ umb.tenant_name }}</td>
</tr>
<tr class="{{ umb.status }}"><td>{{ umb.tenant_phone }}</td></tr>
- <tr class="{{ umb.status }}"><td>{{ umb.lent_at_str }}</td></tr>
- <tr class="{{ umb.status }}"><td>
- {{ umb.lent_time_ago_str }}
- {% if umb.status in ["lent", "overdue"] %} ago {% endif %}
- </td></tr>
+ <tr class="{{ umb.status }}"><td>{{ umb.lent_at }}</td></tr>
+ <tr class="{{ umb.status }}"><td>{{ umb.lent_time_ago }}</td></tr>
{% endfor %}
</table>
{% else %}
@@ -46,10 +43,10 @@
<tbody>
{% for umb in overdue %}
<tr>
- <td>{{ umb.serial }}</td>
+ <td>{{ umb.id }}</td>
<td>{{ umb.tenant_name }}</td>
<td>{{ umb.tenant_phone }}</td>
- <td>{{ umb.lent_time_ago_str }} ago</td>
+ <td>{{ umb.lent_time_ago }}</td>
</tr>
{% endfor %}
</tbody>
@@ -64,13 +61,13 @@
<div class="tile lent">
<h2 class="tile-heading">Lent</h2>
<span class="proportion">
- <strong class="big">{{ lent }}</strong> / {{ umbrellas }}
+ <strong class="big">{{ lent|length }}</strong> / {{ umbrellas|length }}
</span>
</div>
<div class="tile available">
<h2 class="tile-heading">Available</h2>
<span class="proportion">
- <strong class="big">{{ available }}</strong> / {{ umbrellas }}
+ <strong class="big">{{ available|length }}</strong> / {{ umbrellas|length }}
</span>
</div>
</div>