Exemple #1
0
    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
        )
Exemple #2
0
    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']]
            )
Exemple #3
0
 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)
Exemple #4
0
 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
         )
Exemple #5
0
 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})
Exemple #6
0
 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],
     )
Exemple #7
0
 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
         })
Exemple #8
0
    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],
        )
Exemple #9
0
 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],
     )
Exemple #10
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)
Exemple #11
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)
Exemple #12
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)
Exemple #13
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)
Exemple #14
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)
Exemple #15
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)
Exemple #16
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.")