Esempio n. 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_invia(oggetto=oggetto,
                                     modello=modello,
                                     corpo=corpo,
                                     mittente=self.firmatario,
                                     destinatari=destinatari)
Esempio n. 2
0
    def test_flag_utenza_e_contatti_uguali(self):
        self.persona.email_contatto = self.persona.utenza.email
        self.persona.save()

        Messaggio.costruisci_e_invia(
            destinatari=[self.persona],
            oggetto="Stessa email",
            modello="email.html",
            utenza=True
        )
        self.assertEqual(len(mail.outbox), 1)
        email = mail.outbox[0]
        self.assertTrue(email.subject.find('Stessa email') > -1)
        self.assertEqual(len(email.to), 1)
        self.assertIn(self.persona.email_contatto, email.to)
        self.assertIn(self.persona.utenza.email, email.to)

        # Nessuna email di contatto
        self.persona.email_contatto = ''
        self.persona.save()

        Messaggio.costruisci_e_invia(
            destinatari=[self.persona],
            oggetto="Stessa email",
            modello="email.html",
            utenza=True
        )
        # c'è anche quella precedente
        self.assertEqual(len(mail.outbox), 2)
        email = mail.outbox[1]
        self.assertTrue(email.subject.find('Stessa email') > -1)
        self.assertEqual(len(email.to), 1)
        self.assertNotIn(self.persona.email_contatto, email.to)
        self.assertIn(self.persona.utenza.email, email.to)
Esempio n. 3
0
 def disiscrivi(self, mittente=None):
     """
     Disiscrive partecipante dal corso base.
     """
     self.autorizzazioni_ritira()
     Messaggio.costruisci_e_invia(
         oggetto="Disiscrizione dal Corso Base: %s" % self.corso,
         modello="email_aspirante_corso_deiscrizione.html",
         corpo={
             "partecipazione": self,
             "corso": self.corso,
             "persona": self.persona,
             "mittente": mittente,
         },
         mittente=mittente,
         destinatari=[self.persona],
     )
     Messaggio.costruisci_e_invia(
         oggetto="Disiscrizione dal Corso Base: %s" % self.corso,
         modello="email_aspirante_corso_deiscrizione_mittente.html",
         corpo={
             "partecipazione": self,
             "corso": self.corso,
             "persona": self.persona,
             "richiedente": mittente,
         },
         mittente=None,
         destinatari=[mittente],
     )
Esempio n. 4
0
    def test_flag_utenza_e_contatti_uguali(self):
        self.persona.email_contatto = self.persona.utenza.email
        self.persona.save()

        Messaggio.costruisci_e_invia(destinatari=[self.persona],
                                     oggetto="Stessa email",
                                     modello="email.html",
                                     utenza=True)
        self.assertEqual(len(mail.outbox), 1)
        email = mail.outbox[0]
        self.assertTrue(email.subject.find('Stessa email') > -1)
        self.assertEqual(len(email.to), 1)
        self.assertIn(self.persona.email_contatto, email.to)
        self.assertIn(self.persona.utenza.email, email.to)

        # Nessuna email di contatto
        self.persona.email_contatto = ''
        self.persona.save()

        Messaggio.costruisci_e_invia(destinatari=[self.persona],
                                     oggetto="Stessa email",
                                     modello="email.html",
                                     utenza=True)
        # c'è anche quella precedente
        self.assertEqual(len(mail.outbox), 2)
        email = mail.outbox[1]
        self.assertTrue(email.subject.find('Stessa email') > -1)
        self.assertEqual(len(email.to), 1)
        self.assertNotIn(self.persona.email_contatto, email.to)
        self.assertIn(self.persona.utenza.email, email.to)
Esempio n. 5
0
 def _invia_msg_singolo(self):
     Messaggio.costruisci_e_invia(
         destinatari=[self.persone[0].persona],
         oggetto="Email contatto",
         modello="email.html",
         utenza=True
     )
Esempio n. 6
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_invia(
            oggetto=oggetto,
            modello=modello,
            corpo=corpo,
            mittente=self.firmatario,
            destinatari=destinatari
        )
