diff --git a/RIGS/migrations/0004_organisation.py b/RIGS/migrations/0004_organisation.py index 06e29955..2e83e2ad 100644 --- a/RIGS/migrations/0004_organisation.py +++ b/RIGS/migrations/0004_organisation.py @@ -3,6 +3,7 @@ from django.db import models, migrations import RIGS.models +import versioning class Migration(migrations.Migration): @@ -25,6 +26,6 @@ class Migration(migrations.Migration): ], options={ }, - bases=(models.Model, RIGS.models.RevisionMixin), + bases=(models.Model, versioning.versioning.RevisionMixin), ), ] diff --git a/RIGS/migrations/0007_vatrate.py b/RIGS/migrations/0007_vatrate.py index 02aa1625..7bec73b4 100644 --- a/RIGS/migrations/0007_vatrate.py +++ b/RIGS/migrations/0007_vatrate.py @@ -3,6 +3,7 @@ from django.db import models, migrations import RIGS.models +import versioning class Migration(migrations.Migration): @@ -21,6 +22,6 @@ class Migration(migrations.Migration): ], options={ }, - bases=(models.Model, RIGS.models.RevisionMixin), + bases=(models.Model, versioning.versioning.RevisionMixin), ), ] diff --git a/RIGS/migrations/0008_auto_20141105_1908.py b/RIGS/migrations/0008_auto_20141105_1908.py index 141e9570..75bd7fa9 100644 --- a/RIGS/migrations/0008_auto_20141105_1908.py +++ b/RIGS/migrations/0008_auto_20141105_1908.py @@ -4,6 +4,7 @@ from django.db import models, migrations from django.conf import settings import RIGS.models +import versioning class Migration(migrations.Migration): @@ -41,7 +42,7 @@ class Migration(migrations.Migration): ], options={ }, - bases=(models.Model, RIGS.models.RevisionMixin), + bases=(models.Model, versioning.versioning.RevisionMixin), ), migrations.CreateModel( name='EventItem', @@ -70,7 +71,7 @@ class Migration(migrations.Migration): ], options={ }, - bases=(models.Model, RIGS.models.RevisionMixin), + bases=(models.Model, versioning.versioning.RevisionMixin), ), migrations.AddField( model_name='event', diff --git a/RIGS/migrations/0039_auto_20210123_1910.py b/RIGS/migrations/0039_auto_20210123_1910.py index 0b995e30..5ec10b70 100644 --- a/RIGS/migrations/0039_auto_20210123_1910.py +++ b/RIGS/migrations/0039_auto_20210123_1910.py @@ -4,6 +4,7 @@ import RIGS.models from django.conf import settings from django.db import migrations, models import django.db.models.deletion +import versioning class Migration(migrations.Migration): @@ -58,7 +59,7 @@ class Migration(migrations.Migration): 'ordering': ['event'], 'permissions': [('review_eventchecklist', 'Can review Event Checklists')], }, - bases=(models.Model, RIGS.models.RevisionMixin), + bases=(models.Model, versioning.versioning.RevisionMixin), ), migrations.CreateModel( name='EventChecklistCrew', @@ -69,7 +70,7 @@ class Migration(migrations.Migration): ('end', models.DateTimeField()), ('checklist', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='crew', to='RIGS.eventchecklist')), ], - bases=(models.Model, RIGS.models.RevisionMixin), + bases=(models.Model, versioning.versioning.RevisionMixin), ), migrations.CreateModel( name='EventChecklistVehicle', @@ -78,7 +79,7 @@ class Migration(migrations.Migration): ('vehicle', models.CharField(max_length=255)), ('checklist', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='vehicles', to='RIGS.eventchecklist')), ], - bases=(models.Model, RIGS.models.RevisionMixin), + bases=(models.Model, versioning.versioning.RevisionMixin), ), migrations.CreateModel( name='RiskAssessment', @@ -117,7 +118,7 @@ class Migration(migrations.Migration): 'ordering': ['event'], 'permissions': [('review_riskassessment', 'Can review Risk Assessments')], }, - bases=(models.Model, RIGS.models.RevisionMixin), + bases=(models.Model, versioning.versioning.RevisionMixin), ), migrations.RemoveField( model_name='eventcrew', diff --git a/RIGS/models.py b/RIGS/models.py index c45a9134..7c49a386 100644 --- a/RIGS/models.py +++ b/RIGS/models.py @@ -17,6 +17,7 @@ from django.utils import timezone from django.utils.functional import cached_property from reversion import revisions as reversion from reversion.models import Version +from versioning.versioning import RevisionMixin class Profile(AbstractUser): @@ -65,41 +66,6 @@ class Profile(AbstractUser): def __str__(self): return self.name -# TODO move to versioning - currently get import errors with that - - -class RevisionMixin(object): - @property - def is_first_version(self): - versions = Version.objects.get_for_object(self) - return len(versions) == 1 - - @property - def current_version(self): - version = Version.objects.get_for_object(self).select_related('revision').first() - return version - - @property - def last_edited_at(self): - version = self.current_version - if version is None: - return None - return version.revision.date_created - - @property - def last_edited_by(self): - version = self.current_version - if version is None: - return None - return version.revision.user - - @property - def current_version_id(self): - version = self.current_version - if version is None: - return None - return "V{0} | R{1}".format(version.pk, version.revision.pk) - class Person(models.Model, RevisionMixin): name = models.CharField(max_length=50) diff --git a/assets/forms.py b/assets/forms.py index d571f158..d870ab2d 100644 --- a/assets/forms.py +++ b/assets/forms.py @@ -33,6 +33,7 @@ class AssetSearchForm(forms.Form): category = forms.ModelMultipleChoiceField(models.AssetCategory.objects.all(), required=False) status = forms.ModelMultipleChoiceField(models.AssetStatus.objects.all(), required=False) is_cable = forms.BooleanField(required=False) + date_acquired = forms.DateField(required=False) class SupplierForm(forms.ModelForm): diff --git a/assets/models.py b/assets/models.py index 37af4687..1c4d07d6 100644 --- a/assets/models.py +++ b/assets/models.py @@ -6,7 +6,8 @@ from django.urls import reverse from reversion import revisions as reversion from reversion.models import Version -from RIGS.models import RevisionMixin, Profile +from RIGS.models import Profile +from versioning.versioning import RevisionMixin class AssetCategory(models.Model): diff --git a/assets/templates/asset_list.html b/assets/templates/asset_list.html index d335fad7..5ddae31c 100644 --- a/assets/templates/asset_list.html +++ b/assets/templates/asset_list.html @@ -61,25 +61,45 @@ {% block content %}
-
-
- {% render_field form.q|add_class:'form-control' placeholder='Enter Asset ID/Desc/Serial' %} - - {% button 'search' id="id_search" %} -
-
- - {% render_field form.category|attr:'multiple'|add_class:'form-control custom-select selectpicker col-sm' data-none-selected-text="Categories" data-header="Categories" data-actions-box="true" %} -
-
- - {% render_field form.status|attr:'multiple'|add_class:'form-control custom-select selectpicker col-sm' data-none-selected-text="Statuses" data-header="Statuses" data-actions-box="true" %} -
-
- {% render_field form.is_cable|add_class:'form-check-input' %} - -
- + +
+
+
+ {% render_field form.q|add_class:'form-control' placeholder='Enter Asset ID/Desc/Serial' %} + + {% button 'search' id="id_search" %} +
+
+
+
+
+
+ + {% render_field form.category|attr:'multiple'|add_class:'form-control custom-select selectpicker col-sm' data-none-selected-text="Categories" data-header="Categories" data-actions-box="true" %} +
+
+
+
+ + {% render_field form.status|attr:'multiple'|add_class:'form-control custom-select selectpicker col-sm' data-none-selected-text="Statuses" data-header="Statuses" data-actions-box="true" %} +
+
+
+
+ {% render_field form.is_cable|add_class:'form-check-input' %} + +
+
+
+
+ + {% render_field form.date_acquired|add_class:'form-control mx-2' %} +
+
+
+ +
+
diff --git a/assets/views.py b/assets/views.py index 28894de8..c382af7c 100644 --- a/assets/views.py +++ b/assets/views.py @@ -61,6 +61,9 @@ class AssetList(LoginRequiredMixin, generic.ListView): if form.cleaned_data['is_cable']: queryset = queryset.filter(is_cable=True) + if form.cleaned_data['date_acquired']: + queryset = queryset.filter(date_acquired=form.cleaned_data['date_acquired']) + if form.cleaned_data['category']: queryset = queryset.filter(category__in=form.cleaned_data['category']) diff --git a/versioning/versioning.py b/versioning/versioning.py index 72308919..75585256 100644 --- a/versioning/versioning.py +++ b/versioning/versioning.py @@ -7,11 +7,46 @@ from django.db.models import EmailField, IntegerField, TextField, CharField, Boo from django.utils.functional import cached_property from reversion.models import Version, VersionQuerySet -from RIGS import models - logger = logging.getLogger('tec.pyrigs') +class RevisionMixin: + @property + def is_first_version(self): + versions = Version.objects.get_for_object(self) + return len(versions) == 1 + + @property + def current_version(self): + version = Version.objects.get_for_object(self).select_related('revision').first() + return version + + @property + def last_edited_at(self): + version = self.current_version + if version is None: + return None + return version.revision.date_created + + @property + def last_edited_by(self): + version = self.current_version + if version is None: + return None + return version.revision.user + + @property + def current_version_id(self): + version = self.current_version + if version is None: + return None + return "V{0} | R{1}".format(version.pk, version.revision.pk) + + @property + def date_created(self): + return self.current_version.revision.date_created + + class FieldComparison(object): def __init__(self, field=None, old=None, new=None): self.field = field @@ -117,10 +152,11 @@ class ModelComparison(object): @cached_property def item_changes(self): + from RIGS.models import EventAuthorisation if self.follow and self.version.object is not None: item_type = ContentType.objects.get_for_model(self.version.object) old_item_versions = self.version.parent.revision.version_set.exclude(content_type=item_type) - new_item_versions = self.version.revision.version_set.exclude(content_type=item_type).exclude(content_type=ContentType.objects.get_for_model(models.EventAuthorisation)) + new_item_versions = self.version.revision.version_set.exclude(content_type=item_type).exclude(content_type=ContentType.objects.get_for_model(EventAuthorisation)) comparisonParams = {'excluded_keys': ['id', 'event', 'order', 'checklist']}