devicehub-django/device/views.py

140 lines
3.9 KiB
Python

import json
from django.urls import reverse_lazy
from django.shortcuts import get_object_or_404
from django.utils.translation import gettext_lazy as _
from django.views.generic.edit import (
CreateView,
UpdateView,
)
from django.views.generic.base import TemplateView
from dashboard.mixins import DashboardView, DetailsMixin
from snapshot.models import Annotation
from snapshot.xapian import search
from device.models import Device, PhysicalProperties
class NewDeviceView(DashboardView, CreateView):
template_name = "new_device.html"
title = _("New Device")
breadcrumb = "Device / New Device"
success_url = reverse_lazy('dashboard:unassigned_devices')
model = Device
fields = (
'type',
"model",
"manufacturer",
"serial_number",
"part_number",
"brand",
"generation",
"version",
"production_date",
"variant",
"family",
)
def form_valid(self, form):
form.instance.owner = self.request.user
response = super().form_valid(form)
PhysicalProperties.objects.create(device=form.instance)
return response
class EditDeviceView(DashboardView, UpdateView):
template_name = "new_device.html"
title = _("Update Device")
breadcrumb = "Device / Update Device"
success_url = reverse_lazy('dashboard:unassigned_devices')
model = Device
fields = (
'type',
"model",
"manufacturer",
"serial_number",
"part_number",
"brand",
"generation",
"version",
"production_date",
"variant",
"family",
)
def get_form_kwargs(self):
pk = self.kwargs.get('pk')
self.object = get_object_or_404(self.model, pk=pk)
self.success_url = reverse_lazy('device:details', args=[pk])
kwargs = super().get_form_kwargs()
return kwargs
class DetailsView2(DetailsMixin):
template_name = "details.html"
title = _("Device")
breadcrumb = "Device / Details"
model = Device
class DetailsView(DashboardView, TemplateView):
template_name = "details.html"
title = _("Device")
breadcrumb = "Device / Details"
def get(self, request, *args, **kwargs):
# import pdb; pdb.set_trace()
self.pk = kwargs['pk']
annotation = get_object_or_404(Annotation, owner=self.request.user, uuid=self.pk)
for xa in search([str(self.pk)]):
self.object = json.loads(xa.document.get_data())
return super().get(request, *args, **kwargs)
return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
'object': self.object,
})
return context
class PhysicalView(DashboardView, UpdateView):
template_name = "physical_properties.html"
title = _("Physical Properties")
breadcrumb = "Device / Physical properties"
success_url = reverse_lazy('dashboard:unassigned_devices')
model = PhysicalProperties
fields = (
"weight",
"width",
"height",
"depth",
"color",
"image",
)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
'device': self.device,
})
return context
def get_form_kwargs(self):
pk = self.kwargs.get('pk')
self.device = get_object_or_404(Device, pk=pk)
try:
self.object = self.device.physicalproperties
except Exception:
self.object = PhysicalProperties.objects.create(device=self.device)
kwargs = super().get_form_kwargs()
return kwargs
def form_valid(self, form):
self.success_url = reverse_lazy('device:details', args=[self.device.id])
response = super().form_valid(form)
return response