update deps and prepare server for final mail

This commit is contained in:
Federico Justus Denkena 2024-03-12 22:19:25 +01:00
parent c55718f3b7
commit 0239dab5bd
Signed by: f-denkena
GPG Key ID: 28F91C66EE36F382
27 changed files with 6349 additions and 5196 deletions

View File

@ -1,11 +1,13 @@
asgiref==3.7.2
Django==4.2.7
Django==5.0.3
django-prometheus==2.3.1
django-ranged-response==0.2.0
django-simple-captcha==0.5.20
Markdown==3.5.1
Pillow==10.1.0
psycopg==3.1.12
django-simple-captcha==0.6.0
Markdown==3.5.2
pillow==10.2.0
prometheus_client==0.20.0
psycopg==3.1.18
pymemcache==4.0.0
sqlparse==0.4.4
typing_extensions==4.8.0
typing_extensions==4.10.0
whitenoise==6.6.0

View File

@ -22,11 +22,11 @@ html[data-theme="light"],
--breadcrumbs-fg: #c4dce8;
--breadcrumbs-link-fg: var(--body-bg);
--breadcrumbs-bg: var(--primary);
--breadcrumbs-bg: #264b5d;
--link-fg: #417893;
--link-hover-color: #036;
--link-selected-fg: #5b80b2;
--link-selected-fg: var(--secondary);
--hairline-color: #e8e8e8;
--border-color: #ccc;
@ -42,10 +42,10 @@ html[data-theme="light"],
--selected-row: #ffc;
--button-fg: #fff;
--button-bg: var(--primary);
--button-hover-bg: #609ab6;
--default-button-bg: var(--secondary);
--default-button-hover-bg: #205067;
--button-bg: var(--secondary);
--button-hover-bg: #205067;
--default-button-bg: #205067;
--default-button-hover-bg: var(--secondary);
--close-button-bg: #747474;
--close-button-hover-bg: #333;
--delete-button-bg: #ba2121;
@ -56,8 +56,6 @@ html[data-theme="light"],
--object-tools-hover-bg: var(--close-button-hover-bg);
--font-family-primary:
-apple-system,
BlinkMacSystemFont,
"Segoe UI",
system-ui,
Roboto,
@ -586,7 +584,7 @@ input[type=button][disabled].default {
font-weight: 400;
font-size: 0.8125rem;
text-align: left;
background: var(--primary);
background: var(--header-bg);
color: var(--header-link-color);
}
@ -722,6 +720,11 @@ div.breadcrumbs a:focus, div.breadcrumbs a:hover {
background: url(../img/icon-viewlink.svg) 0 1px no-repeat;
}
.hidelink {
padding-left: 16px;
background: url(../img/icon-hidelink.svg) 0 1px no-repeat;
}
.addlink {
padding-left: 16px;
background: url(../img/icon-addlink.svg) 0 1px no-repeat;
@ -831,10 +834,6 @@ a.deletelink:focus, a.deletelink:hover {
height: 100%;
}
#container > div {
flex-shrink: 0;
}
#container > .main {
display: flex;
flex: 1 0 auto;
@ -919,7 +918,6 @@ a.deletelink:focus, a.deletelink:hover {
padding: 10px 40px;
background: var(--header-bg);
color: var(--header-color);
overflow: hidden;
}
#header a:link, #header a:visited, #logout-form button {
@ -934,7 +932,7 @@ a.deletelink:focus, a.deletelink:hover {
display: flex;
}
#branding h1 {
#site-name {
padding: 0;
margin: 0;
margin-inline-end: 20px;
@ -943,7 +941,7 @@ a.deletelink:focus, a.deletelink:hover {
color: var(--header-branding-color);
}
#branding h1 a:link, #branding h1 a:visited {
#site-name a:link, #site-name a:visited {
color: var(--accent);
}
@ -1090,6 +1088,9 @@ a.deletelink:focus, a.deletelink:hover {
/* PAGINATOR */
.paginator {
display: flex;
align-items: center;
gap: 4px;
font-size: 0.8125rem;
padding-top: 10px;
padding-bottom: 10px;
@ -1133,6 +1134,23 @@ a.deletelink:focus, a.deletelink:hover {
background: var(--link-hover-color);
}
.paginator input {
margin-left: auto;
}
.base-svgs {
display: none;
}
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
overflow: hidden;
clip: rect(0,0,0,0);
white-space: nowrap;
border: 0;
color: var(--body-fg);
background-color: var(--body-bg);
}

View File

@ -153,6 +153,7 @@
font-weight: 400;
padding: 0 15px;
margin-bottom: 10px;
cursor: pointer;
}
#changelist-filter details summary > * {
@ -215,9 +216,9 @@
color: var(--link-hover-color);
}
#changelist-filter #changelist-filter-clear a {
#changelist-filter #changelist-filter-extra-actions {
font-size: 0.8125rem;
padding-bottom: 10px;
margin-bottom: 10px;
border-bottom: 1px solid var(--hairline-color);
}
@ -265,6 +266,15 @@
background-color: var(--selected-row);
}
@media (forced-colors: active) {
#changelist tbody tr.selected {
background-color: SelectedItem;
}
#changelist tbody tr:has(.action-select:checked) {
background-color: SelectedItem;
}
}
#changelist .actions {
padding: 10px;
background: var(--body-bg);

