network_inventory/src/computers/views.py

316 lines
11 KiB
Python
Raw Permalink Normal View History

from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
2019-12-30 11:09:47 +01:00
from django.shortcuts import get_object_or_404
from django.shortcuts import redirect
2019-12-30 11:09:47 +01:00
from django.shortcuts import render
from django.template.response import TemplateResponse
2020-02-27 22:01:07 +01:00
from django.urls import reverse
from django.views.generic import CreateView
2020-05-26 23:26:31 +02:00
from django.views.generic import DeleteView
2019-09-01 12:06:27 +02:00
2019-12-30 11:09:47 +01:00
from django_filters.views import FilterView
2019-08-02 13:05:42 +02:00
from django_tables2 import RequestConfig
2019-08-02 16:54:32 +02:00
from django_tables2.views import SingleTableMixin
2019-09-01 12:06:27 +02:00
from core import utils
from backups.models import Backup
2020-01-10 00:01:06 +01:00
from customers.models import Customer
from devices.models import DeviceInNet
2020-02-16 12:59:44 +01:00
from devices.models import Warranty
2020-01-12 12:43:01 +01:00
from licenses.models import LicenseWithComputer
2019-08-02 16:54:32 +02:00
from .filters import ComputerFilter
from .forms import ComputerCreateForm
from .forms import ComputerUpdateForm
from .forms import ComputerCpuRelationCreateForm
from .forms import ComputerDiskRelationCreateForm
from .forms import ComputerGpuRelationCreateForm
from .forms import ComputerRamRelationCreateForm
from .forms import ComputerSoftwareRelationCreateForm
2020-06-29 22:43:39 +02:00
from .forms import RaidCreateForm
2019-12-30 11:09:47 +01:00
from .models import Computer
from .models import ComputerCpuRelation
from .models import ComputerDiskRelation
2020-04-30 15:40:00 +02:00
from .models import ComputerGpuRelation
2019-12-30 11:09:47 +01:00
from .models import ComputerRamRelation
from .models import ComputerSoftwareRelation
2020-01-03 03:29:44 +01:00
from .models import DisksInRaid
2019-12-30 11:09:47 +01:00
from .models import Raid
from .tables import ComputersTable
2017-12-25 13:35:09 +01:00
@login_required
def computer_detail_view(request, pk):
2023-07-10 16:47:01 +02:00
device = utils.get_object_with_view_permission(Computer, user=request.user, pk=pk)
2020-01-12 16:55:16 +01:00
disks_relations = ComputerDiskRelation.objects.filter(computer=pk)
2020-02-16 12:59:44 +01:00
warranty_relations = Warranty.objects.filter(device=pk)
2020-01-12 16:55:16 +01:00
ram_relations = ComputerRamRelation.objects.filter(computer=pk)
cpu_relations = ComputerCpuRelation.objects.filter(computer=pk)
2020-04-30 15:40:00 +02:00
gpu_relations = ComputerGpuRelation.objects.filter(computer=pk)
2020-01-12 16:55:16 +01:00
software_relations = ComputerSoftwareRelation.objects.filter(computer=pk)
license_list = LicenseWithComputer.objects.filter(computer=pk)
net_relations = DeviceInNet.objects.filter(device=pk)
2020-01-03 03:29:44 +01:00
raid_disk_pairs = {}
for raid in Raid.objects.filter(computer=pk):
raid_disk_pairs[raid] = DisksInRaid.objects.filter(raid=raid)
backup_list = Backup.objects.filter(computer=pk)
2022-03-27 14:50:44 +02:00
context = {
"device": device,
"warranty_relations": warranty_relations,
"disks_relations": disks_relations,
"ram_relations": ram_relations,
"cpu_relations": cpu_relations,
"gpu_relations": gpu_relations,
"software_relations": software_relations,
"raid_disk_pairs": raid_disk_pairs,
"backup_relations": backup_list,
"license_list": license_list,
"net_relations": net_relations,
"pk": pk,
}
return render(request, "computers/computer_details.html", context)
2017-12-25 13:35:30 +01:00
2019-08-04 20:44:37 +02:00
@login_required
def computers_table_view(request, pk):
2022-03-27 14:50:44 +02:00
table = ComputersTable(
2023-07-10 16:47:01 +02:00
utils.get_objects_for_customer(Computer, user=request.user, customer_pk=pk)
2022-03-27 14:50:44 +02:00
)
2019-08-02 13:05:42 +02:00
RequestConfig(request).configure(table)
2022-03-27 14:50:44 +02:00
return render(
request, "computers/computer_list.html", {"computers": table, "pk": pk}
)
class ComputersFilterView(LoginRequiredMixin, SingleTableMixin, FilterView):
2020-02-29 15:35:46 +01:00
"""
A view to show all computer objects in a table.
This view is not intended for customers to see but should be limited to
admins only
"""
2022-03-27 14:50:44 +02:00
2019-08-02 16:54:32 +02:00
table_class = ComputersTable
model = Computer
2020-01-12 14:36:44 +01:00
template_name = "computers/all_computers.html"
2019-08-02 16:54:32 +02:00
filterset_class = ComputerFilter
def get_queryset(self):
2022-03-27 14:50:44 +02:00
return utils.objects_for_allowed_customers(Computer, self.request.user)
2020-02-26 21:56:53 +01:00
2020-02-29 11:45:06 +01:00
class ComputerCreateFromCustomerView(LoginRequiredMixin, CreateView):
2020-02-29 15:35:46 +01:00
"""
A view to show a ComputerCreateForm after comming from a customers computer
table. The customer will be preselected in the form.
"""
2022-03-27 14:50:44 +02:00
2020-02-26 21:56:53 +01:00
form_class = ComputerCreateForm
2022-03-27 14:50:44 +02:00
template_name = "computers/computer_create.html"
2020-02-26 21:56:53 +01:00
2020-02-27 22:01:07 +01:00
def get_success_url(self):
2022-03-27 14:50:44 +02:00
return reverse("computer_update", args=(self.object.pk,))
2020-02-27 22:01:07 +01:00
def get_form_kwargs(self):
"""
2020-02-29 15:18:58 +01:00
Pass the request user to the form.
"""
kwargs = super(ComputerCreateFromCustomerView, self).get_form_kwargs()
2022-03-27 14:50:44 +02:00
kwargs.update({"user": self.request.user})
return kwargs
def get_initial(self):
"""
Set the customer dropdown to the customer from the previews view.
"""
2022-03-27 14:50:44 +02:00
customer = get_object_or_404(Customer, id=self.kwargs.get("pk"))
return {
2022-03-27 14:50:44 +02:00
"customer": customer,
}
2020-02-26 21:56:53 +01:00
@login_required
def computer_update_view(request, pk):
"""
A view to create a customer.
"""
2022-03-27 14:50:44 +02:00
template_name = "computers/computer_update.html"
2023-07-10 16:47:01 +02:00
computer = utils.get_object_with_view_permission(Computer, user=request.user, pk=pk)
2022-03-27 14:50:44 +02:00
if request.method == "POST":
form = ComputerUpdateForm(request, request.POST, instance=computer)
if form.is_valid():
computer = form.save()
return redirect(computer)
else:
form = ComputerUpdateForm(request, instance=computer)
2022-03-27 14:50:44 +02:00
return TemplateResponse(request, template_name, {"form": form})
2020-05-26 23:26:31 +02:00
class ComputerDeleteView(LoginRequiredMixin, DeleteView): # type: ignore
2020-05-26 23:26:31 +02:00
model = Computer
def get_success_url(self):
2022-03-27 14:50:44 +02:00
return reverse("computers", args=(self.object.customer.pk,))
2020-05-26 23:26:31 +02:00
class ComputerRamRelationCreateView(LoginRequiredMixin, CreateView):
model = ComputerRamRelation
form_class = ComputerRamRelationCreateForm
2022-03-27 14:50:44 +02:00
template_name = "computers/ram_relation_create.html"
def get_success_url(self):
2022-03-27 14:50:44 +02:00
return reverse("computer", args=(self.computer.pk,))
def get_initial(self):
"""
Set the device and customer dropdown to the device from the previous
view and the customer related to the device.
"""
2022-03-27 14:50:44 +02:00
self.computer = get_object_or_404(Computer, id=self.kwargs.get("pk"))
return {
2022-03-27 14:50:44 +02:00
"computer": self.computer,
}
class ComputerRamRelationDeleteView(LoginRequiredMixin, DeleteView): # type: ignore
model = ComputerRamRelation
2022-03-27 14:50:44 +02:00
template_name = "computers/relation_confirm_delete.html"
2020-06-15 21:36:41 +02:00
def get_success_url(self):
2022-03-27 14:50:44 +02:00
return reverse("computer", args=(self.object.computer.pk,))
2020-06-15 21:36:41 +02:00
class ComputerCpuRelationCreateView(LoginRequiredMixin, CreateView):
model = ComputerCpuRelation
form_class = ComputerCpuRelationCreateForm
2022-03-27 14:50:44 +02:00
template_name = "computers/cpu_relation_create.html"
def get_success_url(self):
2022-03-27 14:50:44 +02:00
return reverse("computer", args=(self.computer.pk,))
def get_initial(self):
"""
Set the device and customer dropdown to the device from the previous
view and the customer related to the device.
"""
2022-03-27 14:50:44 +02:00
self.computer = get_object_or_404(Computer, id=self.kwargs.get("pk"))
return {
2022-03-27 14:50:44 +02:00
"computer": self.computer,
}
class ComputerCpuRelationDeleteView(LoginRequiredMixin, DeleteView): # type: ignore
model = ComputerCpuRelation
2022-03-27 14:50:44 +02:00
template_name = "computers/relation_confirm_delete.html"
def get_success_url(self):
2022-03-27 14:50:44 +02:00
return reverse("computer", args=(self.object.computer.pk,))
class ComputerGpuRelationCreateView(LoginRequiredMixin, CreateView):
model = ComputerGpuRelation
form_class = ComputerGpuRelationCreateForm
2022-03-27 14:50:44 +02:00
template_name = "computers/gpu_relation_create.html"
def get_success_url(self):
2022-03-27 14:50:44 +02:00
return reverse("computer", args=(self.computer.pk,))
def get_initial(self):
"""
Set the device and customer dropdown to the device from the previous
view and the customer related to the device.
"""
2022-03-27 14:50:44 +02:00
self.computer = get_object_or_404(Computer, id=self.kwargs.get("pk"))
return {
2022-03-27 14:50:44 +02:00
"computer": self.computer,
}
class ComputerGpuRelationDeleteView(LoginRequiredMixin, DeleteView): # type: ignore
model = ComputerGpuRelation
2022-03-27 14:50:44 +02:00
template_name = "computers/relation_confirm_delete.html"
def get_success_url(self):
2022-03-27 14:50:44 +02:00
return reverse("computer", args=(self.object.computer.pk,))
class ComputerDiskRelationCreateView(LoginRequiredMixin, CreateView):
model = ComputerDiskRelation
form_class = ComputerDiskRelationCreateForm
2022-03-27 14:50:44 +02:00
template_name = "computers/disk_relation_create.html"
def get_success_url(self):
2022-03-27 14:50:44 +02:00
return reverse("computer", args=(self.computer.pk,))
def get_initial(self):
"""
Set the device and customer dropdown to the device from the previous
view and the customer related to the device.
"""
2022-03-27 14:50:44 +02:00
self.computer = get_object_or_404(Computer, id=self.kwargs.get("pk"))
return {
2022-03-27 14:50:44 +02:00
"computer": self.computer,
}
class ComputerDiskRelationDeleteView(LoginRequiredMixin, DeleteView): # type: ignore
model = ComputerDiskRelation
2022-03-27 14:50:44 +02:00
template_name = "computers/relation_confirm_delete.html"
def get_success_url(self):
2022-03-27 14:50:44 +02:00
return reverse("computer", args=(self.object.computer.pk,))
class ComputerSoftwareRelationCreateView(LoginRequiredMixin, CreateView):
model = ComputerSoftwareRelation
form_class = ComputerSoftwareRelationCreateForm
2022-03-27 14:50:44 +02:00
template_name = "computers/software_relation_create.html"
def get_success_url(self):
2022-03-27 14:50:44 +02:00
return reverse("computer", args=(self.computer.pk,))
def get_initial(self):
"""
Set the device and customer dropdown to the device from the previous
view and the customer related to the device.
"""
2022-03-27 14:50:44 +02:00
self.computer = get_object_or_404(Computer, id=self.kwargs.get("pk"))
return {
2022-03-27 14:50:44 +02:00
"computer": self.computer,
}
class ComputerSoftwareRelationDeleteView(LoginRequiredMixin, DeleteView): # type: ignore
model = ComputerSoftwareRelation
2022-03-27 14:50:44 +02:00
template_name = "computers/relation_confirm_delete.html"
def get_success_url(self):
2022-03-27 14:50:44 +02:00
return reverse("computer", args=(self.object.computer.pk,))
2020-06-29 22:43:39 +02:00
class RaidCreateView(LoginRequiredMixin, CreateView):
model = Raid
form_class = RaidCreateForm
2022-03-27 14:50:44 +02:00
template_name = "computers/raid_create.html"
2020-06-29 22:43:39 +02:00
def get_success_url(self):
2022-03-27 14:50:44 +02:00
return reverse("computer", args=(self.computer.pk,))
2020-06-29 22:43:39 +02:00
def get_initial(self):
"""
Set the device and customer dropdown to the device from the previous
view and the customer related to the device.
"""
2022-03-27 14:50:44 +02:00
self.computer = get_object_or_404(Computer, id=self.kwargs.get("pk"))
2020-06-29 22:43:39 +02:00
return {
2022-03-27 14:50:44 +02:00
"computer": self.computer,
2020-06-29 22:43:39 +02:00
}
class RaidDeleteView(LoginRequiredMixin, DeleteView): # type: ignore
2020-06-29 22:43:39 +02:00
model = Raid
2022-03-27 14:50:44 +02:00
template_name = "computers/relation_confirm_delete.html"
2020-06-29 22:43:39 +02:00
def get_success_url(self):
2022-03-27 14:50:44 +02:00
return reverse("computer", args=(self.object.computer.pk,))