def _invia_notifica(self, modello, oggetto, auto, destinatari=None, aggiunte_corpo=None): from posta.models import Messaggio if not destinatari: if auto: destinatari = [self.richiedente] if self.firmatario: destinatari.append(self.firmatario) self.oggetto.automatica = True self.oggetto.save() else: destinatari = [self.richiedente] corpo = { "richiesta": self, "firmatario": self.firmatario, "giorni": self.giorni_automatici } if aggiunte_corpo: corpo.update(aggiunte_corpo) Messaggio.costruisci_e_accoda( oggetto=oggetto, modello=modello, corpo=corpo, mittente=self.firmatario, destinatari=destinatari )
def notifiche_richieste_in_attesa(cls): from anagrafica.models import Estensione, Trasferimento from posta.models import Messaggio oggetto = "Richieste in attesa di approvazione" modello = "email_richieste_pending.html" in_attesa = cls.objects.filter( concessa__isnull=True ) trasferimenti = in_attesa.filter(oggetto_tipo=ContentType.objects.get_for_model(Trasferimento)) estensioni = in_attesa.filter(oggetto_tipo=ContentType.objects.get_for_model(Estensione)) trasferimenti_manuali = trasferimenti.filter(scadenza__isnull=True, tipo_gestione=Autorizzazione.MANUALE) trasferimenti_automatici = trasferimenti.filter( scadenza__isnull=False, scadenza__gt=now() ).exclude(tipo_gestione=Autorizzazione.MANUALE) autorizzazioni = list(estensioni) + list(trasferimenti_manuali) + list(trasferimenti_automatici) persone = dict() for autorizzazione in autorizzazioni: if not autorizzazione.oggetto: print('autorizzazione {} non ha oggetto collegato'.format(autorizzazione.pk)) continue if autorizzazione.oggetto and not autorizzazione.oggetto.ritirata and not autorizzazione.oggetto.confermata: destinatari = cls.espandi_notifiche(autorizzazione.destinatario_oggetto, [], True, True) for destinatario in destinatari: if destinatario.pk not in persone: persone[destinatario.pk] = { 'persona': None, 'estensioni': [], 'trasferimenti_manuali': [], 'trasferimenti_automatici': [], } persone[destinatario.pk]['persona'] = destinatario if autorizzazione in estensioni: persone[destinatario.pk]['estensioni'].append(autorizzazione.oggetto) elif autorizzazione in trasferimenti_manuali: persone[destinatario.pk]['trasferimenti_manuali'].append(autorizzazione.oggetto) elif autorizzazione in trasferimenti_automatici: persone[destinatario.pk]['trasferimenti_automatici'].append(autorizzazione.oggetto) for persona in persone.values(): corpo = { "persona": persona, "DATA_AVVIO_TRASFERIMENTI_AUTO": settings.DATA_AVVIO_TRASFERIMENTI_AUTO } Messaggio.costruisci_e_accoda( oggetto=oggetto, modello=modello, corpo=corpo, destinatari=[persona['persona']] )
def _invia_email_agli_aspiranti(self, rispondi_a=None): for aspirante in self.aspiranti_nelle_vicinanze(): persona = aspirante.persona if not aspirante.persona.volontario: Messaggio.costruisci_e_accoda( oggetto="Nuovo Corso per Volontari CRI", modello="email_aspirante_corso.html", corpo={ "persona": persona, "corso": self, }, destinatari=[persona], rispondi_a=rispondi_a)
def _invia_email_agli_aspiranti(self, rispondi_a=None): for aspirante in self.aspiranti_nelle_vicinanze(): persona = aspirante.persona Messaggio.costruisci_e_accoda( oggetto="Nuovo Corso per Volontari CRI", modello="email_aspirante_corso.html", corpo={ "persona": persona, "corso": self, }, destinatari=[persona], rispondi_a=rispondi_a )
def _invia_notifica_chiusura(self, autore, azione_automatica): """ Invia una e-mail di notifica ai delegati della chiusura automatica di questa attivita'. :param azione_automatica: Se l'azione e' stata svolta in modo automatico (i.e. via cron) o meno. Viene usato per modificare la notifica. """ Messaggio.costruisci_e_accoda(oggetto="Chiusura automatica: %s" % self.nome, mittente=(None if azione_automatica else autore), destinatari=self.delegati_attuali(solo_deleghe_attive=True), modello="email_attivita_chiusa.html", corpo={"azione_automatica": azione_automatica, "autore": autore, "attivita": self})
def notifica_esito_esame(self, mittente=None): """ Invia una e-mail al partecipante con l'esito del proprio esame. """ Messaggio.costruisci_e_accoda( oggetto="Esito del Corso Base: %s" % self.corso, modello="email_aspirante_corso_esito.html", corpo={ "partecipazione": self, "corso": self.corso, "persona": self.persona, "mittente": mittente, }, mittente=mittente, destinatari=[self.persona], )
def _invia_notifica_chiusura(self, autore, azione_automatica): """ Invia una e-mail di notifica ai delegati della chiusura automatica di questa attivita'. :param azione_automatica: Se l'azione e' stata svolta in modo automatico (i.e. via cron) o meno. Viene usato per modificare la notifica. """ Messaggio.costruisci_e_accoda( oggetto="Chiusura automatica: %s" % self.nome, mittente=(None if azione_automatica else autore), destinatari=self.delegati_attuali(solo_deleghe_attive=True), modello="email_attivita_chiusa.html", corpo={ "azione_automatica": azione_automatica, "autore": autore, "attivita": self })
def notifica_richiesta(self, persona): from anagrafica.models import Delega, Persona from posta.models import Messaggio if not persona: return # Nessun destinatario, nessuna e-mail. Messaggio.costruisci_e_accoda( oggetto="Richiesta di %s da %s" % (self.oggetto.RICHIESTA_NOME, self.richiedente.nome_completo,), modello="email_autorizzazione_richiesta.html", corpo={ "richiesta": self, }, mittente=self.richiedente, destinatari=[persona], )
def commenti_nuovo(request, me): """ Crea un nuovo commento e ritorna indietro alla pagina dei commenti. :return: """ if not request.method == 'POST': return redirect(ERRORE_PERMESSI) next = request.POST['next'] oggetto_app_label = request.POST['oggetto_app_label'] oggetto_model = request.POST['oggetto_model'] commento = request.POST['commento'] oggetto_pk = int(request.POST['oggetto_pk']) oggetto_m = apps.get_model(oggetto_app_label, oggetto_model) oggetto = oggetto_m.objects.get(pk=oggetto_pk) if not hasattr(oggetto, 'commenti'): return redirect(ERRORE_PERMESSI) if not commento: return redirect(next) c = Commento( oggetto=oggetto, autore=me, commento=commento, ) c.save() if oggetto.commento_notifica_destinatari(me).exists(): from posta.models import Messaggio Messaggio.costruisci_e_accoda( oggetto="Commento di %s su %s" % ( me.nome_completo, oggetto, ), modello="email_commento.html", corpo={ "commento": c, }, mittente=me, destinatari=oggetto.commento_notifica_destinatari(me), ) return redirect(next)
def test_messaggio_senza_destinatari(self, mock_smtp): messaggio = Messaggio.costruisci_e_accoda( destinatari=[], oggetto="Email contatto", modello="email.html", ) messaggio.smaltisci_coda() self.assertEqual(Messaggio.in_coda().count(), 0)
def test_messaggio_senza_destinatari(self, mock_smtp): messaggio = Messaggio.costruisci_e_accoda( destinatari=[], oggetto="Email contatto", modello="email.html", ) messaggio._smaltisci_coda() self.assertEqual(Messaggio.in_coda().count(), 0)
def commenti_nuovo(request, me): """ Crea un nuovo commento e ritorna indietro alla pagina dei commenti. :return: """ if not request.method == 'POST': return redirect(ERRORE_PERMESSI) next = request.POST['next'] oggetto_app_label = request.POST['oggetto_app_label'] oggetto_model = request.POST['oggetto_model'] commento = request.POST['commento'] oggetto_pk = int(request.POST['oggetto_pk']) oggetto_m = apps.get_model(oggetto_app_label, oggetto_model) oggetto = oggetto_m.objects.get(pk=oggetto_pk) if not hasattr(oggetto, 'commenti'): return redirect(ERRORE_PERMESSI) if not commento: return redirect(next) c = Commento( oggetto=oggetto, autore=me, commento=commento, ) c.save() if oggetto.commento_notifica_destinatari(me).exists(): from posta.models import Messaggio Messaggio.costruisci_e_accoda( oggetto="Commento di %s su %s" % (me.nome_completo, oggetto,), modello="email_commento.html", corpo={ "commento": c, }, mittente=me, destinatari=oggetto.commento_notifica_destinatari(me), ) return redirect(next)
def test_messaggio_con_destinatario_vuoto(self, mock_smtp): persona, sede, appartenenza = crea_persona_sede_appartenenza() persona.save() messaggio = Messaggio.costruisci_e_accoda( destinatari=[persona], oggetto="Email contatto", modello="email.html", ) messaggio.smaltisci_coda() self.assertEqual(Messaggio.in_coda().count(), 0)
def test_messaggio_con_destinatario_vuoto(self, mock_smtp): persona, sede, appartenenza = crea_persona_sede_appartenenza() persona.save() messaggio = Messaggio.costruisci_e_accoda( destinatari=[persona], oggetto="Email contatto", modello="email.html", ) messaggio._smaltisci_coda() self.assertEqual(Messaggio.in_coda().count(), 0)
prima.cerca_e_aggiorna() pv = prima.provincia_breve altre = Locazione.objects.filter(provincia=provincia) num = altre.update(provincia_breve=pv) print("-- %s\t%d\t%s" % (pv, num, provincia)) if args.email: print("Installo emails di esempio") # setup di celery per poter accodare from jorvik.celery import app if args.reset: Messaggio.objects.all().delete() persone = iter(Persona.objects.all().order_by('?')) for n in range(args.email): try: mittente = next(persone) destinatari = [next(persone) for _ in range(random.randint(0, 5))] job = Messaggio.costruisci_e_accoda( oggetto='Prova email numero {}'.format(n + 1), modello='test_email.html', mittente=mittente, destinatari=destinatari) except StopIteration: persone = iter(Persona.objects.all().order_by('?')) # rewind print("Finita esecuzione.")
prima = Locazione.objects.filter(provincia=provincia).first() prima.cerca_e_aggiorna() pv = prima.provincia_breve altre = Locazione.objects.filter(provincia=provincia) num = altre.update(provincia_breve=pv) print("-- %s\t%d\t%s" % (pv, num, provincia)) if args.email: print("Installo emails di esempio") # setup di celery per poter accodare from jorvik.celery import app if args.reset: Messaggio.objects.all().delete() persone = iter(Persona.objects.all().order_by('?')) for n in range(args.email): try: mittente = next(persone) destinatari = [next(persone) for _ in range(random.randint(0, 5))] job = Messaggio.costruisci_e_accoda(oggetto='Prova email numero {}'.format(n + 1), modello='test_email.html', mittente=mittente, destinatari=destinatari) except StopIteration: persone = iter(Persona.objects.all().order_by('?')) # rewind print("Finita esecuzione.")