Příjemci chtějí dostávat e-maily… #29
					 6 changed files with 43 additions and 9 deletions
				
			
		|  | @ -12,7 +12,7 @@ from django.contrib import admin | ||||||
| from reversion.admin import VersionAdmin | from reversion.admin import VersionAdmin | ||||||
| from korektury.models import KorekturovanePDF | from korektury.models import KorekturovanePDF | ||||||
| 
 | 
 | ||||||
| from django.core.mail import send_mail | from django.core.mail import EmailMessage | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
| 
 | 
 | ||||||
| # Register your models here. | # Register your models here. | ||||||
|  | @ -64,6 +64,11 @@ Popis souboru: | ||||||
| S pozdravem a korekturám zdar! | S pozdravem a korekturám zdar! | ||||||
| Korekturovátko | Korekturovátko | ||||||
| ''' | ''' | ||||||
| 			send_mail(predmet,text,odesilatel,[prijemce]) | 			EmailMessage( | ||||||
|  | 				subject=predmet, | ||||||
|  | 				body=text, | ||||||
|  | 				from_email=odesilatel, | ||||||
|  | 				to=[prijemce], | ||||||
|  | 			).send() | ||||||
| 
 | 
 | ||||||
| admin.site.register(KorekturovanePDF, KorekturovanePDFAdmin) | admin.site.register(KorekturovanePDF, KorekturovanePDFAdmin) | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ from django.views import generic | ||||||
| from django.utils.translation import ugettext as _ | from django.utils.translation import ugettext as _ | ||||||
| from django.conf import settings | from django.conf import settings | ||||||
| from django.http import HttpResponseForbidden | from django.http import HttpResponseForbidden | ||||||
| from django.core.mail import send_mail | from django.core.mail import EmailMessage | ||||||
| from django.db.models import Count,Q | from django.db.models import Count,Q | ||||||
| 
 | 
 | ||||||
| from .models import Oprava,Komentar,KorekturovanePDF, Organizator | from .models import Oprava,Komentar,KorekturovanePDF, Organizator | ||||||
|  | @ -207,7 +207,12 @@ class KorekturyView(generic.TemplateView): | ||||||
| 			print("---- Konec upozornění") | 			print("---- Konec upozornění") | ||||||
| 			return | 			return | ||||||
| 
 | 
 | ||||||
| 		send_mail(subject, text, from_email, list(emails)) | 		EmailMessage( | ||||||
|  | 			subject=subject, | ||||||
|  | 			body=text, | ||||||
|  | 			from_email=from_email, | ||||||
|  | 			to=list(emails), | ||||||
|  | 		).send() | ||||||
| 
 | 
 | ||||||
| 	def get_context_data(self, **kwargs): | 	def get_context_data(self, **kwargs): | ||||||
| 		context = super().get_context_data(**kwargs) | 		context = super().get_context_data(**kwargs) | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| from django.core.exceptions import PermissionDenied | from django.core.exceptions import PermissionDenied | ||||||
| from django.views.generic import ListView, DetailView, FormView | from django.views.generic import ListView, DetailView, FormView | ||||||
| from django.contrib.auth.mixins import LoginRequiredMixin | from django.contrib.auth.mixins import LoginRequiredMixin | ||||||
| from django.core.mail import send_mail | from django.core.mail import EmailMessage | ||||||
| from django.utils import timezone | from django.utils import timezone | ||||||
| from django.views.generic import ListView, DetailView, FormView, CreateView | from django.views.generic import ListView, DetailView, FormView, CreateView | ||||||
| from django.views.generic.list import MultipleObjectTemplateResponseMixin,MultipleObjectMixin | from django.views.generic.list import MultipleObjectTemplateResponseMixin,MultipleObjectMixin | ||||||
|  | @ -449,11 +449,11 @@ class NahrajReseniView(LoginRequiredMixin, CreateView): | ||||||
| 		seznam = "problému " + str(problemy[0]) if len(problemy) == 1 else 'následujícím problémům:\n' + ', \n'.join(map(str, problemy)) | 		seznam = "problému " + str(problemy[0]) if len(problemy) == 1 else 'následujícím problémům:\n' + ', \n'.join(map(str, problemy)) | ||||||
| 		seznam_do_subjectu = "problému " + str(problemy[0]) + ("" if len(problemy) == 1 else f" (a dalším { len(problemy) - 1 })") | 		seznam_do_subjectu = "problému " + str(problemy[0]) + ("" if len(problemy) == 1 else f" (a dalším { len(problemy) - 1 })") | ||||||
| 
 | 
 | ||||||
