More optimisation and cleanup (#420)

This commit is contained in:
2021-03-02 11:29:57 +00:00
committed by GitHub
parent 2bf0175786
commit 911336ceec
113 changed files with 6472 additions and 2397 deletions

0
users/__init__.py Normal file
View File

View File

View File

View File

@@ -0,0 +1,121 @@
import datetime
import random
from django.contrib.auth.models import Group, Permission
from django.core.management.base import BaseCommand, CommandError
from django.db import transaction
from django.utils import timezone
from reversion import revisions as reversion
from RIGS import models
class Command(BaseCommand):
help = 'Adds sample data to use for testing'
can_import_settings = True
profiles = []
keyholder_group = None
finance_group = None
hs_group = None
def handle(self, *args, **options):
from django.conf import settings
if not (settings.DEBUG or settings.STAGING):
raise CommandError('You cannot run this command in production')
random.seed(
'Some object to seed the random number generator') # otherwise it is done by time, which could lead to inconsistent tests
with transaction.atomic():
self.setup_groups()
self.setup_useful_profiles()
self.setup_generic_profiles()
def setup_groups(self):
self.keyholder_group = Group.objects.create(name='Keyholders')
self.finance_group = Group.objects.create(name='Finance')
self.hs_group = Group.objects.create(name='H&S')
keyholder_perms = ["add_event", "change_event", "view_event",
"add_eventitem", "change_eventitem", "delete_eventitem",
"add_organisation", "change_organisation", "view_organisation",
"add_person", "change_person", "view_person", "view_profile",
"add_venue", "change_venue", "view_venue",
"add_asset", "change_asset", "delete_asset",
"view_asset", "view_supplier", "change_supplier", "asset_finance",
"add_supplier", "view_cabletype", "change_cabletype",
"add_cabletype", "view_eventchecklist", "change_eventchecklist",
"add_eventchecklist", "view_riskassessment", "change_riskassessment",
"add_riskassessment", "add_eventchecklistcrew", "change_eventchecklistcrew",
"delete_eventchecklistcrew", "view_eventchecklistcrew", "add_eventchecklistvehicle",
"change_eventchecklistvehicle",
"delete_eventchecklistvehicle", "view_eventchecklistvehicle", ]
finance_perms = keyholder_perms + ["add_invoice", "change_invoice", "view_invoice",
"add_payment", "change_payment", "delete_payment"]
hs_perms = keyholder_perms + ["review_riskassessment", "review_eventchecklist"]
for permId in keyholder_perms:
self.keyholder_group.permissions.add(Permission.objects.get(codename=permId))
for permId in finance_perms:
self.finance_group.permissions.add(Permission.objects.get(codename=permId))
for permId in hs_perms:
self.hs_group.permissions.add(Permission.objects.get(codename=permId))
self.keyholder_group.save()
self.finance_group.save()
self.hs_group.save()
def setup_generic_profiles(self):
names = ["Clara Oswin Oswald", "Rory Williams", "Amy Pond", "River Song", "Martha Jones", "Donna Noble",
"Jack Harkness", "Mickey Smith", "Rose Tyler"]
for i, name in enumerate(names):
new_profile = models.Profile.objects.create(username=name.replace(" ", ""), first_name=name.split(" ")[0],
last_name=name.split(" ")[-1],
email=name.replace(" ", "") + "@example.com",
initials="".join([j[0].upper() for j in name.split()]))
if i % 2 == 0:
new_profile.phone = "01234 567894"
new_profile.save()
self.profiles.append(new_profile)
def setup_useful_profiles(self):
super_user = models.Profile.objects.create(username="superuser", first_name="Super", last_name="User",
initials="SU",
email="superuser@example.com", is_superuser=True, is_active=True,
is_staff=True)
super_user.set_password('superuser')
super_user.save()
finance_user = models.Profile.objects.create(username="finance", first_name="Finance", last_name="User",
initials="FU",
email="financeuser@example.com", is_active=True, is_approved=True)
finance_user.groups.add(self.finance_group)
finance_user.groups.add(self.keyholder_group)
finance_user.set_password('finance')
finance_user.save()
hs_user = models.Profile.objects.create(username="hs", first_name="HS", last_name="User",
initials="HSU",
email="hsuser@example.com", is_active=True, is_approved=True)
hs_user.groups.add(self.hs_group)
hs_user.groups.add(self.keyholder_group)
hs_user.set_password('hs')
hs_user.save()
keyholder_user = models.Profile.objects.create(username="keyholder", first_name="Keyholder", last_name="User",
initials="KU",
email="keyholderuser@example.com", is_active=True,
is_approved=True)
keyholder_user.groups.add(self.keyholder_group)
keyholder_user.set_password('keyholder')
keyholder_user.save()
basic_user = models.Profile.objects.create(username="basic", first_name="Basic", last_name="User",
initials="BU",
email="basicuser@example.com", is_active=True, is_approved=True)
basic_user.set_password('basic')
basic_user.save()

View File

@@ -3,22 +3,17 @@
<a class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Hi {{ user.first_name }}
</a>
<ul class="dropdown-menu p-3 clearfix" id="userdropdown">
<ul class="dropdown-menu clearfix" id="userdropdown">
<li class="media">
<a href="{% url 'profile_detail' %}">
<img src="{{ request.user.profile_picture }}" class="media-object"/>
<img src="{{ request.user.profile_picture }}" class="media-object float-left pr-2"/>
<div class="media-body">
<b>{{ request.user.first_name }} {{ request.user.last_name }}</b>
<p class="muted">{{ request.user.email }}</p>
<b>{{ request.user.first_name }} {{ request.user.last_name }}</b>
<p class="text-muted">{{ request.user.email }}</p>
</div>
</a>
</li>
<li class="mb-2">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="darkSwitch" />
<label class="custom-control-label" for="darkSwitch">Dark Mode</label>
</div>
</li>
<div class="dropdown-divider"></div>
<li class="float-right"><a href="{% url 'logout' %}" class="btn btn-primary"><i class="fas fa-sign-out-alt"></i> Logout</a></li>
</ul>
{% else %}

View File

@@ -5,47 +5,47 @@
{% block content %}
<div class="row">
<div class="col">
<div class="col-md-6 offset-md-3">
{% include 'form_errors.html' %}
<h3>Update Profile {{object.name}}</h3>
<div class="row">
<div class="col-md-6">
<form action="{{form.action|default:request.path}}" method="post">{% csrf_token %}
<div class="form-group">
{% include 'partials/form_field.html' with field=form.first_name %}
</div>
<div class="form-group">
{% include 'partials/form_field.html' with field=form.last_name %}
</div>
<div class="form-group">
<label for="{{form.email.id_for_label}}" class="col-form-label">{{form.email.label}}</label>
{% render_field form.email type="email" class+="form-control" placeholder=form.email.label %}
</div>
<div class="form-group">
{% include 'partials/form_field.html' with field=form.initials %}
</div>
<div class="form-group">
<label for="{{form.phone.id_for_label}}" class="col-form-label">{{form.phone.label}}</label>
{% render_field form.phone type="tel" class+="form-control" placeholder=form.phone.label %}
</div>
<div class="form-group">
<input class="btn btn-primary float-right" type="submit"/>
</div>
</form>
</div>
<div class="col">
<a href="https://gravatar.com/">
<img src="{{object.profile_picture}}" class="img-fluid rounded" />
<div class="text-center">
Images hosted by Gravatar
</div>
</a>
</div>
<div class="col-md-6">
<a href="https://gravatar.com/">
<img src="{{object.profile_picture}}" class="img-fluid rounded" />
<div class="text-center">
Images hosted by Gravatar
</div>
</a>
</div>
<div class="col-md-6">
<form action="{{form.action|default:request.path}}" method="post">{% csrf_token %}
<div class="form-group">
{% include 'partials/form_field.html' with field=form.first_name %}
</div>
<div class="form-group">
{% include 'partials/form_field.html' with field=form.last_name %}
</div>
<div class="form-group">
<label for="{{form.email.id_for_label}}" class="col-form-label">{{form.email.label}}</label>
{% render_field form.email type="email" class+="form-control" placeholder=form.email.label %}
</div>
<div class="form-group">
{% include 'partials/form_field.html' with field=form.initials %}
</div>
<div class="form-group">
<label for="{{form.phone.id_for_label}}" class="col-form-label">{{form.phone.label}}</label>
{% render_field form.phone type="tel" class+="form-control" placeholder=form.phone.label %}
</div>
<div class="form-group">
<label for="{{ form.dark_theme.id_for_label }}">Enable Dark Theme?</label>
{% render_field form.dark_theme %}
</div>
<div class="form-group">
<input class="btn btn-primary float-right" type="submit"/>
</div>
</form>
</div>
</div>
</div>
</div>
</div>

View File

@@ -48,7 +48,7 @@ class ProfileDetail(generic.DetailView):
class ProfileUpdateSelf(generic.UpdateView):
template_name = "profile_form.html"
model = models.Profile
fields = ['first_name', 'last_name', 'email', 'initials', 'phone']
fields = ['first_name', 'last_name', 'email', 'initials', 'phone', 'dark_theme']
def get_queryset(self):
pk = self.request.user.id