network_inventory/inventory/views.py

210 lines
7.5 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
2019-12-03 22:14:50 +01:00
from django.views.generic import DetailView
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-12-30 11:09:47 +01:00
from guardian.mixins import PermissionRequiredMixin
from guardian.shortcuts import get_objects_for_user
2019-09-01 12:06:27 +02:00
2019-12-30 11:09:47 +01:00
from .decorators import backup_view_permission
from .decorators import computer_view_permission
from .decorators import customer_view_permission
from .decorators import device_view_permission
from .decorators import net_view_permission
2020-01-01 19:58:31 +01:00
from .decorators import user_view_permission
2019-08-02 16:54:32 +02:00
from .filters import ComputerFilter
2019-12-30 11:09:47 +01:00
from .models import Backup
from .models import Computer
from .models import ComputerCpuRelation
from .models import ComputerDiskRelation
from .models import ComputerLicense
from .models import ComputerRamRelation
from .models import ComputerSoftwareRelation
from .models import Customer
from .models import Device
from .models import DeviceInNet
2020-01-03 03:29:44 +01:00
from .models import DisksInRaid
from .models import LicenseWithComputer
2020-01-01 19:58:31 +01:00
from .models import LicenseWithUser
from .models import MailAlias
2019-12-30 11:09:47 +01:00
from .models import Net
from .models import NotificationFromBackup
2019-12-30 11:09:47 +01:00
from .models import Raid
from .models import TargetDevice
from .models import User
2020-01-01 19:58:31 +01:00
from .models import UserInAdGroup
from .models import UserInMailGroup
2019-12-30 11:09:47 +01:00
from .models import UserLicense
from .tables import BackupsTable
from .tables import ComputerLicensesTable
from .tables import ComputersTable
from .tables import CustomersTable
from .tables import DevicesTable
from .tables import NetDetailTable
from .tables import NetsTable
from .tables import UserLicensesTable
2019-12-30 11:17:24 +01:00
from .tables import UsersTable
2017-12-25 13:35:09 +01:00
2019-08-04 20:44:37 +02:00
@login_required
@device_view_permission
def device_detail_view(request, pk):
device = get_object_or_404(Device, pk=pk)
return render(request, 'inventory/device_details.html',
{'device': device})
2017-12-25 13:35:09 +01:00
@login_required
@computer_view_permission
def computer_detail_view(request, pk):
computer = get_object_or_404(Computer, pk=pk)
disks_list = ComputerDiskRelation.objects.filter(computer=pk)
ram_list = ComputerRamRelation.objects.filter(computer=pk)
cpu_list = ComputerCpuRelation.objects.filter(computer=pk)
software_list = ComputerSoftwareRelation.objects.filter(computer=pk)
licenses = LicenseWithComputer.objects.filter(computer=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 = {'computer': computer,
'disks_list': disks_list,
'ram_list': ram_list,
'cpu_list': cpu_list,
'software_list': software_list,
2020-01-03 03:29:44 +01:00
'raid_disk_pairs': raid_disk_pairs,
'backup_list': backup_list,
'licenses': licenses}
return render(request, 'inventory/computer_details.html', context)
2017-12-25 13:35:30 +01:00
2019-08-30 22:37:49 +02:00
class CustomerDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
2019-07-25 20:34:52 +02:00
model = Customer
template_name = 'inventory/customer_details.html'
2019-08-13 18:53:39 +02:00
permission_required = 'view_customer'
2019-07-25 20:34:52 +02:00
2019-08-04 20:44:37 +02:00
@login_required
2019-08-02 13:05:42 +02:00
def customers_table_view(request):
table = CustomersTable(
get_objects_for_user(request.user,
'inventory.view_customer',
klass=Customer))
RequestConfig(request).configure(table)
return render(request, 'inventory/customer_list.html', {'customers': table})
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, 'inventory/computer_list.html', {'computers': table})
2019-08-04 20:44:37 +02:00
@login_required
@customer_view_permission
def devices_table_view(request, pk):
table = DevicesTable(Device.objects.filter(customer=pk))
2019-08-02 13:05:42 +02:00
RequestConfig(request).configure(table)
return render(request, 'inventory/device_list.html', {'devices': table})
2019-07-28 22:02:07 +02:00
2019-08-04 20:44:37 +02:00
@login_required
@customer_view_permission
def nets_table_view(request, pk):
table = NetsTable(Net.objects.filter(customer=pk))
2019-08-02 13:05:42 +02:00
RequestConfig(request).configure(table)
return render(request, 'inventory/net_list.html', {'nets': table})
2019-07-28 22:02:07 +02:00
2019-08-04 20:44:37 +02:00
@login_required
2019-12-11 17:57:48 +01:00
@net_view_permission
2019-08-02 13:05:42 +02:00
def net_detail_view(request, pk):
net = get_object_or_404(Net, pk=pk)
table = NetDetailTable(DeviceInNet.objects.filter(net=net))
2019-08-02 13:05:42 +02:00
RequestConfig(request).configure(table)
return render(request, 'inventory/net_details.html',
{'table': table,
'net': net})
2019-08-02 14:31:55 +02:00
2019-09-24 20:30:43 +02:00
@login_required
2019-11-30 14:15:20 +01:00
@customer_view_permission
2019-09-24 20:30:43 +02:00
def backups_table_view(request, pk):
computers = Computer.objects.filter(customer=pk)
table = BackupsTable(Backup.objects.filter(computer__in=computers))
RequestConfig(request).configure(table)
return render(request, 'inventory/backup_list.html', {'backups': table})
2019-08-04 20:44:37 +02:00
@login_required
@backup_view_permission
2019-08-02 14:31:55 +02:00
def backup_detail_view(request, pk):
2019-12-29 13:50:51 +01:00
backup = get_object_or_404(Backup, pk=pk)
target_device_list = TargetDevice.objects.filter(backup=backup)
notifications = NotificationFromBackup.objects.filter(backup=backup)
return render(request, 'inventory/backup_details.html',
{'backup': backup,
'target_device_list': target_device_list,
'notifications': notifications})
2019-08-02 16:54:32 +02:00
class ComputersFilterView(LoginRequiredMixin, SingleTableMixin, FilterView):
2019-08-02 16:54:32 +02:00
table_class = ComputersTable
model = Computer
template_name = "inventory/all_computers.html"
filterset_class = ComputerFilter
def get_queryset(self):
customers = get_objects_for_user(self.request.user,
'inventory.view_customer',
klass=Customer)
2019-08-30 21:04:23 +02:00
results = Computer.objects.filter(customer__in=customers)
return results
2019-12-29 23:54:27 +01:00
@login_required
@customer_view_permission
def licenses_table_view(request, pk):
user_licenses = UserLicensesTable(UserLicense.objects.filter(customer=pk))
2019-12-30 11:13:33 +01:00
computer_licenses = ComputerLicensesTable(
ComputerLicense.objects.filter(customer=pk))
2019-12-29 23:54:27 +01:00
RequestConfig(request).configure(user_licenses)
RequestConfig(request).configure(computer_licenses)
2019-12-30 11:13:33 +01:00
return render(request,
'inventory/license_list.html',
{'user_licenses': user_licenses,
'computer_licenses': computer_licenses})
@login_required
@customer_view_permission
def users_table_view(request, pk):
2019-12-30 11:17:24 +01:00
table = UsersTable(User.objects.filter(customer=pk))
RequestConfig(request).configure(table)
return render(request, 'inventory/user_list.html', {'users': table})
2020-01-01 19:58:31 +01:00
@login_required
@user_view_permission
def user_detail_view(request, pk):
user = get_object_or_404(User, pk=pk)
ad_groups = UserInAdGroup.objects.filter(user=user)
mail_groups = UserInMailGroup.objects.filter(user=user)
mail_alias = MailAlias.objects.filter(user=user)
computers = Computer.objects.filter(user=user)
licenses = LicenseWithUser.objects.filter(user=user)
return render(request, 'inventory/user_details.html',
{'user': user,
'ad_groups': ad_groups,
'mail_groups': mail_groups,
'mail_alias': mail_alias,
'computers': computers,
'licenses': licenses})