add inline forms for warranties

This commit is contained in:
Andreas Zweili 2020-03-17 22:00:28 +01:00
parent 8065aef71f
commit 9b4ff27d25
3 changed files with 104 additions and 18 deletions

View File

@ -3,6 +3,8 @@ import floppyforms.__future__ as forms
from core import utils
from computers.models import Computer
from computers.models import ComputerCpuRelation
from devices.models import Warranty
class ComputerCreateForm(forms.ModelForm):
@ -36,8 +38,34 @@ class ComputerUpdateForm(forms.ModelForm):
'installation_date',
)
def __init__(self, user=None, *args, **kwargs):
super(ComputerUpdateForm, self).__init__(*args, **kwargs)
if not user.is_superuser:
self.fields['customer'].queryset = utils.get_customers(user)
self.fields['user'].queryset = utils.get_objects("User", user)
# def __init__(self, user=None, *args, **kwargs):
# super(ComputerUpdateForm, self).__init__(*args, **kwargs)
# if not user.is_superuser:
# self.fields['customer'].queryset = utils.get_customers(user)
# self.fields['user'].queryset = utils.get_objects("User", user)
ComputerFormSet = forms.inlineformset_factory(Computer,
Warranty,
fields=(
'valid_from',
'valid_until',
'warranty_type',
),
exclude=[],
can_delete=False,
form=ComputerUpdateForm,
max_num=1)
CpuFormSet = forms.inlineformset_factory(Computer,
ComputerCpuRelation,
fields=(
'cpu',
'computer',
'amount',
),
exclude=[],
can_delete=False,
form=ComputerUpdateForm,
max_num=1)

View File

@ -3,11 +3,25 @@
{% block section_title %}Edit Computer{% endblock %}
{% block content %}
<div class="row">
<form method="post">
<div class="row">
{% csrf_token %}
{{ form|crispy }}
<input type="submit" value="Save" class="btn btn-primary">
</form>
<div class="col">
<div class="card mt-3">
<div class="card-body">
{{ form|crispy }}
</div>
</div>
</div>
<div class="col">
<div class="card mt-3">
<div class="card-body">
{{ computer_formset|crispy }}
</div>
</div>
</div>
</div>
<br>
<input type="submit" value="Save" class="btn btn-primary">
</form>
{% endblock %}

View File

@ -20,7 +20,8 @@ from licenses.models import LicenseWithComputer
from .decorators import computer_view_permission
from .filters import ComputerFilter
from .forms import ComputerCreateForm
from .forms import ComputerUpdateForm
from .forms import ComputerFormSet
from .forms import CpuFormSet
from .models import Computer
from .models import ComputerCpuRelation
from .models import ComputerDiskRelation
@ -113,13 +114,56 @@ class ComputerCreateFromCustomerView(LoginRequiredMixin, CreateView):
class ComputerUpdateView(LoginRequiredMixin, UpdateView):
model = Computer
form_class = ComputerUpdateForm
fields = (
'name',
'description',
'serialnumber',
'category',
'owner',
'customer',
'manufacturer',
'model',
'location',
'user',
'installation_date',
'os',
)
template_name = 'computers/computer_update.html'
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_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()
else:
context['computer_formset'] = ComputerFormSet(instance=self.object)
context['cpu_formset'] = CpuFormSet(instance=self.object)
return context
def form_valid(self, form):
context = self.get_context_data(form=form)
computer_formset = context['computer_formset']
cpu_formset = context['cpu_formset']
if computer_formset.is_valid() and cpu_formset.is_valid():
response = super().form_valid(form)
computer_formset.instance = self.object
computer_formset.save()
cpu_formset.instance = self.object
cpu_formset.save()
return response
else:
return super().form_invalid(form)