Esempio n. 7
0
 def disiscrivi(self, mittente=None):
     """
     Disiscrive partecipante dal corso base.
     """
     self.autorizzazioni_ritira()
     Messaggio.costruisci_e_invia(
         oggetto="Disiscrizione dal Corso Base: %s" % self.corso,
         modello="email_aspirante_corso_deiscrizione.html",
         corpo={
             "partecipazione": self,
             "corso": self.corso,
             "persona": self.persona,
             "mittente": mittente,
         },
         mittente=mittente,
         destinatari=[self.persona],
     )
     Messaggio.costruisci_e_invia(
         oggetto="Disiscrizione dal Corso Base: %s" % self.corso,
         modello="email_aspirante_corso_deiscrizione_mittente.html",
         corpo={
             "partecipazione": self,
             "corso": self.corso,
             "persona": self.persona,
             "richiedente": mittente,
         },
         mittente=None,
         destinatari=[mittente],
     )
Esempio n. 8
0
 def _invia_notifica_registrazione(self):
     Messaggio.costruisci_e_invia(
         oggetto="Ricevuta %d del %d: %s" %
         (self.progressivo, self.anno, self.causale),
         modello="email_ricevuta_nuova_notifica.html",
         corpo={"ricevuta": self},
         mittente=self.registrato_da,
         destinatari=[self.persona],
     )
Esempio n. 9
0
 def _invia_notifica_annullamento(self):
     Messaggio.costruisci_e_invia(
         oggetto="ANNULLATA Ricevuta %d del %d" %
         (self.progressivo, self.anno),
         modello="email_ricevuta_annullata_notifica.html",
         corpo={"ricevuta": self},
         mittente=self.registrato_da,
         destinatari=[self.persona],
     )
Esempio n. 10
0
 def _invia_notifica_registrazione(self):
     Messaggio.costruisci_e_invia(
         oggetto="Ricevuta %d del %d: %s" % (
             self.progressivo, self.anno, self.causale
         ),
         modello="email_ricevuta_nuova_notifica.html",
         corpo={"ricevuta": self},
         mittente=self.registrato_da,
         destinatari=[self.persona],
     )
Esempio n. 11
0
 def _invia_notifica_annullamento(self):
     Messaggio.costruisci_e_invia(
         oggetto="ANNULLATA Ricevuta %d del %d" % (
             self.progressivo, self.anno
         ),
         modello="email_ricevuta_annullata_notifica.html",
         corpo={"ricevuta": self},
         mittente=self.registrato_da,
         destinatari=[self.persona],
     )
Esempio n. 12
0
 def notifica_negata(self):
     from posta.models import Messaggio
     Messaggio.costruisci_e_invia(
         oggetto="Richiesta di %s RESPINTA" % (self.oggetto.RICHIESTA_NOME,),
         modello="email_autorizzazione_negata.html",
         corpo={
             "richiesta": self,
         },
         mittente=self.firmatario,
         destinatari=[self.richiedente]
     )
Esempio n. 13
0
 def test_flag_utenza(self):
     Messaggio.costruisci_e_invia(destinatari=[self.persona],
                                  oggetto="Entrambe le email",
                                  modello="email.html",
                                  utenza=True)
     self.assertEqual(len(mail.outbox), 1)
     email = mail.outbox[0]
     self.assertTrue(email.subject.find('Entrambe le email') > -1)
     self.assertEqual(len(email.to), 2)
     self.assertIn(self.persona.email_contatto, email.to)
     self.assertIn(self.persona.utenza.email, email.to)
Esempio n. 14
0
    def test_flag_no_utenza(self):

        Messaggio.costruisci_e_invia(destinatari=[self.persona],
                                     oggetto="Solo email di contatto",
                                     modello="email.html")
        self.assertEqual(len(mail.outbox), 1)
        email = mail.outbox[0]
        self.assertTrue(email.subject.find('Solo email di contatto') > -1)
        self.assertEqual(len(email.to), 1)
        self.assertIn(self.persona.email_contatto, email.to)
        self.assertNotIn(self.persona.utenza.email, email.to)
Esempio n. 15
0
 def test_flag_utenza(self):
     Messaggio.costruisci_e_invia(
         destinatari=[self.persona],
         oggetto="Entrambe le email",
         modello="email.html",
         utenza=True
     )
     self.assertEqual(len(mail.outbox), 1)
     email = mail.outbox[0]
     self.assertTrue(email.subject.find('Entrambe le email') > -1)
     self.assertEqual(len(email.to), 2)
     self.assertIn(self.persona.email_contatto, email.to)
     self.assertIn(self.persona.utenza.email, email.to)
