mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-17 13:32:15 +00:00
Compare commits
9 Commits
bs4
...
assets_rev
| Author | SHA1 | Date | |
|---|---|---|---|
| 5c3c84fd07 | |||
|
|
5054858585 | ||
| d3ba770400 | |||
| 2ca6786745 | |||
| 08600daf7c | |||
|
9953ac0dc1
|
|||
|
f803dbb028
|
|||
|
d50a2e8423
|
|||
|
206b54dab0
|
@@ -245,7 +245,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-10 align-left">
|
<div class="col-sm-10 align-left">
|
||||||
<a href="{% url 'event_history' object.pk %}" title="View Revision History">
|
<a href="{% url 'event_history' object.pk %}" title="View Revision History">
|
||||||
Last edited at {{ object.last_edited_at }} by {{ object.last_edited_by.name }}
|
Last edited at {{ object.last_edited_at|default:'never' }} by {{ object.last_edited_by.name|default:'nobody' }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-2">
|
<div class="col-sm-2">
|
||||||
|
|||||||
@@ -72,9 +72,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% if perms.RIGS.view_event %}
|
{% if perms.RIGS.view_event %}
|
||||||
<div class="col-sm-6" >
|
<div class="col-sm-6">
|
||||||
{% include 'RIGS/activity_feed.html' %}
|
{% include 'RIGS/activity_feed.html' %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -206,17 +206,14 @@ class VersionHistory(generic.ListView):
|
|||||||
paginate_by = 25
|
paginate_by = 25
|
||||||
|
|
||||||
def get_queryset(self, **kwargs):
|
def get_queryset(self, **kwargs):
|
||||||
thisModel = self.kwargs['model']
|
return RIGSVersion.objects.get_for_object(self.get_object()).select_related("revision", "revision__user").all()
|
||||||
|
|
||||||
versions = RIGSVersion.objects.get_for_object_reference(thisModel, self.kwargs['pk']).select_related("revision", "revision__user").all()
|
def get_object(self, **kwargs):
|
||||||
|
return get_object_or_404(self.kwargs['model'], pk=self.kwargs['pk'])
|
||||||
return versions
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
thisModel = self.kwargs['model']
|
|
||||||
context = super(VersionHistory, self).get_context_data(**kwargs)
|
context = super(VersionHistory, self).get_context_data(**kwargs)
|
||||||
thisObject = get_object_or_404(thisModel, pk=self.kwargs['pk'])
|
context['object'] = self.get_object()
|
||||||
context['object'] = thisObject
|
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,11 @@ from django.urls import reverse
|
|||||||
from django.db.models.signals import pre_save
|
from django.db.models.signals import pre_save
|
||||||
from django.dispatch.dispatcher import receiver
|
from django.dispatch.dispatcher import receiver
|
||||||
|
|
||||||
|
from reversion import revisions as reversion
|
||||||
|
from reversion.models import Version
|
||||||
|
|
||||||
|
from RIGS.models import RevisionMixin
|
||||||
|
|
||||||
|
|
||||||
class AssetCategory(models.Model):
|
class AssetCategory(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
@@ -24,13 +29,15 @@ class AssetStatus(models.Model):
|
|||||||
verbose_name_plural = 'Asset Statuses'
|
verbose_name_plural = 'Asset Statuses'
|
||||||
|
|
||||||
name = models.CharField(max_length=80)
|
name = models.CharField(max_length=80)
|
||||||
should_show = models.BooleanField(default=True, help_text="Should this be shown by default in the asset list.")
|
should_show = models.BooleanField(
|
||||||
|
default=True, help_text="Should this be shown by default in the asset list.")
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
class Supplier(models.Model):
|
@reversion.register
|
||||||
|
class Supplier(models.Model, RevisionMixin):
|
||||||
name = models.CharField(max_length=80)
|
name = models.CharField(max_length=80)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
@@ -55,7 +62,8 @@ class Connector(models.Model):
|
|||||||
return self.description
|
return self.description
|
||||||
|
|
||||||
|
|
||||||
class Asset(models.Model):
|
@reversion.register
|
||||||
|
class Asset(models.Model, RevisionMixin):
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['asset_id_prefix', 'asset_id_number']
|
ordering = ['asset_id_prefix', 'asset_id_number']
|
||||||
permissions = (
|
permissions = (
|
||||||
@@ -63,7 +71,8 @@ class Asset(models.Model):
|
|||||||
('view_asset', 'Can view an asset')
|
('view_asset', 'Can view an asset')
|
||||||
)
|
)
|
||||||
|
|
||||||
parent = models.ForeignKey(to='self', related_name='asset_parent', blank=True, null=True, on_delete=models.SET_NULL)
|
parent = models.ForeignKey(to='self', related_name='asset_parent',
|
||||||
|
blank=True, null=True, on_delete=models.SET_NULL)
|
||||||
asset_id = models.CharField(max_length=15, unique=True)
|
asset_id = models.CharField(max_length=15, unique=True)
|
||||||
description = models.CharField(max_length=120)
|
description = models.CharField(max_length=120)
|
||||||
category = models.ForeignKey(to=AssetCategory, on_delete=models.CASCADE)
|
category = models.ForeignKey(to=AssetCategory, on_delete=models.CASCADE)
|
||||||
@@ -79,10 +88,14 @@ class Asset(models.Model):
|
|||||||
|
|
||||||
# Cable assets
|
# Cable assets
|
||||||
is_cable = models.BooleanField(default=False)
|
is_cable = models.BooleanField(default=False)
|
||||||
plug = models.ForeignKey(Connector, on_delete=models.SET_NULL, related_name='plug', blank=True, null=True)
|
plug = models.ForeignKey(Connector, on_delete=models.SET_NULL,
|
||||||
socket = models.ForeignKey(Connector, on_delete=models.SET_NULL, related_name='socket', blank=True, null=True)
|
related_name='plug', blank=True, null=True)
|
||||||
length = models.DecimalField(decimal_places=1, max_digits=10, blank=True, null=True, help_text='m')
|
socket = models.ForeignKey(Connector, on_delete=models.SET_NULL,
|
||||||
csa = models.DecimalField(decimal_places=2, max_digits=10, blank=True, null=True, help_text='mm^2')
|
related_name='socket', blank=True, null=True)
|
||||||
|
length = models.DecimalField(decimal_places=1, max_digits=10,
|
||||||
|
blank=True, null=True, help_text='m')
|
||||||
|
csa = models.DecimalField(decimal_places=2, max_digits=10,
|
||||||
|
blank=True, null=True, help_text='mm^2')
|
||||||
circuits = models.IntegerField(blank=True, null=True)
|
circuits = models.IntegerField(blank=True, null=True)
|
||||||
cores = models.IntegerField(blank=True, null=True)
|
cores = models.IntegerField(blank=True, null=True)
|
||||||
|
|
||||||
@@ -125,7 +138,8 @@ class Asset(models.Model):
|
|||||||
self.asset_id = self.asset_id.upper()
|
self.asset_id = self.asset_id.upper()
|
||||||
asset_search = re.search("^([a-zA-Z0-9]*?[a-zA-Z]?)([0-9]+)$", self.asset_id)
|
asset_search = re.search("^([a-zA-Z0-9]*?[a-zA-Z]?)([0-9]+)$", self.asset_id)
|
||||||
if asset_search is None:
|
if asset_search is None:
|
||||||
errdict["asset_id"] = ["An Asset ID can only consist of letters and numbers, with a final number"]
|
errdict["asset_id"] = [
|
||||||
|
"An Asset ID can only consist of letters and numbers, with a final number"]
|
||||||
|
|
||||||
if self.purchase_price and self.purchase_price < 0:
|
if self.purchase_price and self.purchase_price < 0:
|
||||||
errdict["purchase_price"] = ["A price cannot be negative"]
|
errdict["purchase_price"] = ["A price cannot be negative"]
|
||||||
|
|||||||
92
assets/templates/asset_activity_table.html
Normal file
92
assets/templates/asset_activity_table.html
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
{% extends request.is_ajax|yesno:"base_ajax.html,base_assets.html" %}
|
||||||
|
{% load static %}
|
||||||
|
{% load paginator from filters %}
|
||||||
|
{% load to_class_name from filters %}
|
||||||
|
|
||||||
|
{% block title %}Asset Activity Stream{% endblock %}
|
||||||
|
|
||||||
|
{# TODO: Find a way to reduce code duplication...can't just include the content because of the IDs... #}
|
||||||
|
|
||||||
|
{% block js %}
|
||||||
|
<script src="{% static "js/tooltip.js" %}"></script>
|
||||||
|
<script src="{% static "js/popover.js" %}"></script>
|
||||||
|
<script src="{% static "js/moment.min.js" %}"></script>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('[data-toggle="popover"]').popover().click(function(){
|
||||||
|
if($(this).attr('href')){
|
||||||
|
window.location.href = $(this).attr('href');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// This keeps timeago values correct, but uses an insane amount of resources
|
||||||
|
// $(function () {
|
||||||
|
// setInterval(function() {
|
||||||
|
// $('.date').each(function (index, dateElem) {
|
||||||
|
// var $dateElem = $(dateElem);
|
||||||
|
// var formatted = moment($dateElem.attr('data-date')).fromNow();
|
||||||
|
// $dateElem.text(formatted);
|
||||||
|
// })
|
||||||
|
// });
|
||||||
|
// }, 10000);
|
||||||
|
|
||||||
|
|
||||||
|
$('.date').each(function (index, dateElem) {
|
||||||
|
var $dateElem = $(dateElem);
|
||||||
|
var formatted = moment($dateElem.attr('data-date')).fromNow();
|
||||||
|
$dateElem.text(formatted);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<h3>Asset Activity Stream</h3>
|
||||||
|
</div>
|
||||||
|
<div class="text-right col-sm-12">{% paginator %}</div>
|
||||||
|
</div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<td>Date</td>
|
||||||
|
<td>Object</td>
|
||||||
|
<td>Version ID</td>
|
||||||
|
<td>User</td>
|
||||||
|
<td>Changes</td>
|
||||||
|
<td>Comment</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for version in object_list %}
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>{{ version.revision.date_created }}</td>
|
||||||
|
<td><a href="{{ version.changes.new.get_absolute_url }}">{{version.changes.new|to_class_name}} {{ version.changes.new.asset_id|default:version.changes.new.pk }}</a></td>
|
||||||
|
<td>{{ version.pk }}|{{ version.revision.pk }}</td>
|
||||||
|
<td>{{ version.revision.user.name }}</td>
|
||||||
|
<td>
|
||||||
|
{% if version.changes.old == None %}
|
||||||
|
{{version.changes.new|to_class_name}} Created
|
||||||
|
{% else %}
|
||||||
|
{% include 'RIGS/version_changes.html' %}
|
||||||
|
{% endif %} </td>
|
||||||
|
<td>{{ version.changes.revision.comment }}</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="align-right">{% paginator %}</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
@@ -45,6 +45,16 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
{% if not edit %}
|
||||||
|
<div class="col-sm-12 text-right">
|
||||||
|
<div>
|
||||||
|
<a href="{% url 'asset_history' object.asset_id %}" title="View Revision History">
|
||||||
|
Last edited at {{ object.last_edited_at|default:'never' }} by {{ object.last_edited_by.name|default:'nobody' }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block js%}
|
{% block js%}
|
||||||
|
|||||||
68
assets/templates/asset_version_history.html
Normal file
68
assets/templates/asset_version_history.html
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
{% extends request.is_ajax|yesno:"base_ajax.html,base_assets.html" %}
|
||||||
|
{% load to_class_name from filters %}
|
||||||
|
{% load paginator from filters %}
|
||||||
|
{% load static %}
|
||||||
|
|
||||||
|
{% block title %}{{object|to_class_name}} {{ object.asset_id }} - Revision History{% endblock %}
|
||||||
|
|
||||||
|
{% block js %}
|
||||||
|
<script src="{% static "js/tooltip.js" %}"></script>
|
||||||
|
<script src="{% static "js/popover.js" %}"></script>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('[data-toggle="popover"]').popover().click(function(){
|
||||||
|
if($(this).attr('href')){
|
||||||
|
window.location.href = $(this).attr('href');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<h3><a href="{{ object.get_absolute_url }}">{{object|to_class_name}} {{ object.asset_id|default:object.pk }}</a> - Revision History</h3>
|
||||||
|
</div>
|
||||||
|
<div class="text-right col-sm-12">{% paginator %}</div>
|
||||||
|
</div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<td>Date</td>
|
||||||
|
<td>Version ID</td>
|
||||||
|
<td>User</td>
|
||||||
|
<td>Changes</td>
|
||||||
|
<td>Comment</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for version in object_list %}
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>{{ version.revision.date_created }}</td>
|
||||||
|
<td>{{ version.pk }}|{{ version.revision.pk }}</td>
|
||||||
|
<td>{{ version.revision.user.name }}</td>
|
||||||
|
<td>
|
||||||
|
{% if version.changes.old is None %}
|
||||||
|
{{object|to_class_name}} Created
|
||||||
|
{% else %}
|
||||||
|
{% include 'RIGS/version_changes.html' %}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ version.revision.comment }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="align-right">{% paginator %}</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
@@ -31,6 +31,7 @@
|
|||||||
<td>{{ item.name }}</td>
|
<td>{{ item.name }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{% url 'supplier_update' item.pk %}" class="btn btn-default"><i class="glyphicon glyphicon-edit"></i> Edit</a>
|
<a href="{% url 'supplier_update' item.pk %}" class="btn btn-default"><i class="glyphicon glyphicon-edit"></i> Edit</a>
|
||||||
|
<a href="{% url 'supplier_history' item.pk %}" class="btn btn-default"><i class="glyphicon glyphicon-time"></i> History</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
|
from django.conf.urls import url
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
from assets import views
|
from assets import views, models
|
||||||
|
from RIGS import versioning
|
||||||
|
|
||||||
from PyRIGS.decorators import permission_required_with_403
|
from PyRIGS.decorators import permission_required_with_403
|
||||||
|
|
||||||
@@ -7,16 +9,27 @@ urlpatterns = [
|
|||||||
path('', views.AssetList.as_view(), name='asset_index'),
|
path('', views.AssetList.as_view(), name='asset_index'),
|
||||||
path('asset/list/', views.AssetList.as_view(), name='asset_list'),
|
path('asset/list/', views.AssetList.as_view(), name='asset_list'),
|
||||||
path('asset/id/<str:pk>/', views.AssetDetail.as_view(), name='asset_detail'),
|
path('asset/id/<str:pk>/', views.AssetDetail.as_view(), name='asset_detail'),
|
||||||
path('asset/create/', permission_required_with_403('assets.add_asset')(views.AssetCreate.as_view()), name='asset_create'),
|
path('asset/create/', permission_required_with_403('assets.add_asset')
|
||||||
path('asset/id/<str:pk>/edit/', permission_required_with_403('assets.change_asset')(views.AssetEdit.as_view()), name='asset_update'),
|
(views.AssetCreate.as_view()), name='asset_create'),
|
||||||
path('asset/id/<str:pk>/duplicate/', permission_required_with_403('assets.add_asset')(views.AssetDuplicate.as_view()), name='asset_duplicate'),
|
path('asset/id/<str:pk>/edit/', permission_required_with_403('assets.change_asset')
|
||||||
|
(views.AssetEdit.as_view()), name='asset_update'),
|
||||||
|
path('asset/id/<str:pk>/duplicate/', permission_required_with_403('assets.add_asset')
|
||||||
|
(views.AssetDuplicate.as_view()), name='asset_duplicate'),
|
||||||
|
path('asset/id/<str:pk>/history/', views.AssetVersionHistory.as_view(),
|
||||||
|
name='asset_history', kwargs={'model': models.Asset}),
|
||||||
|
path('activity', permission_required_with_403('assets.view_asset')
|
||||||
|
(views.ActivityTable.as_view()), name='asset_activity_table'),
|
||||||
|
|
||||||
path('asset/search/', views.AssetSearch.as_view(), name='asset_search_json'),
|
path('asset/search/', views.AssetSearch.as_view(), name='asset_search_json'),
|
||||||
|
|
||||||
path('supplier/list', views.SupplierList.as_view(), name='supplier_list'),
|
path('supplier/list', views.SupplierList.as_view(), name='supplier_list'),
|
||||||
path('supplier/<int:pk>', views.SupplierDetail.as_view(), name='supplier_detail'),
|
path('supplier/<int:pk>', views.SupplierDetail.as_view(), name='supplier_detail'),
|
||||||
path('supplier/create', permission_required_with_403('assets.add_supplier')(views.SupplierCreate.as_view()), name='supplier_create'),
|
path('supplier/create', permission_required_with_403('assets.add_supplier')
|
||||||
path('supplier/<int:pk>/edit', permission_required_with_403('assets.change_supplier')(views.SupplierUpdate.as_view()), name='supplier_update'),
|
(views.SupplierCreate.as_view()), name='supplier_create'),
|
||||||
|
path('supplier/<int:pk>/edit', permission_required_with_403('assets.change_supplier')
|
||||||
|
(views.SupplierUpdate.as_view()), name='supplier_update'),
|
||||||
|
path('supplier/<str:pk>/history/', views.SupplierVersionHistory.as_view(),
|
||||||
|
name='supplier_history', kwargs={'model': models.Supplier}),
|
||||||
|
|
||||||
path('supplier/search/', views.SupplierSearch.as_view(), name='supplier_search_json'),
|
path('supplier/search/', views.SupplierSearch.as_view(), name='supplier_search_json'),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ from django.views.decorators.csrf import csrf_exempt
|
|||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
from django.shortcuts import get_object_or_404
|
||||||
from assets import models, forms
|
from assets import models, forms
|
||||||
|
from RIGS import versioning
|
||||||
|
|
||||||
|
|
||||||
@method_decorator(csrf_exempt, name='dispatch')
|
@method_decorator(csrf_exempt, name='dispatch')
|
||||||
@@ -36,7 +38,8 @@ class AssetList(LoginRequiredMixin, generic.ListView):
|
|||||||
if len(query_string) == 0:
|
if len(query_string) == 0:
|
||||||
queryset = self.model.objects.all()
|
queryset = self.model.objects.all()
|
||||||
elif len(query_string) >= 3:
|
elif len(query_string) >= 3:
|
||||||
queryset = self.model.objects.filter(Q(asset_id__exact=query_string) | Q(description__icontains=query_string))
|
queryset = self.model.objects.filter(
|
||||||
|
Q(asset_id__exact=query_string) | Q(description__icontains=query_string))
|
||||||
else:
|
else:
|
||||||
queryset = self.model.objects.filter(Q(asset_id__exact=query_string))
|
queryset = self.model.objects.filter(Q(asset_id__exact=query_string))
|
||||||
|
|
||||||
@@ -46,7 +49,8 @@ class AssetList(LoginRequiredMixin, generic.ListView):
|
|||||||
if len(form.cleaned_data['status']) > 0:
|
if len(form.cleaned_data['status']) > 0:
|
||||||
queryset = queryset.filter(status__in=form.cleaned_data['status'])
|
queryset = queryset.filter(status__in=form.cleaned_data['status'])
|
||||||
elif self.hide_hidden_status:
|
elif self.hide_hidden_status:
|
||||||
queryset = queryset.filter(status__in=models.AssetStatus.objects.filter(should_show=True))
|
queryset = queryset.filter(
|
||||||
|
status__in=models.AssetStatus.objects.filter(should_show=True))
|
||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
@@ -203,3 +207,24 @@ class SupplierUpdate(generic.UpdateView):
|
|||||||
model = models.Supplier
|
model = models.Supplier
|
||||||
form_class = forms.SupplierForm
|
form_class = forms.SupplierForm
|
||||||
template_name = 'supplier_update.html'
|
template_name = 'supplier_update.html'
|
||||||
|
|
||||||
|
|
||||||
|
class SupplierVersionHistory(versioning.VersionHistory):
|
||||||
|
template_name = "asset_version_history.html"
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: Reduce SQL queries
|
||||||
|
class AssetVersionHistory(versioning.VersionHistory):
|
||||||
|
def get_object(self, **kwargs):
|
||||||
|
return get_object_or_404(models.Asset, asset_id=self.kwargs['pk'])
|
||||||
|
|
||||||
|
|
||||||
|
class ActivityTable(versioning.ActivityTable):
|
||||||
|
model = versioning.RIGSVersion
|
||||||
|
template_name = "asset_activity_table.html"
|
||||||
|
paginate_by = 25
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
versions = versioning.RIGSVersion.objects.get_for_multiple_models(
|
||||||
|
[models.Asset, models.Supplier])
|
||||||
|
return versions
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block titleelements %}
|
{% block titleelements %}
|
||||||
{% if perms.assets.view_asset%}
|
{% if perms.assets.view_asset %}
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Assets<b class="caret"></b></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Assets<b class="caret"></b></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if perms.assets.view_supplier%}
|
{% if perms.assets.view_supplier %}
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> Suppliers<b class="caret"></b></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> Suppliers<b class="caret"></b></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
@@ -28,4 +28,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if perms.assets.view_asset %}
|
||||||
|
<li><a href="{% url 'asset_activity_table' %}">Recent Changes</a></li>
|
||||||
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Reference in New Issue
Block a user