From e4f1d2b8d3c533e29750747e4d7b14059e4e5c10 Mon Sep 17 00:00:00 2001 From: relikd Date: Sun, 8 Oct 2023 18:24:27 +0200 Subject: [PATCH] feat: human readable duration --- app/base/models/booking.py | 11 +++++++++++ app/base/views/model_views/booking.py | 4 ++-- app/base/views/model_views/person.py | 4 ++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/base/models/booking.py b/app/base/models/booking.py index 1447a55..56702e3 100755 --- a/app/base/models/booking.py +++ b/app/base/models/booking.py @@ -72,6 +72,17 @@ class Booking(models.Model): return round(diff.total_seconds() / 60) return None + @property + def human_duration(self) -> 'str|None': + total = self.duration + if total is None: + return None + if total > 1440: + return f'> {total // 1440}T' + min = total % 60 + hour = (total - min) // 60 + return f'{hour}:{min:02d}' + @property def calculated_price(self): traits = self.user.traits_at_date(self.begin_time).values_list('trait') diff --git a/app/base/views/model_views/booking.py b/app/base/views/model_views/booking.py index 990a294..0410e20 100755 --- a/app/base/views/model_views/booking.py +++ b/app/base/views/model_views/booking.py @@ -21,7 +21,7 @@ class BookingOptions(ViewOptions[Booking], LoginRequired): 'delete': 'booking:delete' } list_filter = {'user': 'user__pk'} - list_columns = ['begin_time', 'end_time', 'duration', 'user', 'type'] + list_columns = ['begin_time', 'end_time', 'human_duration', 'user', 'type'] list_render = { 'begin_time': { 'date_format': 'D. d.m.y, H:i', @@ -31,7 +31,7 @@ class BookingOptions(ViewOptions[Booking], LoginRequired): 'date_format': 'H:i', 'width': '4rem', }, - 'duration': { + 'human_duration': { 'verbose_name': 'Dauer', }, } diff --git a/app/base/views/model_views/person.py b/app/base/views/model_views/person.py index 67fee99..3478c0b 100755 --- a/app/base/views/model_views/person.py +++ b/app/base/views/model_views/person.py @@ -87,7 +87,7 @@ class PersonDetailView(PersonOptions, ModelDetailView): 'update': 'booking:update', 'delete': 'booking:delete' }, - 'columns': ['begin_time', 'end_time', 'duration', 'type'], + 'columns': ['begin_time', 'end_time', 'human_duration', 'type'], 'render': { 'begin_time': { 'date_format': 'D. d.m.y, H:i', @@ -97,7 +97,7 @@ class PersonDetailView(PersonOptions, ModelDetailView): 'date_format': 'H:i', 'width': '4rem', }, - 'duration': { + 'human_duration': { 'verbose_name': 'Dauer', }, }