mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-02-13 18:19:41 +00:00
Compare commits
8 Commits
2fb8b8c81b
...
checkin
| Author | SHA1 | Date | |
|---|---|---|---|
|
b151e1fcf3
|
|||
|
013922bd90
|
|||
|
f72b611e77
|
|||
|
8da90ba670
|
|||
| 0d1beeaead | |||
| 51ff06fadd | |||
| 06137ab180 | |||
| e7dd8f4cf9 |
@@ -20,6 +20,7 @@ admin.site.register(models.VatRate, VersionAdmin)
|
|||||||
admin.site.register(models.Event, VersionAdmin)
|
admin.site.register(models.Event, VersionAdmin)
|
||||||
admin.site.register(models.EventItem, VersionAdmin)
|
admin.site.register(models.EventItem, VersionAdmin)
|
||||||
admin.site.register(models.Invoice, VersionAdmin)
|
admin.site.register(models.Invoice, VersionAdmin)
|
||||||
|
admin.site.register(models.EventCheckIn)
|
||||||
|
|
||||||
|
|
||||||
@transaction.atomic() # Copied from django-extensions. GenericForeignKey support removed as unnecessary.
|
@transaction.atomic() # Copied from django-extensions. GenericForeignKey support removed as unnecessary.
|
||||||
|
|||||||
@@ -235,6 +235,6 @@ class EventCheckInForm(forms.ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class EditCheckInForm(forms.ModelForm):
|
class EditCheckInForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.EventCheckIn
|
model = models.EventCheckIn
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|||||||
41
RIGS/migrations/0047_auto_20230517_0944.py
Normal file
41
RIGS/migrations/0047_auto_20230517_0944.py
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Generated by Django 3.2.19 on 2023-05-17 08:44
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
def migrate_old_data(apps, schema_editor):
|
||||||
|
EventChecklist = apps.get_model('RIGS', 'EventChecklist')
|
||||||
|
EventCheckIn = apps.get_model('RIGS', 'EventCheckIn')
|
||||||
|
for ec in EventChecklist.objects.all():
|
||||||
|
for crew in ec.crew.all():
|
||||||
|
vehicle = ec.vehicles.get(driver=crew.crewmember) or None
|
||||||
|
EventCheckIn.objects.create(event=ec.event, person=crew.crewmember, role=crew.role, time=crew.start, end_time=crew.end, vehicle=vehicle.vehicle)
|
||||||
|
|
||||||
|
|
||||||
|
def revert(apps, schema_editor):
|
||||||
|
apps.get_model('RIGS', 'EventCheckIn').objects.all().delete()
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('RIGS', '0046_create_powertests'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='EventCheckIn',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('time', models.DateTimeField()),
|
||||||
|
('role', models.CharField(blank=True, max_length=50)),
|
||||||
|
('vehicle', models.CharField(blank=True, max_length=100)),
|
||||||
|
('end_time', models.DateTimeField(blank=True, null=True)),
|
||||||
|
('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)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.RunPython(migrate_old_data, reverse_code=revert),
|
||||||
|
]
|
||||||
@@ -1,30 +1,17 @@
|
|||||||
# Generated by Django 3.2.16 on 2023-05-10 17:23
|
# Generated by Django 3.2.19 on 2023-05-18 11:56
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('RIGS', '0046_create_powertests'),
|
('RIGS', '0047_auto_20230517_0944'),
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
migrations.CreateModel(
|
migrations.RemoveField(
|
||||||
name='EventCheckIn',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('time', models.DateTimeField()),
|
|
||||||
('role', models.CharField(blank=True, max_length=50)),
|
|
||||||
('vehicle', models.CharField(blank=True, max_length=100)),
|
|
||||||
('end_time', models.DateTimeField(null=True)),
|
|
||||||
('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)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.RemoveField(
|
|
||||||
model_name='eventchecklistvehicle',
|
model_name='eventchecklistvehicle',
|
||||||
name='checklist',
|
name='checklist',
|
||||||
),
|
),
|
||||||
@@ -145,6 +132,21 @@ class Migration(migrations.Migration):
|
|||||||
name='power_mic',
|
name='power_mic',
|
||||||
field=models.ForeignKey(blank=True, help_text='Who is the Power MIC?', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='checklists', to=settings.AUTH_USER_MODEL, verbose_name='Power MIC'),
|
field=models.ForeignKey(blank=True, help_text='Who is the Power MIC?', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='checklists', to=settings.AUTH_USER_MODEL, verbose_name='Power MIC'),
|
||||||
),
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='reviewed_at',
|
||||||
|
field=models.DateTimeField(blank=True, null=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='powertestrecord',
|
||||||
|
name='reviewed_at',
|
||||||
|
field=models.DateTimeField(blank=True, null=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='riskassessment',
|
||||||
|
name='reviewed_at',
|
||||||
|
field=models.DateTimeField(blank=True, null=True),
|
||||||
|
),
|
||||||
migrations.DeleteModel(
|
migrations.DeleteModel(
|
||||||
name='EventChecklistCrew',
|
name='EventChecklistCrew',
|
||||||
),
|
),
|
||||||
@@ -409,7 +409,15 @@ class Event(models.Model, RevisionMixin):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def hs_done(self):
|
def hs_done(self):
|
||||||
return self.riskassessment is not None and len(self.checklists.all()) > 0
|
return self.riskassessment is not None and self.has_checklist and self.has_power
|
||||||
|
|
||||||
|
@property
|
||||||
|
def has_checklist(self):
|
||||||
|
return self.checklists.exists()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def has_power(self):
|
||||||
|
return self.power_tests.exists()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def has_start_time(self):
|
def has_start_time(self):
|
||||||
@@ -703,17 +711,17 @@ def validate_url(value):
|
|||||||
|
|
||||||
|
|
||||||
class ReviewableModel(models.Model):
|
class ReviewableModel(models.Model):
|
||||||
reviewed_at = models.DateTimeField(null=True)
|
reviewed_at = models.DateTimeField(null=True, blank=True)
|
||||||
reviewed_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
|
reviewed_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
|
||||||
verbose_name="Reviewer", on_delete=models.CASCADE)
|
verbose_name="Reviewer", on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
abstract = True
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def fieldz(self):
|
def fieldz(self):
|
||||||
return [n.name for n in list(self._meta.get_fields()) if n.name != 'reviewed_at' and n.name != 'reviewed_by' and not n.is_relation and not n.auto_created]
|
return [n.name for n in list(self._meta.get_fields()) if n.name != 'reviewed_at' and n.name != 'reviewed_by' and not n.is_relation and not n.auto_created]
|
||||||
|
|
||||||
class Meta:
|
|
||||||
abstract = True
|
|
||||||
|
|
||||||
|
|
||||||
@reversion.register
|
@reversion.register
|
||||||
class RiskAssessment(ReviewableModel, RevisionMixin):
|
class RiskAssessment(ReviewableModel, RevisionMixin):
|
||||||
@@ -813,6 +821,12 @@ class RiskAssessment(ReviewableModel, RevisionMixin):
|
|||||||
def get_event_size_display(self):
|
def get_event_size_display(self):
|
||||||
return self.SIZES[self.event_size][1] + " Event"
|
return self.SIZES[self.event_size][1] + " Event"
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.pk} | {self.event}"
|
||||||
|
|
||||||
|
def get_absolute_url(self):
|
||||||
|
return reverse('ra_detail', kwargs={'pk': self.pk})
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def activity_feed_string(self):
|
def activity_feed_string(self):
|
||||||
return str(self.event)
|
return str(self.event)
|
||||||
@@ -821,12 +835,6 @@ class RiskAssessment(ReviewableModel, RevisionMixin):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return str(self)
|
return str(self)
|
||||||
|
|
||||||
def get_absolute_url(self):
|
|
||||||
return reverse('ra_detail', kwargs={'pk': self.pk})
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return f"{self.pk} | {self.event}"
|
|
||||||
|
|
||||||
|
|
||||||
@reversion.register
|
@reversion.register
|
||||||
class EventChecklist(ReviewableModel, RevisionMixin):
|
class EventChecklist(ReviewableModel, RevisionMixin):
|
||||||
@@ -854,6 +862,9 @@ class EventChecklist(ReviewableModel, RevisionMixin):
|
|||||||
('review_eventchecklist', 'Can review Event Checklists')
|
('review_eventchecklist', 'Can review Event Checklists')
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.pk} - {self.event}"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def activity_feed_string(self):
|
def activity_feed_string(self):
|
||||||
return str(self.event)
|
return str(self.event)
|
||||||
@@ -861,15 +872,12 @@ class EventChecklist(ReviewableModel, RevisionMixin):
|
|||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse('ec_detail', kwargs={'pk': self.pk})
|
return reverse('ec_detail', kwargs={'pk': self.pk})
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return f"{self.pk} - {self.event}"
|
|
||||||
|
|
||||||
|
|
||||||
@reversion.register
|
@reversion.register
|
||||||
class PowerTestRecord(ReviewableModel, RevisionMixin):
|
class PowerTestRecord(ReviewableModel, RevisionMixin):
|
||||||
event = models.ForeignKey('Event', related_name='power_tests', on_delete=models.CASCADE)
|
event = models.ForeignKey('Event', related_name='power_tests', on_delete=models.CASCADE)
|
||||||
power_mic = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, related_name='checklists',
|
power_mic = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, related_name='checklists',
|
||||||
verbose_name="Power MIC", on_delete=models.CASCADE, help_text="Who is the Power MIC?")
|
verbose_name="Power MIC", on_delete=models.CASCADE, help_text="Who is the Power MIC?")
|
||||||
venue = models.ForeignKey('Venue', on_delete=models.CASCADE)
|
venue = models.ForeignKey('Venue', on_delete=models.CASCADE)
|
||||||
notes = models.TextField(blank=True, default='')
|
notes = models.TextField(blank=True, default='')
|
||||||
# Small Electrical Checks
|
# Small Electrical Checks
|
||||||
@@ -907,6 +915,12 @@ class PowerTestRecord(ReviewableModel, RevisionMixin):
|
|||||||
all_rcds_tested = models.BooleanField(blank=True, null=True, help_text="All circuit RCDs tested?<br><small>(using test button)</small>")
|
all_rcds_tested = models.BooleanField(blank=True, null=True, help_text="All circuit RCDs tested?<br><small>(using test button)</small>")
|
||||||
public_sockets_tested = models.BooleanField(blank=True, null=True, help_text="Public/Performer accessible circuits tested?<br><small>(using socket tester)</small>")
|
public_sockets_tested = models.BooleanField(blank=True, null=True, help_text="Public/Performer accessible circuits tested?<br><small>(using socket tester)</small>")
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
ordering = ['event']
|
||||||
|
permissions = [
|
||||||
|
('review_power', 'Can review Power Test Records')
|
||||||
|
]
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.pk} - {self.event}"
|
return f"{self.pk} - {self.event}"
|
||||||
|
|
||||||
@@ -914,12 +928,6 @@ class PowerTestRecord(ReviewableModel, RevisionMixin):
|
|||||||
def activity_feed_string(self):
|
def activity_feed_string(self):
|
||||||
return str(self.event)
|
return str(self.event)
|
||||||
|
|
||||||
class Meta:
|
|
||||||
ordering = ['event']
|
|
||||||
permissions = [
|
|
||||||
('review_power', 'Can review Power Test Records')
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
class EventCheckIn(models.Model):
|
class EventCheckIn(models.Model):
|
||||||
event = models.ForeignKey('Event', related_name='crew', on_delete=models.CASCADE)
|
event = models.ForeignKey('Event', related_name='crew', on_delete=models.CASCADE)
|
||||||
@@ -927,7 +935,10 @@ class EventCheckIn(models.Model):
|
|||||||
time = models.DateTimeField()
|
time = models.DateTimeField()
|
||||||
role = models.CharField(max_length=50, blank=True)
|
role = models.CharField(max_length=50, blank=True)
|
||||||
vehicle = models.CharField(max_length=100, blank=True)
|
vehicle = models.CharField(max_length=100, blank=True)
|
||||||
end_time = models.DateTimeField(null=True)
|
end_time = models.DateTimeField(null=True, blank=True)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.person} on {self.event}"
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
sass = " Please invent time travel and retry."
|
sass = " Please invent time travel and retry."
|
||||||
@@ -936,8 +947,8 @@ class EventCheckIn(models.Model):
|
|||||||
if self.end_time and self.end_time < self.time:
|
if self.end_time and self.end_time < self.time:
|
||||||
raise ValidationError("May not check out before you've checked in." + sass)
|
raise ValidationError("May not check out before you've checked in." + sass)
|
||||||
|
|
||||||
|
def get_absolute_url(self):
|
||||||
|
return reverse('event_detail', kwargs={'pk': self.event_id})
|
||||||
|
|
||||||
def active(self):
|
def active(self):
|
||||||
return end_time is not None
|
return end_time is not None
|
||||||
|
|
||||||
def get_absolute_url(self):
|
|
||||||
return reverse('event_detail', kwargs={'pk': self.event.pk})
|
|
||||||
|
|||||||
@@ -13,22 +13,19 @@
|
|||||||
{% block preload_js %}
|
{% block preload_js %}
|
||||||
{{ block.super }}
|
{{ block.super }}
|
||||||
<script src="{% static 'js/selects.js' %}"></script>
|
<script src="{% static 'js/selects.js' %}"></script>
|
||||||
|
<script src="{% static 'js/interaction.js' %}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block js %}
|
{% block js %}
|
||||||
{{ block.super }}
|
{{ block.super }}
|
||||||
<script src="{% static 'js/autocompleter.js' %}"></script>
|
<script src="{% static 'js/autocompleter.js' %}"></script>
|
||||||
<script src="{% static 'js/tooltip.js' %}"></script>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
{% include 'form_errors.html' %}
|
{% include 'form_errors.html' %}
|
||||||
{% if edit %}
|
|
||||||
<form role="form" method="POST" action="{% url 'ec_edit' pk=object.pk %}">
|
<form role="form" method="POST" action="{% if edit %}{% url 'ec_edit' pk=object.pk %}{% else %}{% url 'event_ec' pk=event.pk %}{% endif %}">
|
||||||
{% else %}
|
|
||||||
<form role="form" method="POST" action="{% url 'event_ec' pk=event.pk %}">
|
|
||||||
{% endif %}
|
|
||||||
<input type="hidden" name="{{ form.event.name }}" id="{{ form.event.id_for_label }}"
|
<input type="hidden" name="{{ form.event.name }}" id="{{ form.event.id_for_label }}"
|
||||||
value="{{event.pk}}"/>
|
value="{{event.pk}}"/>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
@@ -59,7 +56,7 @@
|
|||||||
<div class="form-group form-row" id="{{ form.venue.id_for_label }}-group">
|
<div class="form-group form-row" id="{{ form.venue.id_for_label }}-group">
|
||||||
<label for="{{ form.venue.id_for_label }}"
|
<label for="{{ form.venue.id_for_label }}"
|
||||||
class="col-4 col-form-label">{{ form.venue.label }}</label>
|
class="col-4 col-form-label">{{ form.venue.label }}</label>
|
||||||
<select id="{{ form.venue.id_for_label }}" name="{{ form.venue.name }}" class="form-control selectpicker col-8" data-live-search="true" data-sourceurl="{% url 'api_secure' model='venue' %}">
|
<select id="{{ form.venue.id_for_label }}" name="{{ form.venue.name }}" class="selectpicker" data-live-search="true" data-sourceurl="{% url 'api_secure' model='venue' %}">
|
||||||
{% if venue %}
|
{% if venue %}
|
||||||
<option value="{{venue.pk}}" selected="selected">{{ venue.name }}</option>
|
<option value="{{venue.pk}}" selected="selected">{{ venue.name }}</option>
|
||||||
{% elif event.venue %}
|
{% elif event.venue %}
|
||||||
|
|||||||
@@ -15,19 +15,21 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if not event.dry_hire %}
|
{% if not event.dry_hire %}
|
||||||
{% if event.riskassessment %}
|
{% if event.has_checklist %}
|
||||||
<a href="{{ event.riskassessment.get_absolute_url }}"><span class="badge badge-success">RA: <span class="fas fa-check{% if event.riskassessment.reviewed_by %}-double{%endif%}"></span></a>
|
<a href="{{ event.riskassessment.get_absolute_url }}"><span class="badge badge-success">RA: <span class="fas fa-check{% if event.riskassessment.reviewed_by %}-double{%endif%}"></span></a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="badge badge-danger">RA: <span class="fas fa-times"></span></span>
|
<span class="badge badge-danger">RA: <span class="fas fa-times"></span></span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% if event.has_checklist %}
|
||||||
{% if not event.dry_hire %}
|
<span class="badge badge-success">Checklist: <span class="fas fa-check"></span> {% if event.checklists.count > 1 %}({{event.checklists.count}}){% endif %}</span>
|
||||||
{% if event.hs_done %}
|
|
||||||
{# TODO Display status of all checklists #}
|
|
||||||
<span class="badge badge-success">Checklist: <span class="fas fa-check"></span></span>
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="badge badge-danger">Checklist: <span class="fas fa-times"></span></span>
|
<span class="badge badge-danger">Checklist: <span class="fas fa-times"></span></span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if event.has_power %}
|
||||||
|
<span class="badge badge-success">Power Record: <span class="fas fa-check"></span> {% if event.power_tests.count > 1 %}({{event.power_tests.count}}){% endif %}</span>
|
||||||
|
{% else %}
|
||||||
|
<span class="badge badge-danger">Power Record: <span class="fas fa-times"></span></span>
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if perms.RIGS.view_invoice %}
|
{% if perms.RIGS.view_invoice %}
|
||||||
{% if event.invoice %}
|
{% if event.invoice %}
|
||||||
|
|||||||
@@ -101,13 +101,13 @@ urlpatterns = [
|
|||||||
path('event/power/<int:pk>/review/', permission_required_with_403('RIGS.review_power')(views.MarkReviewed.as_view()),
|
path('event/power/<int:pk>/review/', permission_required_with_403('RIGS.review_power')(views.MarkReviewed.as_view()),
|
||||||
name='pt_review', kwargs={'model': 'PowerTestRecord'}),
|
name='pt_review', kwargs={'model': 'PowerTestRecord'}),
|
||||||
|
|
||||||
path('event/<int:pk>/checkin/', permission_required_with_403('RIGS.add_eventcheckin')(views.EventCheckIn.as_view()),
|
path('event/<int:pk>/checkin/', login_required(views.EventCheckIn.as_view()),
|
||||||
name='event_checkin'),
|
name='event_checkin'),
|
||||||
path('event/checkout/', permission_required_with_403('RIGS.change_eventcheckin')(views.EventCheckOut.as_view()),
|
path('event/checkout/', login_required(views.EventCheckOut.as_view()),
|
||||||
name='event_checkout'),
|
name='event_checkout'),
|
||||||
path('event/<int:pk>/checkin/edit/', permission_required_with_403('RIGS.change_eventcheckin')(views.EventCheckInEdit.as_view()),
|
path('event/<int:pk>/checkin/edit/', login_required(views.EventCheckInEdit.as_view()),
|
||||||
name='edit_checkin'),
|
name='edit_checkin'),
|
||||||
path('event/<int:pk>/checkin/add/', permission_required_with_403('RIGS.add_eventcheckin')(views.EventCheckInOverride.as_view()),
|
path('event/<int:pk>/checkin/add/', login_required(views.EventCheckInOverride.as_view()),
|
||||||
name='event_checkin_override'),
|
name='event_checkin_override'),
|
||||||
|
|
||||||
# Finance
|
# Finance
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.views import generic
|
from django.views import generic
|
||||||
from reversion import revisions as reversion
|
from reversion import revisions as reversion
|
||||||
@@ -9,6 +9,7 @@ from reversion import revisions as reversion
|
|||||||
from RIGS import models, forms
|
from RIGS import models, forms
|
||||||
from RIGS.views.rigboard import get_related
|
from RIGS.views.rigboard import get_related
|
||||||
from PyRIGS.views import PrintView, ModalURLMixin
|
from PyRIGS.views import PrintView, ModalURLMixin
|
||||||
|
from django.shortcuts import redirect
|
||||||
|
|
||||||
|
|
||||||
class HSCreateView(generic.CreateView):
|
class HSCreateView(generic.CreateView):
|
||||||
@@ -24,7 +25,7 @@ class HSCreateView(generic.CreateView):
|
|||||||
epk = self.kwargs.get('pk')
|
epk = self.kwargs.get('pk')
|
||||||
event = models.Event.objects.get(pk=epk)
|
event = models.Event.objects.get(pk=epk)
|
||||||
context['event'] = event
|
context['event'] = event
|
||||||
context['page_title'] = f'Create {self} for Event {event.display_id}'
|
context['page_title'] = f'Create {self.model.__name__} for Event {event.display_id}'
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
@@ -36,7 +37,7 @@ class MarkReviewed(generic.View):
|
|||||||
obj.reviewed_by = self.request.user
|
obj.reviewed_by = self.request.user
|
||||||
obj.reviewed_at = timezone.now()
|
obj.reviewed_at = timezone.now()
|
||||||
obj.save()
|
obj.save()
|
||||||
return HttpResponseRedirect(reverse_lazy('hs_list'))
|
return HttpResponseRedirect(reverse('hs_list'))
|
||||||
|
|
||||||
|
|
||||||
class EventRiskAssessmentCreate(HSCreateView):
|
class EventRiskAssessmentCreate(HSCreateView):
|
||||||
@@ -52,12 +53,12 @@ class EventRiskAssessmentCreate(HSCreateView):
|
|||||||
ra = models.RiskAssessment.objects.filter(event=event).first()
|
ra = models.RiskAssessment.objects.filter(event=event).first()
|
||||||
|
|
||||||
if ra is not None:
|
if ra is not None:
|
||||||
return HttpResponseRedirect(reverse_lazy('ra_edit', kwargs={'pk': ra.pk}))
|
return HttpResponseRedirect(reverse('ra_edit', kwargs={'pk': ra.pk}))
|
||||||
|
|
||||||
return super(EventRiskAssessmentCreate, self).get(self)
|
return super(EventRiskAssessmentCreate, self).get(self)
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return reverse_lazy('ra_detail', kwargs={'pk': self.object.pk})
|
return reverse('ra_detail', kwargs={'pk': self.object.pk})
|
||||||
|
|
||||||
|
|
||||||
class EventRiskAssessmentEdit(generic.UpdateView):
|
class EventRiskAssessmentEdit(generic.UpdateView):
|
||||||
@@ -70,7 +71,7 @@ class EventRiskAssessmentEdit(generic.UpdateView):
|
|||||||
ra.reviewed_by = None
|
ra.reviewed_by = None
|
||||||
ra.reviewed_at = None
|
ra.reviewed_at = None
|
||||||
ra.save()
|
ra.save()
|
||||||
return reverse_lazy('ra_detail', kwargs={'pk': self.object.pk})
|
return reverse('ra_detail', kwargs={'pk': self.object.pk})
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(EventRiskAssessmentEdit, self).get_context_data(**kwargs)
|
context = super(EventRiskAssessmentEdit, self).get_context_data(**kwargs)
|
||||||
@@ -113,7 +114,7 @@ class EventChecklistEdit(generic.UpdateView):
|
|||||||
ec.reviewed_by = None
|
ec.reviewed_by = None
|
||||||
ec.reviewed_at = None
|
ec.reviewed_at = None
|
||||||
ec.save()
|
ec.save()
|
||||||
return reverse_lazy('ec_detail', kwargs={'pk': self.object.pk})
|
return reverse('ec_detail', kwargs={'pk': self.object.pk})
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(EventChecklistEdit, self).get_context_data(**kwargs)
|
context = super(EventChecklistEdit, self).get_context_data(**kwargs)
|
||||||
@@ -141,12 +142,12 @@ class EventChecklistCreate(HSCreateView):
|
|||||||
|
|
||||||
if ra is None:
|
if ra is None:
|
||||||
messages.error(self.request, f'A Risk Assessment must exist prior to creating any Event Checklists for {event}! Please create one now.')
|
messages.error(self.request, f'A Risk Assessment must exist prior to creating any Event Checklists for {event}! Please create one now.')
|
||||||
return HttpResponseRedirect(reverse_lazy('event_ra', kwargs={'pk': epk}))
|
return HttpResponseRedirect(reverse('event_ra', kwargs={'pk': epk}))
|
||||||
|
|
||||||
return super(EventChecklistCreate, self).get(self)
|
return super(EventChecklistCreate, self).get(self)
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return reverse_lazy('ec_detail', kwargs={'pk': self.object.pk})
|
return reverse('ec_detail', kwargs={'pk': self.object.pk})
|
||||||
|
|
||||||
|
|
||||||
class PowerTestDetail(generic.DetailView):
|
class PowerTestDetail(generic.DetailView):
|
||||||
@@ -169,7 +170,7 @@ class PowerTestEdit(generic.UpdateView):
|
|||||||
ec.reviewed_by = None
|
ec.reviewed_by = None
|
||||||
ec.reviewed_at = None
|
ec.reviewed_at = None
|
||||||
ec.save()
|
ec.save()
|
||||||
return reverse_lazy('ec_detail', kwargs={'pk': self.object.pk})
|
return reverse('ec_detail', kwargs={'pk': self.object.pk})
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
@@ -196,12 +197,12 @@ class PowerTestCreate(HSCreateView):
|
|||||||
|
|
||||||
if ra is None:
|
if ra is None:
|
||||||
messages.error(self.request, f'A Risk Assessment must exist prior to creating any Power Test Records for {event}! Please create one now.')
|
messages.error(self.request, f'A Risk Assessment must exist prior to creating any Power Test Records for {event}! Please create one now.')
|
||||||
return HttpResponseRedirect(reverse_lazy('event_ra', kwargs={'pk': epk}))
|
return HttpResponseRedirect(reverse('event_ra', kwargs={'pk': epk}))
|
||||||
|
|
||||||
return super().get(self)
|
return super().get(self)
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return reverse_lazy('pt_detail', kwargs={'pk': self.object.pk})
|
return reverse('pt_detail', kwargs={'pk': self.object.pk})
|
||||||
|
|
||||||
|
|
||||||
class HSList(generic.ListView):
|
class HSList(generic.ListView):
|
||||||
@@ -234,7 +235,7 @@ class EventCheckIn(generic.CreateView, ModalURLMixin):
|
|||||||
form_class = forms.EventCheckInForm
|
form_class = forms.EventCheckInForm
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return self.get_close_url('event_detail', 'event_detail') # Well, that's one way of doing that...!
|
return self.get_close_url('event_detail', 'event_detail') # Well, that's one way of doing that...!
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
@@ -262,8 +263,14 @@ class EventCheckInEdit(generic.UpdateView, ModalURLMixin):
|
|||||||
template_name = 'hs/eventcheckin_form.html'
|
template_name = 'hs/eventcheckin_form.html'
|
||||||
form_class = forms.EditCheckInForm
|
form_class = forms.EditCheckInForm
|
||||||
|
|
||||||
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
obj = self.get_object()
|
||||||
|
if not obj.person == self.request.user and not obj.event.mic == self.request.user:
|
||||||
|
return redirect(self.request.META.get('HTTP_REFERER', '/'))
|
||||||
|
return super().dispatch(request)
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return self.get_close_url('event_detail', 'event_detail') # Well, that's one way of doing that...!
|
return self.get_close_url('event_detail', 'event_detail') # Well, that's one way of doing that...!
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
@@ -280,4 +287,4 @@ class EventCheckOut(generic.RedirectView):
|
|||||||
if checkin:
|
if checkin:
|
||||||
checkin.end_time = timezone.now()
|
checkin.end_time = timezone.now()
|
||||||
checkin.save()
|
checkin.save()
|
||||||
return reverse_lazy('event_detail', kwargs={'pk': checkin.event.pk})
|
return self.request.META.get('HTTP_REFERER', '/')
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ function initPicker(obj) {
|
|||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
console.log(obj.data);
|
//console.log(obj.data);
|
||||||
if (!obj.data('noclear')) {
|
if (!obj.data('noclear')) {
|
||||||
obj.prepend($("<option></option>")
|
obj.prepend($("<option></option>")
|
||||||
.attr("value",'')
|
.attr("value",'')
|
||||||
|
|||||||
Reference in New Issue
Block a user