diff --git a/admin/templates/lot_tag_panel.html b/admin/templates/lot_tag_panel.html
index 689aad0..48d9a95 100644
--- a/admin/templates/lot_tag_panel.html
+++ b/admin/templates/lot_tag_panel.html
@@ -16,8 +16,13 @@
{% if lot_tags_edit %}
+
+ {% trans 'Inbox order CANNOT be changed' %}
+
+ #
+ |
{% trans "Lot Group Name" %}
|
{% trans "Actions" %}
@@ -26,7 +31,15 @@
|
{% for tag in lot_tags_edit %}
-
+
+
+
+
+ {{ tag.order }}
+
+ |
{{ tag.name }}
|
@@ -56,6 +69,11 @@
+
{% else %}
@@ -186,4 +204,42 @@
{% endfor %}
+
+
+
+
+
{% endblock %}
diff --git a/admin/urls.py b/admin/urls.py
index 0a719ca..23c6086 100644
--- a/admin/urls.py
+++ b/admin/urls.py
@@ -19,4 +19,5 @@ urlpatterns = [
path("lot/add", views.AddLotTagView.as_view(), name="add_lot_tag"),
path("lot/delete/
", views.DeleteLotTagView.as_view(), name='delete_lot_tag'),
path("lot/edit//", views.UpdateLotTagView.as_view(), name='edit_lot_tag'),
+ path("lot/update_order/", views.UpdateLotTagOrderView.as_view(), name='update_lot_tag_order'),
]
diff --git a/admin/views.py b/admin/views.py
index 3465287..b2ad5cb 100644
--- a/admin/views.py
+++ b/admin/views.py
@@ -206,6 +206,30 @@ class UpdateLotTagView(AdminView, UpdateView):
return response
+class UpdateLotTagOrderView(AdminView, TemplateView):
+ success_url = reverse_lazy('admin:tag_panel')
+
+ def post(self, request, *args, **kwargs):
+ form = OrderingStateForm(request.POST)
+
+ if form.is_valid():
+ ordered_ids = form.cleaned_data["ordering"].split(',')
+
+ with transaction.atomic():
+ #TODO: log on institution wide logging - if implemented -
+ current_order = 2
+ for lookup_id in ordered_ids:
+ lot_tag = LotTag.objects.get(id=lookup_id)
+ lot_tag.order = current_order
+ lot_tag.save()
+ current_order += 1
+
+ messages.success(self.request, _("Order changed succesfuly."))
+ return redirect(self.success_url)
+ else:
+ return Http404
+
+
class InstitutionView(AdminView, UpdateView):
template_name = "institution.html"
title = _("Edit institution")
diff --git a/dashboard/mixins.py b/dashboard/mixins.py
index c95e808..417747c 100644
--- a/dashboard/mixins.py
+++ b/dashboard/mixins.py
@@ -35,7 +35,7 @@ class DashboardView(LoginRequiredMixin):
context = super().get_context_data(**kwargs)
lot_tags = LotTag.objects.filter(
owner=self.request.user.institution,
- )
+ ).order_by('order')
context.update({
"commit_id": settings.COMMIT,
'title': self.title,
diff --git a/lot/models.py b/lot/models.py
index d651689..f25f22b 100644
--- a/lot/models.py
+++ b/lot/models.py
@@ -1,4 +1,5 @@
from django.db import models
+from django.db.models import Max
from django.utils.translation import gettext_lazy as _
from utils.constants import (
STR_SM_SIZE,
@@ -16,11 +17,28 @@ class LotTag(models.Model):
owner = models.ForeignKey(Institution, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
inbox = models.BooleanField(default=False)
+ order = models.PositiveIntegerField(default=0)
def __str__(self):
return self.name
+ def save(self, *args, **kwargs):
+ if not self.pk:
+ # set the order to be last
+ max_order = LotTag.objects.filter(owner=self.owner).aggregate(Max('order'))['order__max']
+ self.order = (max_order or 0) + 1
+ super().save(*args, **kwargs)
+
+
+ def delete(self, *args, **kwargs):
+ institution = self.owner
+ order = self.order
+ super().delete(*args, **kwargs)
+ # Adjust the order of other instances
+ LotTag.objects.filter(owner=institution, order__gt=order).update(order=models.F('order') - 1)
+
+
class DeviceLot(models.Model):
lot = models.ForeignKey("Lot", on_delete=models.CASCADE)
device_id = models.CharField(max_length=STR_EXTEND_SIZE, blank=False, null=False)
@@ -51,6 +69,7 @@ class Lot(models.Model):
def remove(self, v):
for d in DeviceLot.objects.filter(lot=self, device_id=v):
d.delete()
+
@property
def devices(self):
return DeviceLot.objects.filter(lot=self)