| 		send_mail( | 		EmailMessage( | ||||||
| 			subject="Nové řešení k " + seznam_do_subjectu, | 			subject="Nové řešení k " + seznam_do_subjectu, | ||||||
| 			message=f"Řešitel{ '' if resitel.pohlavi_muz else 'ka' } { resitel } právě nahrál{'' if resitel.pohlavi_muz else 'a' } nové řešení k { seznam }.\n\nHurá do opravování: { self.object.absolute_url() }", | 			body=f"Řešitel{ '' if resitel.pohlavi_muz else 'ka' } { resitel } právě nahrál{'' if resitel.pohlavi_muz else 'a' } nové řešení k { seznam }.\n\nHurá do opravování: { self.object.absolute_url() }", | ||||||
| 			from_email="submitovatko@mam.mff.cuni.cz", # FIXME: Chceme to mít radši tady, nebo v nastavení? | 			from_email="submitovatko@mam.mff.cuni.cz", # FIXME: Chceme to mít radši tady, nebo v nastavení? | ||||||
| 			recipient_list=list(prijemci), | 			to=list(prijemci), | ||||||
| 		) | 		).send() | ||||||
| 
 | 
 | ||||||
| 		return formularOKView(self.request, text='Řešení úspěšně odevzdáno') | 		return formularOKView(self.request, text='Řešení úspěšně odevzdáno') | ||||||
|  |  | ||||||
							
								
								
									
										18
									
								
								seminar/migrations/0112_prijemce_zasilat_cislo_emailem.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								seminar/migrations/0112_prijemce_zasilat_cislo_emailem.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | ||||||
|  | # Generated by Django 2.2.28 on 2023-04-17 18:38 | ||||||
|  | 
 | ||||||
|  | from django.db import migrations, models | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  | 
 | ||||||
|  |     dependencies = [ | ||||||
|  |         ('seminar', '0111_nikam2nezasilat_papirove'), | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     operations = [ | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='prijemce', | ||||||
|  |             name='zasilat_cislo_emailem', | ||||||
|  |             field=models.BooleanField(default=False, help_text='True pokud chce příjemce dostávat číslo emailem', verbose_name='zasílat číslo emailem'), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
|  | @ -192,6 +192,8 @@ class Prijemce(SeminarModelBase): | ||||||
| 		help_text='Které osobě či na jakou adresu se mají zasílat čísla', | 		help_text='Které osobě či na jakou adresu se mají zasílat čísla', | ||||||
| 		on_delete=models.CASCADE) | 		on_delete=models.CASCADE) | ||||||
| 
 | 
 | ||||||
|  | 	zasilat_cislo_emailem = models.BooleanField('zasílat číslo emailem', help_text='True pokud chce příjemce dostávat číslo emailem', default=False) | ||||||
|  | 
 | ||||||
| 	# FIXME: možná chceme něco jako vazbu na osobu XOR školu a počet kusů k zaslání | 	# FIXME: možná chceme něco jako vazbu na osobu XOR školu a počet kusů k zaslání | ||||||
| 	# FIXME: a možná taky posílání na mail a možná taky přes něj chceme posílat i řešitelům | 	# FIXME: a možná taky posílání na mail a možná taky přes něj chceme posílat i řešitelům | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -265,6 +265,7 @@ class Cislo(SeminarModelBase): | ||||||
| 
 | 
 | ||||||
| 		poslat_z_mailu = 'zadani@mam.mff.cuni.cz' | 		poslat_z_mailu = 'zadani@mam.mff.cuni.cz' | ||||||
| 		predmet = 'Vyšlo číslo {}'.format(self.kod()) | 		predmet = 'Vyšlo číslo {}'.format(self.kod()) | ||||||
|  | 		# TODO Možná nechceme všem psát „Ahoj“, např. příjemcům… | ||||||
| 		text_mailu = 'Ahoj,\n' \ | 		text_mailu = 'Ahoj,\n' \ | ||||||
| 			   'na adrese {} najdete nejnovější číslo.\n' \ | 			   'na adrese {} najdete nejnovější číslo.\n' \ | ||||||
| 			   'Vaše M&M\n'.format(odkaz) | 			   'Vaše M&M\n'.format(odkaz) | ||||||
|  | @ -294,6 +295,9 @@ class Cislo(SeminarModelBase): | ||||||
| 		posli(text_mailu + 'P. S. Brzy budeme též rozesílat papírovou verzi čísla. 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. Čísla vždy můžete nalézt v našem archivu a dál vám budou chodit e-mailem. Děkujeme.\n' + paticka, | 		posli(text_mailu + 'P. S. Brzy budeme též rozesílat papírovou verzi čísla. 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. Čísla vždy můžete nalézt v našem archivu a dál vám budou chodit e-mailem. Děkujeme.\n' + paticka, | ||||||
| 			  resitele_vsichni.exclude(zasilat=pm.Resitel.ZASILAT_NIKAM)) | 			  resitele_vsichni.exclude(zasilat=pm.Resitel.ZASILAT_NIKAM)) | ||||||
| 
 | 
 | ||||||
|  | 		paticka_prijemce = "---\nPokud tyto e-maily nechcete nadále dostávat, prosíme, ozvěte se nám na mam@matfyz.cz." | ||||||
|  | 		posli(text_mailu + paticka_prijemce, pm.Prijemce.objects.filter(zasilat_cislo_emailem=True)) | ||||||
|  | 
 | ||||||
| 	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…
	
		Reference in a new issue