appointments.html
| 1 | {{define "title"}}Termine{{end}} |
| 2 | {{define "content"}} |
| 3 | <h2>Termine</h2> |
| 4 | {{with .Error}}<p class="error" role="alert">{{.}}</p>{{end}} |
| 5 | <form method="get" action="/termine" class="row appt-filter"> |
| 6 | <input type="date" name="von" value="{{.From}}" aria-label="Ab Datum"> |
| 7 | <select name="behandler" aria-label="Behandler"> |
| 8 | <option value="0">Alle Behandler</option> |
| 9 | {{range .Therapists}}<option value="{{.ID}}"{{if eq .ID $.Therapist}} selected{{end}}>{{.Name}}{{if not .Active}} (inaktiv){{end}}</option>{{end}} |
| 10 | </select> |
| 11 | <button type="submit" class="secondary">Anzeigen</button> |
| 12 | </form> |
| 13 | <p class="appt-nav"> |
| 14 | <a href="/termine?von={{.Prev}}&behandler={{.Therapist}}">← früher</a> |
| 15 | <span class="muted">{{.Count}} Termin(e) bis {{day .To}}</span> |
| 16 | <a href="/termine?von={{.Next}}&behandler={{.Therapist}}">später →</a> |
| 17 | </p> |
| 18 | |
| 19 | {{range .Days}} |
| 20 | <article class="appt-day{{if .Today}} today{{end}}"> |
| 21 | <h4>{{.Label}}{{if .Today}} · heute{{end}}</h4> |
| 22 | {{range .Appts}} |
| 23 | <div class="appt{{if .Cancelled}} cancelled{{end}}"> |
| 24 | <span class="appt-time">{{hm .Start}}–{{hm .End}}</span> |
| 25 | <a href="/patient/{{.PatientID}}#termine"><strong>{{.PatientName}}</strong></a> |
| 26 | <span class="muted">{{.Title}}{{with .TherapistName}} · {{.}}{{end}}{{if .Cancelled}} · abgesagt{{end}}</span> |
| 27 | <span class="appt-actions"> |
| 28 | <a href="/termin/{{.ID}}" class="small-link">Bearbeiten</a> |
| 29 | <form method="post" action="/termin/{{.ID}}/absagen" class="inline"><input type="hidden" name="back" value="termine"> |
| 30 | <button type="submit" class="link small-link">{{if .Cancelled}}Wieder zusagen{{else}}Absagen{{end}}</button></form> |
| 31 | </span> |
| 32 | </div> |
| 33 | {{end}} |
| 34 | </article> |
| 35 | {{else}}<p class="muted">Keine Termine in diesem Zeitraum.</p>{{end}} |
| 36 | |
| 37 | <article> |
| 38 | <h3>Neuer Termin</h3> |
| 39 | {{if .Patients}} |
| 40 | <form method="post" action="/termine"> |
| 41 | <select name="patient" required aria-label="Patient"><option value="">Patient wählen …</option> |
| 42 | {{range .Patients}}<option value="{{.ID}}">{{.Name}}{{with .Dob}} ({{.}}){{end}}</option>{{end}} |
| 43 | </select> |
| 44 | {{template "apptfields" .}} |
| 45 | <button type="submit">Termin anlegen</button> |
| 46 | </form> |
| 47 | {{else}}<p class="muted">Zuerst einen <a href="/patienten">Patienten anlegen</a>.</p>{{end}} |
| 48 | </article> |
| 49 | |
| 50 | <article id="behandler"> |
| 51 | <h3>Behandler</h3> |
| 52 | {{range .Therapists}} |
| 53 | <form method="post" action="/behandler/{{.ID}}" class="row"> |
| 54 | <input name="name" value="{{.Name}}" required aria-label="Name"> |
| 55 | <label class="consent"><input type="checkbox" name="active" value="1"{{if .Active}} checked{{end}}> aktiv</label> |
| 56 | <button type="submit" class="secondary outline">Speichern</button> |
| 57 | </form> |
| 58 | {{else}}<p class="muted">Noch keine Behandler eingetragen.</p>{{end}} |
| 59 | <form method="post" action="/behandler" class="row"> |
| 60 | <input name="name" placeholder="Name, z. B. Anna Schmidt" required aria-label="Neuer Behandler"> |
| 61 | <button type="submit">+ Behandler</button> |
| 62 | </form> |
| 63 | <small class="muted">Inaktive Behandler bleiben an alten Terminen erhalten, stehen aber nicht mehr zur Auswahl.</small> |
| 64 | </article> |
| 65 | {{end}} |
| 66 | |
| 67 | {{define "apptfields"}} |
| 68 | <div class="appt-fields"> |
| 69 | <label>Datum <input type="date" name="date" value="{{.Today}}" required></label> |
| 70 | <label>Uhrzeit <input type="time" name="time" value="08:00" step="300" required></label> |
| 71 | <label>Dauer (Min.) <input type="number" name="duration" value="30" min="5" max="480" step="5"></label> |
| 72 | <label>Behandler |
| 73 | <select name="therapist"><option value="0">—</option> |
| 74 | {{range .Therapists}}{{if .Active}}<option value="{{.ID}}">{{.Name}}</option>{{end}}{{end}} |
| 75 | </select> |
| 76 | </label> |
| 77 | <label>Art <input name="title" value="Physiotherapie" list="dl-appttypes"></label> |
| 78 | <label>Ort <input name="location" placeholder="{{if .Address}}{{.Address}}{{else}}Praxis / Hausbesuch{{end}}"></label> |
| 79 | <label class="wide">Hinweis für den Patienten <input name="note" placeholder="z. B. Handtuch und bequeme Kleidung mitbringen"></label> |
| 80 | <label>Wiederholen <input type="number" name="repeat" value="1" min="1" max="40"></label> |
| 81 | <label>alle … Tage <input type="number" name="every" value="7" min="1" max="60"></label> |
| 82 | </div> |
| 83 | <datalist id="dl-appttypes"><option value="Physiotherapie"><option value="Krankengymnastik"><option value="Manuelle Therapie"><option value="Klassische Massage"><option value="Lymphdrainage"><option value="Befundaufnahme"><option value="Wiederbefund"><option value="Hausbesuch"></datalist> |
| 84 | {{end}} |
| 85 |