fix lot properties and clean absurd code from chatgpt
This commit is contained in:
parent
f88e9b144e
commit
a70e6eaf0d
|
@ -82,7 +82,7 @@
|
|||
<div class="modal-footer justify-content-center">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{% trans "Cancel" %}
|
||||
</button>
|
||||
<form method="post" action="{% url 'device:delete_user_property' a.id %}">
|
||||
<form method="post" action="{% url 'device:delete_user_property' object.id a.id %}">
|
||||
{% csrf_token %}
|
||||
<button type="submit" class="btn btn-danger">{% trans "Delete" %}
|
||||
</button>
|
||||
|
@ -105,7 +105,7 @@
|
|||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="editForm{{ a.id }}" method="post" action="{% url 'device:update_user_property' a.id %}">
|
||||
<form id="editForm{{ a.id }}" method="post" action="{% url 'device:update_user_property' object.id a.id %}">
|
||||
{% csrf_token %}
|
||||
<div class="mb-3">
|
||||
<label for="key" class="form-label">{% trans "Key" %}
|
||||
|
|
|
@ -7,8 +7,11 @@ urlpatterns = [
|
|||
path("add/", views.NewDeviceView.as_view(), name="add"),
|
||||
path("edit/<str:pk>/", views.EditDeviceView.as_view(), name="edit"),
|
||||
path("<str:pk>/", views.DetailsView.as_view(), name="details"),
|
||||
path("<str:pk>/user_property/add", views.AddUserPropertyView.as_view(), name="add_user_property"),
|
||||
path("user_property/<int:pk>/delete", views.DeleteUserPropertyView.as_view(), name="delete_user_property"),
|
||||
path("user_property/<int:pk>/update", views.UpdateUserPropertyView.as_view(), name="update_user_property"),
|
||||
path("<str:pk>/user_property/add",
|
||||
views.AddUserPropertyView.as_view(), name="add_user_property"),
|
||||
path("<str:device_id>/user_property/<int:pk>/delete",
|
||||
views.DeleteUserPropertyView.as_view(), name="delete_user_property"),
|
||||
path("<str:device_id>/user_property/<int:pk>/update",
|
||||
views.UpdateUserPropertyView.as_view(), name="update_user_property"),
|
||||
path("<str:pk>/public/", views.PublicDeviceWebView.as_view(), name="device_web"),
|
||||
]
|
||||
|
|
|
@ -53,35 +53,6 @@ class NewDeviceView(DashboardView, FormView):
|
|||
return response
|
||||
|
||||
|
||||
# class AddToLotView(DashboardView, FormView):
|
||||
# template_name = "list_lots.html"
|
||||
# title = _("Add to lots")
|
||||
# breadcrumb = "lot / add to lots"
|
||||
# success_url = reverse_lazy('dashboard:unassigned_devices')
|
||||
# form_class = LotsForm
|
||||
|
||||
# def get_context_data(self, **kwargs):
|
||||
# context = super().get_context_data(**kwargs)
|
||||
# lots = Lot.objects.filter(owner=self.request.user)
|
||||
# lot_tags = LotTag.objects.filter(owner=self.request.user)
|
||||
# context.update({
|
||||
# 'lots': lots,
|
||||
# 'lot_tags':lot_tags,
|
||||
# })
|
||||
# return context
|
||||
|
||||
# def get_form(self):
|
||||
# form = super().get_form()
|
||||
# form.fields["lots"].queryset = Lot.objects.filter(owner=self.request.user)
|
||||
# return form
|
||||
|
||||
# def form_valid(self, form):
|
||||
# form.devices = self.get_session_devices()
|
||||
# form.save()
|
||||
# response = super().form_valid(form)
|
||||
# return response
|
||||
|
||||
|
||||
class EditDeviceView(DashboardView, UpdateView):
|
||||
template_name = "new_device.html"
|
||||
title = _("Update Device")
|
||||
|
@ -132,15 +103,19 @@ class DetailsView(DashboardView, TemplateView):
|
|||
state_definitions = StateDefinition.objects.filter(
|
||||
institution=self.request.user.institution
|
||||
).order_by('order')
|
||||
device_states = State.objects.filter(snapshot_uuid=uuid).order_by('-date')
|
||||
device_logs = DeviceLog.objects.filter(
|
||||
snapshot_uuid=uuid).order_by('-date')
|
||||
device_notes = Note.objects.filter(snapshot_uuid=uuid).order_by('-date')
|
||||
context.update({
|
||||
'object': self.object,
|
||||
'snapshot': last_evidence,
|
||||
'lot_tags': lot_tags,
|
||||
'dpps': dpps,
|
||||
"state_definitions": state_definitions,
|
||||
"device_states": State.objects.filter(snapshot_uuid=uuid).order_by('-date'),
|
||||
"device_logs": DeviceLog.objects.filter(snapshot_uuid=uuid).order_by('-date'),
|
||||
"device_notes": Note.objects.filter(snapshot_uuid=uuid).order_by('-date'),
|
||||
"device_states": device_states,
|
||||
"device_logs": device_logs,
|
||||
"device_notes": device_notes,
|
||||
})
|
||||
return context
|
||||
|
||||
|
@ -231,7 +206,10 @@ class AddUserPropertyView(DeviceLogMixin, CreateView):
|
|||
def get_form_kwargs(self):
|
||||
pk = self.kwargs.get('pk')
|
||||
institution = self.request.user.institution
|
||||
self.property = get_object_or_404(SystemProperty, owner=institution, value=pk)
|
||||
self.property = SystemProperty.objects.filter(
|
||||
owner=institution, value=pk).first()
|
||||
if not self.property:
|
||||
raise Http404
|
||||
|
||||
return super().get_form_kwargs()
|
||||
|
||||
|
@ -244,6 +222,7 @@ class AddUserPropertyView(DeviceLogMixin, CreateView):
|
|||
context['pk'] = self.kwargs.get('pk')
|
||||
return context
|
||||
|
||||
|
||||
class UpdateUserPropertyView(DeviceLogMixin, UpdateView):
|
||||
template_name = "new_user_property.html"
|
||||
title = _("Update User Property")
|
||||
|
@ -251,21 +230,15 @@ class UpdateUserPropertyView(DeviceLogMixin, UpdateView):
|
|||
model = UserProperty
|
||||
fields = ("key", "value")
|
||||
|
||||
def get_queryset(self):
|
||||
def get_form_kwargs(self):
|
||||
pk = self.kwargs.get('pk')
|
||||
institution = self.request.user.institution
|
||||
return UserProperty.objects.filter(pk=pk, owner=institution)
|
||||
self.object = get_object_or_404(UserProperty, owner=institution, pk=pk)
|
||||
self.old_key = self.object.key
|
||||
self.old_value = self.object.value
|
||||
return super().get_form_kwargs()
|
||||
|
||||
def form_valid(self, form):
|
||||
|
||||
old_instance = self.get_object()
|
||||
old_key = old_instance.key
|
||||
old_value = old_instance.value
|
||||
|
||||
form.instance.owner = self.request.user.institution
|
||||
form.instance.user = self.request.user
|
||||
form.instance.type = UserProperty.Type.USER
|
||||
|
||||
new_key = form.cleaned_data['key']
|
||||
new_value = form.cleaned_data['value']
|
||||
|
||||
|
@ -273,27 +246,25 @@ class UpdateUserPropertyView(DeviceLogMixin, UpdateView):
|
|||
super().form_valid(form)
|
||||
messages.success(self.request, _("Property updated successfully."))
|
||||
log_message = _("<Updated> UserProperty: {}: {} to {}: {}".format(
|
||||
old_key,
|
||||
old_value,
|
||||
self.old_key,
|
||||
self.old_value,
|
||||
new_key,
|
||||
new_value
|
||||
))
|
||||
self.log_registry(form.instance.uuid, log_message)
|
||||
# return response
|
||||
return redirect(self.get_success_url()+"#user_properties")
|
||||
return redirect(self.get_success_url())
|
||||
except IntegrityError:
|
||||
messages.error(self.request, _("Property is already defined."))
|
||||
return self.form_invalid(form)
|
||||
|
||||
def form_invalid(self, form):
|
||||
super().form_invalid(form)
|
||||
return redirect(self.get_success_url()+"#user_properties")
|
||||
return redirect(self.get_success_url())
|
||||
|
||||
def get_success_url(self):
|
||||
return self.request.META.get(
|
||||
'HTTP_REFERER',
|
||||
reverse_lazy('device:details', args=[self.object.pk])
|
||||
)
|
||||
pk = self.kwargs.get('device_id')
|
||||
return reverse_lazy('device:details', args=[pk]) + "#user_properties"
|
||||
|
||||
|
||||
class DeleteUserPropertyView(DeviceLogMixin, DeleteView):
|
||||
|
@ -302,9 +273,12 @@ class DeleteUserPropertyView(DeviceLogMixin, DeleteView):
|
|||
def get_queryset(self):
|
||||
return UserProperty.objects.filter(owner=self.request.user.institution)
|
||||
|
||||
#using post() method because delete() method from DeleteView has some issues with messages framework
|
||||
#using post() method because delete() method from DeleteView has some issues
|
||||
# with messages framework
|
||||
def post(self, request, *args, **kwargs):
|
||||
self.object = self.get_object()
|
||||
pk = self.kwargs.get('pk')
|
||||
institution = self.request.user.institution
|
||||
self.object = get_object_or_404(UserProperty, owner=institution, pk=pk)
|
||||
self.object.delete()
|
||||
|
||||
msg = _("<Deleted> User Property: {}:{}".format(
|
||||
|
@ -314,12 +288,8 @@ class DeleteUserPropertyView(DeviceLogMixin, DeleteView):
|
|||
self.log_registry(self.object.uuid, msg)
|
||||
messages.info(self.request, _("User property deleted successfully."))
|
||||
|
||||
return self.handle_success()
|
||||
|
||||
def handle_success(self):
|
||||
return redirect(self.get_success_url())
|
||||
|
||||
def get_success_url(self):
|
||||
pk = self.object.pk
|
||||
url = reverse_lazy('device:details', args=[pk])
|
||||
return self.request.META.get('HTTP_REFERER', url) + "#user_properties"
|
||||
pk = self.kwargs.get('device_id')
|
||||
return reverse_lazy('device:details', args=[pk]) + "#user_properties"
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
# Generated by Django 5.0.6 on 2025-01-31 10:33
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lot', '0005_alter_lotproperty_type'),
|
||||
('user', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddConstraint(
|
||||
model_name='lotproperty',
|
||||
constraint=models.UniqueConstraint(fields=('key', 'lot'), name='property_unique_type_key_lot'),
|
||||
),
|
||||
]
|
|
@ -53,3 +53,9 @@ class LotProperty (Property):
|
|||
USER = 1, "User"
|
||||
|
||||
type = models.SmallIntegerField(choices=Type.choices, default=Type.USER)
|
||||
|
||||
class Meta:
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["key", "lot"], name="property_unique_type_key_lot")
|
||||
]
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
{% endfor %}
|
||||
</div>
|
||||
<div class="container">
|
||||
<a class="btn btn-grey" href="{% url 'dashboard:unassigned_devices' %}">{% translate "Cancel" %}</a>
|
||||
<a class="btn btn-grey" href="{% url 'lot:properties' lot_id %}">{% translate "Cancel" %}</a>
|
||||
<input class="btn btn-green-admin" type="submit" name="submit" value="{% translate 'Save' %}" />
|
||||
</div>
|
||||
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
|
||||
<div class="row">
|
||||
<div class="tab-pane fade show active" id="details">
|
||||
<div class="btn-group dropdown ml-1 mt-1" uib-dropdown="">
|
||||
<a href="{% url 'lot:add_property' lot.pk %}" class="btn btn-primary">
|
||||
<div class="d-flex justify-content-end mt-1 mb-3">
|
||||
<a href="{% url 'lot:add_property' lot.pk %}" class="btn btn-green-admin d-flex align-items-center">
|
||||
|
||||
<i class="bi bi-plus"></i>
|
||||
Add new lot Property
|
||||
|
@ -20,14 +20,13 @@
|
|||
</div>
|
||||
|
||||
<h5 class="card-title mt-2">Properties</h5>
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<table class="table table-hover table-bordered table-responsive align-middle">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th scope="col">Key</th>
|
||||
<th scope="col">Value</th>
|
||||
<th scope="col" data-type="date" data-format="YYYY-MM-DD hh:mm">Created on</th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th scope="col">{% trans 'Key' %}</th>
|
||||
<th scope="col">{% trans 'Value' %}</th>
|
||||
<th scope="col" data-type="date" class="text-end" data-format="YYYY-MM-DD HH:mm">{% trans 'Created on' %}</th>
|
||||
<th scope="col" width="5%" class="text-end"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -35,16 +34,18 @@
|
|||
<tr>
|
||||
<td>{{ a.key }}</td>
|
||||
<td>{{ a.value }}</td>
|
||||
<td>{{ a.created }}</td>
|
||||
<td class="text-center">
|
||||
<a href="#" class="text-info" data-bs-toggle="modal" data-bs-target="#editPropertyModal{{ a.id }}">
|
||||
<i class="bi bi-pencil"></i>
|
||||
</a>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<a href="#" class="text-danger" data-bs-toggle="modal" data-bs-target="#deletePropertyModal{{ a.id }}">
|
||||
<i class="bi bi-trash"></i>
|
||||
</a>
|
||||
<td class="text-end">{{ a.created }}</td>
|
||||
<td>
|
||||
<div class="btn-group ">
|
||||
<button type="button" class="btn btn-sm btn-outline-info d-flex align-items-center" data-bs-toggle="modal" data-bs-target="#editPropertyModal{{ a.id }}">
|
||||
<i class="bi bi-pencil me-1"></i>
|
||||
{% trans 'Edit' %}
|
||||
</button>
|
||||
<button type="button" class="btn btn-sm btn-outline-danger d-flex align-items-center" data-bs-toggle="modal" data-bs-target="#deletePropertyModal{{ a.id }}">
|
||||
<i class="bi bi-trash me-1"></i>
|
||||
{% trans 'Delete' %}
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
|
55
lot/views.py
55
lot/views.py
|
@ -1,3 +1,4 @@
|
|||
from django.db import IntegrityError
|
||||
from django.urls import reverse_lazy
|
||||
from django.shortcuts import get_object_or_404, redirect, Http404
|
||||
from django.contrib import messages
|
||||
|
@ -98,7 +99,8 @@ class AddToLotView(DashboardView, FormView):
|
|||
|
||||
def get_form(self):
|
||||
form = super().get_form()
|
||||
form.fields["lots"].queryset = Lot.objects.filter(owner=self.request.user.institution)
|
||||
form.fields["lots"].queryset = Lot.objects.filter(
|
||||
owner=self.request.user.institution)
|
||||
return form
|
||||
|
||||
def form_valid(self, form):
|
||||
|
@ -132,7 +134,9 @@ class LotsTagsView(DashboardView, TemplateView):
|
|||
self.title += " {}".format(tag.name)
|
||||
self.breadcrumb += " {}".format(tag.name)
|
||||
show_closed = self.request.GET.get('show_closed', 'false') == 'true'
|
||||
lots = Lot.objects.filter(owner=self.request.user.institution).filter(type=tag, closed=show_closed)
|
||||
lots = Lot.objects.filter(owner=self.request.user.institution).filter(
|
||||
type=tag, closed=show_closed
|
||||
)
|
||||
context.update({
|
||||
'lots': lots,
|
||||
'title': self.title,
|
||||
|
@ -178,8 +182,13 @@ class AddLotPropertyView(DashboardView, CreateView):
|
|||
form.instance.user = self.request.user
|
||||
form.instance.lot = self.lot
|
||||
form.instance.type = LotProperty.Type.USER
|
||||
try:
|
||||
response = super().form_valid(form)
|
||||
messages.success(self.request, _("Property successfully added."))
|
||||
return response
|
||||
except IntegrityError:
|
||||
messages.error(self.request, _("Property is already defined."))
|
||||
return self.form_invalid(form)
|
||||
|
||||
def get_form_kwargs(self):
|
||||
pk = self.kwargs.get('pk')
|
||||
|
@ -188,6 +197,11 @@ class AddLotPropertyView(DashboardView, CreateView):
|
|||
kwargs = super().get_form_kwargs()
|
||||
return kwargs
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['lot_id'] = self.lot.id
|
||||
return context
|
||||
|
||||
|
||||
class UpdateLotPropertyView(DashboardView, UpdateView):
|
||||
template_name = "properties.html"
|
||||
|
@ -198,31 +212,33 @@ class UpdateLotPropertyView(DashboardView, UpdateView):
|
|||
|
||||
def get_form_kwargs(self):
|
||||
pk = self.kwargs.get('pk')
|
||||
lot_property = get_object_or_404(LotProperty, pk=pk, owner=self.request.user.institution)
|
||||
lot_property = get_object_or_404(
|
||||
LotProperty,
|
||||
pk=pk,
|
||||
owner=self.request.user.institution
|
||||
)
|
||||
|
||||
if not lot_property:
|
||||
raise Http404
|
||||
|
||||
lot_pk = lot_property.lot.pk
|
||||
self.success_url = reverse_lazy('lot:properties', args=[lot_pk])
|
||||
kwargs = super().get_form_kwargs()
|
||||
kwargs['instance'] = lot_property
|
||||
return kwargs
|
||||
|
||||
def form_valid(self, form):
|
||||
old_key= self.object.key
|
||||
old_value = self.object.value
|
||||
new_key = form.cleaned_data['key']
|
||||
new_value = form.cleaned_data['value']
|
||||
|
||||
form.instance.owner = self.request.user.institution
|
||||
form.instance.user = self.request.user
|
||||
form.instance.type = LotProperty.Type.USER
|
||||
try:
|
||||
response = super().form_valid(form)
|
||||
|
||||
messages.success(self.request, _("Lot property updated successfully."))
|
||||
messages.success(self.request, _("Property updated successfully."))
|
||||
return response
|
||||
except IntegrityError:
|
||||
messages.error(self.request, _("Property is already defined."))
|
||||
return self.form_invalid(form)
|
||||
|
||||
def get_success_url(self):
|
||||
return self.request.META.get('HTTP_REFERER', reverse_lazy('device:details', args=[self.object.pk]))
|
||||
def form_invalid(self, form):
|
||||
super().form_invalid(form)
|
||||
return redirect(self.get_success_url())
|
||||
|
||||
|
||||
class DeleteLotPropertyView(DashboardView, DeleteView):
|
||||
|
@ -230,18 +246,15 @@ class DeleteLotPropertyView(DashboardView, DeleteView):
|
|||
|
||||
def post(self, request, *args, **kwargs):
|
||||
self.pk = kwargs['pk']
|
||||
referer = request.META.get('HTTP_REFERER')
|
||||
if not referer:
|
||||
raise Http404("No referer header found")
|
||||
|
||||
self.object = get_object_or_404(
|
||||
self.model,
|
||||
pk=self.pk,
|
||||
owner=self.request.user.institution
|
||||
)
|
||||
old_value = self.object.key
|
||||
lot_pk = self.object.lot.pk
|
||||
self.object.delete()
|
||||
messages.success(self.request, _("Lot property deleted successfully."))
|
||||
self.success_url = reverse_lazy('lot:properties', args=[lot_pk])
|
||||
|
||||
# Redirect back to the original URL
|
||||
return redirect(referer)
|
||||
return redirect(self.success_url)
|
||||
|
|
Loading…
Reference in a new issue