Esempio n. 16
0
    def test_flag_no_utenza(self):

        Messaggio.costruisci_e_invia(
            destinatari=[self.persona],
            oggetto="Solo email di contatto",
            modello="email.html"
        )
        self.assertEqual(len(mail.outbox), 1)
        email = mail.outbox[0]
        self.assertTrue(email.subject.find('Solo email di contatto') > -1)
        self.assertEqual(len(email.to), 1)
        self.assertIn(self.persona.email_contatto, email.to)
        self.assertNotIn(self.persona.utenza.email, email.to)
Esempio n. 17
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.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_invia(
                oggetto=oggetto,
                modello=modello,
                corpo=corpo,
                destinatari=[persona['persona']]
            )
Esempio n. 18
0
 def _invia_notifica():
     Messaggio.costruisci_e_invia(
         oggetto=
         "IMPORTANTE: Cambio e-mail di accesso a Gaia (credenziali)",
         modello="email_credenziali_modificate.html",
         corpo={
             "vecchia_email": vecchia_email,
             "nuova_email": nuova_email,
             "persona": persona,
             "autore": me,
         },
         mittente=me,
         destinatari=[persona],
         utenza=True)
Esempio n. 19
0
def supporto(request, me=None):
    from base.forms_extra import ModuloRichiestaSupporto
    modulo = None
    if me:
        deleghe = set([d.tipo for d in me.deleghe_attuali()])
        tipi = set((UFFICIO_SOCI, UFFICIO_SOCI_TEMPORANEO, UFFICIO_SOCI_UNITA,
                    PRESIDENTE))
        if deleghe.intersection(tipi):
            modulo = ModuloRichiestaSupportoPersone(request.POST or None)
        else:
            modulo = ModuloRichiestaSupporto(request.POST or None)

        scelte = modulo.fields['tipo'].choices

        # Solo i delegati possono contattare SECONDO_LIVELLO e TERZO_LIVELLO
        if not me.deleghe_attuali().exists():
            scelte = rimuovi_scelte(
                [modulo.TERZO_LIVELLO, modulo.SECONDO_LIVELLO], scelte)

        modulo.fields['tipo'].choices = scelte

    if modulo and modulo.is_valid():
        tipo = modulo.cleaned_data['tipo']
        oggetto = modulo.cleaned_data['oggetto']
        descrizione = modulo.cleaned_data['descrizione']
        persona = modulo.cleaned_data.get('persona', None)

        oggetto = "(%s) %s" % (tipo, oggetto)
        Messaggio.costruisci_e_invia(
            oggetto=oggetto,
            modello="email_supporto.html",
            mittente=me,
            destinatari=[],
            corpo={
                "testo": descrizione,
                "mittente": me,
                "persona": persona
            },
        )
        return messaggio_generico(
            request,
            me,
            titolo="Richiesta inoltrata",
            messaggio=
            "Grazie per aver contattato il supporto. La tua richiesta con "
            "oggetto '%s' è stata correttamente inoltrata. Riceverai a minuti "
            "un messaggio di conferma del codice ticket assegnato alla "
            "tua richiesta." % (oggetto, ))
    contesto = {"modulo": modulo}
    return 'supporto.html', contesto
Esempio n. 20
0
def aspirante_corso_base_iscritti_aggiungi(request, me, pk):
    corso = get_object_or_404(CorsoBase, pk=pk)
    if not me.permessi_almeno(corso, MODIFICA):
        return redirect(ERRORE_PERMESSI)

    if not corso.possibile_aggiungere_iscritti:
        return errore_generico(request, me, titolo="Impossibile aggiungere iscritti",
                               messaggio="Non si possono aggiungere altri iscritti a questo "
                                         "stadio della vita del corso base.",
                               torna_titolo="Torna al corso base", torna_url=corso.url_iscritti)

    modulo = ModuloIscrittiCorsoBaseAggiungi(request.POST or None)
    risultati = []
    if modulo.is_valid():

        for persona in modulo.cleaned_data['persone']:
            esito = corso.persona(persona)
            ok = False

            if esito in corso.PUOI_ISCRIVERTI or \
                            esito in corso.NON_PUOI_ISCRIVERTI_SOLO_SE_IN_AUTONOMIA:
                ok = True
                p = PartecipazioneCorsoBase(persona=persona, corso=corso)
                p.save()
                Log.crea(me, p)
                Messaggio.costruisci_e_invia(
                    oggetto="Iscrizione a Corso Base",
                    modello="email_corso_base_iscritto.html",
                    corpo={
                        "persona": persona,
                        "corso": corso,
                    },
                    mittente=me,
                    destinatari=[persona]
                )

            risultati += [{
                "persona": persona,
                "esito": esito,
                "ok": ok,
            }]

    contesto = {
        "corso": corso,
        "puo_modificare": True,
        "modulo": modulo,
        "risultati": risultati,
    }
    return 'aspirante_corso_base_scheda_iscritti_aggiungi.html', contesto