View File

@ -122,16 +122,3 @@ html[data-theme="dark"] .theme-toggle svg.theme-icon-when-dark {
html[data-theme="light"] .theme-toggle svg.theme-icon-when-light {
display: block;
}
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
overflow: hidden;
clip: rect(0,0,0,0);
white-space: nowrap;
border: 0;
color: var(--body-fg);
background-color: var(--body-bg);
}

View File

@ -24,6 +24,9 @@ form .form-row p {
.flex-container {
display: flex;
}
.form-multiline {
flex-wrap: wrap;
}
@ -78,6 +81,7 @@ form ul.inline li {
.aligned label {
display: block;
padding: 4px 10px 0 0;
min-width: 160px;
width: 160px;
word-wrap: break-word;
line-height: 1;

View File

@ -102,6 +102,12 @@
background: var(--selected-row);
}
@media (forced-colors: active) {
#nav-sidebar .current-model {
background-color: SelectedItem;
}
}
.main > #nav-sidebar + .content {
max-width: calc(100% - 23px);
}

View File

@ -43,7 +43,7 @@ input[type="submit"], button {
justify-content: flex-start;
}
#branding h1 {
#site-name {
margin: 0 0 8px;
line-height: 1.2;
}
@ -237,22 +237,6 @@ input[type="submit"], button {
padding: 7px;
}
/* Related widget */
.related-widget-wrapper {
float: none;
}
.related-widget-wrapper-link + .selector {
max-width: calc(100% - 30px);
margin-right: 15px;
}
select + .related-widget-wrapper-link,
.related-widget-wrapper-link + .related-widget-wrapper-link {
margin-left: 10px;
}
/* Selector */
.selector {
@ -270,7 +254,7 @@ input[type="submit"], button {
}
.selector .selector-filter input {
width: auto;
width: 100%;
min-height: 0;
flex: 1 1;
}
@ -292,7 +276,6 @@ input[type="submit"], button {
width: 26px;
height: 52px;
padding: 2px 0;
margin: auto 15px;
border-radius: 20px;
transform: translateY(-10px);
}
@ -336,7 +319,6 @@ input[type="submit"], button {
width: 52px;
height: 26px;
padding: 0 2px;
margin: 15px auto;
transform: none;
}
@ -432,7 +414,7 @@ input[type="submit"], button {
padding: 15px 20px;
}
.login #branding h1 {
.login #site-name {
margin: 0;
}
@ -565,6 +547,10 @@ input[type="submit"], button {
flex-flow: column;
}
.flex-container.checkbox-row {
flex-flow: row;
}
textarea {
max-width: none;
}
@ -584,6 +570,7 @@ input[type="submit"], button {
.aligned label {
width: 100%;
min-width: auto;
padding: 0 0 10px;
}
@ -598,10 +585,6 @@ input[type="submit"], button {
max-width: 100%;
}
.aligned .checkbox-row {
align-items: center;
}
.aligned .checkbox-row input {
flex: 0 1 auto;
margin: 0;
@ -683,23 +666,14 @@ input[type="submit"], button {
align-self: center;
}
select + .related-widget-wrapper-link,
.related-widget-wrapper-link + .related-widget-wrapper-link {
margin-left: 15px;
}
/* Selector */
.selector {
flex-direction: column;
}
.selector > * {
float: none;
gap: 10px 0;
}
.selector-available, .selector-chosen {
margin-bottom: 0;
flex: 1 1 auto;
}
@ -709,11 +683,9 @@ input[type="submit"], button {
.selector ul.selector-chooser {
display: block;
float: none;
width: 52px;
height: 26px;
padding: 0 2px;
margin: 15px auto 20px;
transform: none;
}

View File

@ -78,4 +78,7 @@
margin-left: 0;
margin-right: 0;
}
[dir="rtl"] .aligned .vCheckboxLabel {
padding: 1px 5px 0 0;
}
}

View File

@ -13,7 +13,7 @@ th {
margin-right: 1.5em;
}
.viewlink, .addlink, .changelink {
.viewlink, .addlink, .changelink, .hidelink {
padding-left: 0;
padding-right: 16px;
background-position: 100% 1px;
@ -107,6 +107,16 @@ thead th.sorted .text {
border-left: none;
}
.paginator .end {
margin-left: 6px;
margin-right: 0;
}
.paginator input {
margin-left: 0;
margin-right: auto;
}
/* FORMS */
.aligned label {
@ -286,3 +296,7 @@ form .form-row p.datetime {
margin-left: inherit;
margin-right: 2px;
}
.selector .selector-chooser {
margin: 0;
}

View File

@ -1,23 +1,23 @@
/* SELECTOR (FILTER INTERFACE) */
.selector {
width: 800px;
float: left;
display: flex;
flex-grow: 1;
gap: 0 10px;
}
.selector select {
width: 380px;
height: 17.2em;
flex: 1 0 auto;
overflow: scroll;
width: 100%;
}
.selector-available, .selector-chosen {
width: 380px;
text-align: center;
margin-bottom: 5px;
display: flex;
flex-direction: column;
flex: 1 1;
}
.selector-available h2, .selector-chosen h2 {
@ -41,7 +41,7 @@
}
.selector-chosen h2 {
background: var(--primary);
background: var(--secondary);
color: var(--header-link-color);
}
@ -58,6 +58,7 @@
font-size: 0.625rem;
margin: 0;
text-align: left;
display: flex;
}
.selector .selector-filter label,
@ -69,11 +70,15 @@
padding: 0;
overflow: hidden;
line-height: 1;
min-width: auto;
}
.selector-filter input {
flex-grow: 1;
}
.selector .selector-available input,
.selector .selector-chosen input {
width: 320px;
margin-left: 8px;
}
@ -82,7 +87,7 @@
width: 22px;
background-color: var(--selected-bg);
border-radius: 10px;
margin: 0 5px;
margin: 0;
padding: 0;
transform: translateY(-17px);
}
@ -146,7 +151,7 @@ a.selector-chooseall, a.selector-clearall {
display: inline-block;
height: 16px;
text-align: left;
margin: 1px auto 3px;
margin: 0 auto;
overflow: hidden;
font-weight: bold;
line-height: 16px;
@ -446,7 +451,7 @@ span.clearable-file-input label {
}
.calendar td.selected a {
background: var(--primary);
background: var(--secondary);
color: var(--button-fg);
}
@ -533,17 +538,17 @@ span.clearable-file-input label {
margin: 0;
padding: 4px 0;
font-size: 0.75rem;
background: #eee;
background: var(--close-button-bg);
border-top: 1px solid var(--border-color);
color: var(--body-fg);
color: var(--button-fg);
}
.calendar-cancel:focus, .calendar-cancel:hover {
background: #ddd;
background: var(--close-button-hover-bg);
}
.calendar-cancel a {
color: black;
color: var(--button-fg);
display: block;
}
@ -574,26 +579,21 @@ ul.timelist, .timelist li {
/* RELATED WIDGET WRAPPER */
.related-widget-wrapper {
float: left; /* display properly in form rows with multiple fields */
overflow: hidden; /* clear floated contents */
display: flex;
gap: 0 10px;
flex-grow: 1;
flex-wrap: wrap;
margin-bottom: 5px;
}
.related-widget-wrapper-link {
opacity: 0.3;
opacity: .6;
filter: grayscale(1);
}
.related-widget-wrapper-link:link {
opacity: .8;
}
.related-widget-wrapper-link:link:focus,
.related-widget-wrapper-link:link:hover {
opacity: 1;
}
select + .related-widget-wrapper-link,
.related-widget-wrapper-link + .related-widget-wrapper-link {
margin-left: 7px;
filter: grayscale(0);
}
/* GIS MAPS */

View File

@ -0,0 +1,3 @@
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
<path fill="#2b70bf" d="m555 1335 78-141q-87-63-136-159t-49-203q0-121 61-225-229 117-381 353 167 258 427 375zm389-759q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm363-191q0 7-1 9-105 188-315 566t-316 567l-49 89q-10 16-28 16-12 0-134-70-16-10-16-28 0-12 44-87-143-65-263.5-173T20 1029Q0 998 0 960t20-69q153-235 380-371t496-136q89 0 180 17l54-97q10-16 28-16 5 0 18 6t31 15.5 33 18.5 31.5 18.5T1291 358q16 10 16 27zm37 447q0 139-79 253.5T1056 1250l280-502q8 45 8 84zm448 128q0 35-20 69-39 64-109 145-150 172-347.5 267T896 1536l74-132q212-18 392.5-137T1664 960q-115-179-282-294l63-112q95 64 182.5 153T1772 891q20 34 20 69z"/>
</svg>

After

Width:  |  Height:  |  Size: 784 B

View File

@ -30,6 +30,9 @@ Requires core.js and SelectBox.js.
// <div class="selector"> or <div class="selector stacked">
const selector_div = quickElement('div', from_box.parentNode);
// Make sure the selector div is at the beginning so that the
// add link would be displayed to the right of the widget.
from_box.parentNode.prepend(selector_div);
selector_div.className = is_stacked ? 'selector stacked' : 'selector';
// <div class="selector-available">

View File

@ -179,6 +179,9 @@
}
});
}
// Sync counter when navigating to the page, such as through the back
// button.
window.addEventListener('pageshow', (event) => updateCounter(actionCheckboxes, options));
};
// Call function fn when the DOM is loaded and ready. If it is already

