Start reworking invoice things

This commit is contained in:
2020-03-18 18:09:45 +00:00
parent 0144bd37fc
commit 50ca782569
15 changed files with 350 additions and 434 deletions

View File

@@ -51,6 +51,7 @@ class InvoiceIndex(generic.ListView):
class InvoiceDetail(generic.DetailView):
model = models.Invoice
template_name = 'invoice_detail.html'
class InvoicePrint(generic.View):
@@ -155,7 +156,7 @@ class InvoiceArchive(generic.ListView):
class InvoiceWaiting(generic.ListView):
model = models.Event
paginate_by = 25
template_name = 'event_invoice.html'
template_name = 'invoice_list_waiting.html'
def get_context_data(self, **kwargs):
context = super(InvoiceWaiting, self).get_context_data(**kwargs)
@@ -203,6 +204,7 @@ class InvoiceEvent(generic.View):
class PaymentCreate(generic.CreateView):
model = models.Payment
fields = ['invoice', 'date', 'amount', 'method']
template_name = 'payment_form.html'
def get_initial(self):
initial = super(generic.CreateView, self).get_initial()

View File

@@ -499,6 +499,7 @@ class EventAuthorisation(models.Model, RevisionMixin):
return str("N%05d" % self.event.pk + ' (requested by ' + self.sent_by.initials + ')')
@reversion.register(follow=['payment_set'])
class Invoice(models.Model):
event = models.OneToOneField('Event', on_delete=models.CASCADE)
invoice_date = models.DateField(auto_now_add=True)

View File