Esempio n. 21
0
    def test_flag_utenza_solo_email_di_contatto(self):
        self.persona.email_contatto = self.persona.utenza.email
        self.persona.save()
        self.persona.utenza = None
        self.persona.save()

        Messaggio.costruisci_e_invia(destinatari=[self.persona],
                                     oggetto="Email contatto",
                                     modello="email.html",
                                     utenza=True)
        self.assertEqual(len(mail.outbox), 1)
        email = mail.outbox[0]
        self.assertTrue(email.subject.find('Email contatto') > -1)
        self.assertEqual(len(email.to), 1)
        self.assertIn(self.persona.email_contatto, email.to)
        self.assertEqual(1, len(email.to))
Esempio n. 22
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_invia(
            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],
        )
Esempio n. 23
0
    def genera_credenziali(self, richiedente=None):
        nuova_password = genera_uuid_casuale()
        self.set_password(nuova_password)
        self.save()

        Messaggio.costruisci_e_invia(
            oggetto="Credenziali per accedere a Gaia",
            modello="email_credenziali.html",
            corpo={
                "nuova_password": nuova_password,
                "utenza": self,
                "persona": self.persona,
                "richiedente": richiedente,
            },
            mittente=None,
            destinatari=[self.persona],
        )
Esempio n. 24
0
def supporto(request, me=None):
    from base.forms_extra import ModuloRichiestaSupporto
    modulo = None
    if me:
        deleghe = set([d.tipo for d in me.deleghe_attuali()])
        tipi = set((UFFICIO_SOCI, UFFICIO_SOCI_TEMPORANEO, UFFICIO_SOCI_UNITA, PRESIDENTE))
        if deleghe.intersection(tipi):
            modulo = ModuloRichiestaSupportoPersone(request.POST or None)
        else:
            modulo = ModuloRichiestaSupporto(request.POST or None)

        scelte = modulo.fields['tipo'].choices

        # Solo i delegati possono contattare SECONDO_LIVELLO e TERZO_LIVELLO
        if not me.deleghe_attuali().exists():
            scelte = rimuovi_scelte([modulo.TERZO_LIVELLO, modulo.SECONDO_LIVELLO], scelte)

        modulo.fields['tipo'].choices = scelte

    if modulo and modulo.is_valid():
        tipo = modulo.cleaned_data['tipo']
        oggetto = modulo.cleaned_data['oggetto']
        descrizione = modulo.cleaned_data['descrizione']
        persona = modulo.cleaned_data.get('persona', None)

        oggetto = "(%s) %s" % (tipo, oggetto)
        Messaggio.costruisci_e_invia(
            oggetto=oggetto,
            modello="email_supporto.html",
            mittente=me,
            destinatari=[],
            corpo={
                "testo": descrizione,
                "mittente": me,
                "persona": persona
            },
        )
        return messaggio_generico(request, me, titolo="Richiesta inoltrata",
                                  messaggio="Grazie per aver contattato il supporto. La tua richiesta con "
                                            "oggetto '%s' è stata correttamente inoltrata. Riceverai a minuti "
                                            "un messaggio di conferma del codice ticket assegnato alla "
                                            "tua richiesta." % (oggetto,))
    contesto = {
        "modulo": modulo
    }
    return 'supporto.html', contesto
Esempio n. 25
0
 def autorizzazione_concessa(self, modulo=None, auto=False):
     with atomic():
         corso = self.corso
         partecipazione = PartecipazioneCorsoBase.objects.create(persona=self.persona, corso=self.corso)
         partecipazione.autorizzazione_concessa()
         Messaggio.costruisci_e_invia(
             oggetto="Iscrizione a Corso Base",
             modello="email_corso_base_iscritto.html",
             corpo={
                 "persona": self.persona,
                 "corso": self.corso,
             },
             mittente=self.invitante,
             destinatari=[self.persona]
         )
         self.delete()
         return corso