View File

@ -79,9 +79,11 @@
siblings.each(function() {
const elm = $(this);
elm.attr('href', elm.attr('data-href-template').replace('__fk__', value));
elm.removeAttr('aria-disabled');
});
} else {
siblings.removeAttr('href');
siblings.attr('aria-disabled', true);
}
}

View File

@ -36,6 +36,24 @@ depends on core.js for utility functions like removeChildren or quickElement
pgettext('abbrev. month December', 'Dec')
],
daysOfWeek: [
gettext('Sunday'),
gettext('Monday'),
gettext('Tuesday'),
gettext('Wednesday'),
gettext('Thursday'),
gettext('Friday'),
gettext('Saturday')
],
daysOfWeekAbbrev: [
pgettext('abbrev. day Sunday', 'Sun'),
pgettext('abbrev. day Monday', 'Mon'),
pgettext('abbrev. day Tuesday', 'Tue'),
pgettext('abbrev. day Wednesday', 'Wed'),
pgettext('abbrev. day Thursday', 'Thur'),
pgettext('abbrev. day Friday', 'Fri'),
pgettext('abbrev. day Saturday', 'Sat')
],
daysOfWeekInitial: [
pgettext('one letter Sunday', 'S'),
pgettext('one letter Monday', 'M'),
pgettext('one letter Tuesday', 'T'),
@ -98,7 +116,7 @@ depends on core.js for utility functions like removeChildren or quickElement
// Draw days-of-week header
let tableRow = quickElement('tr', tableBody);
for (let i = 0; i < 7; i++) {
quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]);
quickElement('th', tableRow, CalendarNamespace.daysOfWeekInitial[(i + CalendarNamespace.firstDayOfWeek) % 7]);
}
const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay();

