Update schedule module

This commit is contained in:
Joshua Rubingh 2020-05-14 15:20:19 +02:00
parent 5be8fa9c6d
commit d9899f2d56
17 changed files with 871 additions and 701 deletions

View File

@ -22,3 +22,47 @@
.rug-breadcrumbs {
display: none;
}
p {
max-width: none;
}
table {
width: 100%;
}
input {
width: 100%
}
.alert-warning {
color: #856404;
background-color: #fff3cd;
border-color: #ffeeba;
}
.alert-success {
color: #155724;
background-color: #d4edda;
border-color: #c3e6cb;
}
.alert-danger {
color: #721c24;
background-color: #f8d7da;
border-color: #f5c6cb;
}
.form-control {
display: block;
width: 100%;
height: calc(1.5em + .75rem + 2px);
padding: .375rem .75rem;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #495057;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ced4da;
border-radius: .25rem;
transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;
}

View File

@ -4,8 +4,6 @@
{% block title %}{% trans "Welcome to the RUG Template page" %}{% endblock %}
{% block pagetitle %}{% trans "Welcome to the RUG Template page" %}{% endblock %}
{% block content %}
<p>
<strong>{% trans "Simple RUG Template" %}</strong>
</p>
<p><strong>{% trans "Simple RUG Template" %}</strong></p>
<p>{% trans "Some more text" %}</p>
{% endblock %}

View File

@ -1,13 +1,10 @@
{% load i18n %}
<li class="rug-nav--secondary__item">
<a class="rug-nav--secondary__link js--togglable-switch" data-toggle-class="rug-nav--secondary__link--selected" data-toggle-group="submenu" data-toggle-id="menu-2427370b-9435-44d9-bca7-b93ec9d03cc0-33.31" data-toggle-mode="togglable">{% trans "Section" %}</a>
<ul class="rug-nav--secondary__sub rug-nav--secondary__sub--hidden js--togglable-item" data-toggle-class="rug-block" data-toggle-group="submenu" data-toggle-id="menu-2427370b-9435-44d9-bca7-b93ec9d03cc0-33.31">
<li class="rug-nav--secondary__sub__item" data-menu-id="b512aa55-f0cb-4588-9054-302caa5fa951-33.34">
<a class="rug-nav--secondary__sub__link" href="#"><span class="rug-nav--secondary__sub__link-text">{% trans "Menu item" %}</span></a>
</li>
</ul>
<a class="rug-nav--secondary__link js--togglable-switch" data-toggle-class="rug-nav--secondary__link--selected" data-toggle-group="submenu" data-toggle-id="menu-2427370b-9435-44d9-bca7-b93ec9d03cc0-33.31" data-toggle-mode="togglable">{% trans "Section" %}</a>
<ul class="rug-nav--secondary__sub rug-nav--secondary__sub--hidden js--togglable-item" data-toggle-class="rug-block" data-toggle-group="submenu" data-toggle-id="menu-2427370b-9435-44d9-bca7-b93ec9d03cc0-33.31">
<li class="rug-nav--secondary__sub__item" data-menu-id="b512aa55-f0cb-4588-9054-302caa5fa951-33.34">
<a class="rug-nav--secondary__sub__link" href="#"><span class="rug-nav--secondary__sub__link-text">{% trans "Menu item" %}</span></a>
</li>
</ul>
</li>

View File

