add create and delete views for backups

This commit is contained in:
Andreas Zweili 2020-06-29 13:20:19 +02:00
parent 273d4da42b
commit 72b8c86a98
7 changed files with 111 additions and 6 deletions

View File

@ -23,9 +23,10 @@ class Backup(models.Model):
software = models.ForeignKey(Software, models.SET_NULL, blank=True,
null=True)
source_path = models.CharField(max_length=200, blank=True)
exec_time = models.TimeField()
exec_days = models.ManyToManyField(Weekday)
target_device = models.ManyToManyField(Computer, through='TargetDevice')
exec_time = models.TimeField(null=True, blank=True)
exec_days = models.ManyToManyField(Weekday, blank=True)
target_device = models.ManyToManyField(Computer, through='TargetDevice',
blank=True)
def __str__(self):
return str(self.name)

View File

@ -0,0 +1,16 @@
{% extends "core/base.html" %}
{% block section_title %}Delete Backup{% endblock %}
{% block content %}
<div class="row">
<form method="post">{% csrf_token %}
<p>Are you sure you want delete the backup "{{ object }}" for "{{ object.computer }}"?</p>
<button type="submit" class="btn btn-danger">Delete</button>
<a href="{{ request.META.HTTP_REFERER }}" class="btn btn-primary">Cancel</a>
<input type="hidden" id="previous_page" name="previous_page" value="/previous/page/url">
</form>
<script>
prev = document.getElementById("previous_page");
prev.value = document.referrer;
</script>
</div>
{% endblock %}

View File

@ -0,0 +1,14 @@
{% extends "core/base.html" %}
{% load crispy_forms_tags %}
{% block section_title %}Add Backup{% 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

@ -0,0 +1,37 @@
from django.test import Client
from mixer.backend.django import mixer
import pytest
pytestmark = pytest.mark.django_db
def test_backup_with_computer_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)
target_device = mixer.blend('computers.Computer', customer=mixer.SELECT)
data = {
'name': "foo",
'computer': computer.id,
'amount': 1,
'exec_time': '12:00',
'method': 1,
'exec_days': 3,
'target_device': target_device.id
}
url = '/create/backup-for-computer/{}/'.format(computer.id)
response = client.post(url, data)
assert response.status_code == 302
def test_backup_with_computer_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)
backup = mixer.blend('backups.Backup', computer=computer)
url = '/delete/backup/{}/'.format(backup.id)
response = client.post(url)
assert response.status_code == 302

View File

@ -6,4 +6,8 @@ urlpatterns = [
path('customer/<int:pk>/backups/', views.backups_table_view,
name='backups'),
path('backup/<int:pk>/', views.backup_detail_view, name='backup'),
path('create/backup-for-computer/<int:pk>/',
views.BackupCreateView.as_view(), name='backup_create'),
path('delete/backup/<int:pk>/',
views.BackupDeleteView.as_view(), name='backup_delete'),
]

View File

@ -1,6 +1,10 @@
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import get_object_or_404
from django.shortcuts import render
from django.urls import reverse
from django.views.generic import CreateView
from django.views.generic import DeleteView
from django_tables2 import RequestConfig
@ -33,3 +37,32 @@ def backup_detail_view(request, pk):
{'backup': backup,
'target_device_list': target_device_list,
'notifications': notifications})
class BackupCreateView(LoginRequiredMixin, CreateView):
model = Backup
template_name = 'backups/backup_create.html'
fields = '__all__'
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 BackupDeleteView(LoginRequiredMixin, DeleteView):
model = Backup
template_name = 'backups/backup_confirm_delete.html'
def get_success_url(self):
return reverse('computer', args=(self.object.computer.pk,))

View File

@ -64,10 +64,10 @@
<h2>Backup</h2>
<ul>
{% for backup in backup_relations %}
<li><a href="{% url 'backup' backup.id %}">{{ backup }}</a></li>
<li><a href="{% url 'backup' backup.id %}">{{ backup }}</a> <a href="{% url 'backup_delete' backup.pk %}" class="delete" title="Delete" data-toggle="tooltip"><i class="material-icons">clear</i></a></li>
{% endfor %}
</ul>
<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 'backup_create' pk %}" class="add" title="Add" data-toggle="tooltip"><i class="material-icons">add</i></a></p>
</div>
</div>