network_inventory/computers/views.py

188 lines
6.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
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
2020-03-17 22:00:28 +01:00
from .forms import ComputerFormSet
from .forms import CpuFormSet
2020-03-17 23:03:24 +01:00
from .forms import RamFormSet
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
2020-03-17 22:00:28 +01:00
fields = (
'name',
'description',
'serialnumber',
'category',
'owner',
'customer',
'manufacturer',
'model',
'location',
'user',
'installation_date',
'os',
)
template_name = 'computers/computer_update.html'
2020-03-17 22:00:28 +01:00
# def get_form_kwargs(self):
# """
# Pass the request user to the form.
# """
# kwargs = super(ComputerUpdateView, self).get_form_kwargs()
# kwargs.update({'user': self.request.user})
# return kwargs
def get_context_data(self, **kwargs):
context = super(ComputerUpdateView, self).get_context_data(**kwargs)
if self.request.POST:
context['computer_formset'] = ComputerFormSet(
self.request.POST,
instance=self.object)
context['computer_formset'].full_clean()
context['cpu_formset'] = CpuFormSet(
self.request.POST,
instance=self.object)
context['cpu_formset'].full_clean()
2020-03-17 23:03:24 +01:00
context['ram_formset'] = RamFormSet(
self.request.POST,
instance=self.object)
context['ram_formset'].full_clean()
2020-03-17 22:00:28 +01:00
else:
context['computer_formset'] = ComputerFormSet(instance=self.object)
context['cpu_formset'] = CpuFormSet(instance=self.object)
2020-03-17 23:03:24 +01:00
context['ram_formset'] = RamFormSet(instance=self.object)
2020-03-17 22:00:28 +01:00
return context
def form_valid(self, form):
context = self.get_context_data(form=form)
computer_formset = context['computer_formset']
cpu_formset = context['cpu_formset']
2020-03-17 23:03:24 +01:00
ram_formset = context['ram_formset']
if (computer_formset.is_valid()
and cpu_formset.is_valid()
and ram_formset.is_valid()):
2020-03-17 22:00:28 +01:00
response = super().form_valid(form)
computer_formset.instance = self.object
computer_formset.save()
cpu_formset.instance = self.object
cpu_formset.save()
2020-03-17 23:03:24 +01:00
ram_formset.instance = self.object
ram_formset.save()
2020-03-17 22:00:28 +01:00
return response
else:
return super().form_invalid(form)