Browse Source

Merge remote-tracking branch 'origin/master' into vylepseni_odevzdavatka

# Conflicts:
#	odevzdavatko/templates/odevzdavatko/detail.html
pull/20/head
Jonas Havelka 2 years ago
parent
commit
ec0174dcdd
  1. 2
      make/test
  2. 5
      mamweb/settings_local.py
  3. 7
      odevzdavatko/forms.py
  4. 2
      odevzdavatko/templates/odevzdavatko/detail.html
  5. 2
      personalni/views.py
  6. 18
      seminar/migrations/0111_nikam2nezasilat_papirove.py
  7. 2
      seminar/models/personalni.py
  8. 10
      seminar/models/tvorba.py

2
make/test

@ -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 "$@"

5
mamweb/settings_local.py

@ -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': {

7
odevzdavatko/forms.py

@ -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'),

2
odevzdavatko/templates/odevzdavatko/detail.html

@ -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>

2
personalni/views.py

@ -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

@ -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'),
),
]

2
seminar/models/personalni.py

@ -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)

10
seminar/models/tvorba.py

@ -270,15 +270,17 @@ 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)
def posli(text, resitele):
emaily = map(lambda resitel: resitel.osoba.email, resitele)
if not settings.POSLI_MAILOVOU_NOTIFIKACI: if not settings.POSLI_MAILOVOU_NOTIFIKACI:
print("Poslal bych upozornění na tyto adresy: ", " ".join(emaily)) print("Poslal bych upozornění na tyto adresy: ", " ".join(emaily))
return 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
@ -286,6 +288,10 @@ class Cislo(SeminarModelBase):
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)
self.vygeneruj_nahled() self.vygeneruj_nahled()

Loading…
Cancel
Save