network_inventory/computers/views.py

164 lines
5.7 KiB
Python
Raw 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 render
2020-02-27 22:01:07 +01:00
from django.urls import reverse
from django.views.generic import CreateView
from django.views.generic import UpdateView
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 customers.decorators import customer_view_permission
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-12-30 11:09:47 +01:00
from .decorators import computer_view_permission
2019-08-02 16:54:32 +02:00
from .filters import ComputerFilter
from .forms import ComputerCreateForm
from .forms import ComputerUpdateForm
from .forms import ComputerRamRelationCreateForm
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
@computer_view_permission
def computer_detail_view(request, pk):
device = get_object_or_404(Computer, 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)
context = {'device': device,
2020-02-16 12:59:44 +01:00
'warranty_relations': warranty_relations,
2020-01-12 16:55:16 +01:00
'disks_relations': disks_relations,
'ram_relations': ram_relations,
'cpu_relations': cpu_relations,
2020-04-30 15:40:00 +02:00
'gpu_relations': gpu_relations,
2020-01-12 16:55:16 +01:00
'software_relations': software_relations,
2020-01-03 03:29:44 +01:00
'raid_disk_pairs': raid_disk_pairs,
2020-01-12 16:55:16 +01:00
'backup_relations': backup_list,
2020-05-01 16:57:38 +02:00
'license_list': license_list,
'net_relations': net_relations,
2020-05-01 16:57:38 +02:00
'pk': pk}
2020-01-12 14:36:44 +01:00
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
@customer_view_permission
def computers_table_view(request, pk):
table = ComputersTable(Computer.objects.filter(customer=pk))
2019-08-02 13:05:42 +02:00
RequestConfig(request).configure(table)
return render(request, 'computers/computer_list.html', {'computers': table,
2020-02-29 19:00:23 +01:00
'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
"""
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):
return utils.get_objects("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.
"""
2020-02-26 21:56:53 +01:00
form_class = ComputerCreateForm
template_name = 'computers/computer_create.html'
2020-02-27 22:01:07 +01:00
def get_success_url(self):
return reverse('computer_update', args=(self.object.pk,))
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()
kwargs.update({'user': self.request.user})
return kwargs
def get_initial(self):
"""
Set the customer dropdown to the customer from the previews view.
"""
customer = get_object_or_404(Customer, id=self.kwargs.get('pk'))
return {
'customer': customer,
}
2020-02-26 21:56:53 +01:00
class ComputerUpdateView(LoginRequiredMixin, UpdateView):
model = Computer
form_class = ComputerUpdateForm
template_name = 'computers/computer_update.html'
def get_success_url(self):
return reverse('computer', args=(self.object.pk,))
2020-05-26 23:26:31 +02:00
class ComputerDeleteView(LoginRequiredMixin, DeleteView):
model = Computer
def get_success_url(self):
return reverse('computers', args=(self.object.customer.pk,))
class ComputerRamRelationCreateView(LoginRequiredMixin, CreateView):
model = ComputerRamRelation
form_class = ComputerRamRelationCreateForm
template_name = 'computers/ram_relation_create.html'
def get_success_url(self):
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.
"""
self.computer = get_object_or_404(Computer, id=self.kwargs.get('pk'))
return {
'computer': self.computer,
}
class ComputerRamRelationDeleteView(LoginRequiredMixin, DeleteView):
model = ComputerRamRelation
template_name = 'computers/ram_relation_confirm_delete.html'
def get_success_url(self):
return reverse('computer', args=(self.object.computer.pk,))