From 7de6db0c8ddbf5e052003e9012d810d6fc324592 Mon Sep 17 00:00:00 2001 From: relikd Date: Fri, 2 Jun 2023 17:05:59 +0200 Subject: [PATCH] feat: datetime_now helper util --- app/base/forms/utils.py | 8 ++++++++ .../0002_alter_booking_begin_time.py | 20 +++++++++++++++++++ app/base/models/booking.py | 6 +++--- app/base/views/trigger/toggle_checkin.py | 6 ++---- 4 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 app/base/forms/utils.py create mode 100644 app/base/migrations/0002_alter_booking_begin_time.py diff --git a/app/base/forms/utils.py b/app/base/forms/utils.py new file mode 100644 index 0000000..8bbae4b --- /dev/null +++ b/app/base/forms/utils.py @@ -0,0 +1,8 @@ +from django.utils import timezone + +from datetime import timedelta + + +def datetime_now(): + now = timezone.now() + return now - timedelta(microseconds=now.microsecond) # remove precision diff --git a/app/base/migrations/0002_alter_booking_begin_time.py b/app/base/migrations/0002_alter_booking_begin_time.py new file mode 100644 index 0000000..ce942fe --- /dev/null +++ b/app/base/migrations/0002_alter_booking_begin_time.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2 on 2023-06-02 14:45 + +import app.base.forms.fields +import app.base.forms.utils +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='booking', + name='begin_time', + field=app.base.forms.fields.DateTimeField(default=app.base.forms.utils.datetime_now, verbose_name='Beginn'), + ), + ] diff --git a/app/base/models/booking.py b/app/base/models/booking.py index 8215ef7..af345f6 100755 --- a/app/base/models/booking.py +++ b/app/base/models/booking.py @@ -2,9 +2,9 @@ from django.db import models from django.db.models import Q from django.forms.utils import to_current_timezone from django.urls import reverse -from django.utils import timezone from app.base.forms.fields import DateTimeField, TextField +from app.base.forms.utils import datetime_now from datetime import datetime from typing import TYPE_CHECKING @@ -20,7 +20,7 @@ class Booking(models.Model): 'BookingType', on_delete=models.PROTECT, verbose_name='Art') user: 'models.ForeignKey[Person]' = models.ForeignKey( 'Person', on_delete=models.CASCADE, verbose_name='Nutzer:in') - begin_time = DateTimeField('Beginn', default=datetime.now) + begin_time = DateTimeField('Beginn', default=datetime_now) end_time = DateTimeField('Ende', blank=True, null=True) comment = TextField('Kommentar', blank=True) @@ -62,7 +62,7 @@ class Booking(models.Model): def currently_open_checkin(for_user: 'Person|OuterRef') -> 'Booking|None': return Booking.objects.filter( Q(user=for_user), - Q(begin_time__lte=timezone.now()), + Q(begin_time__lte=datetime_now()), Q(end_time=None), Q(type__is_checkin=True) ).first() diff --git a/app/base/views/trigger/toggle_checkin.py b/app/base/views/trigger/toggle_checkin.py index 2b5a8ef..70c7e25 100755 --- a/app/base/views/trigger/toggle_checkin.py +++ b/app/base/views/trigger/toggle_checkin.py @@ -1,9 +1,8 @@ -from datetime import timedelta from django.contrib.auth.mixins import LoginRequiredMixin from django.shortcuts import redirect -from django.utils import timezone from django.views import View +from app.base.forms.utils import datetime_now from app.base.models import Person, Booking, BookingType @@ -12,8 +11,7 @@ class ToggleCheckinView(LoginRequiredMixin, View): user = Person.objects.get(id=kwargs['user_id']) next = self.request.GET.get('next') booking = user.current_checkin # performs db query - now = timezone.now() - now -= timedelta(microseconds=now.microsecond) # remove precision + now = datetime_now() if booking: booking.end_time = now