Skip to content
Snippets Groups Projects
Commit 3335f945 authored by Valentin Groues's avatar Valentin Groues :eyes:
Browse files

#70 allow subject edit in appointment edit view

parent 16d5ace1
No related branches found
No related tags found
1 merge request!17#70 allow subject edit in appointment edit view
Pipeline #
......@@ -35,55 +35,51 @@
<form method="post" action="" class="form-horizontal">
{% csrf_token %}
<fieldset>
<div class="box-header with-border">
<h3 class="box-title">Appointment's details</h3>
</div>
<div class="box-body">
{% for field in form %}
<div class="col-md-6 form-group {% if field.errors %}has-error{% endif %} {% if field|is_checkbox %}multi-checkboxes{% endif %}">
<label for="{# TODO #}" class="col-sm-4 control-label">
{{ field.label }}
</label>
<div class="col-sm-8">
{{ field|add_class:'form-control' }}
</div>
<div class="box-body">
{% for field in form %}
<div class="col-md-6 form-group {% if field.errors %}has-error{% endif %} {% if field|is_checkbox %}multi-checkboxes{% endif %}">
{% if field.errors %}
<span class="help-block">
{{ field.errors }}
</span>
{% endif %}
</div>
{% endfor %}
<div class="col-md-6 form-group">
<label for="{# TODO #}" class="col-sm-4 control-label">
{{ field.label }}
Status:
</label>
<div class="col-sm-8">
{{ field|add_class:'form-control' }}
<div class="btn-group-vertical col-sm-8">
<label class="btn btn-primary">{{ appointment.status }}</label>
<a href="{% url 'web.views.appointment_mark' id 'finished' %}"
class="btn btn-warning btn-block">Mark as finished</a>
<a href="{% url 'web.views.appointment_mark' id 'cancelled' %}"
class="btn btn-warning btn-block">Mark as cancelled</a>
<a href="{% url 'web.views.appointment_mark' id 'no_show' %}"
class="btn btn-warning btn-block">Mark as no show</a>
</div>
{% if field.errors %}
<span class="help-block">
{{ field.errors }}
</span>
{% endif %}
</div>
{% endfor %}
<div class="col-md-6 form-group">
<label for="{# TODO #}" class="col-sm-4 control-label">
Status:
</label>
<div class="btn-group-vertical col-sm-8">
<label class="btn btn-primary">{{ appointment.status }}</label>
<a href="{% url 'web.views.appointment_mark' id 'finished' %}"
class="btn btn-warning btn-block">Mark as finished</a>
<a href="{% url 'web.views.appointment_mark' id 'cancelled' %}"
class="btn btn-warning btn-block">Mark as cancelled</a>
<a href="{% url 'web.views.appointment_mark' id 'no_show' %}"
class="btn btn-warning btn-block">Mark as no show</a>
</div>
</div>
</div><!-- /.box-body -->
</div><!-- /.box-body -->
<div class="box-footer">
<div class="col-sm-6">
<button type="submit" class="btn btn-block btn-success">Save</button>
</div>
<div class="col-sm-6">
<a href="{% url 'web.views.appointments' %}" class="btn btn-block btn-default"
onclick="history.back()">Cancel</a>
</div>
</div><!-- /.box-footer -->
<div class="box-header with-border">
<h3 class="box-title">Subject's details</h3>
</div>
</fieldset>
<fieldset>
<div class="box-header with-border">
<h3 class="box-title">Subject's details</h3>
</div>
<form class="form-horizontal">
<div class="box-body">
{% for field in subject_form %}
<div class="col-md-6 form-group {% if field.errors %}has-error{% endif %}">
......@@ -92,7 +88,7 @@
</label>
<div class="col-sm-8">
{{ field|disable|add_class:'form-control' }}
{{ field|add_class:'form-control' }}
</div>
{% if field.errors %}
......@@ -105,13 +101,15 @@
</div><!-- /.box-body -->
<div class="box-footer">
<a href="{% url 'web.views.subject_edit' appointment.visit.subject.id %}" type="button"
class="btn btn-block btn-default">Edit subject</a>
<a href="{% url 'web.views.subjects' %}" class="btn btn-block btn-default"
onclick="history.back()">Back</a>
<div class="col-sm-6">
<button type="submit" class="btn btn-block btn-success">Save</button>
</div>
<div class="col-sm-6">
<a href="{% url 'web.views.appointments' %}" class="btn btn-block btn-default"
onclick="history.back()">Cancel</a>
</div>
</div><!-- /.box-footer -->
</form>
</fieldset>
</form>
</div>
{% endblock %}
......
......@@ -32,7 +32,9 @@ def create_subject():
last_name="Gawron",
default_location=get_test_location(),
sex=Subject.SEX_CHOICES_MALE,
type=Subject.SUBJECT_TYPE_CHOICES_CONTROL)
type=Subject.SUBJECT_TYPE_CHOICES_CONTROL,
screening_number="piotr's number",
country="france")
def create_user():
......@@ -45,13 +47,17 @@ def create_user():
return user
def create_worker(user=None):
return Worker.objects.create(
def create_worker(user=None, with_test_location=False):
worker = Worker.objects.create(
first_name='piotr',
last_name="gawron",
email='jacob@bla',
user=user,
)
if with_test_location:
worker.locations = [get_test_location()]
worker.save()
return worker
def create_visit(subject=None):
......
import datetime
from django.contrib.auth.models import User
from django.test import TestCase, RequestFactory
from django.test import Client
from django.test import TestCase
from django.urls import reverse
from functions import create_subject, create_visit, create_appointment
from web.models import Appointment
from web.views import appointments, appointment_mark
from functions import create_subject, create_visit, create_appointment, create_worker
from web.forms import AppointmentEditForm, SubjectEditForm
from web.models import Appointment, Subject
class AppointmentsViewTests(TestCase):
def setUp(self):
# Every test needs access to the request factory.
self.factory = RequestFactory()
self.client = Client()
username = 'piotr'
password = 'top_secret'
self.user = User.objects.create_user(
username='piotr', email='jacob@bla', password='top_secret')
username=username, email='jacob@bla', password=password)
self.client.login(username=username, password=password)
def test_appointments_list_request(self):
request = self.factory.get(reverse('web.views.appointments'))
request.user = self.user
response = appointments(request)
response = self.client.get(reverse('web.views.appointments'))
self.assertEqual(response.status_code, 200)
def test_appointments_edit(self):
subject = create_subject()
visit = create_visit(subject)
appointment = create_appointment(visit, when=datetime.datetime.now())
create_worker(self.user, True)
new_comment = 'new comment'
new_last_name = "new last name"
form_appointment = AppointmentEditForm(user=self.user, instance=appointment, prefix="appointment")
form_subject = SubjectEditForm(instance=subject, prefix="subject")
form_data = {}
for key, value in form_appointment.initial.items():
if value is not None:
form_data['appointment-{}'.format(key)] = value
for key, value in form_subject.initial.items():
if value is not None:
form_data['subject-{}'.format(key)] = value
form_data["appointment-comment"] = new_comment
form_data["subject-last_name"] = new_last_name
response = self.client.post(
reverse('web.views.appointment_edit', kwargs={'id': appointment.id}), data=form_data)
self.assertEqual(response.status_code, 302)
updated_appointment = Appointment.objects.filter(id=appointment.id)[0]
updated_subject = Subject.objects.filter(id=subject.id)[0]
self.assertEqual(new_comment, updated_appointment.comment)
self.assertEqual(new_last_name, updated_subject.last_name)
def test_mark_as_finished(self):
subject = create_subject()
visit = create_visit(subject)
appointment = create_appointment(visit)
request = self.factory.get(reverse('web.views.appointment_mark', args=[appointment.id, 'finished']))
request.user = self.user
response = appointment_mark(request, appointment.id, 'finished')
response = self.client.get(
reverse('web.views.appointment_mark', kwargs={'id': appointment.id, 'as_what': 'finished'}))
self.assertEqual(response.status_code, 302)
update_appointment = Appointment.objects.filter(id=appointment.id)[0]
self.assertEqual(update_appointment.status, Appointment.APPOINTMENT_STATUS_FINISHED)
def test_mark_as_cancelled(self):
subject = create_subject()
visit = create_visit(subject)
appointment = create_appointment(visit)
request = self.factory.get(reverse('web.views.appointment_mark', args=[appointment.id, 'cancelled']))
request.user = self.user
response = appointment_mark(request, appointment.id, 'cancelled')
response = self.client.get(
reverse('web.views.appointment_mark', kwargs={'id': appointment.id, 'as_what': 'cancelled'}))
self.assertEqual(response.status_code, 302)
update_appointment = Appointment.objects.filter(id=appointment.id)[0]
self.assertEqual(update_appointment.status, Appointment.APPOINTMENT_STATUS_CANCELLED)
......@@ -44,9 +73,8 @@ class AppointmentsViewTests(TestCase):
subject = create_subject()
visit = create_visit(subject)
appointment = create_appointment(visit)
request = self.factory.get(reverse('web.views.appointment_mark', args=[appointment.id, 'no_show']))
request.user = self.user
response = appointment_mark(request, appointment.id, 'no_show')
response = self.client.get(
reverse('web.views.appointment_mark', kwargs={'id': appointment.id, 'as_what': 'no_show'}))
self.assertEqual(response.status_code, 302)
update_appointment = Appointment.objects.filter(id=appointment.id)[0]
self.assertEqual(update_appointment.status, Appointment.APPOINTMENT_STATUS_NO_SHOW)
from django.test import TestCase
from functions import create_location, create_user, create_worker, get_test_location
from web.models import Location
from web.views import get_filter_locations
......@@ -13,12 +12,12 @@ class ViewFunctionsTests(TestCase):
def test_locations_for_user(self):
user = create_user()
self.assertEquals(Location.objects.all().count(), len(get_filter_locations(user)))
self.assertEquals(1, len(get_filter_locations(user)))
def test_locations_for_worker(self):
worker = create_worker()
self.assertEquals(Location.objects.all().count(), len(get_filter_locations(worker)))
self.assertEquals(1, len(get_filter_locations(worker)))
def test_locations_for_worker_with_location(self):
worker = create_worker()
......
......@@ -68,7 +68,6 @@ class ViewFunctionsTests(TestCase):
appointment = create_appointment()
appointment.datetime_when = get_today_midnight_date() + datetime.timedelta(days=2)
appointment.appointment_types.add(appointment_type)
appointment.location = create_location("other_loc")
appointment.save()
request = self.factory.get(reverse('web.views.kit_requests'))
......
......@@ -707,26 +707,29 @@ def appointment_add(request, id):
def appointment_edit(request, id):
the_appointment = get_object_or_404(Appointment, id=id)
if request.method == 'POST':
form = AppointmentEditForm(request.POST,
request.FILES,
instance=the_appointment,
user=request.user
)
if form.is_valid():
form.save()
data = form.cleaned_data
appointment_form = AppointmentEditForm(request.POST,
request.FILES,
instance=the_appointment,
user=request.user,
prefix="appointment")
subject_form = SubjectEditForm(request.POST, instance=the_appointment.visit.subject, prefix="subject")
if appointment_form.is_valid() and subject_form.is_valid():
appointment_form.save()
subject_form.save()
data = appointment_form.cleaned_data
vis = data['visit']
get_object_or_404(Visit, id=vis.id)
return redirect(appointments)
else:
form = AppointmentEditForm(instance=the_appointment, user=request.user)
appointment_form = AppointmentEditForm(instance=the_appointment, user=request.user, prefix="appointment")
subject_form = SubjectDetailForm(instance=the_appointment.visit.subject)
subject_form = SubjectEditForm(instance=the_appointment.visit.subject, prefix="subject")
return wrap_response(request, 'appointments/edit.html', {
'form': form,
'form': appointment_form,
'subject_form': subject_form,
'id': id,
'appointment': the_appointment
......@@ -867,6 +870,7 @@ def kit_requests_send_mail(request, start_date, end_date=None):
return wrap_response(request, 'equipment_and_rooms/kit_requests_send_mail.html',
get_kit_requests_data(request, start_date, end_date))
def statistics(request):
statistics_manager = StatisticsManager()
visit_choices = [("-1", "all")]
......@@ -888,4 +892,4 @@ def statistics(request):
return wrap_response(request, 'statistics/index.html', {
'form': form,
'monthly_statistics': monthly_statistics
})
\ No newline at end of file
})
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment