parent
cb0696b0bd
commit
3a3bcea588
32 changed files with 32 additions and 615 deletions
|
@ -1,4 +1,4 @@
|
||||||
# Generated by Django 4.2.3 on 2023-07-28 14:09
|
# Generated by Django 4.2.6 on 2023-10-09 21:31
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import uuid
|
import uuid
|
||||||
|
@ -8,53 +8,22 @@ class Migration(migrations.Migration):
|
||||||
|
|
||||||
initial = True
|
initial = True
|
||||||
|
|
||||||
dependencies = []
|
dependencies = [
|
||||||
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name="Aviary",
|
name='Aviary',
|
||||||
fields=[
|
fields=[
|
||||||
(
|
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
|
||||||
"id",
|
('description', models.CharField(max_length=256, unique=True, verbose_name='Beschreibung')),
|
||||||
models.UUIDField(
|
('condition', models.CharField(choices=[('Offen', 'Offen'), ('Geschlossen', 'Geschlossen'), ('Gesperrt', 'Gesperrt')], max_length=256, verbose_name='Zustand')),
|
||||||
default=uuid.uuid4,
|
('last_ward_round', models.DateField(verbose_name='letzte Visite')),
|
||||||
editable=False,
|
('comment', models.CharField(blank=True, max_length=512, null=True, verbose_name='Bemerkungen')),
|
||||||
primary_key=True,
|
|
||||||
serialize=False,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"description",
|
|
||||||
models.CharField(
|
|
||||||
max_length=256, unique=True, verbose_name="Beschreibung"
|
|
||||||
),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"condition",
|
|
||||||
models.CharField(
|
|
||||||
choices=[
|
|
||||||
("Offen", "Offen"),
|
|
||||||
("Geschlossen", "Geschlossen"),
|
|
||||||
("Gesperrt", "Gesperrt"),
|
|
||||||
],
|
|
||||||
max_length=256,
|
|
||||||
verbose_name="Zustand",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
("last_ward_round", models.DateField(verbose_name="letzte Visite")),
|
|
||||||
(
|
|
||||||
"comment",
|
|
||||||
models.CharField(
|
|
||||||
blank=True,
|
|
||||||
max_length=512,
|
|
||||||
null=True,
|
|
||||||
verbose_name="Bemerkungen",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
"verbose_name": "Voliere",
|
'verbose_name': 'Voliere',
|
||||||
"verbose_name_plural": "Volieren",
|
'verbose_name_plural': 'Volieren',
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -26,6 +26,7 @@ class BirdAddForm(forms.ModelForm):
|
||||||
"find_circumstances",
|
"find_circumstances",
|
||||||
"diagnostic_finding",
|
"diagnostic_finding",
|
||||||
"comment",
|
"comment",
|
||||||
|
"finder",
|
||||||
]
|
]
|
||||||
labels = {
|
labels = {
|
||||||
"bird_identifier": _("Kennung"),
|
"bird_identifier": _("Kennung"),
|
||||||
|
@ -37,6 +38,7 @@ class BirdAddForm(forms.ModelForm):
|
||||||
"find_circumstances": _("Fundumstände"),
|
"find_circumstances": _("Fundumstände"),
|
||||||
"diagnostic_finding": _("Diagnose bei Fund"),
|
"diagnostic_finding": _("Diagnose bei Fund"),
|
||||||
"comment": _("Bermerkung"),
|
"comment": _("Bermerkung"),
|
||||||
|
"finder": _("Finder"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# Generated by Django 4.2.5 on 2023-09-17 21:04
|
# Generated by Django 4.2.6 on 2023-10-09 21:31
|
||||||
|
|
||||||
|
import ckeditor.fields
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
|
@ -11,7 +12,6 @@ class Migration(migrations.Migration):
|
||||||
initial = True
|
initial = True
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('rescuer', '0002_alter_rescuer_options'),
|
|
||||||
('aviary', '0001_initial'),
|
('aviary', '0001_initial'),
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
]
|
]
|
||||||
|
@ -22,7 +22,7 @@ class Migration(migrations.Migration):
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||||
('name', models.CharField(max_length=256, unique=True, verbose_name='Bezeichnung')),
|
('name', models.CharField(max_length=256, unique=True, verbose_name='Bezeichnung')),
|
||||||
('description', models.CharField(blank=True, max_length=256, null=True, verbose_name='Beschreibung')),
|
('description', ckeditor.fields.RichTextField(verbose_name='Erläuterungen')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'Vogel',
|
'verbose_name': 'Vogel',
|
||||||
|
@ -65,11 +65,11 @@ class Migration(migrations.Migration):
|
||||||
('updated', models.DateTimeField(auto_now=True, verbose_name='geändert am')),
|
('updated', models.DateTimeField(auto_now=True, verbose_name='geändert am')),
|
||||||
('diagnostic_finding', models.CharField(max_length=256, verbose_name='Diagnose bei Fund')),
|
('diagnostic_finding', models.CharField(max_length=256, verbose_name='Diagnose bei Fund')),
|
||||||
('sent_to', models.CharField(blank=True, max_length=256, null=True, verbose_name='Übersandt nach')),
|
('sent_to', models.CharField(blank=True, max_length=256, null=True, verbose_name='Übersandt nach')),
|
||||||
('comment', models.TextField(blank=True, null=True, verbose_name='Bemerkung')),
|
('comment', models.TextField(blank=True, null=True, verbose_name='Bemerkungen')),
|
||||||
|
('finder', models.TextField(blank=True, null=True, verbose_name='Finder')),
|
||||||
('aviary', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='aviary.aviary', verbose_name='Voliere')),
|
('aviary', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='aviary.aviary', verbose_name='Voliere')),
|
||||||
('bird', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bird.bird', verbose_name='Vogel')),
|
('bird', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bird.bird', verbose_name='Vogel')),
|
||||||
('find_circumstances', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bird.circumstance', verbose_name='Fundumstände')),
|
('find_circumstances', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bird.circumstance', verbose_name='Fundumstände')),
|
||||||
('rescuer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rescuer.rescuer', verbose_name='Finder')),
|
|
||||||
('status', models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='bird.birdstatus')),
|
('status', models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='bird.birdstatus')),
|
||||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Benutzer')),
|
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Benutzer')),
|
||||||
],
|
],
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
# Generated by Django 4.2.6 on 2023-10-08 09:07
|
|
||||||
|
|
||||||
import ckeditor.fields
|
|
||||||
from django.db import migrations
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('bird', '0001_initial'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='birdstatus',
|
|
||||||
name='description',
|
|
||||||
field=ckeditor.fields.RichTextField(verbose_name='Erläuterungen'),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -8,7 +8,6 @@ from django.utils.translation import gettext_lazy as _
|
||||||
from ckeditor.fields import RichTextField
|
from ckeditor.fields import RichTextField
|
||||||
|
|
||||||
from aviary.models import Aviary
|
from aviary.models import Aviary
|
||||||
from rescuer.models import Rescuer
|
|
||||||
|
|
||||||
|
|
||||||
CHOICE_AGE = [
|
CHOICE_AGE = [
|
||||||
|
@ -51,13 +50,6 @@ class FallenBird(models.Model):
|
||||||
diagnostic_finding = models.CharField(
|
diagnostic_finding = models.CharField(
|
||||||
max_length=256, verbose_name=_("Diagnose bei Fund")
|
max_length=256, verbose_name=_("Diagnose bei Fund")
|
||||||
)
|
)
|
||||||
rescuer = models.ForeignKey(
|
|
||||||
Rescuer,
|
|
||||||
on_delete=models.SET_NULL,
|
|
||||||
blank=True,
|
|
||||||
null=True,
|
|
||||||
verbose_name=_("Finder"),
|
|
||||||
)
|
|
||||||
user = models.ForeignKey(
|
user = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name=_("Benutzer")
|
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name=_("Benutzer")
|
||||||
)
|
)
|
||||||
|
@ -73,6 +65,7 @@ class FallenBird(models.Model):
|
||||||
max_length=256, null=True, blank=True, verbose_name=_("Übersandt nach")
|
max_length=256, null=True, blank=True, verbose_name=_("Übersandt nach")
|
||||||
)
|
)
|
||||||
comment = models.TextField(blank=True, null=True, verbose_name=_("Bemerkung"))
|
comment = models.TextField(blank=True, null=True, verbose_name=_("Bemerkung"))
|
||||||
|
finder = models.TextField(blank=True, null=True, verbose_name=_("Finder"))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _("Patient")
|
verbose_name = _("Patient")
|
||||||
|
|
|
@ -48,9 +48,7 @@
|
||||||
mehr in Behandlung befindlichen Patienten finden Sie <a href="{% url 'bird_inactive' %}">hier</a>.
|
mehr in Behandlung befindlichen Patienten finden Sie <a href="{% url 'bird_inactive' %}">hier</a>.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#addPatientModal">einen Patienten
|
<p><a href="{% url 'bird_create' %}" class="btn btn-primary">einen Patienten anlegen</a></p>
|
||||||
anlegen
|
|
||||||
</button>
|
|
||||||
</p>
|
</p>
|
||||||
<table class="table table-striped table-hover display responsive nowrap" id="t__bird_all">
|
<table class="table table-striped table-hover display responsive nowrap" id="t__bird_all">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -58,7 +56,6 @@
|
||||||
<th>Patienten Alias</th>
|
<th>Patienten Alias</th>
|
||||||
<th>Vogel</th>
|
<th>Vogel</th>
|
||||||
<th>gefunden am</th>
|
<th>gefunden am</th>
|
||||||
<th>Finder</th>
|
|
||||||
<th>Fundort</th>
|
<th>Fundort</th>
|
||||||
<th>Status</th>
|
<th>Status</th>
|
||||||
<th>Voliere</th>
|
<th>Voliere</th>
|
||||||
|
@ -73,7 +70,6 @@
|
||||||
<td><a href="{% url 'bird_single' bird.id %}">{{ bird.bird_identifier }}</a></td>
|
<td><a href="{% url 'bird_single' bird.id %}">{{ bird.bird_identifier }}</a></td>
|
||||||
<td>{{ bird.bird }}</td>
|
<td>{{ bird.bird }}</td>
|
||||||
<td data-order="{{ forloop.counter }}">{{ bird.date_found }}</td>
|
<td data-order="{{ forloop.counter }}">{{ bird.date_found }}</td>
|
||||||
<td><a href="{% url 'rescuer_single' bird.rescuer_id %}">{{ bird.rescuer|default_if_none:"" }}</a></td>
|
|
||||||
<td>{{ bird.place }}</td>
|
<td>{{ bird.place }}</td>
|
||||||
<td>{{ bird.status }}</td>
|
<td>{{ bird.status }}</td>
|
||||||
<td>{{ bird.aviary|default_if_none:"" }}</td>
|
<td>{{ bird.aviary|default_if_none:"" }}</td>
|
||||||
|
@ -84,37 +80,5 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div class="modal fade" id="addPatientModal" tabindex="-1" data-bs-backdrop="static"
|
|
||||||
aria-labelledby="addRescuerModalLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header bg-primary">
|
|
||||||
<h5 class="modal-title text-white" id="addRescuerModalLabel">(neuen) Finder zuweisen</h5>
|
|
||||||
</div>
|
|
||||||
<form method="post">
|
|
||||||
{% csrf_token %}
|
|
||||||
<div class="modal-body">
|
|
||||||
<label for="rescuer" class="form-label mt-3">Wählen Sie einen <strong>bereits angelegten</strong>
|
|
||||||
Finder aus oder legen Sie einen <strong>neuen</strong> Finder an:</label>
|
|
||||||
<select id="rescuer" class="form-select" name="rescuer_id">
|
|
||||||
<option value="new_rescuer"><strong>neuen
|
|
||||||
Finder anlegen</strong></option>
|
|
||||||
{% for rescuer in rescuer_modal %}
|
|
||||||
<option value={{rescuer.id}}>
|
|
||||||
{{rescuer.last_name}}, {{rescuer.first_name}},
|
|
||||||
{{rescuer.street}} {{rescuer.street_number}},
|
|
||||||
{{rescuer.city}}
|
|
||||||
</option>
|
|
||||||
{% endfor %}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-danger" data-bs-dismiss="modal">Abbrechen</button>
|
|
||||||
<button class="btn btn-primary" type="submit">Übernehmen und weiter</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
</form>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|
|
@ -3,15 +3,14 @@
|
||||||
{% load crispy_forms_tags %}
|
{% load crispy_forms_tags %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<h3>Patient anlegen</h3>
|
<h3>Einen Patienten anlegen</h3>
|
||||||
<p>(Retter: {{rescuer.first_name}} {{rescuer.last_name}})</p>
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-8 mb-3">
|
<div class="col-lg-8 mb-3">
|
||||||
<form method="post" enctype="multipart/form-data">
|
<form method="post" enctype="multipart/form-data">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form|crispy }}
|
{{ form|crispy }}
|
||||||
<a href="{% url 'bird_all' %}" class="btn btn-success">Abbrechen</a>
|
<a href="{% url 'bird_all' %}" class="btn btn-success">Abbrechen</a>
|
||||||
<button class="btn btn-primary" type="submit">Patient anlegen</button>
|
<button class="btn btn-primary" type="submit">Speichern</button>
|
||||||
<div class="mt-3"><small>* Pflichtfeld</small></div>
|
<div class="mt-3"><small>* Pflichtfeld</small></div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -52,7 +52,6 @@
|
||||||
<th>Patienten Alias</th>
|
<th>Patienten Alias</th>
|
||||||
<th>Vogel</th>
|
<th>Vogel</th>
|
||||||
<th>gefunden am</th>
|
<th>gefunden am</th>
|
||||||
<th>Finder</th>
|
|
||||||
<th>Fundort</th>
|
<th>Fundort</th>
|
||||||
<th>Status</th>
|
<th>Status</th>
|
||||||
<th>Kosten</th>
|
<th>Kosten</th>
|
||||||
|
@ -66,9 +65,6 @@
|
||||||
<td><a href="{% url 'bird_single' bird.id %}">{{ bird.bird_identifier }}</a></td>
|
<td><a href="{% url 'bird_single' bird.id %}">{{ bird.bird_identifier }}</a></td>
|
||||||
<td>{{ bird.bird }}</td>
|
<td>{{ bird.bird }}</td>
|
||||||
<td data-order="{{ forloop.counter }}">{{ bird.date_found }}</td>
|
<td data-order="{{ forloop.counter }}">{{ bird.date_found }}</td>
|
||||||
<td>
|
|
||||||
<a href="{% url 'rescuer_single' bird.rescuer_id %}">{{ bird.rescuer|default_if_none:"" }}</a>
|
|
||||||
</td>
|
|
||||||
<td>{{ bird.place }}</td>
|
<td>{{ bird.place }}</td>
|
||||||
<td>{{ bird.status }}</td>
|
<td>{{ bird.status }}</td>
|
||||||
<td>{{ bird.total_costs|default_if_none:"0,00" }} €</td>
|
<td>{{ bird.total_costs|default_if_none:"0,00" }} €</td>
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<h3>Patient <strong>{{ bird.bird_identifier }}</strong> bearbeiten </h3>
|
<h3>Patient <strong>{{ bird.bird_identifier }}</strong> bearbeiten </h3>
|
||||||
<p>Finder des Patienten: <strong> <a href="{% url 'rescuer_single' bird.rescuer_id %}">{{ bird.rescuer|default_if_none:"" }}</a></strong>.
|
|
||||||
Das Alter des Patienten bei Fund wurde mit <strong>{{ bird.age }}</strong> angegeben.</p>
|
Das Alter des Patienten bei Fund wurde mit <strong>{{ bird.age }}</strong> angegeben.</p>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-6 mb-3">
|
<div class="col-lg-6 mb-3">
|
||||||
|
|
|
@ -5,23 +5,17 @@ from django.shortcuts import HttpResponse, redirect, render
|
||||||
|
|
||||||
from .forms import BirdAddForm, BirdEditForm
|
from .forms import BirdAddForm, BirdEditForm
|
||||||
from .models import Bird, FallenBird
|
from .models import Bird, FallenBird
|
||||||
from rescuer.models import Rescuer
|
|
||||||
|
|
||||||
|
|
||||||
@login_required(login_url="account_login")
|
@login_required(login_url="account_login")
|
||||||
def bird_create(request):
|
def bird_create(request):
|
||||||
form = BirdAddForm(initial={"bird_identifier": names.get_first_name()})
|
form = BirdAddForm(initial={"bird_identifier": names.get_first_name()})
|
||||||
# Rescuer for modal usage
|
rescuer_id = None
|
||||||
rescuer_id = request.session.get("rescuer_id")
|
|
||||||
rescuer = Rescuer.objects.get(id=rescuer_id)
|
|
||||||
|
|
||||||
# Just show only related rescuers in select field of the form.
|
# Just show only related rescuers in select field of the form.
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
form = BirdAddForm(request.POST or None, request.FILES or None)
|
form = BirdAddForm(request.POST or None, request.FILES or None)
|
||||||
|
rescuer_id = None
|
||||||
# circumstances = Circumstance.objects.all()
|
|
||||||
rescuer_id = request.session.get("rescuer_id")
|
|
||||||
rescuer = Rescuer.objects.get(id=rescuer_id)
|
|
||||||
|
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
fs = form.save(commit=False)
|
fs = form.save(commit=False)
|
||||||
|
@ -30,7 +24,7 @@ def bird_create(request):
|
||||||
fs.save()
|
fs.save()
|
||||||
request.session["rescuer_id"] = None
|
request.session["rescuer_id"] = None
|
||||||
return redirect("bird_all")
|
return redirect("bird_all")
|
||||||
context = {"form": form, "rescuer": rescuer}
|
context = {"form": form}
|
||||||
return render(request, "bird/bird_create.html", context)
|
return render(request, "bird/bird_create.html", context)
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,16 +49,7 @@ def bird_all(request):
|
||||||
.annotate(total_costs=Sum("costs__costs"))
|
.annotate(total_costs=Sum("costs__costs"))
|
||||||
.order_by("date_found")
|
.order_by("date_found")
|
||||||
)
|
)
|
||||||
rescuer_modal = Rescuer.objects.all()
|
context = {"birds": birds}
|
||||||
context = {"birds": birds, "rescuer_modal": rescuer_modal}
|
|
||||||
# Post came from the modal form.
|
|
||||||
if request.method == "POST":
|
|
||||||
rescuer_id = request._post["rescuer_id"]
|
|
||||||
if rescuer_id != "new_rescuer":
|
|
||||||
request.session["rescuer_id"] = rescuer_id
|
|
||||||
return redirect("bird_create")
|
|
||||||
else:
|
|
||||||
return redirect("rescuer_create")
|
|
||||||
return render(request, "bird/bird_all.html", context)
|
return render(request, "bird/bird_all.html", context)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,6 @@ JAZZMIN_SETTINGS = {
|
||||||
"aviary.Aviary",
|
"aviary.Aviary",
|
||||||
"bird.FallenBird",
|
"bird.FallenBird",
|
||||||
"bird.User",
|
"bird.User",
|
||||||
"rescuer.Rescuer",
|
|
||||||
],
|
],
|
||||||
# Field name on user model that contains avatar ImageField/URLField/Charfield or a callable that receives the user
|
# Field name on user model that contains avatar ImageField/URLField/Charfield or a callable that receives the user
|
||||||
# "user_avatar": None,
|
# "user_avatar": None,
|
||||||
|
@ -87,7 +86,7 @@ JAZZMIN_SETTINGS = {
|
||||||
"bird.Circumstance": "fas fa-solid fa-ring",
|
"bird.Circumstance": "fas fa-solid fa-ring",
|
||||||
"bird.FallenBird": "fas fa-solid fa-bed",
|
"bird.FallenBird": "fas fa-solid fa-bed",
|
||||||
"costs.Costs": "fas fa-solid fa-money-bill",
|
"costs.Costs": "fas fa-solid fa-money-bill",
|
||||||
"rescuer.Rescuer": "fas fa-solid fa-user-shield",
|
# "rescuer.Rescuer": "fas fa-solid fa-user-shield",
|
||||||
"socialaccount.socialaccount": "fas fa-solid fa-lock",
|
"socialaccount.socialaccount": "fas fa-solid fa-lock",
|
||||||
"socialaccount.socialapp": "fas fa-solid fa-laptop",
|
"socialaccount.socialapp": "fas fa-solid fa-laptop",
|
||||||
"socialaccount.socialtoken": "fas fa-solid fa-keyboard",
|
"socialaccount.socialtoken": "fas fa-solid fa-keyboard",
|
||||||
|
|
|
@ -74,7 +74,7 @@ INSTALLED_APPS = [
|
||||||
"bird",
|
"bird",
|
||||||
"costs",
|
"costs",
|
||||||
"export",
|
"export",
|
||||||
"rescuer",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
|
|
@ -9,7 +9,6 @@ urlpatterns = [
|
||||||
path("bird/", include("bird.urls")),
|
path("bird/", include("bird.urls")),
|
||||||
path("costs/", include("costs.urls")),
|
path("costs/", include("costs.urls")),
|
||||||
path("export/", include("export.urls")),
|
path("export/", include("export.urls")),
|
||||||
path("rescuer/", include("rescuer.urls")),
|
|
||||||
# Admin
|
# Admin
|
||||||
path("admin/", admin.site.urls),
|
path("admin/", admin.site.urls),
|
||||||
# Allauth
|
# Allauth
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Generated by Django 4.2.5 on 2023-09-17 21:04
|
# Generated by Django 4.2.6 on 2023-10-09 21:31
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
|
@ -48,7 +48,6 @@ def export_birds(request):
|
||||||
"updated",
|
"updated",
|
||||||
"find_circumstances__description",
|
"find_circumstances__description",
|
||||||
"diagnostic_finding",
|
"diagnostic_finding",
|
||||||
"rescuer__last_name",
|
|
||||||
"user__username",
|
"user__username",
|
||||||
"status__description",
|
"status__description",
|
||||||
"aviary__description",
|
"aviary__description",
|
||||||
|
@ -69,7 +68,6 @@ def export_birds(request):
|
||||||
"Pateient aktualisiert am",
|
"Pateient aktualisiert am",
|
||||||
"Fundumstände",
|
"Fundumstände",
|
||||||
"Diagnose bei Fund",
|
"Diagnose bei Fund",
|
||||||
"Finder (Nachname)",
|
|
||||||
"Benutzer",
|
"Benutzer",
|
||||||
"Status",
|
"Status",
|
||||||
"Voliere",
|
"Voliere",
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
from django.contrib import admin
|
|
||||||
from .models import Rescuer
|
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Rescuer)
|
|
||||||
class CustomerAdmin(admin.ModelAdmin):
|
|
||||||
list_display = [
|
|
||||||
"last_name",
|
|
||||||
"first_name",
|
|
||||||
"street",
|
|
||||||
"street_number",
|
|
||||||
"city",
|
|
||||||
"phone",
|
|
||||||
"user",
|
|
||||||
]
|
|
|
@ -1,8 +0,0 @@
|
||||||
from django.apps import AppConfig
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
|
|
||||||
|
|
||||||
class RescuerConfig(AppConfig):
|
|
||||||
default_auto_field = "django.db.models.BigAutoField"
|
|
||||||
name = "rescuer"
|
|
||||||
verbose_name = _("Finder")
|
|
|
@ -1,31 +0,0 @@
|
||||||
from django import forms
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
|
|
||||||
from .models import Rescuer
|
|
||||||
|
|
||||||
|
|
||||||
class DateInput(forms.DateInput):
|
|
||||||
input_type = "date"
|
|
||||||
|
|
||||||
|
|
||||||
class RescuerForm(forms.ModelForm):
|
|
||||||
class Meta:
|
|
||||||
model = Rescuer
|
|
||||||
fields = [
|
|
||||||
"first_name",
|
|
||||||
"last_name",
|
|
||||||
"street",
|
|
||||||
"street_number",
|
|
||||||
"zip_code",
|
|
||||||
"city",
|
|
||||||
"phone",
|
|
||||||
]
|
|
||||||
labels = {
|
|
||||||
"first_name": _("Vorname"),
|
|
||||||
"last_name": _("Nachname"),
|
|
||||||
"street": _("Straße"),
|
|
||||||
"street_number": _("Hausnummer"),
|
|
||||||
"zip_code": _("Postleitzahl"),
|
|
||||||
"city": _("Stadt"),
|
|
||||||
"phone": _("Telefon"),
|
|
||||||
}
|
|
|
@ -1,59 +0,0 @@
|
||||||
# Generated by Django 4.2.3 on 2023-07-28 14:09
|
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
import uuid
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
initial = True
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name="Rescuer",
|
|
||||||
fields=[
|
|
||||||
(
|
|
||||||
"id",
|
|
||||||
models.UUIDField(
|
|
||||||
default=uuid.uuid4,
|
|
||||||
editable=False,
|
|
||||||
primary_key=True,
|
|
||||||
serialize=False,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"first_name",
|
|
||||||
models.CharField(max_length=200, verbose_name="Vorname"),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"last_name",
|
|
||||||
models.CharField(max_length=200, verbose_name="Nachname"),
|
|
||||||
),
|
|
||||||
("street", models.CharField(max_length=200, verbose_name="Straße")),
|
|
||||||
(
|
|
||||||
"street_number",
|
|
||||||
models.CharField(max_length=20, verbose_name="Nummer"),
|
|
||||||
),
|
|
||||||
("city", models.CharField(max_length=200, verbose_name="Stadt")),
|
|
||||||
("zip_code", models.CharField(max_length=200, verbose_name="PLZ")),
|
|
||||||
("phone", models.CharField(max_length=200, verbose_name="Telefon")),
|
|
||||||
(
|
|
||||||
"user",
|
|
||||||
models.ForeignKey(
|
|
||||||
on_delete=django.db.models.deletion.CASCADE,
|
|
||||||
to=settings.AUTH_USER_MODEL,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
"verbose_name": "Finder",
|
|
||||||
"verbose_name_plural": "Finder",
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,17 +0,0 @@
|
||||||
# Generated by Django 4.2.4 on 2023-08-12 12:57
|
|
||||||
|
|
||||||
from django.db import migrations
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('rescuer', '0001_initial'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterModelOptions(
|
|
||||||
name='rescuer',
|
|
||||||
options={'ordering': ['last_name'], 'verbose_name': 'Finder', 'verbose_name_plural': 'Finder'},
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,26 +0,0 @@
|
||||||
from datetime import date
|
|
||||||
from uuid import uuid4
|
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.db import models
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
|
|
||||||
|
|
||||||
class Rescuer(models.Model):
|
|
||||||
id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
|
|
||||||
first_name = models.CharField(max_length=200, verbose_name=_("Vorname"))
|
|
||||||
last_name = models.CharField(max_length=200, verbose_name=_("Nachname"))
|
|
||||||
street = models.CharField(max_length=200, verbose_name=_("Straße"))
|
|
||||||
street_number = models.CharField(max_length=20, verbose_name=_("Nummer"))
|
|
||||||
city = models.CharField(max_length=200, verbose_name=_("Stadt"))
|
|
||||||
zip_code = models.CharField(max_length=200, verbose_name=_("PLZ"))
|
|
||||||
phone = models.CharField(max_length=200, verbose_name=_("Telefon"))
|
|
||||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
verbose_name = _("Finder")
|
|
||||||
verbose_name_plural = _("Finder")
|
|
||||||
ordering = ["last_name"]
|
|
||||||
|
|
||||||
def __str__(self) -> str:
|
|
||||||
return self.first_name + " " + self.last_name
|
|
|
@ -1,79 +0,0 @@
|
||||||
{% extends "base.html" %}
|
|
||||||
{% load static %}
|
|
||||||
{% block header %}
|
|
||||||
<!-- Datatable CSS -->
|
|
||||||
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.4/css/dataTables.bootstrap5.min.css"/>
|
|
||||||
<link rel="stylesheet" href="https://cdn.datatables.net/responsive/2.2.9/css/responsive.bootstrap5.min.css">
|
|
||||||
|
|
||||||
<!-- jQuery -->
|
|
||||||
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
|
|
||||||
|
|
||||||
<!-- Datatable jQuery -->
|
|
||||||
<script src="https://cdn.datatables.net/1.11.3/js/jquery.dataTables.min.js"></script>
|
|
||||||
<script src="https://cdn.datatables.net/1.11.3/js/dataTables.bootstrap5.min.js"></script>
|
|
||||||
<script src="https://cdn.datatables.net/responsive/2.2.9/js/dataTables.responsive.min.js"></script>
|
|
||||||
<script src="https://cdn.datatables.net/responsive/2.2.9/js/responsive.bootstrap5.min.js"></script>
|
|
||||||
|
|
||||||
<script nonce="{{request.csp_nonce}}">
|
|
||||||
$(document).ready(function () {
|
|
||||||
let table = $('#t__rescuer_all').DataTable({
|
|
||||||
language: {
|
|
||||||
url: 'https://cdn.datatables.net/plug-ins/1.11.3/i18n/de_de.json',
|
|
||||||
},
|
|
||||||
paging: true,
|
|
||||||
info: true,
|
|
||||||
"pagingType": "first_last_numbers",
|
|
||||||
responsive: true,
|
|
||||||
scrollX: true,
|
|
||||||
columnDefs: [
|
|
||||||
{ responsivePriority: 1, targets: 0 },
|
|
||||||
]
|
|
||||||
});
|
|
||||||
table.on( 'responsive-display', function ( e, datatable, row, showHide, update ) {
|
|
||||||
table.rows().every( function () {
|
|
||||||
if (showHide && row.index() !== this.index() && this.child.isShown()) {
|
|
||||||
$('td', this.node()).eq(0).click();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
{% endblock header %}
|
|
||||||
{% block content %}
|
|
||||||
<h3>Übersicht aller Finder</h3>
|
|
||||||
<p>
|
|
||||||
Die Übersicht aller aktiven Finder.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<a href="{% url 'rescuer_create' %}" class="btn btn-primary">Einen neuen Finder anlegen</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<table class="table table-striped table-hover display responsive nowrap" width="100%" id="t__rescuer_all">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Nachname</th>
|
|
||||||
<th>Vorname</th>
|
|
||||||
<th>Straße</th>
|
|
||||||
<th>PLZ</th>
|
|
||||||
<th>Ort</th>
|
|
||||||
<th>Phone</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for rescuer in rescuers %}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<a href="{% url 'rescuer_single' rescuer.id %}">{{ rescuer.last_name }}</a>
|
|
||||||
</td>
|
|
||||||
<td>{{ rescuer.first_name }}</td>
|
|
||||||
<td>{{ rescuer.street }} {{ rescuer.street_number }}</td>
|
|
||||||
<td>{{ rescuer.zip_code }}</td>
|
|
||||||
<td>{{ rescuer.city }}</td>
|
|
||||||
<td>{{ rescuer.phone }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
{% endblock content %}
|
|
|
@ -1,40 +0,0 @@
|
||||||
{% extends 'base.html' %}
|
|
||||||
{% load crispy_forms_tags %}
|
|
||||||
{% block content %}
|
|
||||||
<h4>Einen neuen Finder anlegen</h4>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-6">
|
|
||||||
<form method="post" class="form-horizontal">
|
|
||||||
{% csrf_token %}
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12 col-lg-6">{{ form.first_name|as_crispy_field }}</div>
|
|
||||||
<div class="col-md-12 col-lg-6">{{ form.last_name|as_crispy_field }}</div>
|
|
||||||
<div class="col-md-12 col-lg-8">{{ form.street|as_crispy_field }}</div>
|
|
||||||
<div class="col-md-12 col-lg-4">{{ form.street_number|as_crispy_field }}</div>
|
|
||||||
<div class="col-md-12 col-lg-8">{{ form.city|as_crispy_field }}</div>
|
|
||||||
<div class="col-md-12 col-lg-4">{{ form.zip_code|as_crispy_field }}</div>
|
|
||||||
<div class="col-md-12 col-lg-6">{{ form.phone|as_crispy_field }}</div>
|
|
||||||
</div>
|
|
||||||
<a href="{% url 'bird_all' %}" class="btn btn-danger">Abbrechen</a>
|
|
||||||
<button class="btn btn-primary" type="submit">Speichern</button>
|
|
||||||
</form>
|
|
||||||
<div class="mt-3"><small>* Pflichtfeld</small></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-lg-4">
|
|
||||||
<br />
|
|
||||||
<h4>Finder</h4>
|
|
||||||
<p>
|
|
||||||
Bitte alle Kontaktinformationen zum Finder notieren. Sollte es
|
|
||||||
Nachfragen für die Auswilderung oder Nachweispflichten gegenüber
|
|
||||||
der Naturschutzbehörde geben, werden diese Informationen benötigt.
|
|
||||||
</p>
|
|
||||||
<h4>Speicherung</h4>
|
|
||||||
<p>
|
|
||||||
Alle personenbezogenen Daten werden fünf Jahre gespeichert und
|
|
||||||
danach automatisch gelöscht.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock content %}
|
|
|
@ -1,25 +0,0 @@
|
||||||
{% extends 'base.html' %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<h1>Finder löschen</h1>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="col-lg-7">
|
|
||||||
<form method="post">
|
|
||||||
{% csrf_token %}
|
|
||||||
<div class="alert alert-dismissible alert-danger">
|
|
||||||
<h4 class="alert-heading">Warnung!</h4>
|
|
||||||
<p class="mb-0">Wollen Sie den Finder <strong>{{rescuer.first_name}} {{rescuer.last_name}}</strong> löschen?</p>
|
|
||||||
</div>
|
|
||||||
</p>
|
|
||||||
<a href="{% url 'rescuer_all'%}" class="btn btn-secondary">Abbrechen</a>
|
|
||||||
<button class="btn btn-danger" type="submit">Löschen</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-5">
|
|
||||||
<h5>Finder löschen</h5>
|
|
||||||
<p>
|
|
||||||
Finder dürfen nur in vorheriger Absprache mit dem Fachgruppenleiter und dem Admin gelöscht werden.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock content %}
|
|
|
@ -1,32 +0,0 @@
|
||||||
{% extends 'base.html' %}
|
|
||||||
{% load crispy_forms_tags %}
|
|
||||||
{% block content %}
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-7">
|
|
||||||
<h3>Adressänderung des Finders</h3>
|
|
||||||
<form method="post" class="form-horizontal">
|
|
||||||
<fieldset>
|
|
||||||
{% csrf_token %}
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-6">{{ form.first_name|as_crispy_field }}</div>
|
|
||||||
<div class="col-6">{{ form.last_name|as_crispy_field }}</div>
|
|
||||||
<div class="col-8">{{ form.street|as_crispy_field }}</div>
|
|
||||||
<div class="col-4">{{ form.street_number|as_crispy_field }}</div>
|
|
||||||
<div class="col-8">{{ form.city|as_crispy_field }}</div>
|
|
||||||
<div class="col-4">{{ form.zip_code|as_crispy_field }}</div>
|
|
||||||
<div class="col-6">{{ form.phone|as_crispy_field }}</div>
|
|
||||||
</div>
|
|
||||||
<a href="{% url 'rescuer_all' %}" class="btn btn-secondary">Abbrechen</a>
|
|
||||||
<button class="btn btn-primary" type="submit">Speichern</button>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-5">
|
|
||||||
<h4>Finder</h4>
|
|
||||||
<p>
|
|
||||||
Bitte alle Kontaktinformationen zum Finder notieren. Sollte es Nachfragen für die Auswilderung oder Nachweispflichten gegenüber der Naturschutzbehörde geben, werden diese Informationen benötigt.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock content %}
|
|
|
@ -1,51 +0,0 @@
|
||||||
{% extends 'base.html' %}
|
|
||||||
{% load static %}
|
|
||||||
{% load crispy_forms_tags %}
|
|
||||||
{% block content %}
|
|
||||||
|
|
||||||
<h3>Stammdaten des Finders</h3>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-6 mt-3 mb-3">
|
|
||||||
<div class="card bg-light mb-3" style="max-width: 32rem;">
|
|
||||||
<div class="card-header">Adressdaten des Finders</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<h4 class="card-title">{{rescuer.first_name}} {{rescuer.last_name}}</h4>
|
|
||||||
<p class="card-text">
|
|
||||||
<strong>Straße:</strong> {{rescuer.street}} {{rescuer.street_number}}<br>
|
|
||||||
<strong>Stadt:</strong> {{rescuer.city}}<br>
|
|
||||||
<strong>PLZ:</strong> {{rescuer.zip_code}}<br>
|
|
||||||
<strong>Phone:</strong> {{rescuer.phone}}<br>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<a href="{% url 'rescuer_all' %}" class="btn btn-success">Abbrechen</a>
|
|
||||||
<a href="{% url 'rescuer_delete' rescuer.id %}" class="btn btn-danger">Löschen</a>
|
|
||||||
<a href="{% url 'rescuer_edit' rescuer.id %}" class="btn btn-primary">Bearbeiten</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-lg-4">
|
|
||||||
<h4>
|
|
||||||
Patienten des Finders
|
|
||||||
</h4>
|
|
||||||
<p>Hier finden Sie die Patienten, die der Finder zur Auffangstation gebracht hat.</p>
|
|
||||||
<p>
|
|
||||||
{% for bird in birds %}
|
|
||||||
<div class="card bg-light mb-3" style="max-width: 30rem;">
|
|
||||||
<div class="card-header"><h5 class="card-title">Patient: {{bird.bird_identifier}}</h5></div>
|
|
||||||
<div class="card-body">
|
|
||||||
<p class="card-text">
|
|
||||||
<strong>Vogel:</strong> {{bird.bird}}<br>
|
|
||||||
<strong>gefunden am:</strong> {{bird.created}}<br>
|
|
||||||
<strong>Statusänderung am:</strong> {{bird.updated}}<br>
|
|
||||||
<strong>Fundumstände:</strong> {{bird.find_circumstances}}<br>
|
|
||||||
<strong>Diagnose:</strong> {{bird.diagnostic_finding}}<br>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock content %}
|
|
|
@ -1,3 +0,0 @@
|
||||||
from django.test import TestCase
|
|
||||||
|
|
||||||
# Create your tests here.
|
|
|
@ -1,17 +0,0 @@
|
||||||
from django.urls import path
|
|
||||||
|
|
||||||
from .views import (
|
|
||||||
rescuer_all,
|
|
||||||
rescuer_create,
|
|
||||||
rescuer_single,
|
|
||||||
rescuer_delete,
|
|
||||||
rescuer_edit,
|
|
||||||
)
|
|
||||||
|
|
||||||
urlpatterns = [
|
|
||||||
path("all", rescuer_all, name="rescuer_all"),
|
|
||||||
path("create", rescuer_create, name="rescuer_create"),
|
|
||||||
path("edit/<id>", rescuer_edit, name="rescuer_edit"),
|
|
||||||
path("delete/<id>", rescuer_delete, name="rescuer_delete"),
|
|
||||||
path("<id>", rescuer_single, name="rescuer_single"),
|
|
||||||
]
|
|
|
@ -1,64 +0,0 @@
|
||||||
from bird.models import FallenBird
|
|
||||||
from django.contrib.auth.decorators import login_required
|
|
||||||
from django.db.models import Q
|
|
||||||
from django.shortcuts import redirect, render
|
|
||||||
|
|
||||||
from .forms import RescuerForm
|
|
||||||
from .models import Rescuer
|
|
||||||
|
|
||||||
|
|
||||||
@login_required(login_url="account_login")
|
|
||||||
def rescuer_all(request):
|
|
||||||
rescuers = Rescuer.objects.all()
|
|
||||||
context = {"rescuers": rescuers}
|
|
||||||
return render(request, "rescuer/rescuer_all.html", context)
|
|
||||||
|
|
||||||
|
|
||||||
@login_required(login_url="account_login")
|
|
||||||
def rescuer_single(request, id):
|
|
||||||
rescuer = Rescuer.objects.get(id=id)
|
|
||||||
birds = FallenBird.objects.filter(rescuer=id).filter(Q(status="1") | Q(status="2"))
|
|
||||||
context = {"rescuer": rescuer, "birds": birds}
|
|
||||||
return render(request, "rescuer/rescuer_single.html", context)
|
|
||||||
|
|
||||||
|
|
||||||
@login_required(login_url="account_login")
|
|
||||||
def rescuer_create(request):
|
|
||||||
form = RescuerForm()
|
|
||||||
if request.method == "POST":
|
|
||||||
form = RescuerForm(request.POST or None)
|
|
||||||
if form.is_valid():
|
|
||||||
fs = form.save(commit=False)
|
|
||||||
fs.user = request.user
|
|
||||||
fs.save()
|
|
||||||
|
|
||||||
# set customer id in session cookie
|
|
||||||
# (uuid has to be cast to a string)
|
|
||||||
rescuer_id = str(fs.pk)
|
|
||||||
request.session["rescuer_id"] = rescuer_id
|
|
||||||
|
|
||||||
return redirect("bird_create")
|
|
||||||
context = {"form": form}
|
|
||||||
return render(request, "rescuer/rescuer_create.html", context)
|
|
||||||
|
|
||||||
|
|
||||||
@login_required(login_url="account_login")
|
|
||||||
def rescuer_delete(request, id):
|
|
||||||
rescuer = Rescuer.objects.get(id=id)
|
|
||||||
if request.method == "POST":
|
|
||||||
rescuer.delete()
|
|
||||||
return redirect("rescuer_all")
|
|
||||||
context = {"rescuer": rescuer}
|
|
||||||
return render(request, "rescuer/rescuer_delete.html", context)
|
|
||||||
|
|
||||||
|
|
||||||
@login_required(login_url="account_login")
|
|
||||||
def rescuer_edit(request, id):
|
|
||||||
rescuer = Rescuer.objects.get(id=id)
|
|
||||||
form = RescuerForm(request.POST or None, instance=rescuer)
|
|
||||||
if request.method == "POST":
|
|
||||||
if form.is_valid():
|
|
||||||
form.save()
|
|
||||||
return redirect("rescuer_all")
|
|
||||||
context = {"form": form}
|
|
||||||
return render(request, "rescuer/rescuer_edit.html", context)
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
<nav class="navbar navbar-expand-lg navbar-dark bg-primary sticky-top">
|
<nav class="navbar navbar-expand-lg navbar-dark bg-primary sticky-top">
|
||||||
<div class="container-lg">
|
<div class="container-lg">
|
||||||
<a class="navbar-brand" href="{% url 'index' %}">
|
<a class="navbar-brand" href="{% url 'bird_all' %}">
|
||||||
<img src="{% static 'img/favicon/l.png' %}" alt="logo" width="35" height="35" />
|
<img src="{% static 'img/favicon/l.png' %}" alt="logo" width="35" height="35" />
|
||||||
</a>
|
</a>
|
||||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarColor01"
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarColor01"
|
||||||
|
@ -21,8 +21,8 @@
|
||||||
href="{% url 'bird_all' %}">alle Patienten</a>
|
href="{% url 'bird_all' %}">alle Patienten</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link {% if '/rescuer/all' in request.path %} active {% endif %}"
|
<a class="nav-link {% if '/bird/create/' in request.path %} active {% endif %}"
|
||||||
href="{% url 'rescuer_all' %}">alle Finder</a>
|
href="{% url 'bird_create' %}">neuer Patient</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link {% if '/aviary/all' in request.path %} active {% endif %}"
|
<a class="nav-link {% if '/aviary/all' in request.path %} active {% endif %}"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue