add device create view
This commit is contained in:
parent
cbc0e6169f
commit
975d3573d8
|
@ -0,0 +1,39 @@
|
||||||
|
import floppyforms.__future__ as forms
|
||||||
|
|
||||||
|
from core import utils
|
||||||
|
|
||||||
|
from devices.models import Device
|
||||||
|
from devices.models import Warranty
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceCreateForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Device
|
||||||
|
fields = (
|
||||||
|
'name',
|
||||||
|
'customer',
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, user=None, *args, **kwargs):
|
||||||
|
super(DeviceCreateForm, self).__init__(*args, **kwargs)
|
||||||
|
if not user.is_superuser:
|
||||||
|
self.fields['customer'].queryset = utils.get_customers(user)
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceUpdateForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Device
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
WarrantyFormSet = forms.inlineformset_factory(Device,
|
||||||
|
Warranty,
|
||||||
|
fields=(
|
||||||
|
'valid_from',
|
||||||
|
'valid_until',
|
||||||
|
'warranty_type',
|
||||||
|
),
|
||||||
|
exclude=[],
|
||||||
|
can_delete=False,
|
||||||
|
form=DeviceUpdateForm,
|
||||||
|
max_num=1)
|
|
@ -0,0 +1,13 @@
|
||||||
|
{% extends "core/base.html" %}
|
||||||
|
{% load crispy_forms_tags %}
|
||||||
|
|
||||||
|
{% block section_title %}Create Device{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<form method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form|crispy }}
|
||||||
|
<input type="submit" value="Save" class="btn btn-primary">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1,43 @@
|
||||||
|
import pytest
|
||||||
|
from mixer.backend.django import mixer
|
||||||
|
|
||||||
|
from devices import forms
|
||||||
|
|
||||||
|
pytestmark = pytest.mark.django_db
|
||||||
|
|
||||||
|
|
||||||
|
def test_device_create_form(create_admin_user):
|
||||||
|
fixture = create_admin_user()
|
||||||
|
user = mixer.blend("auth.User", customer=fixture['customer'])
|
||||||
|
form = forms.DeviceCreateForm(user=user, data={})
|
||||||
|
assert form.is_valid() is False, (
|
||||||
|
"Should be false because no data was given")
|
||||||
|
|
||||||
|
data = {"name": "pharma-device1",
|
||||||
|
"customer": 3}
|
||||||
|
form = forms.DeviceCreateForm(user=user, data=data)
|
||||||
|
assert form.is_valid() is False, (
|
||||||
|
"Should be false because the customer doesn't exist.")
|
||||||
|
|
||||||
|
data = {"name": "pharma-device1",
|
||||||
|
"customer": fixture['customer'].id}
|
||||||
|
form = forms.DeviceCreateForm(user=fixture['admin'], data=data)
|
||||||
|
assert form.is_valid() is True, ("Should be valid with the given data.")
|
||||||
|
|
||||||
|
|
||||||
|
def test_device_update_form(create_admin_user):
|
||||||
|
fixture = create_admin_user()
|
||||||
|
form = forms.DeviceUpdateForm(data={})
|
||||||
|
assert form.is_valid() is False, (
|
||||||
|
"Should be false because no data was given")
|
||||||
|
|
||||||
|
data = {"name": "pharma-device1",
|
||||||
|
"customer": 3}
|
||||||
|
form = forms.DeviceUpdateForm(data=data)
|
||||||
|
assert form.is_valid() is False, (
|
||||||
|
"Should be false because the customer doesn't exist.")
|
||||||
|
|
||||||
|
data = {"name": "pharma-device1",
|
||||||
|
"customer": fixture['customer'].id}
|
||||||
|
form = forms.DeviceUpdateForm(data=data)
|
||||||
|
assert form.is_valid() is True, ("Should be valid with the given data.")
|
|
@ -12,5 +12,8 @@ urlpatterns = [
|
||||||
views.connected_devices_table_view,
|
views.connected_devices_table_view,
|
||||||
name='connected_devices'),
|
name='connected_devices'),
|
||||||
path('device/<int:pk>/', views.device_detail_view, name='device'),
|
path('device/<int:pk>/', views.device_detail_view, name='device'),
|
||||||
|
path('customer/<int:pk>/create/device/',
|
||||||
|
views.DeviceCreateFromCustomerView.as_view(),
|
||||||
|
name='device_create'),
|
||||||
path('warranties/', views.warranties_view, name='warranties'),
|
path('warranties/', views.warranties_view, name='warranties'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,15 +1,19 @@
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
from django.urls import reverse
|
||||||
|
from django.views.generic import CreateView
|
||||||
|
|
||||||
from django_tables2 import RequestConfig
|
from django_tables2 import RequestConfig
|
||||||
|
|
||||||
from customers.decorators import customer_view_permission
|
from customers.decorators import customer_view_permission
|
||||||
|
from customers.models import Customer
|
||||||
from core.utils import get_objects
|
from core.utils import get_objects
|
||||||
|
|
||||||
from .decorators import device_view_permission
|
from .decorators import device_view_permission
|
||||||
from .decorators import connected_device_view_permission
|
from .decorators import connected_device_view_permission
|
||||||
|
|
||||||
|
from .forms import DeviceCreateForm
|
||||||
from .models import ConnectedDevice
|
from .models import ConnectedDevice
|
||||||
from .models import Device
|
from .models import Device
|
||||||
from .models import Warranty
|
from .models import Warranty
|
||||||
|
@ -37,7 +41,8 @@ def devices_table_view(request, pk):
|
||||||
RequestConfig(request).configure(table)
|
RequestConfig(request).configure(table)
|
||||||
return render(request,
|
return render(request,
|
||||||
'devices/device_list.html',
|
'devices/device_list.html',
|
||||||
{'devices': table})
|
{'devices': table,
|
||||||
|
'pk': pk})
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -68,3 +73,32 @@ def warranties_view(request):
|
||||||
return render(request,
|
return render(request,
|
||||||
'devices/warranties_list.html',
|
'devices/warranties_list.html',
|
||||||
{'devices': table})
|
{'devices': table})
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceCreateFromCustomerView(LoginRequiredMixin, CreateView):
|
||||||
|
"""
|
||||||
|
A view to show a DeviceCreateForm after comming from a customers device
|
||||||
|
table. The customer will be preselected in the form.
|
||||||
|
"""
|
||||||
|
form_class = DeviceCreateForm
|
||||||
|
template_name = 'devices/device_create.html'
|
||||||
|
|
||||||
|
def get_success_url(self):
|
||||||
|
return reverse('device_update', args=(self.object.pk,))
|
||||||
|
|
||||||
|
def get_form_kwargs(self):
|
||||||
|
"""
|
||||||
|
Pass the request user to the form.
|
||||||
|
"""
|
||||||
|
kwargs = super(DeviceCreateFromCustomerView, self).get_form_kwargs()
|
||||||
|
kwargs.update({'user': self.request.user})
|
||||||
|
return kwargs
|
||||||
|
|
||||||
|
def get_initial(self):
|
||||||
|
"""
|
||||||
|
Set the customer dropdown to the customer from the previews view.
|
||||||
|
"""
|
||||||
|
customer = get_object_or_404(Customer, id=self.kwargs.get('pk'))
|
||||||
|
return {
|
||||||
|
'customer': customer,
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue