add create and delete views for RAIDs

This commit is contained in:
Andreas Zweili 2020-06-29 22:43:39 +02:00
parent 72b8c86a98
commit 9f948fe396
6 changed files with 83 additions and 3 deletions

View File

@ -8,6 +8,7 @@ from computers.models import ComputerDiskRelation
from computers.models import ComputerGpuRelation
from computers.models import ComputerRamRelation
from computers.models import ComputerSoftwareRelation
from computers.models import Raid
class ComputerCreateForm(forms.ModelForm):
@ -81,3 +82,12 @@ class ComputerSoftwareRelationCreateForm(forms.ModelForm):
class Meta:
model = ComputerSoftwareRelation
fields = '__all__'
class RaidCreateForm(forms.ModelForm):
"""
Basic form class to use crispies HTML5 forms.
"""
class Meta:
model = Raid
fields = '__all__'

View File

@ -107,10 +107,9 @@
<tr>
<td><b>Type:</b></td>
<td>{{ raid.raid_type }}</td>
</tr>
<tr>
<td><b>Usable Space</b></td>
<td>{{ raid.usable_space }}</td>
<td><a href="{% url 'raid_delete' raid.pk %}" class="delete" title="Delete" data-toggle="tooltip"><i class="material-icons">delete</i></a></td>
</tr>
{% if disks %}
{% for disk in disks %}
@ -126,7 +125,7 @@
{% endif %}
</table>
{% endfor %}
<p><a href="{% url 'warranty_create' pk %}" class="add" title="Add" data-toggle="tooltip"><i class="material-icons">add</i></a></p>
<p><a href="{% url 'raid_create' pk %}" class="add" title="Add" data-toggle="tooltip"><i class="material-icons">add</i></a></p>
</div>
</div>
</div>

View File

@ -0,0 +1,14 @@
{% extends "core/base.html" %}
{% load crispy_forms_tags %}
{% block section_title %}Add RAID{% endblock %}
{% block content %}
<div class="row">
<form method="post">
{% csrf_token %}
{{ form|crispy }}
<input type="submit" value="Save" class="btn btn-primary">
<a href="{% url 'computer' view.kwargs.pk %}" class="btn btn-secondary">Cancel</a>
</form>
</div>
{% endblock %}

View File

@ -128,6 +128,19 @@ def test_software_relation_create_view(create_admin_user):
assert response.status_code == 302
def test_raid_create_view(create_admin_user):
create_admin_user()
client = Client()
client.login(username="pharma-admin", password="password")
computer = mixer.blend('computers.Computer', customer=mixer.SELECT)
data = {
'computer': computer.id,
}
url = '/computer/{}/create/raid/'.format(computer.id)
response = client.post(url, data)
assert response.status_code == 302
def test_ram_relation_delete_view(create_admin_user):
create_admin_user()
client = Client()
@ -191,3 +204,14 @@ def test_software_relation_delete_view(create_admin_user):
url = '/delete/software-relation/{}/'.format(software_relation.id)
response = client.post(url)
assert response.status_code == 302
def test_raid_delete_view(create_admin_user):
create_admin_user()
client = Client()
client.login(username="pharma-admin", password="password")
computer = mixer.blend('computers.Computer', customer=mixer.SELECT)
raid = mixer.blend('computers.Raid', computer=computer)
url = '/delete/raid/{}/'.format(raid.id)
response = client.post(url)
assert response.status_code == 302

View File

@ -50,4 +50,8 @@ urlpatterns = [
path('delete/software-relation/<int:pk>/',
views.ComputerSoftwareRelationDeleteView.as_view(),
name='software_relation_delete'),
path('computer/<int:pk>/create/raid/', views.RaidCreateView.as_view(),
name='raid_create'),
path('delete/raid/<int:pk>/', views.RaidDeleteView.as_view(),
name='raid_delete'),
]

View File

@ -28,6 +28,7 @@ from .forms import ComputerDiskRelationCreateForm
from .forms import ComputerGpuRelationCreateForm
from .forms import ComputerRamRelationCreateForm
from .forms import ComputerSoftwareRelationCreateForm
from .forms import RaidCreateForm
from .models import Computer
from .models import ComputerCpuRelation
from .models import ComputerDiskRelation
@ -274,3 +275,31 @@ class ComputerSoftwareRelationDeleteView(LoginRequiredMixin, DeleteView):
def get_success_url(self):
return reverse('computer', args=(self.object.computer.pk,))
class RaidCreateView(LoginRequiredMixin, CreateView):
model = Raid
form_class = RaidCreateForm
template_name = 'computers/raid_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 RaidDeleteView(LoginRequiredMixin, DeleteView):
model = Raid
template_name = 'computers/relation_confirm_delete.html'
def get_success_url(self):
return reverse('computer', args=(self.object.computer.pk,))