mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-27 02:12:18 +00:00
Add invoice versioning to templates.
This commit is contained in:
@@ -1,25 +1,24 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from RIGS import models, forms
|
|
||||||
from django.contrib.auth.admin import UserAdmin
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
from reversion.admin import VersionAdmin
|
|
||||||
|
|
||||||
from django.contrib.admin import helpers
|
|
||||||
from django.template.response import TemplateResponse
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.db import transaction
|
from django.contrib.admin import helpers
|
||||||
|
from django.contrib.auth.admin import UserAdmin
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
|
from django.db import transaction
|
||||||
from django.db.models import Count
|
from django.db.models import Count
|
||||||
from django.forms import ModelForm
|
from django.forms import ModelForm
|
||||||
|
from django.template.response import TemplateResponse
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from reversion import revisions as reversion
|
from reversion import revisions as reversion
|
||||||
|
from reversion.admin import VersionAdmin
|
||||||
|
|
||||||
|
from RIGS import models, forms
|
||||||
|
|
||||||
# Register your models here.
|
# Register your models here.
|
||||||
admin.site.register(models.VatRate, VersionAdmin)
|
admin.site.register(models.VatRate, VersionAdmin)
|
||||||
admin.site.register(models.Event, VersionAdmin)
|
admin.site.register(models.Event, VersionAdmin)
|
||||||
admin.site.register(models.EventItem, VersionAdmin)
|
admin.site.register(models.EventItem, VersionAdmin)
|
||||||
admin.site.register(models.Invoice)
|
admin.site.register(models.Invoice, VersionAdmin)
|
||||||
admin.site.register(models.Payment)
|
admin.site.register(models.Payment, VersionAdmin)
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.Profile)
|
@admin.register(models.Profile)
|
||||||
|
|||||||
@@ -1,24 +1,21 @@
|
|||||||
|
from collections import Counter
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import hashlib
|
import hashlib
|
||||||
import datetime
|
|
||||||
import pytz
|
import pytz
|
||||||
|
import random
|
||||||
from django.db import models
|
import string
|
||||||
from django.contrib.auth.models import AbstractUser
|
from decimal import Decimal
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.contrib.auth.models import AbstractUser
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
|
from django.db import models
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.functional import cached_property
|
|
||||||
from django.utils.encoding import python_2_unicode_compatible
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
from django.utils.functional import cached_property
|
||||||
from reversion import revisions as reversion
|
from reversion import revisions as reversion
|
||||||
from reversion.models import Version
|
from reversion.models import Version
|
||||||
import string
|
|
||||||
|
|
||||||
import random
|
|
||||||
from collections import Counter
|
|
||||||
from decimal import Decimal
|
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
from django.urls import reverse_lazy
|
|
||||||
|
|
||||||
|
|
||||||
# Create your models here.
|
# Create your models here.
|
||||||
@@ -532,7 +529,7 @@ class EventAuthorisation(models.Model, RevisionMixin):
|
|||||||
|
|
||||||
@reversion.register(follow=['payment_set'])
|
@reversion.register(follow=['payment_set'])
|
||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
class Invoice(models.Model):
|
class Invoice(models.Model, RevisionMixin):
|
||||||
event = models.OneToOneField('Event', on_delete=models.CASCADE)
|
event = models.OneToOneField('Event', on_delete=models.CASCADE)
|
||||||
invoice_date = models.DateField(auto_now_add=True)
|
invoice_date = models.DateField(auto_now_add=True)
|
||||||
void = models.BooleanField(default=False)
|
void = models.BooleanField(default=False)
|
||||||
|
|||||||
@@ -6,20 +6,21 @@
|
|||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<h2>Invoice {{ object.pk }} ({{ object.invoice_date|date:"d/m/Y"}})</h2>
|
<h2>Invoice {{ object.pk }} ({{ object.invoice_date|date:"d/m/Y" }})</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-4 text-right">
|
<div class="col-sm-4 text-right">
|
||||||
<div class="btn-group btn-page">
|
<div class="btn-group btn-page">
|
||||||
<a href="{% url 'invoice_delete' object.pk %}" class="btn btn-default" title="Delete Invoice">
|
<a href="{% url 'invoice_delete' object.pk %}" class="btn btn-default" title="Delete Invoice">
|
||||||
<span class="glyphicon glyphicon-remove"></span> <span
|
<span class="glyphicon glyphicon-remove"></span> <span
|
||||||
class="hidden-xs">Delete</span>
|
class="hidden-xs">Delete</span>
|
||||||
</a>
|
</a>
|
||||||
<a href="{% url 'invoice_void' object.pk %}" class="btn btn-default" title="Void Invoice">
|
<a href="{% url 'invoice_void' object.pk %}" class="btn btn-default" title="Void Invoice">
|
||||||
<span class="glyphicon glyphicon-ban-circle"></span> <span
|
<span class="glyphicon glyphicon-ban-circle"></span> <span
|
||||||
class="hidden-xs">Void</span>
|
class="hidden-xs">Void</span>
|
||||||
</a>
|
</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-default"><span
|
||||||
class="glyphicon glyphicon-print"></span> <span
|
class="glyphicon glyphicon-print"></span> <span
|
||||||
class="hidden-xs">Print</span></a>
|
class="hidden-xs">Print</span></a>
|
||||||
</div>
|
</div>
|
||||||
@@ -83,9 +84,11 @@
|
|||||||
|
|
||||||
<dt>Authorised by</dt>
|
<dt>Authorised by</dt>
|
||||||
<dd>
|
<dd>
|
||||||
{% if object.event.authorised %}
|
{% if object.event.authorised %}
|
||||||
{{ object.event.authorisation.name }}
|
{{ object.event.authorisation.name }}
|
||||||
(<a href="mailto:{{ object.event.authorisation.email }}">{{ object.event.authorisation.email }}</a>)
|
(
|
||||||
|
<a href="mailto:{{ object.event.authorisation.email }}">{{ object.event.authorisation.email }}</a>
|
||||||
|
)
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
@@ -172,6 +175,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-12 text-right">
|
||||||
|
<div>
|
||||||
|
<a href="{% url 'invoice_history' object.pk %}" title="View Revision History">
|
||||||
|
Last edited at {{ object.last_edited_at }} by {{ object.last_edited_by.name }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
13
RIGS/urls.py
13
RIGS/urls.py
@@ -1,13 +1,12 @@
|
|||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
from django.contrib.auth.views import password_reset
|
|
||||||
|
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from RIGS import models, views, rigboard, finance, ical, versioning, forms
|
from django.contrib.auth.views import password_reset
|
||||||
from django.views.generic import RedirectView
|
|
||||||
from django.views.decorators.clickjacking import xframe_options_exempt
|
from django.views.decorators.clickjacking import xframe_options_exempt
|
||||||
|
from django.views.generic import RedirectView
|
||||||
|
|
||||||
from PyRIGS.decorators import permission_required_with_403
|
|
||||||
from PyRIGS.decorators import api_key_required
|
from PyRIGS.decorators import api_key_required
|
||||||
|
from PyRIGS.decorators import permission_required_with_403
|
||||||
|
from RIGS import models, views, rigboard, finance, ical, versioning, forms
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
# Examples:
|
# Examples:
|
||||||
@@ -144,6 +143,10 @@ urlpatterns = [
|
|||||||
url(r'^invoice/(?P<pk>\d+)/delete/$',
|
url(r'^invoice/(?P<pk>\d+)/delete/$',
|
||||||
permission_required_with_403('RIGS.change_invoice')(finance.InvoiceDelete.as_view()),
|
permission_required_with_403('RIGS.change_invoice')(finance.InvoiceDelete.as_view()),
|
||||||
name='invoice_delete'),
|
name='invoice_delete'),
|
||||||
|
url(r'^invoice/(?P<pk>\d+)/history/$',
|
||||||
|
permission_required_with_403('RIGS.view_invoice')(versioning.VersionHistory.as_view()),
|
||||||
|
name='invoice_history', kwargs={'model': models.Invoice}),
|
||||||
|
|
||||||
url(r'^payment/create/$',
|
url(r'^payment/create/$',
|
||||||
permission_required_with_403('RIGS.add_payment')(finance.PaymentCreate.as_view()),
|
permission_required_with_403('RIGS.add_payment')(finance.PaymentCreate.as_view()),
|
||||||
name='payment_create'),
|
name='payment_create'),
|
||||||
|
|||||||
Reference in New Issue
Block a user