Moved the table element from the main rigboard out to something reusuable.

Added the ability to view organisations by people and vice versa, as well as the option to see all the rigs associated with orgs/people/venues.

Added helper properties for the above
This commit is contained in:
Tom Price
2015-01-22 20:48:37 +00:00
parent e2d01cc6c5
commit c6aed3db75
7 changed files with 200 additions and 119 deletions

View File

@@ -52,6 +52,18 @@ class Person(models.Model, RevisionMixin):
string += "*"
return string
@property
def organisations(self):
o = []
for e in self.event_set.all():
if e.organisation and e.organisation not in o:
o.append(e.organisation)
return o
@property
def latest_events(self):
return self.event_set.order_by('-start_date')
class Meta:
permissions = (
('view_person', 'Can view Persons'),
@@ -75,6 +87,18 @@ class Organisation(models.Model, RevisionMixin):
string += "*"
return string
@property
def persons(self):
p = []
for e in self.event_set.all():
if e.person and e.person not in p:
p.append(e.person)
return p
@property
def latest_events(self):
return self.event_set.order_by('-start_date')
class Meta:
permissions = (
('view_organisation', 'Can view Organisations'),
@@ -131,6 +155,10 @@ class Venue(models.Model, RevisionMixin):
string += "*"
return string
@property
def latest_events(self):
return self.event_set.order_by('-start_date')
class Meta:
permissions = (
('view_venue', 'Can view Venues'),

View File

@@ -0,0 +1,85 @@
<div class="table-responsive">
<table class="table">
<thead>
<td class="hidden-xs">#</td>
<td>Event Date</td>
<td>Event Details</td>
<td>Event Timings</td>
<td>MIC</td>
</thead>
<tbody>
{% for event in events %}
<tr class="
{% if event.cancelled %}
active
{% elif event.confirmed and event.mic or not event.is_rig %}
{# interpreated as (booked and mic) or is non rig #}
success
{% elif event.mic %}
warning
{% else %}
danger
{% endif %}
">
<td class="hidden-xs">{{ event.pk }}</td>
<td>
<div><strong>{{ event.start_date|date:"SHORT_DATE_FORMAT" }}</strong></div>
{% if event.end_date and event.end_date != event.start_date %}
<div><strong>{{ event.end_date|date:"SHORT_DATE_FORMAT" }}</strong></div>
{% endif %}
</td>
<td>
<h4>
<a href="{% url 'event_detail' event.pk %}">{{ event.name }}</a>
{% if event.venue %}
<small>at {{ event.venue }}</small>
{% endif %}
</h4>
{% if event.is_rig %}
<h5>
{{ event.person.name }}
{% if event.organisation %}
for {{ event.organisation.name }}
{% endif %}
</h5>
{% endif %}
{% if not event.cancelled and event.description %}
<div>
{{ event.description|linebreaksbr }}
</div>
{% endif %}
</td>
<td>
<dl class="dl-horizontal">
{% if event.meet_at %}
<dt>Crew meet</dt>
<dd>{{ event.meet_at|date:"H:i" }}<br/>{{ event.meet_at|date:"(Y-m-d)" }}</dd>
{% endif %}
{% if event.start_time %}
<dt>Event starts</dt>
<dd>
{{ event.start_time|date:"H:i" }}<br/>
{{ event.start_date|date:"(Y-m-d)" }}
</dd>
{% endif %}
{% if event.end_time and event.start_time != event.end_time %}
<dt>Event ends</dt>
<dd>
{{ event.end_time|date:"H:i" }}<br/>
{{ event.end_date|date:"(Y-m-d)" }}
</dd>
{% endif %}
</dl>
</td>
<td class="text-center">
{% if event.mic or not event.is_rig %}
{{ event.mic.initials }}
{% else %}
<span class="glyphicon glyphicon-exclamation-sign"></span>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>

View File

@@ -4,38 +4,61 @@
{% block title %}{{ object.name }}{% endblock %}
{% block content %}
<div class="row">
<div class="col-sm-10 col-sm-offset-1">
{% if not request.is_ajax %}
{% if not request.is_ajax %}
<div class="row">
<div class="col-sm-8">
<h3>{{ object.name }}<br/>
<span class="small">Last edited {{ object.last_edited_at }} by {{ object.last_edited_by }}</span>
<span class="small">Last edited {{ object.last_edited_at }} by {{ object.last_edited_by.name }}</span>
</h3>
<div class="pull-right">
<a href="{% url 'venue_update' object.pk %}" class="btn btn-primary">Edit <span
class="glyphicon glyphicon-pencil"></span></a>
</div>
{% endif %}
<div class="">
<dl class="dl-horizontal">
<dt>Name</dt>
<dd>{{ object.name }}</dd>
<dt>Phone</dt>
<dd><a href="tel:{{ object.phone }}">{{ object.phone }}</a></dd>
<dt>Email</dt>
<dd><a href="mailto:{{ object.email }}">{{ object.email }}</a></dd>
<dt>Address</dt>
<dd>{{ object.address|linebreaksbr }}</dd>
<dt>Notes</dt>
<dd>{{ object.notes|linebreaksbr }}</dd>
<dt>Union Account</dt>
<dd>{{ object.union_account|yesno|capfirst }}</dd>
</dl>
</div>
<div class="pull-right">
<a href="{% url 'organisation_update' object.pk %}" class="btn btn-primary">Edit <span
class="glyphicon glyphicon-pencil"></span></a>
</div>
<div class="col-sm-4">
</div>
</div>
{% endif %}
<div class="row">
<div class="col-sm-6">
<h4>Details</h4>
<dl class="dl-horizontal">
<dt>Name</dt>
<dd>{{ object.name }}</dd>
<dt>Phone</dt>
<dd><a href="tel:{{ object.phone }}">{{ object.phone }}</a></dd>
<dt>Email</dt>
<dd><a href="mailto:{{ object.email }}">{{ object.email }}</a></dd>
<dt>Address</dt>
<dd>{{ object.address|linebreaksbr }}</dd>
<dt>Notes</dt>
<dd>{{ object.notes|linebreaksbr }}</dd>
<dt>Union Account</dt>
<dd>{{ object.union_account|yesno|capfirst }}</dd>
</dl>
</div>
<div class="col-sm-6">
<h4>People</h4>
<ul class="list-unstyled">
{% for person in object.persons %}
<li><a href="{% url 'person_detail' person.pk %}">{{ person.name }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<h4>Events</h4>
{% with object.latest_events as events %}
{% include 'RIGS/event_table.html' %}
{% endwith %}
</div>
</div>
{% endblock %}
@@ -44,7 +67,8 @@
{% block footer %}
<div class="row">
<div class="col-sm-10 align-left">
Lasted edited at {{ object.last_edited_at|date:"SHORT_DATE_FORMAT" }} by {{ object.last_edited_by }}
Lasted edited at {{ object.last_edited_at|date:"SHORT_DATE_FORMAT" }}
by {{ object.last_edited_by.name }}
</div>
<div class="col-sm-2">
<div class="pull-right">

View File

@@ -5,13 +5,14 @@
{% block content %}
<div class="row">
<div class="col-sm-10 col-sm-offset-1">
<div class="col-sm-6">
<h4>Details</h4>
{% if not request.is_ajax %}
<h3>{{ object.name }}<br/>
<span class="small">Last edited {{ object.last_edited_at }} by {{ object.last_edited_by }}</span>
<span class="small">Last edited {{ object.last_edited_at }} by {{ object.last_edited_by.name }}</span>
</h3>
<div class="pull-right">
<a href="{% url 'venue_update' object.pk %}" class="btn btn-primary">Edit <span
<a href="{% url 'person_update' object.pk %}" class="btn btn-primary">Edit <span
class="glyphicon glyphicon-pencil"></span></a>
</div>
{% endif %}
@@ -34,6 +35,23 @@
</dl>
</div>
</div>
<div class="col-sm-6">
<h4>Organisations</h4>
<ul class="list-unstyled">
{% for organisation in object.organisations %}
<li><a href="{% url 'organisation_detail' organisation.pk %}">{{ organisation.name }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<h4>Events</h4>
{% with object.latest_events as events %}
{% include 'RIGS/event_table.html' %}
{% endwith %}
</div>
</div>
{% endblock %}
@@ -41,7 +59,7 @@
{% block footer %}
<div class="row">
<div class="col-sm-10 align-left">
Lasted edited at {{ object.last_edited_at|date:"SHORT_DATE_FORMAT" }} by {{ user }}
Lasted edited at {{ object.last_edited_at|date:"SHORT_DATE_FORMAT" }} by {{ object.last_edited_by.name }}
</div>
<div class="col-sm-2">
<div class="pull-right">

View File

@@ -27,91 +27,7 @@
</div>
{# .row #}
<div class="table-responsive">
<table class="table">
<thead>
<td class="hidden-xs">#</td>
<td>Event Date</td>
<td>Event Details</td>
<td>Event Timings</td>
<td>MIC</td>
</thead>
<tbody>
{% for event in events %}
<tr class="
{% if event.cancelled %}
active
{% elif event.confirmed and event.mic or not event.is_rig %}
{# interpreated as (booked and mic) or is non rig #}
success
{% elif event.mic %}
warning
{% else %}
danger
{% endif %}
">
<td class="hidden-xs">{{ event.pk }}</td>
<td>
<div><strong>{{ event.start_date|date:"SHORT_DATE_FORMAT" }}</strong></div>
{% if event.end_date and event.end_date != event.start_date %}
<div><strong>{{ event.end_date|date:"SHORT_DATE_FORMAT" }}</strong></div>
{% endif %}
</td>
<td>
<h4>
<a href="{% url 'event_detail' event.pk %}">{{ event.name }}</a>
{% if event.venue %}
<small>at {{ event.venue }}</small>
{% endif %}
</h4>
{% if event.is_rig %}
<h5>
{{ event.person.name }}
{% if event.organisation %}
for {{ event.organisation.name }}
{% endif %}
</h5>
{% endif %}
{% if not event.cancelled and event.description %}
<div>
{{ event.description|linebreaksbr }}
</div>
{% endif %}
</td>
<td>
<dl class="dl-horizontal">
{% if event.meet_at %}
<dt>Crew meet</dt>
<dd>{{ event.meet_at|date:"H:i" }}<br/>{{ event.meet_at|date:"(Y-m-d)" }}</dd>
{% endif %}
{% if event.start_time %}
<dt>Event starts</dt>
<dd>
{{ event.start_time|date:"H:i" }}<br/>
{{ event.start_date|date:"(Y-m-d)" }}
</dd>
{% endif %}
{% if event.end_time and event.start_time != event.end_time %}
<dt>Event ends</dt>
<dd>
{{ event.end_time|date:"H:i" }}<br/>
{{ event.end_date|date:"(Y-m-d)" }}
</dd>
{% endif %}
</dl>
</td>
<td class="text-center">
{% if event.mic or not event.is_rig %}
{{ event.mic.initials }}
{% else %}
<span class="glyphicon glyphicon-exclamation-sign"></span>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% include 'RIGS/event_table.html' %}
</div>
</div>
{% endblock %}

View File

@@ -35,6 +35,14 @@
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
{% with object.latest_events as events %}
{% include 'RIGS/event_table.html' %}
{% endwith %}
</div>
</div>
{% endblock %}
{% if request.is_ajax %}