mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-17 05:22:16 +00:00
More optimisation and cleanup (#420)
This commit is contained in:
0
users/__init__.py
Normal file
0
users/__init__.py
Normal file
0
users/management/__init__.py
Normal file
0
users/management/__init__.py
Normal file
0
users/management/commands/__init__.py
Normal file
0
users/management/commands/__init__.py
Normal file
121
users/management/commands/generateSampleUserData.py
Normal file
121
users/management/commands/generateSampleUserData.py
Normal 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()
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user