diff --git a/RIGS/templates/RIGS/item_modal.html b/RIGS/templates/RIGS/item_modal.html
index 602f24ef..f34062ac 100644
--- a/RIGS/templates/RIGS/item_modal.html
+++ b/RIGS/templates/RIGS/item_modal.html
@@ -1,4 +1,4 @@
-
+
\ No newline at end of file
+
diff --git a/assets/forms.py b/assets/forms.py
index ea05efd3..dafd978b 100644
--- a/assets/forms.py
+++ b/assets/forms.py
@@ -12,7 +12,7 @@ class AssetForm(forms.ModelForm):
class Meta:
model = models.Asset
fields = '__all__'
- exclude = ['asset_id_prefix', 'asset_id_number']
+ exclude = ['asset_id_prefix', 'asset_id_number', 'last_audited_at', 'last_audited_by']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
diff --git a/assets/migrations/0011_auto_20200208_2304.py b/assets/migrations/0011_auto_20200208_2304.py
new file mode 100644
index 00000000..1bdd487f
--- /dev/null
+++ b/assets/migrations/0011_auto_20200208_2304.py
@@ -0,0 +1,26 @@
+# Generated by Django 2.0.13 on 2020-02-08 23:04
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ('assets', '0010_auto_20200207_1737'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='asset',
+ name='last_audited_at',
+ field=models.DateTimeField(blank=True, null=True),
+ ),
+ migrations.AddField(
+ model_name='asset',
+ name='last_audited_by',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='audited_by', to=settings.AUTH_USER_MODEL),
+ ),
+ ]
diff --git a/assets/models.py b/assets/models.py
index 5bf830bc..c7376a4f 100644
--- a/assets/models.py
+++ b/assets/models.py
@@ -9,7 +9,7 @@ from django.dispatch.dispatcher import receiver
from reversion import revisions as reversion
from reversion.models import Version
-from RIGS.models import RevisionMixin
+from RIGS.models import RevisionMixin, Profile
class AssetCategory(models.Model):
@@ -88,8 +88,13 @@ class Asset(models.Model, RevisionMixin):
purchase_price = models.DecimalField(blank=True, null=True, decimal_places=2, max_digits=10)
salvage_value = models.DecimalField(blank=True, null=True, decimal_places=2, max_digits=10)
comments = models.TextField(blank=True)
+ # TODO Remove
next_sched_maint = models.DateField(blank=True, null=True)
+ # Audit
+ last_audited_at = models.DateTimeField(blank=True, null=True)
+ last_audited_by = models.ForeignKey(Profile, on_delete=models.SET_NULL, related_name='audited_by', blank=True, null=True)
+
# Cable assets
is_cable = models.BooleanField(default=False)
plug = models.ForeignKey(Connector, on_delete=models.SET_NULL,
diff --git a/assets/templates/asset_audit.html b/assets/templates/asset_audit.html
new file mode 100644
index 00000000..20e37f1a
--- /dev/null
+++ b/assets/templates/asset_audit.html
@@ -0,0 +1,82 @@
+{% extends 'base_assets.html' %}
+{% load widget_tweaks %}
+{% block title %}Audit Asset {{ object.asset_id }}{% endblock %}
+
+{% block content %}
+
+
+{% include 'partials/asset_search.html' %}
diff --git a/assets/templates/asset_update.html b/assets/templates/asset_update.html
index 4f576130..0540e590 100644
--- a/assets/templates/asset_update.html
+++ b/assets/templates/asset_update.html
@@ -35,6 +35,11 @@
{% include 'partials/parent_form.html' %}
+ {% if not edit %}
+
+ {% include 'partials/audit_details.html' %}
+
+ {% endif %}
diff --git a/assets/templates/partials/asset_search.html b/assets/templates/partials/asset_search.html
new file mode 100644
index 00000000..fae4e7cf
--- /dev/null
+++ b/assets/templates/partials/asset_search.html
@@ -0,0 +1,28 @@
+{% extends request.is_ajax|yesno:'base_ajax.html,base_assets.html' %}
+
+{% load widget_tweaks %}
+
+{% block title %}Asset Search{% endblock %}
+
+{% block content %}
+
+{% endblock %}
diff --git a/assets/templates/partials/audit_details.html b/assets/templates/partials/audit_details.html
new file mode 100644
index 00000000..6c67ad56
--- /dev/null
+++ b/assets/templates/partials/audit_details.html
@@ -0,0 +1,8 @@
+
+
+ Audit Details
+
+
+
Audited at {{ object.last_audited_at|default_if_none:'-' }} by {{ object.last_audited_by|default_if_none:'-' }}
+
+
diff --git a/assets/urls.py b/assets/urls.py
index dc8e021c..c27e5bfa 100644
--- a/assets/urls.py
+++ b/assets/urls.py
@@ -31,6 +31,9 @@ urlpatterns = [
views.AssetOembed.as_view(),
name='asset_oembed'),
+ path('asset/audit/', permission_required_with_403('assets.view_asset')(views.AssetAuditList.as_view()), name='asset_audit_list'),
+ path('asset/id/
/audit/', permission_required_with_403('assets.view_asset')(views.AssetAudit.as_view()), name='asset_audit'),
+
path('supplier/list', views.SupplierList.as_view(), name='supplier_list'),
path('supplier/', views.SupplierDetail.as_view(), name='supplier_detail'),
path('supplier/create', permission_required_with_403('assets.add_supplier')
diff --git a/assets/views.py b/assets/views.py
index 29eaa7aa..f3f21c2b 100644
--- a/assets/views.py
+++ b/assets/views.py
@@ -11,6 +11,7 @@ from assets import models, forms
from RIGS import versioning
import simplejson
+import datetime
@method_decorator(csrf_exempt, name='dispatch')
@@ -173,6 +174,34 @@ class AssetEmbed(AssetDetail):
template_name = 'asset_embed.html'
+class AssetAuditList(LoginRequiredMixin, generic.ListView):
+ model = models.Asset
+ template_name = 'asset_list.html'
+ paginate_by = 40
+ ordering = ['-pk']
+
+
+class AssetAudit(LoginRequiredMixin, AssetIDUrlMixin, generic.UpdateView):
+ template_name = 'asset_audit.html'
+ model = models.Asset
+ form_class = forms.AssetForm
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context['edit'] = True
+ context['connectors'] = models.Connector.objects.all()
+
+ return context
+
+ def get_success_url(self):
+ # TODO For some reason this doesn't stick when done in form_valid??
+ asset = self.get_object()
+ asset.last_audited_by = self.request.user
+ asset.last_audited_at = datetime.datetime.now()
+ asset.save()
+ return reverse("asset_audit_list")
+
+
class SupplierList(generic.ListView):
model = models.Supplier
template_name = 'supplier_list.html'
diff --git a/templates/base_assets.html b/templates/base_assets.html
index 636c70df..248a7cee 100644
--- a/templates/base_assets.html
+++ b/templates/base_assets.html
@@ -35,5 +35,6 @@
{# % endif % #}
{% if perms.assets.view_asset %}
Recent Changes
+ Audit
{% endif %}
{% endblock %}