@ -5,9 +5,12 @@
{% block pagetitle %}{% trans "Login" %}{% endblock %}
{% block content %}
<p>
<strong>{% trans "Login" %}</strong>
<strong>{% trans "Login" %}</strong>
<br />
{% blocktrans %}
You can login here to create your schedules. If you do not have a login, please contact: some_one@rug.nl
{% endblocktrans %}
</p>
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<input type="hidden" name="next" value="{{ next }}">
@ -18,7 +21,7 @@
</tr>
</table>
</form>
<br />
{# Assumes you setup the password_reset view in your URLconf #}
<p><a href="{% url 'password_reset' %}">{% trans "Lost password?" %}</a></p>
{% endblock %}

View File

@ -4,9 +4,7 @@
{% block title %}{% trans "Password reset complete" %}{% endblock %}
{% block pagetitle %}{% trans "Password reset complete" %}{% endblock %}
{% block content %}
<p>
<strong>{% trans "Password reset complete" %}</strong>
<br />
<p>Your new password has been set. You can log in now on the <a href="{% url 'login' %}">log in page</a>.</p>
</p>
<p><strong>{% trans "Password reset complete" %}</strong></p>
{% url 'login' as login_url %}
<p>{% blocktrans %}Your new password has been set. You can log in now on the <a href="{{ login_url }}">log in page</a>.{% endblocktrans %}</p>
{% endblock %}

View File

@ -4,22 +4,23 @@
{% block title %}{% trans "Set a new password!" %}{% endblock %}
{% block pagetitle %}{% trans "Set a new password!" %}{% endblock %}
{% block content %}
<p>
<strong>{% trans "Set a new password!" %}</strong>
<p><strong>{% trans "Set a new password!" %}</strong><br />
{% if validlink %}
<form method="POST">
<table>
{% blocktrans %}Here you can set a new password.{% endblocktrans %}
</p>
<form method="POST">
<table>
{% csrf_token %}
{{ form.as_table }}
<tr>
<td>
<input type="submit" value="Change my password">
<td colspan="2">
<input type="submit" value="{% trans "Change my password" %}">
</td>
</tr>
</table>
</form>
</form>
{% else %}
<p>{% trans "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." %}</p>
{% trans "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." %}</p>
{% endif %}
</p>
{% endblock %}

View File

@ -8,6 +8,6 @@
<strong>{% trans "Reset password, email sent" %}</strong>
<br />
<br />
We've emailed you instructions for setting your password. You should receive the email shortly!
{% blocktrans %}We've emailed you instructions for setting your password. You should receive the email shortly!{% endblocktrans %}
</p>
{% endblock %}

File diff suppressed because one or more lines are too long

View File

@ -6,19 +6,16 @@
{% block content %}
<p>
<strong>{% trans "Reset password" %}</strong>
<br />
{% blocktrans %}Here you can request a password reset. Please enter your email address that is used for registration.{% endblocktrans %}
</p>
<form method="post" action="{% url 'password_reset' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.email.label_tag }}</td>
<td>{{ form.email }}</td>
</tr>
</table>
<input type="submit" value="Reset my password">
{% csrf_token %}
<table>
{{ form.as_table }}
<tr>
<td colspan="2"><input type="submit" value="{% trans "Reset my password"%} "></td>
</tr>
</table>
</form>
{% endblock %}

View File

@ -4,9 +4,7 @@
{% block title %}{% trans "Singup" %}{% endblock %}
{% block pagetitle %}{% trans "Singup" %}{% endblock %}
{% block content %}
<p>
<strong>{% trans "Singup" %}</strong>
</p>
<p><strong>{% trans "Singup" %}</strong></p>
<form method="post" action="{% url 'signup' %}">
{% csrf_token %}

View File

@ -0,0 +1,24 @@
from django.core.management.base import BaseCommand, CommandError
from apps.schedule.models import Schedule
#from polls.models import Question as Poll
class Command(BaseCommand):
help = 'Send out all the new reports'
# def add_arguments(self, parser):
# parser.add_argument('poll_ids', nargs='+', type=int)
def handle(self, *args, **options):
Schedule.objects.filter(peregrine_result__isnull=False).filter(report_sent__isnull=True)
# for poll_id in options['poll_ids']:
# try:
# poll = Poll.objects.get(pk=poll_id)
# except Poll.DoesNotExist:
# raise CommandError('Poll "%s" does not exist' % poll_id)
# poll.opened = False
# poll.save()
# self.stdout.write(self.style.SUCCESS('Successfully closed poll "%s"' % poll_id))

View File

@ -0,0 +1,25 @@
# Generated by Django 3.0.6 on 2020-05-14 13:18
import collections
from django.db import migrations, models
import jsonfield.fields
class Migration(migrations.Migration):
dependencies = [
('schedule', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='schedule',
name='peregrine_result',
field=jsonfield.fields.JSONField(blank=True, help_text='The results from the Peregrine job in JSON', load_kwargs={'object_pairs_hook': collections.OrderedDict}, verbose_name='Peregrine JSON output'),
),
migrations.AddField(
model_name='schedule',
name='report_sent',
field=models.DateTimeField(blank=True, help_text='The date and time when the report has sended to the user.', null=True, verbose_name='Report is send to user'),
),
]

View File

@ -15,12 +15,17 @@ class Schedule(MetaDataModel):
email = models.CharField(_('Email address'), max_length=100, help_text=_('Email address where the results will be sent to.'))
planning_source = JSONField(_('Schedule input'), blank=True, load_kwargs={'object_pairs_hook': collections.OrderedDict}, help_text=_('The schedule input in JSON format based on the form data'))
planning_peregrine = models.TextField(_('Peregrine input'), blank=True, help_text=_('This is the translated content from the source for use with Peregrine cluster'))
peregrine_accepted = models.BooleanField(_('Peregrine accepted'),default=False, help_text=_('When true, the Peregrine cluster has picked up the job.'))
peregrine_result = JSONField(_('Peregrine JSON output'), blank=True, load_kwargs={'object_pairs_hook': collections.OrderedDict}, help_text=_('The results from the Peregrine job in JSON'))
output_peregrine = models.BinaryField(_('Peregrine binary output'), blank=True, help_text=_('This is the output in binary format from the Peregrine cluster'))
report_sent = models.DateTimeField(_('Report is send to user'), blank=True, null=True, help_text=_('The date and time when the report has sended to the user.'))
def __str__(self):
"""str: Returns a readable name for the schedule. Format is [schedule_name] (employee_name)."""
return '{} ({})'.format(self.name, self.employee)

View File

@ -4,66 +4,134 @@
{% block title %}{% trans "New schedule" %}{% endblock %}
{% block pagetitle %}{% trans "New schedule" %}{% endblock %}
{% block content %}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<div class="container">
<form method="POST" action="{% url 'schedule:new' %}">
<form method="POST" action="{% url 'schedule:new' %}">
{% csrf_token %}
{{ form.json }}
<h1>Algemene informatie</h1>
<p>Als een afdeling meerdere wachtkamers heeft, vul dan dit formulier meerdere keren in; een keer voor elke groep van behandelkamers die een wachtkamer delen.</p>
<div class="form-group">
<table>
<tbody>
<tr>
<th>
<label for="id_name">Naam van de afdeling</label>
</th>
</tr>
<tr>
<td>
<input type="text" class="form-control" id="id_name" name="name" aria-describedby="afdelingnaamHelp" required>
<small id="afdelingnaamHelp" class="form-text text-muted">Geef de naam op van de afdeling</small>
</div>
<div class="form-group">
</td>
</tr>
<tr>
<th>
<label for="id_email">Emailadres voor de resultaten</label>
</th>
</tr>
<tr>
<td>
<input type="email" class="form-control" id="id_email" name="email" aria-describedby="emailadresHelp" required value={{user.email}}>
<small id="emailadresHelp" class="form-text text-muted">Geef het emailadres op om de uitkomsten te ontvangen</small>
</div>
<div class="form-group">
</td>
</tr>
<tr>
<th>
<label for="patienten">Aantal patiënten dat kan wachten in wachtkamer</label>
</th>
</tr>
<tr>
<td>
<input type="number" class="form-control" id="patienten" name="patienten" min="1" max="100" aria-describedby="patientenHelp" required>
<small id="patientenHelp" class="form-text text-muted">Met bewaren 1,5m afstand tussen lopende en zittende patiënten!</small>
</div>
</td>
</tr>
</tbody>
</table>
<br />
<hr>
<br />
<h1>Specialisaties binnen de afdeling</h1>
<div class="poliekliniek_specialisatie">
<div class="form-group">
<label for="specialisatie_1" class="h4">Specialisatie 1</label>
<input type="text" class="form-control" style="font-size: 1.5em" id="specialisatie_1" name="specialisatie_1" aria-describedby="specialisatie_1Help" required>
<small id="specialisatie_1Help" class="form-text text-muted float-right d-none"><a href="#">Verwijder</a></small>
</div>
<div class="form-group">
<label for="specialisatie_afkorting_1">Specialisatie afkorting</label>
<input type="text" class="form-control" maxlength="5" id="specialisatie_afkorting_1" name="specialisatie_afkorting_1" aria-describedby="specialisatie_afkorting_1Help" required>
<small id="specialisatie_1Help" class="form-text text-muted">Geef een afkorting op voor deze specialisatie. Deze gebruiken wij in de figuren van de rapportage.</small>
</div>
<div class="form-group">
<label for="specialisatie_aantal_artsen_1">Aantal artsen</label>
<input type="number" class="form-control" min="0" max="100" id="specialisatie_aantal_artsen_1" name="specialisatie_aantal_artsen_1" aria-describedby="specialisatie_aantal_artsen_1Help" required>
<small id="specialisatie_aantal_artsen_1Help" class="form-text text-muted">Maximaal aantal artsen dat op enig moment tegelijk aan het werk zou kunnen zijn.</small>
</div>
<div class="form-group">
<label for="specialisatie_aantal_kamers_1">Aantal behandelkamers</label>
<input type="number" class="form-control" min="0" max="100" id="specialisatie_aantal_kamers_1" name="specialisatie_aantal_kamers_1" aria-describedby="specialisatie_aantal_kamers_1Help" required>
<small id="specialisatie_aantal_kamers_1Help" class="form-text text-muted">Aantal behandelkamers dat beschikbaar is per specialisatie</small>
</div>
<div class="form-group">
<label for="specialisatie_aantal_behandelingen_1">Aantal verschillende soorten behandelingen</label>
<input type="number" class="form-control" min="0" max="100" id="specialisatie_aantal_behandelingen_1" name="specialisatie_aantal_behandelingen_1" aria-describedby="specialisatie_aantal_behandelingen_1Help" required>
<small id="specialisatie_aantal_behandelingen_1Help" class="form-text text-muted"></small>
</div>
<div class="form-group werktijden">
<label>Werktijden <small class="text-danger" style="display:none"> Nog niet volledig</small></label>
<table>
<tbody>
<div class="container ml-4">
<div class="row">
<div class="col-sm-6">de hele werkdag</div>
<div class="col-sm-3">
<select class="form-control" id="werkdag_start_afdeling_1" name="werkdag_start_afdeling_1" required>
<tr>
<th>
<label for="specialisatie_0" class="h4">Specialisatie 1</label>
</th>
</tr>
<tr>
<td>
<input type="text" class="form-control" style="font-size: 1.5em" id="specialisatie_0" name="specialisatie_0" aria-describedby="specialisatie_0Help" required>
<small id="specialisatie_0Help" class="form-text text-muted" style="float:right;display:none"><a href="#">Verwijder</a></small>
</td>
</tr>
<tr>
<th>
<label for="specialisatie_afkorting_0">Specialisatie afkorting</label>
</th>
</tr>
<tr>
<td>
<input type="text" class="form-control" maxlength="5" id="specialisatie_afkorting_0" name="specialisatie_afkorting_0" aria-describedby="specialisatie_afkorting_0Help" required>
<small id="specialisatie_0Help" class="form-text text-muted">Geef een afkorting op voor deze specialisatie. Deze gebruiken wij in de figuren van de rapportage.</small>
</td>
</tr>
<tr>
<th>
<label for="specialisatie_aantal_artsen_0">Aantal artsen</label>
</th>
</tr>
<tr>
<td>
<input type="number" class="form-control" min="0" max="100" id="specialisatie_aantal_artsen_0" name="specialisatie_aantal_artsen_0" aria-describedby="specialisatie_aantal_artsen_0Help" required>
<small id="specialisatie_aantal_artsen_0Help" class="form-text text-muted">Maximaal aantal artsen dat op enig moment tegelijk aan het werk zou kunnen zijn.</small>
</td>
</tr>
<tr>
<th>
<label for="specialisatie_aantal_kamers_0">Aantal behandelkamers</label>
</th>
</tr>
<tr>
<td>
<input type="number" class="form-control" min="0" max="100" id="specialisatie_aantal_kamers_0" name="specialisatie_aantal_kamers_0" aria-describedby="specialisatie_aantal_kamers_0Help" required>
<small id="specialisatie_aantal_kamers_0Help" class="form-text text-muted">Aantal behandelkamers dat beschikbaar is per specialisatie</small>
</td>
</tr>
<tr>
<th>
<label for="specialisatie_aantal_behandelingen_0">Aantal verschillende soorten behandelingen</label>
</th>
</tr>
<tr>
<td>
<input type="number" class="form-control" min="0" max="100" id="specialisatie_aantal_behandelingen_0" name="specialisatie_aantal_behandelingen_0" aria-describedby="specialisatie_aantal_behandelingen_0Help" required>
<small id="specialisatie_aantal_behandelingen_0Help" class="form-text text-muted"></small>
</td>
</tr>
<tr>
<th>
<label>Werktijden <small class="text-danger" style="display:none"> Nog niet volledig</small></label>
</th>
</tr>
<tr>
<td>
<div class="form-group werktijden">
<table>
<tbody>
<tr>
<th>de hele werkdag</th>
<td>
<select class="form-control" id="werkdag_start_afdeling_0" name="werkdag_start_afdeling_0" required>
<option value="">Maak een keuze</option>
<option value="0600">06:00</option>
<option value="0615">06:15</option>
@ -83,9 +151,9 @@
<option value="0945">09:45</option>
<option value="1000">10:00</option>
</select>
</div>
<div class="col-sm-3">
<select class="form-control" id="werkdag_end_afdeling_1" name="werkdag_end_afdeling_1" required>
</td>
<td>
<select class="form-control" id="werkdag_end_afdeling_0" name="werkdag_end_afdeling_0" required>
<option value="">Maak een keuze</option>
<option value="1200">12:00</option>
<option value="1215">12:15</option>
@ -121,12 +189,13 @@
<option value="1945">19:45</option>
<option value="2000">20:00</option>
</select>
</div>
</div>
<div class="row">
<div class="col-sm-6">ochtendpauze</div>
<div class="col-sm-3">
<select class="form-control" id="ochtend_pauze_start_afdeling_1" name="ochtend_pauze_start_afdeling_1" required>
</td>
</tr>
<tr>
<th>ochtendpauze</th>
<td>
<select class="form-control" id="ochtend_pauze_start_afdeling_0" name="ochtend_pauze_start_afdeling_0" required>
<option value="">Maak een keuze</option>
<option value="0">Geen pauze</option>
<option value="0900">09:00</option>
@ -139,9 +208,9 @@
<option value="1045">10:45</option>
<option value="1100">11:00</option>
</select>
</div>
<div class="col-sm-3">
<select class="form-control" id="ochtend_pauze_end_afdeling_1" name="ochtend_pauze_end_afdeling_1" required>
</td>
<td>
<select class="form-control" id="ochtend_pauze_end_afdeling_0" name="ochtend_pauze_end_afdeling_0" required>
<option value="">Maak een keuze</option>
<option value="0">Geen pauze</option>
<option value="0915">09:15</option>
@ -155,12 +224,13 @@
<option value="1115">11:15</option>
<option value="1130">11:30</option>
</select>
</div>
</div>
<div class="row">
<div class="col-sm-6">lunchpauze</div>
<div class="col-sm-3">
<select class="form-control" id="lunch_pauze_start_afdeling_1" name="lunch_pauze_start_afdeling_1" required>
</td>
</tr>
<tr>
<th>lunchpauze</th>
<td>
<select class="form-control" id="lunch_pauze_start_afdeling_0" name="lunch_pauze_start_afdeling_0" required>
<option value="">Maak een keuze</option>
<option value="0">Geen pauze</option>
<option value="1130">11:30</option>
@ -175,9 +245,9 @@
<option value="1345">13:45</option>
<option value="1400">14:00</option>
</select>
</div>
<div class="col-sm-3">
<select class="form-control" id="lunch_pauze_end_afdeling_1" name="lunch_pauze_end_afdeling_1" required>
</td>
<td>
<select class="form-control" id="lunch_pauze_end_afdeling_0" name="lunch_pauze_end_afdeling_0" required>
<option value="">Maak een keuze</option>
<option value="0">Geen pauze</option>
<option value="1200">12:00</option>
@ -192,12 +262,13 @@
<option value="1415">14:15</option>
<option value="1430">14:30</option>
</select>
</div>
</div>
<div class="row">
<div class="col-sm-6">middagpauze</div>
<div class="col-sm-3">
<select class="form-control" id="middag_pauze_start_afdeling_1" name="middag_pauze_start_afdeling_1" required>
</td>
</tr>
<tr>
<th>middagpauze</th>
<td>
<select class="form-control" id="middag_pauze_start_afdeling_0" name="middag_pauze_start_afdeling_0" required>
<option value="">Maak een keuze</option>
<option value="0">Geen pauze</option>
<option value="1430">14:30</option>
@ -208,9 +279,9 @@
<option value="1545">15:45</option>
<option value="1600">16:00</option>
</select>
</div>
<div class="col-sm-3">
<select class="form-control" id="middag_pauze_end_afdeling_1" name="middag_pauze_end_afdeling_1" required>
</td>
<td>
<select class="form-control" id="middag_pauze_end_afdeling_0" name="middag_pauze_end_afdeling_0" required>
<option value="">Maak een keuze</option>
<option value="0">Geen pauze</option>
<option value="1445">14:45</option>
@ -222,13 +293,23 @@
<option value="1615">16:15</option>
<option value="1630">16:30</option>
</select>
</div>
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="text-center mt-4 font-weight-bold"><a href="#" class="add_specialisatie">klik hier om een extra specialisatie toe te voegen</a></div>
</td>
</tr>
</tbody>
</table>
</div>
<div style="text-align: center; width: 100%; margin-top: 15px"><a href="#" class="add_specialisatie">klik hier om een extra specialisatie toe te voegen</a></div>
<br />
<hr>
<br />
@ -237,25 +318,23 @@
<p>In het model worden slots van 5 minuten gebruikt voor het bepalen van starttijden. etc. Afspraken starten daarmee om bijv. 10.00, 10.05, 10.10.<br />Afspraakduur wordt daarmee ook in veelvouden van 5 minuten gevraagd.</p>
<p>Zowel afspraken waar de patiënt fysiek in het ziekenhuis is, als wel telefoongesprekken worden hier gevraagd. Beide type afspraken kunnen in het raster worden gepland.</p>
<p>"Normaal" betekent: zoals het was voor COVID-19<br />30% betekent: als je maar 30% van de patiënten kunt binnenkrijgen, hoeveel afspraken van elk type zou je dan willen inplannen?</p>
<div class="container">
<div class="row mb-2">
<div class="col"><strong>Naam behandeling</strong></div>
<div class="col"><strong>Duur (in minuten)</strong></div>
<div class="col"><strong>Specialisatie</strong></div>
<div class="col"><strong>Methode</strong></div>
<div class="col"><strong>Normaal aantal</strong></div>
<div class="col"><strong>Gewenst als op 30%</strong></div>
</div>
<div class="row behandeling">
<div class="col">
<div class="form-group">
<input type="text" class="form-control" id="behandeling_1" name="behandeling_1" required>
</div>
</div>
<div class="col">
<div class="form-group">
<select class="form-control" id="behandeling_durartion_1" name="behandeling_durartion_1" required>
<table>
<tbody>
<tr>
<th>Naam behandeling</th>
<th>Duur (in minuten)</th>
<th>Specialisatie</th>
<th>Methode</th>
<th>Normaal aantal</th>
<th>Gewenst als op 30%</th>
</tr>
<tr class="behandeling">
<td><input type="text" class="form-control" id="behandeling_0" name="behandeling_0" required></td>
<td>
<select class="form-control" id="behandeling_duration_0" name="behandeling_duration_0" required>
<option value="5">5</option>
<option value="10">10</option>
<option value="15">15</option>
@ -275,65 +354,58 @@
<option value="85">85</option>
<option value="90">90</option>
</select>
</div>
</div>
<div class="col">
<div class="form-group">
<select class="form-control specialismes" id="behandeling_specialisme_1" name="behandeling_specialisme_1" required></select>
</div>
</div>
<div class="col">
<div class="form-group">
<select class="form-control" id="behandeling_method_1" name="behandeling_method_1" required>
</td>
<td>
<select class="form-control specialismes" id="behandeling_specialisme_0" name="behandeling_specialisme_0" required></select>
</td>
<td>
<select class="form-control" id="behandeling_method_0" name="behandeling_method_0" required>
<option value="live">in persoon</option>
<option value="phone">telefonisch</option>
</select>
</div>
</div>
<div class="col">
<div class="form-group">
<input type="number" class="form-control behandeling_calc" id="behandeling_100p_1" name="behandeling_100p_1" min="0" max="100" required>
</div>
</div>
<div class="col">
<div class="form-group">
<input type="number" class="form-control behandeling_calc" id="behandeling_30p_1" name="behandeling_30p_1" min="0" max="100" required>
<small class="form-text text-muted float-right d-none"><a href="#">Verwijder</a></small>
</div>
</div>
</div>
</div>
</td>
<div class="text-center mt-4 font-weight-bold"><a href="#" class="add_behandeling">klik hier om een nieuwe behandeling toe te voegen</a></div>
<td>
<input type="number" class="form-control behandeling_calc" id="behandeling_100p_0" name="behandeling_100p_0" min="0" max="100" required>
</td>
<td>
<input type="number" class="form-control behandeling_calc" id="behandeling_30p_0" name="behandeling_30p_0" min="0" max="100" required>
<small style="float:right; display:none"><a href="#">Verwijder</a></small>
</td>
</tr>
</tbody>
</table>
<div style="text-align: center; width: 100%; margin-top: 15px"><a href="#" class="add_behandeling">klik hier om een nieuwe behandeling toe te voegen</a></div>
<table>
<tbody>
<tr class="behandeling_calc_summary">
<th>Totaal aantal afspraken</th>
<td style="text-align: center">0</td>
<td style="text-align: center">0</td>
</tr>
<tr>
<td colspan="3" class="behandeling_calc_remarks">
</td>
</tr>
</tbody>
</table>
<div class="row behandeling_calc_summary">
<div class="col-8"><strong>Totaal aantal afspraken</strong></div>
<div class="col-2 text-center">0</div>
<div class="col-2 text-center">0</div>
</div>
<div class="row behandeling_calc_remarks">
<div class="col-12"></div>
</div>
<br />
<hr>
<br />
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<!--
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.1-muted 6.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
-->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
</form>
<script type="text/javascript">
<script type="text/javascript">
function addSpecialisatie() {
var clone = jQuery('div.poliekliniek_specialisatie:first').clone()
clone.find('input').val('');
clone.find('small').removeClass('d-none');
clone.find('option:disabled').removeAttr('disabled');
clone.find('small').show();
clone.insertAfter('div.poliekliniek_specialisatie:last');
updateSpecialisaties();
loadRemoveSpecialisatie();
@ -352,8 +424,8 @@
jQuery('div.poliekliniek_specialisatie').each(function(counter,element){
if (counter > 0) {
element = jQuery(element);
var nr = counter + 1;
element.find('label').first().text('Specialisatie ' + nr);
var nr = counter; // We are starting with 0 so the amount is the new number
element.find('label').first().text('Specialisatie ' + (nr + 1));
element.find('select,input').each(function(index,selectitem){
selectitem = jQuery(selectitem);
selectitem.prop('name',selectitem.prop('name').replace(/_\d+$/,'_' + nr));
@ -370,6 +442,10 @@
jQuery('div.poliekliniek_specialisatie input').off('change').on('change',function(){
updateSpecialisatieValues();
});
jQuery('div.werktijden select').off('change').on('change',function(event){
check_working_hours(this);
});
}
function updateSpecialisatieValues() {
@ -393,50 +469,14 @@
});
}
function addBehandelkamer() {
var clone = jQuery('div.row.behandelkamer:first').clone()
clone.find('input').val('');
clone.find('selected').val('');
clone.find('small').removeClass('d-none');
clone.insertAfter('div.row.behandelkamer:last');
updateBehandelkamers();
loadRemoveBehandelkamer();
}
function loadRemoveBehandelkamer() {
jQuery('div.behandelkamer small a').off('click').on('click',function(event){
event.preventDefault();
jQuery(this).parentsUntil('.behandelkamer').parent().remove();
updateBehandelkamers();
});
}
function updateBehandelkamers() {
jQuery('div.behandelkamer').each(function(counter,element){
if (counter > 0) {
element = jQuery(element);
var nr = counter + 1;
element.find('input').prop('id','behandelkamer_' + nr);
element.find('input').prop('name','behandelkamer_' + nr);
element.find('select').prop('id','behandelkamer_specialisme_' + nr);
element.find('select').prop('name','behandelkamer_specialisme_' + nr);
}
});
}
function addBehandeling() {
var clone = jQuery('div.row.behandeling:first').clone()
var clone = jQuery('tr.behandeling:first').clone()
clone.find('input').val('');
clone.find('selected').val('');
clone.find('small').removeClass('d-none');
clone.find('small').show();
clone.insertAfter('div.row.behandeling:last');
clone.insertAfter('tr.behandeling:last');
jQuery('input.behandeling_calc').off('change keyup').on('change keyup',function(){
calculateBehandelingen();
@ -447,7 +487,7 @@
}
function loadRemoveBehandeling() {
jQuery('div.behandeling small a').off('click').on('click',function(event){
jQuery('tr.behandeling small a').off('click').on('click',function(event){
event.preventDefault();
jQuery(this).parentsUntil('.behandeling').parent().remove();
@ -456,10 +496,10 @@
}
function updateBehandelingen() {
jQuery('div.behandeling').each(function(counter,element){
jQuery('tr.behandeling').each(function(counter,element){
if (counter > 0) {
element = jQuery(element);
var nr = counter + 1;
var nr = counter;
element.find('select,input').each(function(index,selectitem){
selectitem = jQuery(selectitem);
@ -474,14 +514,14 @@
let total = 0, percentage = 0;
let ok = true;
jQuery('div.row.behandeling').each(function(counter,row){
jQuery('tr.behandeling').each(function(counter,row){
row = jQuery(row);
total += (row.find('input[name*="_100p_"]').val() != '' ? row.find('input[name*="_100p_"]').val() * 1 : 0);
percentage += (row.find('input[name*="_30p_"]').val() != '' ? row.find('input[name*="_30p_"]').val() * 1 : 0);
});
jQuery('div.row.behandeling_calc_summary div:nth-child(2)').text(total);
jQuery('div.row.behandeling_calc_summary div:nth-child(3)').text(percentage);
jQuery('tr.behandeling_calc_summary td:nth-child(2)').text(total);
jQuery('tr.behandeling_calc_summary td:nth-child(3)').text(percentage);
let calc_message = '';
let class_message = '';
@ -497,13 +537,13 @@
calc_message = 'Dit klopt precies';
class_message = 'alert-success';
}
jQuery('div.behandeling_calc_remarks div').removeClass('alert-danger alert-warning alert-success').addClass(class_message).text(calc_message);
jQuery('td.behandeling_calc_remarks').removeClass('alert-danger alert-warning alert-success').addClass(class_message).text(calc_message);
return ok;
}
function validate_working_hours() {
jQuery('div.form-group.werktijden').each(function(index,element){
jQuery('div.werktijden').each(function(index,element){
jQuery(element).find('select').removeClass('is-invalid');
check_working_hours(element,true);
jQuery(element).find('select').filter(function(){ let value = jQuery(this).val(); return !(value != null && value != '') }).addClass('is-invalid');
@ -531,7 +571,11 @@
if ('' !== element.value && element.value > 0) {
// Only allow options that are between the day start and day end.
let time = day_start.val();
element.disabled = (time && element.value < day_start.val()) || (day_end.val() && element.value >= day_end.val());
let disable = (time && element.value < day_start.val()) || (day_end.val() && element.value >= day_end.val());
if (element.selected && disable) {
morning_break_start.val('');
}
element.disabled = disable;
}
});
@ -540,7 +584,11 @@
// Only allow options that are between the day start and day end.
// Or when morning_break_start is selected and valid, add period time for end time selections
let time = ('' != morning_break_start.val() ? morning_break_start.val() : day_start.val());
element.disabled = (time && element.value <= time) || (day_end.val() && element.value > day_end.val());
let disable = (time && element.value <= time) || (day_end.val() && element.value > day_end.val());
if (element.selected && disable) {
morning_break_end.val('');
}
element.disabled = disable;
}
});
@ -549,7 +597,11 @@
// Only allow options that are between the day start and day end.
// Or when morning_break_end is selected and valid, add period time for end time selections
let time = ('' != morning_break_end.val() ? morning_break_end.val() : day_start.val());
element.disabled = (time && element.value < time) || (day_end.val() && element.value >= day_end.val());
let disable = (time && element.value < time) || (day_end.val() && element.value >= day_end.val());
if (element.selected && disable) {
lunch_start.val('');
}
element.disabled = disable;
}
});
@ -558,7 +610,11 @@
// Only allow options that are between the day start and day end.
// Or when lunch_start is selected and valid, add period time for end time selections
let time = ('' != lunch_start.val() ? lunch_start.val() : day_start.val()) * 1;
element.disabled = (time && element.value <= time) || (day_end.val() && element.value > day_end.val());
let disable = (time && element.value <= time) || (day_end.val() && element.value > day_end.val());
if (element.selected && disable) {
lunch_end.val('');
}
element.disabled = disable;
}
});
@ -568,7 +624,11 @@
// Only allow options that are between the day start and day end.
// Or when lunch_end is selected and valid, add period time for end time selections
let time = ('' != lunch_end.val() ? lunch_end.val() : day_start.val());
element.disabled = (time && element.value < time) || (day_end.val() && element.value >= day_end.val());
let disable = (time && element.value < time) || (day_end.val() && element.value >= day_end.val())
if (element.selected && disable) {
afternoon_break_start.val('');
}
element.disabled = disable;
}
});
@ -577,7 +637,11 @@
// Only allow options that are between the day start and day end.
// Or when morning_break_start is selected and valid, add period time for end time selections
let time = ('' != afternoon_break_start.val() ? afternoon_break_start.val() : day_start.val());
element.disabled = (time && element.value <= time) || (day_end.val() && element.value > day_end.val());
let disable = (time && element.value <= time) || (day_end.val() && element.value > day_end.val());
if (element.selected && disable) {
afternoon_break_end.val('');
}
element.disabled = disable;
}
});
@ -594,7 +658,6 @@
}
}
jQuery(function() {
jQuery('a.add_specialisatie').on('click',function(event){
event.preventDefault();
@ -615,7 +678,7 @@
addBehandeling();
});
jQuery('div.form-group.werktijden select').off('change').on('change',function(event){
jQuery('div.werktijden select').off('change').on('change',function(event){
check_working_hours(this);
});
@ -624,8 +687,6 @@
});
jQuery('form').on('submit',function(event){
//event.preventDefault();
if (validate_working_hours() &&
calculateBehandelingen()) {
@ -634,17 +695,13 @@
formdata.delete('json');
jQuery('input#id_json').val(JSON.stringify(Object.fromEntries(formdata)));
// alert('Alle velden zijn ok! Formulier wordt nu verder verwerkt.');
console.log(event);
return true;
} else {
alert('Er zijn wat problemen met het formulier. Controleer de invoer velden');
}
return true;
return false;
});
});
</script>
</body>
</script>
{% endblock %}

View File

@ -160,3 +160,5 @@ EMAIL_USE_TLS = config('EMAIL_USE_TLS', default=False, cast=bool)
if DEBUG:
EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = os.path.join(BASE_DIR, 'sent_emails')
REPORTS_OUTPUT = os.path.join(BASE_DIR, 'reports')

View File

@ -1,23 +1,18 @@
{% load i18n %}
<li class="rug-nav--secondary__item">
<a class="rug-nav--secondary__link js--togglable-switch" data-toggle-class="rug-nav--secondary__link--selected" data-toggle-group="submenu" data-toggle-id="menu-2427370b-9435-44d9-bca7-b93ec9d03cc0-33.31" data-toggle-mode="togglable">{% trans "Menu" %}</a>
<ul class="rug-nav--secondary__sub rug-nav--secondary__sub--hidden js--togglable-item" data-toggle-class="rug-block" data-toggle-group="submenu" data-toggle-id="menu-2427370b-9435-44d9-bca7-b93ec9d03cc0-33.31">
<li class="rug-nav--secondary__sub__item" data-menu-id="b512aa55-f0cb-4588-9054-302caa5fa951-33.34">
<a class="rug-nav--secondary__sub__link" href="{% url 'schedule:list' %}"><span class="rug-nav--secondary__sub__link-text">{% trans "Schedules" %}</span></a>
</li>
<li class="rug-nav--secondary__sub__item" data-menu-id="b512aa55-f0cb-4588-9054-302caa5fa951-33.35">
<a class="rug-nav--secondary__sub__link" href="{% url 'schedule:new' %}"><span class="rug-nav--secondary__sub__link-text">{% trans "New schedule" %}</span></a>
</li>
<li class="rug-nav--secondary__sub__item" data-menu-id="b512aa55-f0cb-4588-9054-302caa5fa951-33.36">
<a class="rug-nav--secondary__sub__link" href="{% url 'logout' %}"><span class="rug-nav--secondary__sub__link-text">{% trans "Logout" %}</span></a>
</li>
</ul>
<a class="rug-nav--secondary__link js--togglable-switch" data-toggle-class="rug-nav--secondary__link--selected" data-toggle-group="submenu" data-toggle-id="menu-2427370b-9435-44d9-bca7-b93ec9d03cc0-33.31" data-toggle-mode="togglable">{% trans "Menu" %}</a>
<ul class="rug-nav--secondary__sub rug-nav--secondary__sub--hidden js--togglable-item" data-toggle-class="rug-block" data-toggle-group="submenu" data-toggle-id="menu-2427370b-9435-44d9-bca7-b93ec9d03cc0-33.31">
<li class="rug-nav--secondary__sub__item" data-menu-id="b512aa55-f0cb-4588-9054-302caa5fa951-33.34">
<a class="rug-nav--secondary__sub__link" href="{% url 'schedule:list' %}"><span class="rug-nav--secondary__sub__link-text">{% trans "Schedules" %}</span></a>
</li>
<li class="rug-nav--secondary__sub__item" data-menu-id="b512aa55-f0cb-4588-9054-302caa5fa951-33.35">
<a class="rug-nav--secondary__sub__link" href="{% url 'schedule:new' %}"><span class="rug-nav--secondary__sub__link-text">{% trans "New schedule" %}</span></a>
</li>
{% if user.is_authenticated %}
<li class="rug-nav--secondary__sub__item" data-menu-id="b512aa55-f0cb-4588-9054-302caa5fa951-33.36">
<a class="rug-nav--secondary__sub__link" href="{% url 'logout' %}"><span class="rug-nav--secondary__sub__link-text">{% trans "Logout" %}</span></a>
</li>
{% endif %}
</ul>
</li>

View File

@ -1,13 +1,12 @@
{% extends 'base.html' %} <!-- Add this for inheritance -->
{% load i18n %}
{% block title %}{% trans "Singup" %}{% endblock %}
{% block pagetitle %}{% trans "Singup" %}{% endblock %}
{% block title %}{% trans "Signup" %}{% endblock %}
{% block pagetitle %}{% trans "Signup" %}{% endblock %}
{% block content %}
<p>
<strong>{% trans "Singup" %}</strong>
<strong>{% trans "Signup" %}</strong>
<br />
Please contact x@y.z
{% blocktrans %}Please contact x@y.z{% endblocktrans %}
</p>
{% endblock %}