diff --git a/backups/models/backup.py b/backups/models/backup.py index 296b4ef..853f8ce 100644 --- a/backups/models/backup.py +++ b/backups/models/backup.py @@ -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) diff --git a/backups/templates/backups/backup_confirm_delete.html b/backups/templates/backups/backup_confirm_delete.html new file mode 100644 index 0000000..4899aff --- /dev/null +++ b/backups/templates/backups/backup_confirm_delete.html @@ -0,0 +1,16 @@ +{% extends "core/base.html" %} +{% block section_title %}Delete Backup{% endblock %} +{% block content %} +
+
{% csrf_token %} +

Are you sure you want delete the backup "{{ object }}" for "{{ object.computer }}"?

+ + Cancel + +
+ +
+{% endblock %} diff --git a/backups/templates/backups/backup_create.html b/backups/templates/backups/backup_create.html new file mode 100644 index 0000000..54eb086 --- /dev/null +++ b/backups/templates/backups/backup_create.html @@ -0,0 +1,14 @@ +{% extends "core/base.html" %} +{% load crispy_forms_tags %} + +{% block section_title %}Add Backup{% endblock %} +{% block content %} +
+
+ {% csrf_token %} + {{ form|crispy }} + + Cancel +
+
+{% endblock %} diff --git a/backups/tests/test_backup_form_view.py b/backups/tests/test_backup_form_view.py new file mode 100644 index 0000000..72eb564 --- /dev/null +++ b/backups/tests/test_backup_form_view.py @@ -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 diff --git a/backups/urls.py b/backups/urls.py index 1f3af4a..01b28e1 100644 --- a/backups/urls.py +++ b/backups/urls.py @@ -6,4 +6,8 @@ urlpatterns = [ path('customer//backups/', views.backups_table_view, name='backups'), path('backup//', views.backup_detail_view, name='backup'), + path('create/backup-for-computer//', + views.BackupCreateView.as_view(), name='backup_create'), + path('delete/backup//', + views.BackupDeleteView.as_view(), name='backup_delete'), ] diff --git a/backups/views.py b/backups/views.py index 0c01a7c..7fc1325 100644 --- a/backups/views.py +++ b/backups/views.py @@ -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,)) + + diff --git a/computers/templates/computers/computer_details.html b/computers/templates/computers/computer_details.html index aad3029..112aa7f 100644 --- a/computers/templates/computers/computer_details.html +++ b/computers/templates/computers/computer_details.html @@ -64,10 +64,10 @@

Backup

-

add

+

add