Esempio n. 26
0
    def genera_credenziali(self, richiedente=None):
        nuova_password = genera_uuid_casuale()
        self.set_password(nuova_password)
        self.save()

        Messaggio.costruisci_e_invia(
            oggetto="Credenziali per accedere a Gaia",
            modello="email_credenziali.html",
            corpo={
                "nuova_password": nuova_password,
                "utenza": self,
                "persona": self.persona,
                "richiedente": richiedente,
            },
            mittente=None,
            destinatari=[self.persona],
        )
Esempio n. 27
0
    def test_flag_utenza_solo_email_di_contatto(self):
        self.persona.email_contatto = self.persona.utenza.email
        self.persona.save()
        self.persona.utenza = None
        self.persona.save()

        Messaggio.costruisci_e_invia(
            destinatari=[self.persona],
            oggetto="Email contatto",
            modello="email.html",
            utenza=True
        )
        self.assertEqual(len(mail.outbox), 1)
        email = mail.outbox[0]
        self.assertTrue(email.subject.find('Email contatto') > -1)
        self.assertEqual(len(email.to), 1)
        self.assertIn(self.persona.email_contatto, email.to)
        self.assertEqual(1, len(email.to))
Esempio n. 28
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_invia(
            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],
        )
Esempio n. 29
0
 def autorizzazione_concessa(self,
                             modulo=None,
                             auto=False,
                             notifiche_attive=True,
                             data=None):
     with atomic():
         corso = self.corso
         partecipazione = PartecipazioneCorsoBase.objects.create(
             persona=self.persona, corso=self.corso)
         partecipazione.autorizzazione_concessa()
         if notifiche_attive:
             Messaggio.costruisci_e_invia(
                 oggetto="Iscrizione a Corso Base",
                 modello="email_corso_base_iscritto.html",
                 corpo={
                     "persona": self.persona,
                     "corso": self.corso,
                 },
                 mittente=self.invitante,
                 destinatari=[self.persona])
         self.delete()
         return corso
Esempio n. 30
0
def recupera_password(request):
    """
    Mostra semplicemente la pagina di recupero password.
    """

    def _errore(contesto, modulo, livello=None, delegati=None, email=None, codice_fiscale=None):
        contesto.update({
                'modulo': ModuloRecuperaPassword(),
            })
        if livello:
            contesto.update({'errore': livello})
        if delegati:
            contesto.update({'delegati': delegati})
        if email:
            contesto.update({'email': email})
        if codice_fiscale:
            contesto.update({'codice_fiscale': codice_fiscale})
        return 'base_recupera_password.html', contesto

    contesto = {}
    if request.method == 'POST':
        modulo = ModuloRecuperaPassword(request.POST)
        if modulo.is_valid():

            codice_fiscale = modulo.cleaned_data['codice_fiscale'].upper()
            email = modulo.cleaned_data['email'].lower()
            try:
                per = Persona.objects.get(codice_fiscale=codice_fiscale)
                delegati = per.deleghe_anagrafica()
                if not hasattr(per, 'utenza'):
                    return _errore(contesto, modulo, 2, delegati, email=email, codice_fiscale=codice_fiscale)
                if per.utenza.email != email:
                   return _errore(contesto, modulo, 3, delegati, email=email, codice_fiscale=codice_fiscale)

                Messaggio.costruisci_e_invia(
                    destinatari=[per],
                    oggetto="Nuova password",
                    modello="email_recupero_password.html",
                    corpo={
                        "persona": per,
                        "uid": urlsafe_base64_encode(force_bytes(per.utenza.pk)),
                        "reset_pw_link": default_token_generator.make_token(per.utenza),
                        "scadenza_token": django_settings.PASSWORD_RESET_TIMEOUT_DAYS * 24
                    },
                    utenza=True
                )

                return messaggio_generico(request, None,
                                          titolo="Controlla la tua casella e-mail",
                                          messaggio="Ti abbiamo inviato le istruzioni per cambiare la "
                                                    "tua password tramite e-mail. Controlla la tua "
                                                    "casella al più presto. ",
                                          torna_url="/utente/cambia-password/",
                                          torna_titolo="Accedi e cambia la tua password")

            except Persona.DoesNotExist:
                return _errore(contesto, modulo, 1, email=email, codice_fiscale=codice_fiscale)
    else:
        modulo = ModuloRecuperaPassword()
    contesto.update({
        'modulo': modulo,
    })
    return 'base_recupera_password.html', contesto