@@ -70,143 +70,11 @@
</div>
{% endif %}
<div class="col-sm">
<div class="card card-info">
<div class="card-header">Event Info</div>
<div class="card-body">
<dl class="row">
<dt class="col-sm-6">Event Venue</dt>
<dd class="col-sm-6">
{% if object.venue %}
<a href="{% url 'venue_detail' object.venue.pk %}" class="modal-href">
{{ object.venue }}
</a>
{% endif %}
</dd>
{% if event.is_rig %}
<dt class="col-sm-6">Event MIC</dt>
<dd class="col-sm-6">
{% 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 class="col-sm-6">Status</dt>
<dd class="col-sm-6">{{ event.get_status_display }}</dd>
<dd class="col-sm-12">&nbsp;</dd>
{% if event.is_rig %}
<dt class="col-sm-6">Crew Meet</dt>
<dd class="col-sm-6">{{ event.meet_at|date:"D d M Y H:i"|default:"TBC" }}</dd>
<!---TODO<dd class="col-sm-6">{{ event.meet_info|default:"" }}</dd>--->
<dt class="col-sm-6">Access From</dt>
<dd class="col-sm-6">{{ event.access_at|date:"D d M Y H:i"|default:"TBC" }}</dd>
{% endif %}
<dt class="col-sm-6">Event Starts</dt>
<dd class="col-sm-6">{{ event.start_date|date:"D d M Y" }} {{ event.start_time|date:"H:i" }}</dd>
<dt class="col-sm-6">Event Ends</dt>
<dd class="col-sm-6">{{ event.end_date|date:"D d M Y" }} {{ event.end_time|date:"H:i" }}</dd>
<dd class="col-sm-12">&nbsp;</dd>
<dt class="col-sm-6">Event Description</dt>
<dd class="dont-break-out col-sm-12">{{ event.description|linebreaksbr }}</dd>
<dd class="col-sm-12">&nbsp;</dd>
<dt class="col-sm-6">Based On</dt>
<dd class="col-sm-6">
{% 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 class="col-sm-6">Checked In By</dt>
<dd class="col-sm-6">{{ object.checked_in_by.name }}</dd>
{% endif %}
{% if event.is_rig %}
<dt class="col-sm-6">Collected By</dt>
<dd class="col-sm-6">{{ object.collector }}</dd>
{% endif %}
{% if event.is_rig and not event.internal and perms.RIGS.view_event %}
<dd class="col-sm-12">&nbsp;</dd>
<dt class="col-sm-6">PO</dt>
<dd class="col-sm-6">{{ object.purchase_order }}</dd>
{% endif %}
</dl>
</div>
</div>
{% include 'partials/event_details.html' %}
</div>
{% if event.is_rig and event.internal and perms.RIGS.view_event %}
<div class="col-sm-12 py-3">
<div class="card card-default
{% if object.authorised %}
card-success
{% elif event.authorisation and event.authorisation.amount != event.total and event.authorisation.last_edited_at > event.auth_request_at %}
card-warning
{% elif event.auth_request_to %}
card-info
{% endif %}
">
<div class="card-header">Client Authorisation</div>
<div class="card-body">
<dl class="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">&nbsp;</dd>
<dl class="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>
{ include 'partials/auth_details.html' %}
<div>
{% endif %}
{% if not request.is_ajax and perms.RIGS.view_event %}

View File

@@ -1,100 +0,0 @@
{% extends 'base_rigs.html' %}
{% load paginator from filters %}
{% load static %}
{% block title %}Events for Invoice{% endblock %}
{% block js %}
<script src="{% static "js/tooltip.js" %}"></script>
<script>
$(function () {
$('[data-toggle="tooltip"]').tooltip();
});
</script>
{% endblock %}
{% block content %}
<div class="col-sm-12">
<h2>Events for Invoice ({{count}} Events, £ {{ total|floatformat:2 }})</h2>
<p>These events have happened, but paperwork has not yet been sent to treasury</p>
{% if is_paginated %}
<div class="col-md-6 col-md-offset-6 col-sm-12 text-right">
{% paginator %}
</div>
{% endif %}
<div class="table-responsive col-sm-12">
<table class="table table-hover">
<thead>
<tr>
<th>Event #</th>
<th>Start Date</th>
<th>Event Name</th>
<th>Client</th>
<th>Cost</th>
<th>MIC</th>
<th></th>
</tr>
</thead>
<tbody>
{% for object in object_list %}
<tr class="
{% if object.cancelled %}
active text-muted
{% elif not object.is_rig %}
info
{% elif object.confirmed and object.mic %}
{# interpreated as (booked and mic) #}
success
{% elif object.mic %}
warning
{% else %}
danger
{% endif %}
">
<td><a href="{% url 'event_detail' object.pk %}">N{{ object.pk|stringformat:"05d" }}</a><br>
<span class="text-muted">{{ object.get_status_display }}</span></td>
<td>{{ object.start_date }}</td>
<td>
{{ object.name }}
{% if object.is_rig and perms.RIGS.view_event and object.authorised %}
<span class="fas fa-check"></span>
{% endif %}
</td>
<td>
{{ object.organisation.name }}
<br>
<span class="text-muted">{{ object.internal|yesno:'Internal,External' }}</span>
</td>
<td>
{{ object.sum_total|floatformat:2 }}
<br />
<span class="text-muted">{% if not object.internal %}{{ object.purchase_order }}{% endif %}</span>
</td>
<td class="text-center">
{% if object.mic %}
{{ object.mic.initials }}<br>
<img src="{{ object.mic.profile_picture }}" class="event-mic-photo"/>
{% else %}
<span class="fas fa-exclamation"></span>
{% endif %}
</td>
<td class="text-right">
<a href="{% url 'invoice_event' object.pk %}"
class="btn btn-primary"
data-toggle="tooltip"
title="'Invoice' this event - click this when paperwork has been sent to treasury">
<i class="fas fa-pound-sign"></i>
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% if is_paginated %}
<div class="col-md-6 col-md-offset-6 col-sm-12 text-right">
{% paginator %}
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -10,16 +10,7 @@
</thead>
<tbody>
{% for event in events %}
<tr class="
{% if event.cancelled %}
text-muted table-secondary
{% elif event.authorised and event.risk_assessment_edit_url and event.mic %}
table-success
{% elif not event.is_rig %}
table-info
{% else %}
table-warning
{% endif %}">
<tr {% include 'partials/event_table_colour.html' %}>
<!---Number-->
<th scope="row">{{ event.pk }}</th>
<!--Dates-->

View File

@@ -11,15 +11,15 @@
<div class="col-sm-4 text-right">
<div class="btn-group btn-page">
<a href="{% url 'invoice_delete' object.pk %}" class="btn btn-default" title="Delete Invoice">
<span class="fas fa-remove"></span> <span
<a href="{% url 'invoice_delete' object.pk %}" class="btn btn-danger" title="Delete Invoice">
<span class="fas fa-times"></span> <span
class="hidden-xs">Delete</span>
</a>
<a href="{% url 'invoice_void' object.pk %}" class="btn btn-default" title="Void Invoice">
<span class="fas fa-ban-circle"></span> <span
<a href="{% url 'invoice_void' object.pk %}" class="btn btn-warning" title="Void Invoice">
<span class="fas fa-ban"></span> <span
class="hidden-xs">Void</span>
</a>
<a href="{% url 'invoice_print' object.pk %}" target="_blank" title="Print Invoice" class="btn btn-default"><span
<a href="{% url 'invoice_print' object.pk %}" target="_blank" title="Print Invoice" class="btn btn-primary"><span
class="fas fa-print"></span> <span
class="hidden-xs">Print</span></a>
</div>
@@ -29,7 +29,9 @@
<div class="row">
<div class="col-sm-6">
<div class="card card-default">
<div class="card-header">Invoice Details</div>
<div class="card-header">Invoice Details<span class="float-right">
{% if object.void %}(VOID){% elif object.is_closed %}(PAID){% else %}(OUTSTANDING){% endif %}
</span></div>
<div class="card-body">
{% if object.event.organisation %}
{{ object.event.organisation.name }}<br/>
@@ -42,81 +44,13 @@
</div>
</div>
<div class="col-sm-6">
<div class="card card-{% if object.is_closed %}success{% else %}warning{% endif %}">
<div class="card-header">Event Details<span class="pull-right">
{% if object.void %}(VOID){% elif object.is_closed %}(PAID){% else %}(OUTSTANDING){% endif %}
</span>
</div>
<div class="card-body">
<dl class="dl-horizontal">
<dt>Event Number</dt>
<dd>N{{ object.event.pk|stringformat:"05d" }}</dd>
<dt>Event</dt>
<dd>{{ object.event.name }}</dd>
<dt>Event Venue</dt>
<dd>{{ object.event.venue }}</dd>
<dt>Event MIC</dt>
<dd>{{ object.event.mic.name }}</dd>
<dt>Event Starts</dt>
<dd>{{ object.event.start_date|date:"d M Y" }} {{ object.event.start_time|date:"H:i" }}</dd>
<dt>Event Ends</dt>
<dd>{{ object.event.end_date|date:"d M Y" }} {{ object.event.end_time|date:"H:i" }}</dd>
<dt>Status</dt>
<dd>{{ object.event.get_status_display }}</dd>
{% if object.event.dry_hire %}
<dd>&nbsp;</dd>
<dt>Checked In By</dt>
<dd>{{ object.checked_in_by.name }}</dd>
{% endif %}
<dd>&nbsp;</dd>
<dt>Authorised</dt>
<dd>{{ object.event.authorised|yesno:"Yes,No" }}</dd>
<dt>Authorised by</dt>
<dd>
{% if object.event.authorised %}
{{ object.event.authorisation.name }}
(<a href="mailto:{{ object.event.authorisation.email }}">{{ object.event.authorisation.email }}</a>)
{% endif %}
</dd>
{% if object.event.internal %}
{# internal #}
<dt>Uni ID</dt>
<dd>{{ object.event.authorisation.uni_id }}</dd>
<dt>Account code</dt>
<dd>{{ object.event.authorisation.account_code }}</dd>
{% else %}
<dt>PO</dt>
<dd>{{ object.event.purchase_order }}</dd>
{% endif %}
<dt>Authorised at</dt>
<dd>{{ object.event.authorisation.last_edited_at }}</dd>
<dt>Authorised amount</dt>
<dd>
{% if object.event.authorised %}
£ {{ object.event.authorisation.amount|floatformat:"2" }}
{% endif %}
</dd>
<dt>Authorisation request sent by</dt>
<dd>{{ object.authorisation.sent_by }}</dd>
</dl>
</div>
</div>
{% include 'partials/event_details.html' %}
</div>
{% if object.event.internal %}
<div class="col-sm-6">
{% include 'partials/auth_details.html' %}
</div>
{% endif %}
</div>
<div class="row">
@@ -132,22 +66,21 @@
</div>
<table class="table table-hover">
<thead>
<tr>
<td>Date</td>
<td>Amount</td>
<td>Method</td>
<td></td>
</tr>
<tr>
<th scope="col">Date</td>
<th scope="col">Amount</td>
<th scope="col">Method</td>
<th scope="col"></td>
</tr>
</thead>
<tbody>
{% for payment in object.payment_set.all %}
<tr>
<td>{{ payment.date }}</td>
<th scope="row">{{ payment.date }}</th>
<td>{{ payment.amount|floatformat:2 }}</td>
<td>{{ payment.get_method_display }}</td>
<td>
<a href="{% url 'payment_delete' payment.pk %}"
class="btn btn-small btn-danger"><span class="fas fa-remove"</a>
<a href="{% url 'payment_delete' payment.pk %}" class="btn btn-small btn-danger"><span class="fas fa-times"</a>
</td>
</tr>
{% endfor %}
@@ -171,7 +104,7 @@
</div>
</div>
</div>
{% include 'partials/last_edited.html' with target="invoice_history" %}
</div>
</div>
{% endblock %}

View File

@@ -1,5 +1,6 @@
{% extends 'base_rigs.html' %}
{% load paginator from filters %}
{% load static %}
{% block title %}Invoices{% endblock %}
@@ -7,67 +8,51 @@
<div class="col-sm-12">
<h2>{% block heading %}Invoices{% endblock %}</h2>
{% block description %}{% endblock %}
{% if is_paginated %}
<div class="col-md-6 col-md-offset-6 col-sm-12 text-right">
{% paginator %}
</div>
{% endif %}
{% block search %}{% endblock %}
<div class="table-responsive col-sm-12">
<table class="table table-hover">
<thead>
<tr>
<th>Invoice #</th>
<th>Event</th>
<th>Client</th>
<th>Event Date</th>
<th>Invoice Date</th>
<th>Balance</th>
<th></th>
</tr>
<thead class="thead-dark">
<tr>
<th scope="col">Invoice #</th>
<th scope="col">Event</th>
<th scope="col">Client</th>
<th scope="col">Event Date</th>
<th scope="col">Invoice Date</th>
<th scope="col">Balance</th>
<th></th>
</tr>
</thead>
<tbody>
{% for object in object_list %}
<tr>
<td class="{% if object.is_closed %}success{% else %}warning{% endif %}">{{ object.pk }}<br>
<span class="text-muted">{% if object.void %}(VOID){% elif object.is_closed %}(PAID){% else %}(O/S){% endif %}</span></td>
<td class="
{% if object.event.cancelled %}
active text-muted
{% elif not object.event.is_rig %}
info
{% elif object.event.confirmed and object.event.mic %}
{# interpreated as (booked and mic) #}
success
{% elif object.event.mic %}
warning
{% else %}
danger
{% endif %}
"><a href="{% url 'event_detail' object.event.pk %}">N{{ object.event.pk|stringformat:"05d" }}</a>: {{ object.event.name }} <br>
<span class="text-muted">{{ object.event.get_status_display }}{% if not object.event.mic %}, No MIC{% endif %}
{% for invoice in invoice_list %}
<tr class="table-{% if invoice.is_closed %}success{% else %}warning{% endif %}">
<th scope="row">{{ invoice.pk }}<br>
<span class="text-muted">{% if invoice.void %}(VOID){% elif invoice.is_closed %}(PAID){% else %}(O/S){% endif %}</span></th>
<td><a href="{% url 'event_detail' invoice.event.pk %}">N{{ invoice.event.pk|stringformat:"05d" }}</a>: {{ invoice.event.name }} <br>
<span class="text-muted">{{ invoice.event.get_status_display }}{% if not invoice.event.mic %}, No MIC{% endif %}
</span></td>
</td>
<td>{% if object.event.organisation %}
{{ object.event.organisation.name }}
<td>{% if invoice.event.organisation %}
{{ invoice.event.organisation.name }}
<br>
<span class="text-muted">{{ object.event.internal|yesno:'Internal,External' }}</span>
{% else %}
{{ object.event.person.name }}
<span class="text-muted">{{ invoice.event.internal|yesno:'Internal,External' }}</span>
{% elif invoice.event.person %}
{{ invoice.event.person.name }}
<br>
<span class="text-muted">External</span>
<span class="text-muted">Individual</span>
{% endif %}
</td>
<td>{{ object.event.start_date }}</td>
<td>{{ object.invoice_date }}</td>
<td>{{ invoice.event.start_date }}</td>
<td>{{ invoice.invoice_date }}</td>
<td>
{{ object.balance|floatformat:2 }}
{{ invoice.balance|floatformat:2 }}
{% if not invoice.event.internal %}
<br />
<span class="text-muted">{{ object.event.purchase_order }}</span>
<span class="text-muted">{{ invoice.event.purchase_order }}</span>
{% endif %}
</td>
<td class="text-right">
<a href="{% url 'invoice_detail' object.pk %}" class="btn btn-default">
<span class="fas fa-pencil"></span>
<a href="{% url 'invoice_detail' invoice.pk %}" class="btn btn-primary">
<i class="fas fa-edit"></i>
</a>
</td>
</tr>
@@ -76,9 +61,9 @@
</table>
</div>
{% if is_paginated %}
<div class="col-md-6 col-md-offset-6 col-sm-12 text-right">
{% paginator %}
</div>
<div class="row justify-content-center">
{% paginator %}
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -1,13 +1,13 @@
{% extends 'RIGS/invoice_list.html' %}
{% extends 'invoice_list.html' %}
{% block title %}
Outstanding Invoices
{% endblock %}
{% block heading %}
Outstanding Invoices ({{ count }} Events, £ {{ total|floatformat:2 }})
Outstanding Invoices ({{ count }} Events, £{{ total|floatformat:2 }})
{% endblock %}
{% block description %}
<p>Paperwork for these events has been sent to treasury, but the full balance has not yet appeared on a ledger</p>
{% endblock %}
{% endblock %}

View File

@@ -1,4 +1,4 @@
{% extends 'RIGS/invoice_list.html' %}
{% extends 'invoice_list.html' %}
{% block title %}
Invoice Archive
@@ -13,12 +13,12 @@ All Invoices
{% endblock %}
{% block search %}
<div class="col-sm-3 col-sm-offset-9">
<form class="form form-horizontal col-sm-12">
<div class="form-group">
<input type="search" name="q" placeholder="Search" value="{{ request.GET.q }}"
class="form-control"/>
</div>
</form>
</div>
{% endblock %}
<div class="col-sm-3 col-sm-offset-9">
<form class="form form-horizontal col-sm-12">
<div class="form-group">
<input type="search" name="q" placeholder="Search" value="{{ request.GET.q }}"
class="form-control"/>
</div>
</form>
</div>
{% endblock %}

View File

@@ -0,0 +1,90 @@
{% extends 'base_rigs.html' %}
{% load paginator from filters %}
{% load static %}
{% block title %}Events for Invoice{% endblock %}
{% block js %}
<script src="{% static "js/tooltip.js" %}"></script>
<script>
$(function () {
$('[data-toggle="tooltip"]').tooltip();
});
</script>
{% endblock %}
{% block content %}
<div class="col-sm-12">
<h2>Events for Invoice ({{count}} Events, £{{ total|floatformat:2 }})</h2>
<p>These events have happened, but paperwork has not yet been sent to treasury</p>
<div class="table-responsive col-sm-12">
<table class="table table-hover">
<thead class="thead-dark">
<tr>
<th scope="col">Event #</th>
<th scope="col">Start Date</th>
<th scope="col">Event Name</th>
<th scope="col">Client</th>
<th scope="col">Cost</th>
<th scope="col">MIC</th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
{% for event in object_list %}
<tr {% include 'partials/event_table_colour.html' %}>
<th scope="row"><a href="{% url 'event_detail' event.pk %}">N{{ event.pk|stringformat:"05d" }}</a><br>
<span class="text-muted">{{ event.get_status_display }}</span></th>
<td>{{ event.start_date }}</td>
<td>
{{ event.name }}
{% if event.is_rig and perms.RIGS.view_event and event.authorised %}
<span class="fas fa-check"></span>
{% endif %}
</td>
<td>
{% if event.organisation %}
{{ event.organisation.name }}
<br>
<span class="text-muted">{{ event.internal|yesno:'Internal,External' }}</span>
{% elif event.person %}
{{ event.person.name }}
<br>
<span class="text-muted">Individual</span>
{% else %}
<i class="fas fa-exclamation"></i>
{% endif %}
</td>
<td>
{{ event.sum_total|floatformat:2 }}
<br />
<span class="text-muted">{% if not event.internal %}{{ event.purchase_order }}{% endif %}</span>
</td>
<td class="text-center">
{% if event.mic %}
{{ event.mic.initials }}<br>
<img src="{{ event.mic.profile_picture }}" class="event-mic-photo"/>
{% else %}
<span class="fas fa-exclamation"></span>
{% endif %}
</td>
<td class="text-right">
<a href="{% url 'invoice_event' event.pk %}"
class="btn btn-primary"
data-toggle="tooltip"
title="'Invoice' this event - click this when paperwork has been sent to treasury">
<i class="fas fa-pound-sign"></i> Paperwork Sent
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% if is_paginated %}
<div class="row justify-content-center">
{% paginator %}
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -0,0 +1,52 @@
<div class="card card-default
{% if object.authorised %}
card-success
{% elif event.authorisation and event.authorisation.amount != event.total and event.authorisation.last_edited_at > event.auth_request_at %}
card-warning
{% elif event.auth_request_to %}
card-info
{% endif %}
">
<div class="card-header">Client Authorisation</div>
<div class="card-body">
<dl class="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">&nbsp;</dd>
<dl class="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>

View File

@@ -0,0 +1,82 @@
<div class="card card-info">
<div class="card-header">Event Info</div>
<div class="card-body">
<dl class="row">
<dt class="col-sm-6">Event Venue</dt>
<dd class="col-sm-6">
{% if object.venue %}
<a href="{% url 'venue_detail' object.venue.pk %}" class="modal-href">
{{ object.venue }}
</a>
{% endif %}
</dd>
{% if event.is_rig %}
<dt class="col-sm-6">Event MIC</dt>
<dd class="col-sm-6">
{% 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 class="col-sm-6">Status</dt>
<dd class="col-sm-6">{{ event.get_status_display }}</dd>
<dd class="col-sm-12">&nbsp;</dd>
{% if event.is_rig %}
<dt class="col-sm-6">Crew Meet</dt>
<dd class="col-sm-6">{{ event.meet_at|date:"D d M Y H:i"|default:"TBC" }}</dd>
<!---TODO<dd class="col-sm-6">{{ event.meet_info|default:"" }}</dd>--->
<dt class="col-sm-6">Access From</dt>
<dd class="col-sm-6">{{ event.access_at|date:"D d M Y H:i"|default:"TBC" }}</dd>
{% endif %}
<dt class="col-sm-6">Event Starts</dt>
<dd class="col-sm-6">{{ event.start_date|date:"D d M Y" }} {{ event.start_time|date:"H:i" }}</dd>
<dt class="col-sm-6">Event Ends</dt>
<dd class="col-sm-6">{{ event.end_date|date:"D d M Y" }} {{ event.end_time|date:"H:i" }}</dd>
<dd class="col-sm-12">&nbsp;</dd>
<dt class="col-sm-6">Event Description</dt>
<dd class="dont-break-out col-sm-12">{{ event.description|linebreaksbr }}</dd>
<dd class="col-sm-12">&nbsp;</dd>
<dt class="col-sm-6">Based On</dt>
<dd class="col-sm-6">
{% 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 class="col-sm-6">Checked In By</dt>
<dd class="col-sm-6">{{ object.checked_in_by.name }}</dd>
{% endif %}
{% if event.is_rig %}
<dt class="col-sm-6">Collected By</dt>
<dd class="col-sm-6">{{ object.collector }}</dd>
{% endif %}
{% if event.is_rig and not event.internal and perms.RIGS.view_event %}
<dd class="col-sm-12">&nbsp;</dd>
<dt class="col-sm-6">PO</dt>
<dd class="col-sm-6">{{ object.purchase_order }}</dd>
{% endif %}
</dl>
</div>
</div>

View File

@@ -0,0 +1,9 @@
class="{% if event.cancelled %}
text-muted table-secondary
{% elif event.authorised and event.risk_assessment_edit_url and event.mic %}
table-success
{% elif not event.is_rig %}
table-info
{% else %}
table-warning
{% endif %}"

View File

@@ -4,48 +4,48 @@
{% block title %}Add Payment{% endblock %}
{% block content %}
<div class="row">
<div class="col-sm-offset-3 col-sm-6">
<form action="{{ form.action|default:request.path }}" method="post" class="form-horizontal">{% csrf_token %}
<input type="hidden" name="{{ form.invoice.name }}" value="{{ form.invoice.value }}"/>
<div class="row">
<div class="col-sm">
<form action="{{ form.action|default:request.path }}" method="POST">
{% csrf_token %}
<input type="hidden" name="{{ form.invoice.name }}" value="{{ form.invoice.value }}"/>
<div class="row">
{% include 'form_errors.html' %}
<div class="form-group">
<label class="col-sm-2 control-label"
for="{{ form.date.id_for_label }}">{{ form.date.label }}</label>
<div class="col-sm-10">
{% render_field form.date class+="form-control" %}
</div>
<div class="row">
{% include 'form_errors.html' %}
<div class="form-group col-sm">
<label class="col-sm-2 control-label"
for="{{ form.date.id_for_label }}">{{ form.date.label }}</label>
<div class="col-sm-10">
{% render_field form.date class+="form-control" %}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label"
for="{{ form.amount.id_for_label }}">{{ form.amount.label }}</label>
<div class="col-sm-10">
<div class="input-group">
<div class="input-group-addon">£</div>
{% render_field form.amount class+="form-control" %}
<div class="form-group col-xs-12">
<label class="col-sm-2 control-label"
for="{{ form.amount.id_for_label }}">{{ form.amount.label }}</label>
<div class="col-sm-10">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">£</span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label"
for="{{ form.method.id_for_label }}">{{ form.method.label }}</label>
<div class="col-sm-10">
{% render_field form.method class+="form-control" %}
</div>
</div>
<div class="text-right col-sm-3 col-sm-offset-9">
<div class="form-group">
<input type="submit" class="form-control btn btn-primary"/>
{% render_field form.amount class+="form-control" %}
</div>
</div>
</div>
</form>
</div>
<div class="form-group col-sm">
<label class="col-sm-2 control-label"
for="{{ form.method.id_for_label }}">{{ form.method.label }}</label>
<div class="col-sm-10">
{% render_field form.method class+="form-control" %}
</div>
</div>
<div class="float-right col-sm">
<div class="form-group">
<input type="submit" class="form-control btn btn-primary"/>
</div>
</div>
</div>
</form>
</div>
{% endblock %}
</div>
{% endblock %}

View File

@@ -105,6 +105,9 @@ urlpatterns = [
name='invoice_void'),
path('invoice/<int:pk>/delete/', permission_required_with_403('RIGS.change_invoice')(finance.InvoiceDelete.as_view()),
name='invoice_delete'),
path('invoice/(<int:pk>/history/', permission_required_with_403('RIGS.view_invoice')(versioning.VersionHistory.as_view()),
name='invoice_history', kwargs={'model': models.Invoice}),
path('payment/create/', permission_required_with_403('RIGS.add_payment')(finance.PaymentCreate.as_view()),
name='payment_create'),
path('payment/<int:pk>/delete/', permission_required_with_403('RIGS.add_payment')(finance.PaymentDelete.as_view()),