From 676cee164bf043825855f1146ef512add385f27f Mon Sep 17 00:00:00 2001 From: arona Date: Tue, 9 May 2023 21:37:25 +0100 Subject: [PATCH] Very initial version of checkin form --- RIGS/forms.py | 12 +++- .../0049_eventcheckin_eventcheckout.py | 35 ++++++++++++ RIGS/models.py | 14 +++++ RIGS/templates/hs/eventcheckin_form.html | 56 +++++++++++++++++++ .../partials/event_detail_buttons.html | 1 + RIGS/urls.py | 3 + RIGS/views/hs.py | 13 +++++ 7 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 RIGS/migrations/0049_eventcheckin_eventcheckout.py create mode 100644 RIGS/templates/hs/eventcheckin_form.html diff --git a/RIGS/forms.py b/RIGS/forms.py index 78128678..3b40970e 100644 --- a/RIGS/forms.py +++ b/RIGS/forms.py @@ -44,7 +44,7 @@ class EventForm(forms.ModelForm): return simplejson.dumps(items) def __init__(self, *args, **kwargs): - super(EventForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.fields['items_json'].initial = self._get_items_json self.fields['start_date'].widget.format = '%Y-%m-%d' @@ -297,3 +297,13 @@ class PowerTestRecordForm(forms.ModelForm): model = models.PowerTestRecord fields = '__all__' exclude = ['reviewed_at', 'reviewed_by'] + + +class EventCheckInForm(forms.ModelForm): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['time'].initial = timezone.now() + + class Meta: + model = models.EventCheckIn + fields = '__all__' diff --git a/RIGS/migrations/0049_eventcheckin_eventcheckout.py b/RIGS/migrations/0049_eventcheckin_eventcheckout.py new file mode 100644 index 00000000..4b65e10c --- /dev/null +++ b/RIGS/migrations/0049_eventcheckin_eventcheckout.py @@ -0,0 +1,35 @@ +# Generated by Django 3.2.18 on 2023-05-09 20:12 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('RIGS', '0048_auto_20230509_2043'), + ] + + operations = [ + migrations.CreateModel( + name='EventCheckOut', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('time', models.DateTimeField()), + ('vehicle', models.CharField(max_length=100)), + ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='RIGS.event')), + ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='checkouts', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='EventCheckIn', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('time', models.DateTimeField()), + ('vehicle', models.CharField(max_length=100)), + ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='crew', to='RIGS.event')), + ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='checkins', to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/RIGS/models.py b/RIGS/models.py index ded93a4f..cf1f7303 100644 --- a/RIGS/models.py +++ b/RIGS/models.py @@ -902,3 +902,17 @@ class PowerTestRecord(ReviewableModel, RevisionMixin): permissions = [ ('review_power', 'Can review Power Test Records') ] + + +class EventCheckIn(models.Model): + event = models.ForeignKey('Event', related_name='crew', on_delete=models.CASCADE) + person = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='checkins', on_delete=models.CASCADE) + time = models.DateTimeField() + vehicle = models.CharField(max_length=100) + + +class EventCheckOut(models.Model): + event = models.ForeignKey('Event', on_delete=models.CASCADE) + person = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='checkouts', on_delete=models.CASCADE) + time = models.DateTimeField() # TODO Validate may not check in in future + vehicle = models.CharField(max_length=100) diff --git a/RIGS/templates/hs/eventcheckin_form.html b/RIGS/templates/hs/eventcheckin_form.html new file mode 100644 index 00000000..7c0e5f71 --- /dev/null +++ b/RIGS/templates/hs/eventcheckin_form.html @@ -0,0 +1,56 @@ +{% extends request.is_ajax|yesno:'base_ajax.html,base_rigs.html' %} +{% load widget_tweaks %} +{% load static %} +{% load help_text from filters %} +{% load profile_by_index from filters %} +{% load button from filters %} + +{% block css %} + {{ block.super }} + +{% endblock %} + +{% block preload_js %} + {{ block.super }} + +{% endblock %} + +{% block js %} + {{ block.super }} + + +{% endblock %} + +{% block content %} +
+ {% include 'form_errors.html' %} +
+ + + {% csrf_token %} +
+ +
+ {% render_field form.time class+="form-control" %} +
+
+
+ +
+ +
Other (enter text) +
+ {% render_field form.vehicle class+="form-control" %} +
+
+
+
+ {% button 'submit' %} +
+
+
+
+{% endblock %} diff --git a/RIGS/templates/partials/event_detail_buttons.html b/RIGS/templates/partials/event_detail_buttons.html index f04f20f8..f7218dd1 100644 --- a/RIGS/templates/partials/event_detail_buttons.html +++ b/RIGS/templates/partials/event_detail_buttons.html @@ -49,5 +49,6 @@ {% endif %} Subhire Insurance Form + Check In {% endif %} diff --git a/RIGS/urls.py b/RIGS/urls.py index 1da01f81..68c4fbc3 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -101,6 +101,9 @@ urlpatterns = [ path('event/power//review/', permission_required_with_403('RIGS.review_power')(views.MarkReviewed.as_view()), name='pt_review', kwargs={'model': 'PowerTestRecord'}), + path('event//checkin/', permission_required_with_403('RIGS.add_eventcheckin')(views.EventCheckIn.as_view()), + name='event_checkin'), + # Finance path('invoice/', permission_required_with_403('RIGS.view_invoice')(views.InvoiceIndex.as_view()), name='invoice_list'), diff --git a/RIGS/views/hs.py b/RIGS/views/hs.py index 57f3b014..a54348fb 100644 --- a/RIGS/views/hs.py +++ b/RIGS/views/hs.py @@ -226,3 +226,16 @@ class RAPrint(PrintView): context = super().get_context_data(**kwargs) context['filename'] = f"EventSpecificRiskAssessment_for_{context['object'].event.display_id}.pdf" return context + + +class EventCheckIn(generic.CreateView): + model = models.EventCheckIn + template_name = 'hs/eventcheckin_form.html' + form_class = forms.EventCheckInForm + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['event'] = models.Event.objects.get(pk=self.kwargs.get('pk')) + context['page_title'] = f'Check In to Event {context["event"].display_id}' + # get_related(context['form'], context) + return context