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)
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)
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], )
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)
def _invia_msg_singolo(self): Messaggio.costruisci_e_invia( destinatari=[self.persone[0].persona], oggetto="Email contatto", modello="email.html", utenza=True )
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 )
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], )
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], )
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], )
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], )
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], )
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] )
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)
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)
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)
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)
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']] )
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)
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
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
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))
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], )
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], )
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
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
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], )
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))
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], )
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
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
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']])
def _invia_msg_singolo(self): Messaggio.costruisci_e_invia(destinatari=[self.persone[0].persona], oggetto="Email contatto", modello="email.html", utenza=True)
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
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
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