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,
|
||||
name='connected_devices'),
|
||||
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'),
|
||||
]
|
||||
|
|
|
@ -1,15 +1,19 @@
|
|||
from django.contrib.auth.decorators import login_required
|
||||
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_tables2 import RequestConfig
|
||||
|
||||
from customers.decorators import customer_view_permission
|
||||
from customers.models import Customer
|
||||
from core.utils import get_objects
|
||||
|
||||
from .decorators import device_view_permission
|
||||
from .decorators import connected_device_view_permission
|
||||
|
||||
from .forms import DeviceCreateForm
|
||||
from .models import ConnectedDevice
|
||||
from .models import Device
|
||||
from .models import Warranty
|
||||
|
@ -37,7 +41,8 @@ def devices_table_view(request, pk):
|
|||
RequestConfig(request).configure(table)
|
||||
return render(request,
|
||||
'devices/device_list.html',
|
||||
{'devices': table})
|
||||
{'devices': table,
|
||||
'pk': pk})
|
||||
|
||||
|
||||
@login_required
|
||||
|
@ -68,3 +73,32 @@ def warranties_view(request):
|
|||
return render(request,
|
||||
'devices/warranties_list.html',
|
||||
{'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