Merge remote-tracking branch 'origin/master' into vylepseni_odevzdavatka
# Conflicts: # odevzdavatko/templates/odevzdavatko/detail.html
This commit is contained in:
commit
ec0174dcdd
8 changed files with 51 additions and 17 deletions
|
@ -6,4 +6,4 @@ set -exuo pipefail
|
||||||
ensure_web_installed
|
ensure_web_installed
|
||||||
|
|
||||||
trap - ERR # Testy nejspíš selžou, ale nechceme kolem toho dělat další chybovou hlášku.
|
trap - ERR # Testy nejspíš selžou, ale nechceme kolem toho dělat další chybovou hlášku.
|
||||||
./manage.py test -v2
|
./manage.py test -v2 --keepdb "$@"
|
||||||
|
|
|
@ -40,7 +40,10 @@ DATABASES = {
|
||||||
'default': {
|
'default': {
|
||||||
'ENGINE': 'django.db.backends.sqlite3',
|
'ENGINE': 'django.db.backends.sqlite3',
|
||||||
'NAME': os.path.join(BASE_DIR, 'db-local.sqlite3'),
|
'NAME': os.path.join(BASE_DIR, 'db-local.sqlite3'),
|
||||||
}
|
'TEST': {
|
||||||
|
'NAME': os.path.join(BASE_DIR, 'db-test.sqlite3'),
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
#DATABASES = {
|
#DATABASES = {
|
||||||
# 'default': {
|
# 'default': {
|
||||||
|
|
|
@ -82,6 +82,13 @@ class NahrajReseniForm(forms.ModelForm):
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
# FIXME Z nějakého důvodu se do této třídy dostaneme i bez resitele
|
||||||
|
if 'resitele' in self.fields:
|
||||||
|
# FIXME Mnohem hezčí by to bylo u definice resitele výše, ale nepodařilo se mi to.
|
||||||
|
self.fields['resitele'].required = False
|
||||||
|
|
||||||
ReseniSPrilohamiFormSet = inlineformset_factory(m.Reseni,m.PrilohaReseni,
|
ReseniSPrilohamiFormSet = inlineformset_factory(m.Reseni,m.PrilohaReseni,
|
||||||
form = NahrajReseniForm,
|
form = NahrajReseniForm,
|
||||||
fields = ('soubor','res_poznamka'),
|
fields = ('soubor','res_poznamka'),
|
||||||
|
|
|
@ -108,7 +108,7 @@
|
||||||
<td class="bodovani">{{ h.body_celkem }}</td>
|
<td class="bodovani">{{ h.body_celkem }}</td>
|
||||||
<td class="bodovani teamovaCast">{{ h.body_neprepocitane }}</td>
|
<td class="bodovani teamovaCast">{{ h.body_neprepocitane }}</td>
|
||||||
<td class="bodovani teamovaCast">{{ h.body_neprepocitane_celkem }}</td>
|
<td class="bodovani teamovaCast">{{ h.body_neprepocitane_celkem }}</td>
|
||||||
<td>{{ h.feedback }}</td>
|
<td>{{ h.feedback | linebreaks }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -160,7 +160,7 @@ def resitelEditView(request):
|
||||||
|
|
||||||
if resitel_edit:
|
if resitel_edit:
|
||||||
## Změny v řešiteli
|
## Změny v řešiteli
|
||||||
resitel_edit.prezdivka_resitele = fcd['prezdivka_resitele']
|
resitel_edit.prezdivka_resitele = fcd['prezdivka_resitele'] if fcd['prezdivka_resitele'] != '' else None
|
||||||
resitel_edit.skola = fcd['skola']
|
resitel_edit.skola = fcd['skola']
|
||||||
resitel_edit.rok_maturity = fcd['rok_maturity']
|
resitel_edit.rok_maturity = fcd['rok_maturity']
|
||||||
resitel_edit.zasilat = fcd['zasilat']
|
resitel_edit.zasilat = fcd['zasilat']
|
||||||
|
|
18
seminar/migrations/0111_nikam2nezasilat_papirove.py
Normal file
18
seminar/migrations/0111_nikam2nezasilat_papirove.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 2.2.28 on 2023-01-30 19:14
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('seminar', '0110_resitel_prezdivka'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='resitel',
|
||||||
|
name='zasilat',
|
||||||
|
field=models.CharField(choices=[('domu', 'Domů'), ('do_skoly', 'Do školy'), ('nikam', 'Nezasílat papírově')], default='domu', max_length=32, verbose_name='kam zasílat'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -229,7 +229,7 @@ class Resitel(SeminarModelBase):
|
||||||
ZASILAT_CHOICES = [
|
ZASILAT_CHOICES = [
|
||||||
(ZASILAT_DOMU, 'Domů'),
|
(ZASILAT_DOMU, 'Domů'),
|
||||||
(ZASILAT_DO_SKOLY, 'Do školy'),
|
(ZASILAT_DO_SKOLY, 'Do školy'),
|
||||||
(ZASILAT_NIKAM, 'Nikam'),
|
(ZASILAT_NIKAM, 'Nezasílat papírově'),
|
||||||
]
|
]
|
||||||
|
|
||||||
zasilat = models.CharField('kam zasílat', max_length=32, choices=ZASILAT_CHOICES, blank=False, default=ZASILAT_DOMU)
|
zasilat = models.CharField('kam zasílat', max_length=32, choices=ZASILAT_CHOICES, blank=False, default=ZASILAT_DOMU)
|
||||||
|
|
|
@ -270,21 +270,27 @@ class Cislo(SeminarModelBase):
|
||||||
'Vaše M&M\n'.format(odkaz)
|
'Vaše M&M\n'.format(odkaz)
|
||||||
|
|
||||||
# Prijemci e-mailu
|
# Prijemci e-mailu
|
||||||
emaily = map(lambda r: r.osoba.email, filter(lambda r: r.zasilat_cislo_emailem, aktivniResitele(self)))
|
resitele_vsichni = aktivniResitele(self).filter(zasilat_cislo_emailem=True)
|
||||||
|
|
||||||
if not settings.POSLI_MAILOVOU_NOTIFIKACI:
|
def posli(text, resitele):
|
||||||
print("Poslal bych upozornění na tyto adresy: ", " ".join(emaily))
|
emaily = map(lambda resitel: resitel.osoba.email, resitele)
|
||||||
return
|
if not settings.POSLI_MAILOVOU_NOTIFIKACI:
|
||||||
|
print("Poslal bych upozornění na tyto adresy: ", " ".join(emaily))
|
||||||
|
return
|
||||||
|
|
||||||
email = EmailMessage(
|
email = EmailMessage(
|
||||||
subject=predmet,
|
subject=predmet,
|
||||||
body=text_mailu,
|
body=text,
|
||||||
from_email=poslat_z_mailu,
|
from_email=poslat_z_mailu,
|
||||||
bcc=list(emaily)
|
bcc=list(emaily)
|
||||||
#bcc = příjemci skryté kopie
|
#bcc = příjemci skryté kopie
|
||||||
)
|
)
|
||||||
|
|
||||||
email.send()
|
email.send()
|
||||||
|
|
||||||
|
posli(text_mailu, resitele_vsichni.filter(zasilat=pm.Resitel.ZASILAT_NIKAM))
|
||||||
|
posli(text_mailu + 'P. S. Také by vám brzy měla přijít papírová verze. Připomínáme, že pokud papírovou verzi čísla nevyužijete, můžete v https://mam.mff.cuni.cz/resitel/osobni-udaje/ zaškrtnout, abychom vám ji neposílali. Děkujeme. (Čísla vždy můžete nalézt v našem archivu a dál vám budou chodit e-mailem.)\n',
|
||||||
|
resitele_vsichni.exclude(zasilat=pm.Resitel.ZASILAT_NIKAM))
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
|
Loading…
Reference in a new issue