View File

@ -85,6 +85,18 @@ function findPosY(obj) {
return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
};
Date.prototype.getAbbrevDayName = function() {
return typeof window.CalendarNamespace === "undefined"
? '0' + this.getDay()
: window.CalendarNamespace.daysOfWeekAbbrev[this.getDay()];
};
Date.prototype.getFullDayName = function() {
return typeof window.CalendarNamespace === "undefined"
? '0' + this.getDay()
: window.CalendarNamespace.daysOfWeek[this.getDay()];
};
Date.prototype.getAbbrevMonthName = function() {
return typeof window.CalendarNamespace === "undefined"
? this.getTwoDigitMonth()
@ -99,6 +111,8 @@ function findPosY(obj) {
Date.prototype.strftime = function(format) {
const fields = {
a: this.getAbbrevDayName(),
A: this.getFullDayName(),
b: this.getAbbrevMonthName(),
B: this.getFullMonthName(),
c: this.toString(),

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
The MIT License
Copyright (c) 2007-2017 Steven Levithan <http://xregexp.com/>
Copyright (c) 2007-present Steven Levithan <http://xregexp.com/>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -4,7 +4,7 @@
<div class="dc-container dc-center dc-padding-24">
<a href="https://im-puls.org"><img src="https://im-puls.org/static/pictures/logo.webp" style="width:264px;height:120px;display:grid;margin-left:auto;margin-right:auto" class="dc-padding-24"></a>
<h2 class="dc-center">{% if form.gender == "Männlich" %}Lieber{% else %}Liebe{% endif %} {{form.name}},</h2>
<p class="dc-center dc-large dc-padding-24">die Tagung hat nun ihr Ende gefunden. Erst einmal herzlichen Dank dafür, dass du Teil dieser Tagung mit uns warst. Nun folgt die Kontaktliste mit Teilnehmern der Tagung.<br>Falls bei einem Teilnehmer mal keine Adresse steht bedeutet dass, das der Teilnehmer eine Weitergabe seiner Daten nicht wünscht.</p>
<p class="dc-center dc-large dc-padding-24">schon seit einer Weile hat nun die Tagung ihr Ende gefunden. Erst einmal möchten wir Dir ganz herzlich dafür danken, dass du Teil dieser Tagung mit uns gewesen bist.<br>Für nächstes Jahr suchen wir noch weitere Vorbereiter, wenn Du Lust hast schreib gerne an <a href="mailto:buero@im-puls.org">buero@im-puls.org</a>. Dann bekommst du eine Mail mit allen weiteren Infos. Es nimmt nicht viel Zeit in Anspruch und ermöglicht auch nächstes Jahr eine tolle Tagung für alle.<br>Nun folgt die Kontaktliste mit allen anwesenden Teilnehmern der Tagung.<br>Falls bei einem Teilnehmer keine Adresse eingetragen bedeutet dass, das der Teilnehmer eine Weitergabe seiner Daten nicht erlaubt hat.</p>
<div class="tg-wrap">
<table class="tg">
<thead>
@ -28,9 +28,9 @@
{% endfor %}
</tbody>
</table></div>
<p class="dc-center dc-large dc-padding-24">Wir hoffen, dass Du viele Impulse aus der Tagung ziehen konntest.<br>Hier noch eine letzte Impuls-Vertiefung: Welche Impulse konntest du den aus der Tagung in dein Leben mitnehmen?<br>
<p class="dc-center dc-large dc-padding-24">Wir hoffen, dass die Tagung für Dich fruchtbringend und kräftigend wirken konnte.<br>Zum Abschluss haben wir noch eine letzte Impuls-Vertiefung: Welche Impulse konntest Du den aus der Tagung schon in Dein Leben mitnehmen?<br>
Mit herzlichen Grüßen,<br>
Euer Vorbereitungsteam<br>
Das Vorbereitungsteam<br>
</div>
</div>
</div>

View File

@ -1,16 +1,12 @@
{% if form.gender == "Männlich" %}Lieber{% else %}Liebe{% endif %} {{form.name}},
Wir freuen uns auf auf Dich und die bevorstehende Im-Puls-Tagung. Hier noch
eine kleine Erinnerung:
- Schreibzeug, Hausschuhe, Eurythmieschuhe, Musikinstrumente, Schlafsack und Isomatte mitbringen.
- Denkt an den Kuchen!
- Das Tagungsbüro ist unter folgender Rufnummer erreichbar: 0151 70818415.
- Die Tagung beginnt am 14. Februar um 17:00, Anreise ab 15:00.
- Bei weiteren Fragen kannst Du gerne mit dem Tagungsbüro Kontakt aufnehmen.
Auch gibt es schon einen kleinen Vorgeschmack auf die Arbeitsgruppen:
- Daniel Hafner: Einführung in die Anthroposophie
- Felicia Holland: Workshop „Kunst als Weg“
- Ran Miller: Eurythmie
- Martin Merckens: Spannungsfeld zwischen Licht und Finsternis
In Freude auf ein baldiges Treffen,
Euer Vorbereitungsteam
schon seit einer Weile hat nun die Tagung ihr Ende gefunden. Erst einmal möchten wir Dir ganz herzlich dafür danken, dass du Teil dieser Tagung mit uns gewesen bist.
Für nächstes Jahr suchen wir noch weitere Vorbereiter, wenn Du Lust hast schreib gerne an buero@im-puls.org. Dann bekommst du eine Mail mit allen weiteren Infos. Es nimmt nicht viel Zeit in Anspruch und ermöglicht auch nächstes Jahr eine tolle Tagung für alle.
Nun folgt die Kontaktliste mit allen anwesenden Teilnehmern der Tagung.
Falls bei einem Teilnehmer keine Adresse eingetragen bedeutet dass, das der Teilnehmer eine Weitergabe seiner Daten nicht erlaubt hat.
Name Anschrift Mail-Adresse Telefonnummer
{% for reg in RegistrantList %}{{ reg.name }} {% if reg.publish_address%}{{reg.address_street}},{{reg.address_plz}} {{reg.address_town}}{% else%}---{% endif %} {{reg.mail}} {% if reg.publish_phone %}{{ reg.phone }}{% else %}---{% endif %}
{% empty %}Leider konnten momentan keine Teilnehmer abgerufen werden.{% endfor %}
Wir hoffen, dass die Tagung für Dich fruchtbringend und kräftigend wirken konnte.
Zum Abschluss haben wir noch eine letzte Impuls-Vertiefung: Welche Impulse konntest Du den aus der Tagung schon in Dein Leben mitnehmen?
Mit herzlichen Grüßen,
Das Vorbereitungsteam

View File

@ -10,7 +10,7 @@
<div class="dc-header dc-center">
<h1 class="dc-jumbo">Im·Puls 2024</h1>
<h2 class="dc-xxxlarge">Geistige IDEALE<br>&<br>irdische REALITÄT</h2>
<span class="dc-xlarge">Die aktuelle Tagung findet vom 14. Februar, 17:00, bis zum 18. Februar, 12:30, in Stuttgart statt.
<span class="dc-xlarge">Die aktuelle Tagung fand vom 14. Februar, 17:00, bis zum 18. Februar, 12:30, erfolgreich in Stuttgart statt.
</div>
<svg class="editorial" viewBox="0 24 150 28 " preserveAspectRatio="none">
<defs> <path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z" /></defs>

View File

@ -8,7 +8,7 @@ class RegistrantAdmin(admin.ModelAdmin):
list_display = ('name','birthdate','address_town','mail')
readonly_fields = ['timestamp']
list_filter = ['payed', 'rate_reduced', 'canceled', 'team', 'food', 'cake']
actions = ['welcome_mail','preparation_mail']
actions = ['welcome_mail','preparation_mail','preparation_mail_all','final_mail','final_mail_all']
@admin.action(description='Send welcome mail to ...')
def welcome_mail(self, request, queryset):
@ -18,6 +18,7 @@ class RegistrantAdmin(admin.ModelAdmin):
send_mail(f'Herzlich Willkommen zur Im·Puls-Tagung, {reg.name}', msg_plain, 'buero@im-puls.org', [f"{reg.mail}"], fail_silently=False, html_message=msg_html)
send_mail(f'Neue Anmeldung: {reg.name}', msg_plain, 'buero@im-puls.org', ["webmaster@denkena-consulting.com"], fail_silently=False, html_message=msg_html)
@admin.action(description='Send preparation mail to ...')
def preparation_mail(self, request, queryset):
for reg in queryset:
@ -26,12 +27,27 @@ class RegistrantAdmin(admin.ModelAdmin):
send_mail(f'Letzte Informationen zur Im·Puls-Tagung, {reg.name}', msg_plain, 'buero@im-puls.org', [f"{reg.mail}"], fail_silently=False, html_message=msg_html)
@admin.action(description='Send preparation mail to all')
def preparation_mail(self):
def preparation_mail_all(self):
for reg in Registrant25.objects.all:
msg_plain = render_to_string('preparation_mail.txt', {"form": reg})
msg_html = render_to_string('preparation_mail.html', {"form": reg})
send_mail(f'Letzte Informationen zur Im·Puls-Tagung, {reg.name}', msg_plain, 'buero@im-puls.org', [f"{reg.mail}"], fail_silently=False, html_message=msg_html)
@admin.action(description='Send final mail to ...')
def final_mail(self, request, queryset):
for reg in queryset:
msg_plain = render_to_string('final_mail.txt', {"form": reg, "RegistrantList": filter(lambda x: not x.canceled, sorted(Registrant2024.objects.all(), key=lambda x: x.name))})
msg_html = render_to_string('final_mail.html', {"form": reg, "RegistrantList": filter(lambda x: not x.canceled, sorted(Registrant2024.objects.all(), key=lambda x: x.name))})
send_mail(f'Kontaktliste und Gruß von der Im·Puls-Tagung, {reg.name}', msg_plain, 'buero@im-puls.org', [f"{reg.mail}"], fail_silently=False, html_message=msg_html)
@admin.action(description='Send final mail to all')
def final_mail_all(self):
for reg in Registrant2024.objects.all:
msg_plain = render_to_string('final_mail.txt', {"form": reg, "RegistrantList": filter(lambda x: not x.canceled, sorted(Registrant2024.objects.all(), key=lambda x: x.name))})
msg_html = render_to_string('final_mail.html', {"form": reg, "RegistrantList": filter(lambda x: not x.canceled, sorted(Registrant2024.objects.all(), key=lambda x: x.name))})
send_mail(f'Kontaktliste und Gruß von der Im·Puls-Tagung, {reg.name}', msg_plain, 'buero@im-puls.org', [f"{reg.mail}"], fail_silently=False, html_message=msg_html)
admin.site.register(Author)
admin.site.register(Category)
admin.site.register(Post)