Esempio n. 31
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_invia(oggetto=oggetto,
                                         modello=modello,
                                         corpo=corpo,
                                         destinatari=[persona['persona']])
Esempio n. 32
0
 def _invia_msg_singolo(self):
     Messaggio.costruisci_e_invia(destinatari=[self.persone[0].persona],
                                  oggetto="Email contatto",
                                  modello="email.html",
                                  utenza=True)
Esempio n. 33
0
def recupera_password(request):
    """
    Mostra semplicemente la pagina di recupero password.
    """

    def _errore(contesto, modulo, livello=None, delegati=None, email=None, codice_fiscale=None):
        contesto.update({
                'modulo': ModuloRecuperaPassword(),
            })
        if livello:
            contesto.update({'errore': livello})
        if delegati:
            contesto.update({'delegati': delegati})
        if email:
            contesto.update({'email': email})
        if codice_fiscale:
            contesto.update({'codice_fiscale': codice_fiscale})
        return 'base_recupera_password.html', contesto

    contesto = {}
    if request.method == 'POST':
        modulo = ModuloRecuperaPassword(request.POST)
        if modulo.is_valid():

            codice_fiscale = modulo.cleaned_data['codice_fiscale'].upper()
            email = modulo.cleaned_data['email'].lower()
            try:
                per = Persona.objects.get(codice_fiscale=codice_fiscale)
                delegati = per.deleghe_anagrafica()
                if not hasattr(per, 'utenza'):
                    return _errore(contesto, modulo, 2, delegati, email=email, codice_fiscale=codice_fiscale)
                if per.utenza.email != email:
                   return _errore(contesto, modulo, 3, delegati, email=email, codice_fiscale=codice_fiscale)

                Messaggio.costruisci_e_invia(
                    destinatari=[per],
                    oggetto="Nuova password",
                    modello="email_recupero_password.html",
                    corpo={
                        "persona": per,
                        "uid": urlsafe_base64_encode(force_bytes(per.utenza.pk)),
                        "reset_pw_link": default_token_generator.make_token(per.utenza),
                        "scadenza_token": django_settings.PASSWORD_RESET_TIMEOUT_DAYS * 24
                    },
                    utenza=True
                )

                return messaggio_generico(request, None,
                                          titolo="Controlla la tua casella e-mail",
                                          messaggio="Ti abbiamo inviato le istruzioni per cambiare la "
                                                    "tua password tramite e-mail. Controlla la tua "
                                                    "casella al più presto. ",
                                          torna_url="/utente/cambia-password/",
                                          torna_titolo="Accedi e cambia la tua password")

            except Persona.DoesNotExist:
                return _errore(contesto, modulo, 1, email=email, codice_fiscale=codice_fiscale)
    else:
        modulo = ModuloRecuperaPassword()
    contesto.update({
        'modulo': modulo,
    })
    return 'base_recupera_password.html', contesto
