mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-20 23:12:15 +00:00
* CHANGE: First pass at opening up RIGS #233 Whilst it makes it something of a misnomer, the intent is to make the 'view_event' perm a permission to view event details like client/price. I don't see the point in giving everyone 'view_event' and adding a new 'view_event_detail'...Open to arguments the other way. * CHANGE: New user signups now require admin approval Given that I intend to reveal much more data to new users this seems necessary... * CHORE: Fix CI * FIX: Legacy Profiles are now auto-approved correctly * Add testing of approval mechanism This fixes the other functional tests failing because the user cannot login without being approved. * Superusers bypass approval check This should fix the remainder of the tests * Prevent unapproved users logging in through embeds Test suite doing its job...! * FIX: Require login on events and event embeds again Little too far to the open side there Arona... Whooooooops! * FIX: Use has_oembed decorator for events * FIX: Re-prevent basic seeing reversion This is to prevent financials/client data leaking when changed. Hopefully can show them a filtered version in future. * FIX: Remove mitigation for #264 Someone quietly fixed it, it appears * FEAT: Add admin email notif when an account is activated and awaiting approval No async or time-since shenanigans yet! * FIX: Whoops, undo accidental whitespace change * FEAT: Add a fifteen min cooldown between emails to admins Probably not the right way to go about it...but it does work! TODO: How to handle cooldown-emailing shared mailbox addresses? * FIX: Remove event modal history deadlink for basic users Also removes some links on the RIGS homepage that will deadlink for them * FIX: Wrong perms syntax for history pages * CHORE: Squash migrations * FIX: Use a setting for cooldown * FIX: Minor code improvements
276 lines
11 KiB
HTML
276 lines
11 KiB
HTML
{% extends request.is_ajax|yesno:"base_ajax.html,base_rigs.html" %}
|
|
{% block title %}{% if object.is_rig %}N{{ object.pk|stringformat:"05d" }}{% else %}{{ object.pk }}{% endif %} | {{object.name}}{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="row">
|
|
{% if not request.is_ajax %}
|
|
<div class="col-sm-12">
|
|
<h1>
|
|
{% if object.is_rig %}N{{ object.pk|stringformat:"05d" }}{% else %}{{ object.pk }}{% endif %}
|
|
| {{ object.name }} {% if event.dry_hire %}<span class="badge">Dry Hire</span>{% endif %}
|
|
</h1>
|
|
</div>
|
|
{% if perms.RIGS.view_event %}
|
|
<div class="col-sm-12 text-right">
|
|
{% include 'RIGS/event_detail_buttons.html' %}
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% endif %}
|
|
{% if object.is_rig and perms.RIGS.view_event %}
|
|
{# only need contact details for a rig #}
|
|
<div class="col-sm-12 col-md-6 col-lg-5">
|
|
<div class="panel panel-default">
|
|
<div class="panel-heading">Contact Details</div>
|
|
<div class="panel-body">
|
|
<dl class="dl-horizontal">
|
|
<dt>Person</dt>
|
|
<dd>
|
|
{% if object.person %}
|
|
<a href="{% url 'person_detail' object.person.pk %}" class="modal-href">
|
|
{{ object.person }}
|
|
</a>
|
|
{% endif %}
|
|
</dd>
|
|
|
|
<dt>Email</dt>
|
|
<dd>
|
|
<a href="mailto:{{object.person.email}}" target="_blank">
|
|
<span class="overflow-ellipsis">{{ object.person.email }}</span>
|
|
</a>
|
|
</dd>
|
|
|
|
<dt>Phone Number</dt>
|
|
<dd><a href="tel:{{object.person.phone}}">{{ object.person.phone }}</a></dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
{% if event.organisation %}
|
|
<div class="panel panel-default">
|
|
<div class="panel-heading">Organisation</div>
|
|
<div class="panel-body">
|
|
<dl class="dl-horizontal">
|
|
<dt>Organisation</dt>
|
|
<dd>
|
|
{% if object.organisation %}
|
|
<a href="{% url 'organisation_detail' object.organisation.pk %}" class="modal-href">
|
|
{{ object.organisation }}
|
|
</a>
|
|
{% endif %}
|
|
</dd>
|
|
|
|
<dt>Phone Number</dt>
|
|
<dd>
|
|
<a href="tel:{{object.person.phone}}">
|
|
{{ object.organisation.phone }}
|
|
</a>
|
|
</dd>
|
|
|
|
<dt>Has SU Account</dt>
|
|
<dd>{{ event.organisation.union_account|yesno|capfirst }}</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
{% endif %}
|
|
<div class="col-sm-12 {% if event.is_rig and perms.RIGS.view_event %}col-md-6 col-lg-7{% endif %}">
|
|
<div class="panel panel-info">
|
|
<div class="panel-heading">Event Info</div>
|
|
<div class="panel-body">
|
|
<dl class="dl-horizontal">
|
|
<dt>Event Venue</dt>
|
|
<dd>
|
|
{% if object.venue %}
|
|
<a href="{% url 'venue_detail' object.venue.pk %}" class="modal-href">
|
|
{{ object.venue }}
|
|
</a>
|
|
{% endif %}
|
|
</dd>
|
|
|
|
{% if event.is_rig %}
|
|
<dt>Event MIC</dt>
|
|
<dd>
|
|
{% if event.mic and perms.RIGS.view_profile %}
|
|
<a href="{% url 'profile_detail' event.mic.pk %}" class="modal-href">
|
|
{{ event.mic.name }}
|
|
</a>
|
|
{% else %}
|
|
{{ event.mic.name }}
|
|
{% endif %}
|
|
</dd>
|
|
{% endif %}
|
|
|
|
<dt>Status</dt>
|
|
<dd>{{ event.get_status_display }}</dd>
|
|
|
|
<dd> </dd>
|
|
|
|
{% if event.is_rig %}
|
|
<dt>Crew Meet</dt>
|
|
<dd>{{ event.meet_at|date:"D d M Y H:i"|default:"" }}</dd>
|
|
<dd>{{ event.meet_info|default:"" }}</dd>
|
|
|
|
<dt>Access From</dt>
|
|
<dd>{{ event.access_at|date:"D d M Y H:i"|default:"" }}</dd>
|
|
{% endif %}
|
|
|
|
<dt>Event Starts</dt>
|
|
<dd>{{ event.start_date|date:"D d M Y" }} {{ event.start_time|date:"H:i" }}</dd>
|
|
|
|
<dt>Event Ends</dt>
|
|
<dd>{{ event.end_date|date:"D d M Y" }} {{ event.end_time|date:"H:i" }}</dd>
|
|
|
|
<dd> </dd>
|
|
|
|
<dt>Event Description</dt>
|
|
<dd class="dont-break-out">{{ event.description|linebreaksbr }}</dd>
|
|
|
|
<dd> </dd>
|
|
|
|
<dt>Based On</dt>
|
|
<dd>
|
|
{% if object.based_on %}
|
|
<a href="{% url 'event_detail' pk=object.based_on.pk %}">
|
|
{% if object.based_on.is_rig %}N{{ object.based_on.pk|stringformat:"05d" }}{% else %}
|
|
{{ object.based_on.pk }}{% endif %}
|
|
{{ object.based_on.name }} {% if object.based_on.mic %}by {{ object.based_on.mic.name }}{% endif %}
|
|
</a>
|
|
{% endif %}
|
|
</dd>
|
|
|
|
{% if event.dry_hire %}
|
|
<dt>Checked In By</dt>
|
|
<dd>{{ object.checked_in_by.name }}</dd>
|
|
{% endif %}
|
|
|
|
{% if event.is_rig %}
|
|
<dt>Collected By</dt>
|
|
<dd>{{ object.collector }}</dd>
|
|
{% endif %}
|
|
|
|
{% if event.is_rig and not event.internal and perms.RIGS.view_event %}
|
|
<dd> </dd>
|
|
<dt>PO</dt>
|
|
<dd>{{ object.purchase_order }}</dd>
|
|
{% endif %}
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% if event.is_rig and event.internal and perms.RIGS.view_event %}
|
|
<div class="col-sm-12">
|
|
<div class="panel panel-default
|
|
{% if object.authorised %}
|
|
panel-success
|
|
{% elif event.authorisation and event.authorisation.amount != event.total and event.authorisation.last_edited_at > event.auth_request_at %}
|
|
panel-warning
|
|
{% elif event.auth_request_to %}
|
|
panel-info
|
|
{% endif %}
|
|
">
|
|
<div class="panel-heading">Client Authorisation</div>
|
|
<div class="panel-body">
|
|
<dl class="dl-horizontal col-sm-6">
|
|
<dt>Authorisation Request</dt>
|
|
<dd>{{ object.auth_request_to|yesno:"Yes,No" }}</dd>
|
|
|
|
<dt>By</dt>
|
|
<dd>{{ object.auth_request_by }}</dd>
|
|
|
|
<dt>At</dt>
|
|
<dd>{{ object.auth_request_at|date:"D d M Y H:i"|default:"" }}</dd>
|
|
|
|
<dt>To</dt>
|
|
<dd>{{ object.auth_request_to }}</dd>
|
|
</dl>
|
|
<dd class="visible-xs"> </dd>
|
|
<dl class="dl-horizontal col-sm-6">
|
|
<dt>Authorised</dt>
|
|
<dd>{{ object.authorised|yesno:"Yes,No" }}</dd>
|
|
|
|
<dt>Authorised by</dt>
|
|
<dd>
|
|
{% if object.authorisation %}
|
|
{{ object.authorisation.name }}
|
|
(<a href="mailto:{{ object.authorisation.email }}">{{ object.authorisation.email }}</a>)
|
|
{% endif %}
|
|
</dd>
|
|
|
|
<dt>Authorised at</dt>
|
|
<dd>{{ object.authorisation.last_edited_at|date:"D d M Y H:i" }}</dd>
|
|
|
|
<dt>Authorised amount</dt>
|
|
<dd>
|
|
{% if object.authorisation %}
|
|
£ {{ object.authorisation.amount|floatformat:"2" }}
|
|
{% endif %}
|
|
</dd>
|
|
|
|
<dt>Requested by</dt>
|
|
<dd>{{ object.authorisation.sent_by }}</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
{% endif %}
|
|
{% if not request.is_ajax and perms.RIGS.view_event %}
|
|
<div class="col-sm-12 text-right">
|
|
{% include 'RIGS/event_detail_buttons.html' %}
|
|
</div>
|
|
{% endif %}
|
|
{% if event.is_rig %}
|
|
<div class="col-sm-12">
|
|
<div class="panel panel-default">
|
|
<div class="panel-heading">Event Details</div>
|
|
<div class="panel-body">
|
|
{% if perms.RIGS.view_event %}
|
|
<div class="well well-sm">
|
|
<h4>Notes</h4>
|
|
<div class="dont-break-out">{{ event.notes|linebreaksbr }}</div>
|
|
</div>
|
|
{% endif %}
|
|
{% include 'RIGS/item_table.html' %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% if not request.is_ajax and perms.RIGS.view_event %}
|
|
<div class="col-sm-12 text-right">
|
|
{% include 'RIGS/event_detail_buttons.html' %}
|
|
</div>
|
|
{% endif %}
|
|
{% endif %}
|
|
{% if not request.is_ajax and perms.RIGS.view_event %}
|
|
<div class="col-sm-12 text-right">
|
|
<div>
|
|
<a href="{% url 'event_history' object.pk %}" title="View Revision History">
|
|
Last edited at {{ object.last_edited_at }} by {{ object.last_edited_by.name }}
|
|
</a>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% if request.is_ajax %}
|
|
{% block footer %}
|
|
<div class="row">
|
|
{% if perms.RIGS.view_event %}
|
|
<div class="col-sm-10 align-left">
|
|
<a href="{% url 'event_history' object.pk %}" title="View Revision History">
|
|
Last edited at {{ object.last_edited_at|default:'never' }} by {{ object.last_edited_by.name|default:'nobody' }}
|
|
</a>
|
|
</div>
|
|
<div class="col-sm-2">
|
|
{% else %}
|
|
<div class="col-sm-12">
|
|
{% endif %}
|
|
<div class="pull-right">
|
|
<a href="{% url 'event_detail' object.pk %}" class="btn btn-primary">Open Event Page <span
|
|
class="glyphicon glyphicon-eye"></span></a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
{% endif %}
|