Esempio n. 34
0
def aspirante_corso_base_iscritti_aggiungi(request, me, pk):
    corso = get_object_or_404(CorsoBase, pk=pk)
    if not me.permessi_almeno(corso, MODIFICA):
        return redirect(ERRORE_PERMESSI)

    if not corso.possibile_aggiungere_iscritti:
        return errore_generico(request, me, titolo="Impossibile aggiungere iscritti",
                               messaggio="Non si possono aggiungere altri iscritti a questo "
                                         "stadio della vita del corso base.",
                               torna_titolo="Torna al corso base", torna_url=corso.url_iscritti)

    modulo = ModuloIscrittiCorsoBaseAggiungi(request.POST or None)
    risultati = []
    if modulo.is_valid():

        for persona in modulo.cleaned_data['persone']:
            esito = corso.persona(persona)
            ok = PartecipazioneCorsoBase.NON_ISCRITTO
            partecipazione = None

            if esito in corso.PUOI_ISCRIVERTI or esito in corso.NON_PUOI_ISCRIVERTI_SOLO_SE_IN_AUTONOMIA:
                if hasattr(persona, 'aspirante'):
                    inviti = InvitoCorsoBase.con_esito_ok() | InvitoCorsoBase.con_esito_pending()
                    if inviti.filter(persona=persona, corso=corso).exists():
                        ok = PartecipazioneCorsoBase.INVITO_INVIATO
                        partecipazione = InvitoCorsoBase.objects.filter(persona=persona, corso=corso).first()
                    else:
                        partecipazione = InvitoCorsoBase(persona=persona, corso=corso, invitante=me)
                        partecipazione.save()
                        partecipazione.richiedi()
                        ok = PartecipazioneCorsoBase.IN_ATTESA_ASPIRANTE
                else:
                    partecipazione = PartecipazioneCorsoBase.objects.create(persona=persona, corso=corso)
                    ok = PartecipazioneCorsoBase.ISCRITTO
                    Messaggio.costruisci_e_invia(
                        oggetto="Iscrizione a Corso Base",
                        modello="email_corso_base_iscritto.html",
                        corpo={
                            "persona": persona,
                            "corso": corso,
                        },
                        mittente=me,
                        destinatari=[persona]
                    )

                Log.crea(me, partecipazione)

            risultati += [{
                "persona": persona,
                "partecipazione": partecipazione,
                "esito": esito,
                "ok": ok,
            }]

    contesto = {
        "corso": corso,
        "puo_modificare": True,
        "modulo": modulo,
        "risultati": risultati,
    }
    return 'aspirante_corso_base_scheda_iscritti_aggiungi.html', contesto
Esempio n. 35
0
def aspirante_corso_base_iscritti_aggiungi(request, me, pk):
    corso = get_object_or_404(CorsoBase, pk=pk)
    if not me.permessi_almeno(corso, MODIFICA):
        return redirect(ERRORE_PERMESSI)

    if not corso.possibile_aggiungere_iscritti:
        return errore_generico(
            request,
            me,
            titolo="Impossibile aggiungere iscritti",
            messaggio="Non si possono aggiungere altri iscritti a questo "
            "stadio della vita del corso base.",
            torna_titolo="Torna al corso base",
            torna_url=corso.url_iscritti)

    modulo = ModuloIscrittiCorsoBaseAggiungi(request.POST or None)
    risultati = []
    if modulo.is_valid():

        for persona in modulo.cleaned_data['persone']:
            esito = corso.persona(persona)
            ok = PartecipazioneCorsoBase.NON_ISCRITTO
            partecipazione = None

            if esito in corso.PUOI_ISCRIVERTI or esito in corso.NON_PUOI_ISCRIVERTI_SOLO_SE_IN_AUTONOMIA:
                if hasattr(persona, 'aspirante'):
                    inviti = InvitoCorsoBase.con_esito_ok(
                    ) | InvitoCorsoBase.con_esito_pending()
                    if inviti.filter(persona=persona, corso=corso).exists():
                        ok = PartecipazioneCorsoBase.INVITO_INVIATO
                        partecipazione = InvitoCorsoBase.objects.filter(
                            persona=persona, corso=corso).first()
                    else:
                        partecipazione = InvitoCorsoBase(persona=persona,
                                                         corso=corso,
                                                         invitante=me)
                        partecipazione.save()
                        partecipazione.richiedi()
                        ok = PartecipazioneCorsoBase.IN_ATTESA_ASPIRANTE
                else:
                    partecipazione = PartecipazioneCorsoBase.objects.create(
                        persona=persona, corso=corso)
                    ok = PartecipazioneCorsoBase.ISCRITTO
                    Messaggio.costruisci_e_invia(
                        oggetto="Iscrizione a Corso Base",
                        modello="email_corso_base_iscritto.html",
                        corpo={
                            "persona": persona,
                            "corso": corso,
                        },
                        mittente=me,
                        destinatari=[persona])

                Log.crea(me, partecipazione)

            risultati += [{
                "persona": persona,
                "partecipazione": partecipazione,
                "esito": esito,
                "ok": ok,
            }]

    contesto = {
        "corso": corso,
        "puo_modificare": True,
        "modulo": modulo,
        "risultati": risultati,
    }
    return 'aspirante_corso_base_scheda_iscritti_aggiungi.html', contesto