Пример #1
0
def aspirante_corso_base_attiva(request, me, pk):
    corso = get_object_or_404(CorsoBase, pk=pk)
    if not me.permessi_almeno(corso, MODIFICA):
        return redirect(ERRORE_PERMESSI)
    if corso.stato != corso.PREPARAZIONE:
        return messaggio_generico(
            request,
            me,
            titolo="Il corso è già attivo",
            messaggio="Non puoi attivare un corso già attivo",
            torna_titolo="Torna al Corso",
            torna_url=corso.url)
    if not corso.attivabile():
        return errore_generico(
            request,
            me,
            titolo="Impossibile attivare questo corso",
            messaggio="Non sono soddisfatti tutti i criteri di attivazione. "
            "Torna alla pagina del corso e verifica che tutti i "
            "criteri siano stati soddisfatti prima di attivare un "
            "nuovo corso.",
            torna_titolo="Torna al Corso",
            torna_url=corso.url)

    if corso.data_inizio < poco_fa():
        return errore_generico(
            request,
            me,
            titolo="Impossibile attivare un corso già iniziato",
            messaggio=
            "Siamo spiacenti, ma non possiamo attivare il corso e inviare "
            "le e-mail a tutti gli aspiranti nella zona se il corso è "
            "già iniziato. Ti inviato a verificare i dati del corso.",
            torna_titolo="Torna al Corso",
            torna_url=corso.url)

    corpo = {"corso": corso, "persona": me}
    testo = get_template("email_aspirante_corso_inc_testo.html").render(corpo)

    if request.POST:
        corso.attiva(rispondi_a=me)
        return messaggio_generico(
            request,
            me,
            titolo="Corso attivato con successo",
            messaggio=
            "A breve tutti gli aspiranti nelle vicinanze verranno informati "
            "dell'attivazione di questo corso base.",
            torna_titolo="Torna al Corso",
            torna_url=corso.url)

    contesto = {
        "corso": corso,
        "puo_modificare": True,
        "testo": testo,
    }
    return 'aspirante_corso_base_scheda_attiva.html', contesto
Пример #2
0
def attivita_gruppo(request, me):
    """
    Crea gruppi di lavoro per il mio comitato o elimina quelli di cui sono responsabile.
    """
    # Sono responsabile di queste aree di intervento.
    area_permessi = me.oggetti_permesso(GESTIONE_ATTIVITA_AREA)

    # Attività nelle aree di cui sono responsabile.
    attivita_specifica = Attivita.objects.filter(area__in=area_permessi)

    # Gruppi nelle aree di cui sono responsabile.
    gruppi_gestione = Gruppo.objects.filter(area__in=area_permessi)

    modulo_attivita_specifica = ModuloGruppoSpecifico(request.POST or None, attivita_specifica=attivita_specifica,
                                                      request=request.POST)
    modulo_attivita_non_specifica = ModuloGruppoNonSpecifico(request.POST or None, area_permessi=area_permessi,
                                                             request=request.POST)

    from anagrafica.permessi.applicazioni import REFERENTE_GRUPPO
    if 'specifico' in request.POST:
        if modulo_attivita_specifica.is_valid():
            attivita_specifica = modulo_attivita_specifica.cleaned_data['attivita_specifica']
            area = Area.objects.get(id=attivita_specifica.area_id)
            gruppo = Gruppo.objects.create(nome=attivita_specifica.nome, sede=attivita_specifica.sede,
                                  obiettivo=area.obiettivo, attivita=attivita_specifica,
                                  estensione=attivita_specifica.estensione.estensione,
                                  area=attivita_specifica.area)
            gruppo.aggiungi_delegato(REFERENTE_GRUPPO, me)
            return messaggio_generico(request, None,
                                      titolo="Gruppo creato",
                                      messaggio="Hai creato un gruppo per un attività specifica",
                                      torna_url="/attivita/gruppo/",
                                      torna_titolo="Torna alla gestione dei gruppi")

    if 'non_specifico' in request.POST:
        if modulo_attivita_non_specifica.is_valid():
            nome_gruppo = modulo_attivita_non_specifica.cleaned_data['nome']
            area = modulo_attivita_non_specifica.cleaned_data['area']
            gruppo = Gruppo.objects.create(nome=nome_gruppo, sede=area.sede, obiettivo=area.obiettivo,
                                  attivita=None, estensione=area.sede.estensione, area_id=area.id)
            gruppo.aggiungi_delegato(REFERENTE_GRUPPO, me)
            return messaggio_generico(request, None,
                                      titolo="Gruppo creato",
                                      messaggio="Hai creato un gruppo per un'area",
                                      torna_url="/attivita/gruppo/",
                                      torna_titolo="Torna alla gestione dei gruppi")

    contesto = {
        "gruppi_gestione": gruppi_gestione,
        "modulo_attivita_specifica": modulo_attivita_specifica,
        "modulo_attivita_non_specifica": modulo_attivita_non_specifica,
    }
    return 'attivita_gruppo.html', contesto
Пример #3
0
def aspirante_corso_base_iscriviti(request, me=None, pk=None):

    corso = get_object_or_404(CorsoBase, pk=pk)
    puoi_partecipare = corso.persona(me)
    if not puoi_partecipare in corso.PUOI_ISCRIVERTI:
        return errore_generico(
            request,
            me,
            titolo="Non puoi partecipare a questo corso",
            messaggio="Siamo spiacenti, ma non sembra che tu possa partecipare "
            "a questo corso per qualche motivo. ",
            torna_titolo="Torna al corso",
            torna_url=corso.url)

    p = PartecipazioneCorsoBase(persona=me, corso=corso)
    p.save()
    p.richiedi()
    return messaggio_generico(
        request,
        me,
        titolo="Sei iscritto al corso base",
        messaggio="Complimenti! Abbiamo inoltrato la tua richiesta al direttore "
        "del corso, che ti contatterà appena possibile.",
        torna_titolo="Torna al corso",
        torna_url=corso.url)
Пример #4
0
def aspirante_corso_base_ritirati(request, me=None, pk=None):

    corso = get_object_or_404(CorsoBase, pk=pk)
    puoi_partecipare = corso.persona(me)
    if not puoi_partecipare == corso.SEI_ISCRITTO_PUOI_RITIRARTI:
        return errore_generico(
            request,
            me,
            titolo="Non puoi ritirarti da questo corso",
            messaggio="Siamo spiacenti, ma non sembra che tu possa ritirarti "
            "da questo corso per qualche motivo. ",
            torna_titolo="Torna al corso",
            torna_url=corso.url)

    p = PartecipazioneCorsoBase.con_esito_pending(corso=corso,
                                                  persona=me).first()
    p.ritira()

    return messaggio_generico(
        request,
        me,
        titolo="Ti sei ritirato dal corso",
        messaggio="Siamo spiacenti che hai deciso di ritirarti da questo corso. "
        "La tua partecipazione è stata ritirata correttamente. "
        "Non esitare a iscriverti a questo o un altro corso, nel caso cambiassi idea.",
        torna_titolo="Torna alla pagina del corso",
        torna_url=corso.url)
Пример #5
0
def attivita_scheda_turni_partecipa(request, me, pk=None, turno_pk=None):
    """
    Mostra la scheda "Informazioni" di una attivita'.
    """

    turno = get_object_or_404(Turno, pk=turno_pk)
    stato = turno.persona(me)

    if stato not in turno.TURNO_PUOI_PARTECIPARE:
        return errore_generico(request, me, titolo="Non puoi partecipare a questo turno",
                               messaggio="Siamo spiacenti, ma ci risulta che tu non possa "
                                         "richiedere partecipazione a questo turno. Vai "
                                         "all'elenco dei turni per maggiori informazioni "
                                         "sulla motivazione. ",
                               torna_titolo="Turni dell'attività",
                               torna_url=turno.url,
                               )

    p = Partecipazione(
        turno=turno,
        persona=me,
    )
    p.save()
    p.richiedi()

    return messaggio_generico(request, me, titolo="Ottimo! Richiesta inoltrata.",
                              messaggio="La tua richiesta è stata inoltrata ai referenti di "
                                        "questa attività, che potranno confermarla o negarla. "
                                        "Ti manderemo una e-mail non appena risponderanno alla "
                                        "tua richiesta. Puoi sempre controllare lo stato delle tue"
                                        "richieste di partecipazione da 'Attivita' > 'I miei turni'. ",
                              torna_titolo="Vai a 'I miei turni'",
                              torna_url="/attivita/storico/")
Пример #6
0
def attivita_scheda_turni_ritirati(request, me, pk=None, turno_pk=None):

    turno = get_object_or_404(Turno, pk=turno_pk)
    stato = turno.persona(me)

    if stato != turno.TURNO_PRENOTATO_PUOI_RITIRARTI:
        return errore_generico(
            request,
            me,
            titolo="Non puoi ritirare la tua partecipazione",
            messaggio="Una volta che la tua partecipazione è stata confermata, "
            "non puoi più ritirarla da Gaia. Se non puoi presentarti, "
            "scrivi a un referente dell'attività, che potrà valutare "
            "la situazione e rimuoverti dai partecipanti.",
            torna_titolo="Torna al turno",
            torna_url=turno.url)

    partecipazione = Partecipazione.con_esito_pending(turno=turno,
                                                      persona=me).first()
    if not partecipazione:
        raise ValueError(
            "TURNO_PRENOTATO_PUOI_RITIRARTI assegnato, ma nessuna partecipazione"
            "trovata. ")

    partecipazione.autorizzazioni_ritira()
    return messaggio_generico(
        request,
        me,
        titolo="Richiesta ritirata.",
        messaggio="La tua richiesta di partecipazione a questo turno "
        "è stata ritirata con successo.",
        torna_titolo="Torna al turno",
        torna_url=turno.url)
Пример #7
0
def attivita_scheda_turni_rimuovi(request, me, pk=None, turno_pk=None, partecipante_pk=None):

    turno = get_object_or_404(Turno, pk=turno_pk)
    stato = turno.persona(me)

    if stato != turno.TURNO_PRENOTATO_PUOI_RITIRARTI:
        return errore_generico(request, me, titolo="Non puoi ritirare la tua partecipazione",
                               messaggio="Una volta che la tua partecipazione è stata confermata, "
                                         "non puoi più ritirarla da Gaia. Se non puoi presentarti, "
                                         "scrivi a un referente dell'attività, che potrà valutare "
                                         "la situazione e rimuoverti dai partecipanti.",
                               torna_titolo="Torna al turno",
                               torna_url=turno.url)

    partecipazione = Partecipazione.con_esito_pending(turno=turno, persona=me).first()
    if not partecipazione:
        raise ValueError("TURNO_PRENOTATO_PUOI_RITIRARTI assegnato, ma nessuna partecipazione"
                         "trovata. ")

    partecipazione.autorizzazioni_ritira()
    return messaggio_generico(request, me, titolo="Richiesta ritirata.",
                              messaggio="La tua richiesta di partecipazione a questo turno "
                                        "è stata ritirata con successo.",
                              torna_titolo="Torna al turno",
                              torna_url=turno.url)
Пример #8
0
def aspirante_corso_base_iscritti_cancella(request, me, pk, iscritto):
    corso = get_object_or_404(CorsoBase, pk=pk)
    if not me.permessi_almeno(corso, MODIFICA):
        return redirect(ERRORE_PERMESSI)

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

    try:
        persona = Persona.objects.get(pk=iscritto)
    except Persona.DoesNotExist:
        return errore_generico(request, me, titolo="Impossibile cancellare iscritto",
                               messaggio="La persona cercata non è iscritta.",
                               torna_titolo="Torna al corso base", torna_url=corso.url_iscritti)
    if request.method == 'POST':
        for partecipazione in corso.partecipazioni_confermate_o_in_attesa().filter(persona=persona):
            partecipazione.disiscrivi(mittente=me)
        for partecipazione in corso.inviti_confermati_o_in_attesa().filter(persona=persona):
            partecipazione.disiscrivi(mittente=me)
        return messaggio_generico(request, me, titolo="Iscritto cancellato",
                                  messaggio="{} è stato cancellato dal corso {}.".format(persona, corso),
                                  torna_titolo="Torna al corso base", torna_url=corso.url_iscritti)
    contesto = {
        "corso": corso,
        "puo_modificare": True,
        "persona": persona,
    }
    return 'aspirante_corso_base_scheda_iscritti_cancella.html', contesto
Пример #9
0
def attivita_scheda_cancella(request, me, pk):
    attivita = get_object_or_404(Attivita, pk=pk)
    if not me.permessi_almeno(attivita, COMPLETO):
        return redirect(ERRORE_PERMESSI)

    if not attivita.cancellabile:
        return errore_generico(
            request,
            me,
            titolo="Attività non cancellabile",
            messaggio="Questa attività non può essere cancellata.")

    titolo_messaggio = "Attività cancellata"
    testo_messaggio = "L'attività è stata cancellata con successo."
    if 'cancella-gruppo' in request.path.split('/'):
        try:
            gruppo = Gruppo.objects.get(attivita=attivita)
            gruppo.delete()
            titolo_messaggio = "Attività e gruppo cancellati"
            testo_messaggio = "L'attività e il gruppo associato sono stati cancellati con successo."
        except Gruppo.DoesNotExist:
            testo_messaggio = "L'attività è stata cancellata con successo (non esisteva un gruppo associato a quest'attività)."
    attivita.delete()
    return messaggio_generico(request,
                              me,
                              titolo=titolo_messaggio,
                              messaggio=testo_messaggio,
                              torna_titolo="Gestione attività",
                              torna_url="/attivita/gestisci/")
Пример #10
0
def attivita_organizza(request, me):
    aree = me.oggetti_permesso(GESTIONE_ATTIVITA_AREA)
    sedi = Sede.objects.filter(aree__in=aree)
    if not aree:
        return messaggio_generico(request, me, titolo="Crea un'area di intervento, prima!",
                                  messaggio="Le aree di intervento fungono da 'contenitori' per le "
                                            "attività. Per organizzare un'attività, è necessario creare "
                                            "almeno un'area di intervento. ",
                                  torna_titolo="Gestisci le Aree di intervento",
                                  torna_url="/attivita/aree/")
    modulo_referente = ModuloOrganizzaAttivitaReferente(request.POST or None)
    modulo = ModuloOrganizzaAttivita(request.POST or None)
    modulo.fields['area'].queryset = aree
    if modulo_referente.is_valid() and modulo.is_valid():
        attivita = modulo.save(commit=False)
        attivita.sede = attivita.area.sede
        attivita.estensione = attivita.sede.comitato
        attivita.save()

        if modulo_referente.cleaned_data['scelta'] == modulo_referente.SONO_IO:
            # Io sono il referente.
            attivita.aggiungi_delegato(REFERENTE, me, firmatario=me, inizio=poco_fa())
            return redirect(attivita.url_modifica)

        else:  # Il referente e' qualcun altro.
            return redirect("/attivita/organizza/%d/referenti/" % (attivita.pk,))

    contesto = {
        "modulo": modulo,
        "modulo_referente": modulo_referente,
    }
    return 'attivita_organizza.html', contesto
Пример #11
0
def aspirante_corso_base_attiva(request, me, pk):
    corso = get_object_or_404(CorsoBase, pk=pk)
    if not me.permessi_almeno(corso, MODIFICA):
        return redirect(ERRORE_PERMESSI)
    if corso.stato != corso.PREPARAZIONE:
        return messaggio_generico(request, me, titolo="Il corso è già attivo",
                                  messaggio="Non puoi attivare un corso già attivo",
                                  torna_titolo="Torna al Corso",
                                  torna_url=corso.url)
    if not corso.attivabile():
        return errore_generico(request, me, titolo="Impossibile attivare questo corso",
                               messaggio="Non sono soddisfatti tutti i criteri di attivazione. "
                                         "Torna alla pagina del corso e verifica che tutti i "
                                         "criteri siano stati soddisfatti prima di attivare un "
                                         "nuovo corso.",
                               torna_titolo="Torna al Corso",
                               torna_url=corso.url)

    if corso.data_inizio < poco_fa():
        return errore_generico(request, me, titolo="Impossibile attivare un corso già iniziato",
                               messaggio="Siamo spiacenti, ma non possiamo attivare il corso e inviare "
                                         "le e-mail a tutti gli aspiranti nella zona se il corso è "
                                         "già iniziato. Ti inviato a verificare i dati del corso.",
                               torna_titolo="Torna al Corso",
                               torna_url=corso.url)

    corpo = {"corso": corso, "persona": me}
    testo = get_template("email_aspirante_corso_inc_testo.html").render(corpo)

    if request.POST:
        corso.attiva(rispondi_a=me)
        return messaggio_generico(request, me, titolo="Corso attivato con successo",
                                  messaggio="A breve tutti gli aspiranti nelle vicinanze verranno informati "
                                            "dell'attivazione di questo corso base.",
                                  torna_titolo="Torna al Corso",
                                  torna_url=corso.url)

    contesto = {
        "corso": corso,
        "puo_modificare": True,
        "testo": testo,
    }
    return 'aspirante_corso_base_scheda_attiva.html', contesto
Пример #12
0
def attivita_organizza_fatto(request, me, pk=None):
    attivita = get_object_or_404(Attivita, pk=pk)
    if not me.permessi_almeno(attivita, MODIFICA):
        return redirect(ERRORE_PERMESSI)

    return messaggio_generico(request, me, titolo="Attività organizzata",
                              messaggio="Abbiamo inviato un messaggio ai referenti che hai "
                                        "selezionato. Appena accederanno a Gaia, gli chiederemo "
                                        "di darci maggiori informazioni sull'attività, come "
                                        "gli orari dei turni e l'indirizzo.",
                              torna_titolo="Torna a Gestione Attività",
                              torna_url="/attivita/gestisci/")
Пример #13
0
def attivita_organizza(request, me):
    aree = me.oggetti_permesso(GESTIONE_ATTIVITA_AREA)
    sedi = Sede.objects.filter(aree__in=aree)
    if not aree:
        return messaggio_generico(
            request,
            me,
            titolo="Crea un'area di intervento, prima!",
            messaggio="Le aree di intervento fungono da 'contenitori' per le "
            "attività. Per organizzare un'attività, è necessario creare "
            "almeno un'area di intervento. ",
            torna_titolo="Gestisci le Aree di intervento",
            torna_url="/attivita/aree/")
    modulo_referente = ModuloOrganizzaAttivitaReferente(request.POST or None)
    modulo = ModuloOrganizzaAttivita(request.POST or None)
    modulo.fields['area'].queryset = aree
    if modulo_referente.is_valid() and modulo.is_valid():
        attivita = modulo.save(commit=False)
        attivita.sede = attivita.area.sede
        attivita.estensione = attivita.sede.comitato
        attivita.save()

        # Crea gruppo per questa specifica attività se la casella viene selezionata.
        crea_gruppo = modulo.cleaned_data['gruppo']
        if crea_gruppo:
            area = attivita.area
            gruppo = Gruppo.objects.create(
                nome=attivita.nome,
                sede=attivita.sede,
                obiettivo=area.obiettivo,
                attivita=attivita,
                estensione=attivita.estensione.estensione,
                area=area)

            gruppo.aggiungi_delegato(REFERENTE_GRUPPO, me)

        if modulo_referente.cleaned_data['scelta'] == modulo_referente.SONO_IO:
            # Io sono il referente.
            attivita.aggiungi_delegato(REFERENTE,
                                       me,
                                       firmatario=me,
                                       inizio=poco_fa())
            return redirect(attivita.url_modifica)

        else:  # Il referente e' qualcun altro.
            return redirect("/attivita/organizza/%d/referenti/" %
                            (attivita.pk, ))

    contesto = {
        "modulo": modulo,
        "modulo_referente": modulo_referente,
    }
    return 'attivita_organizza.html', contesto
Пример #14
0
def attivita_scheda_cancella(request, me, pk):
    attivita = get_object_or_404(Attivita, pk=pk)
    if not me.permessi_almeno(attivita, COMPLETO):
        return redirect(ERRORE_PERMESSI)

    if not attivita.cancellabile:
        return errore_generico(request, me, titolo="Attività non cancellabile",
                               messaggio="Questa attività non può essere cancellata.")

    attivita.delete()
    return messaggio_generico(request, me, titolo="Attività cancellata",
                              messaggio="L'attività è stata cancellata con successo.",
                              torna_titolo="Gestione attività", torna_url="/attivita/gestisci/")
Пример #15
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
Пример #16
0
def aspirante_impostazioni_cancella(request, me):
    if not me.ha_aspirante:
        return redirect(ERRORE_PERMESSI)

    if not me.cancellabile:
        return errore_generico(request, me, titolo="Impossibile cancellare automaticamente il profilo da Gaia",
                               messaggio="E' necessario richiedere la cancellazione manuale al personale di supporto.")

    # Cancella!
    me.delete()

    return messaggio_generico(request, me, titolo="Il tuo profilo è stato cancellato da Gaia",
                              messaggio="Abbiamo rimosso tutti i tuoi dati dal nostro sistema. "
                                        "Se cambierai idea, non esitare a iscriverti nuovamente! ")
Пример #17
0
def attivita_gruppi_gruppo_abbandona(request, me, pk):
    """
    Abbandona un gruppo.
    """
    gruppo = get_object_or_404(Gruppo, pk=pk)
    Appartenenza.query_attuale().filter(
        gruppo=gruppo, persona=me
    ).update(fine=poco_fa())
    return messaggio_generico(request, me, titolo="Hai abbandonato il gruppo",
                              messaggio="Non fai più parte del gruppo '%s'. <br />"
                                        "Sei stato disiscritto con successo." % (
                                  gruppo.nome,
                              ), torna_titolo="Torna all'elenco dei gruppi",
                              torna_url="/attivita/gruppi/")
Пример #18
0
def attivita_organizza_fatto(request, me, pk=None):
    attivita = get_object_or_404(Attivita, pk=pk)
    if not me.permessi_almeno(attivita, MODIFICA):
        return redirect(ERRORE_PERMESSI)

    return messaggio_generico(
        request,
        me,
        titolo="Attività organizzata",
        messaggio="Abbiamo inviato un messaggio ai referenti che hai "
        "selezionato. Appena accederanno a Gaia, gli chiederemo "
        "di darci maggiori informazioni sull'attività, come "
        "gli orari dei turni e l'indirizzo.",
        torna_titolo="Torna a Gestione Attività",
        torna_url="/attivita/gestisci/")
Пример #19
0
def attivita_gruppi_gruppo_abbandona(request, me, pk):
    """
    Abbandona un gruppo.
    """
    gruppo = get_object_or_404(Gruppo, pk=pk)
    Appartenenza.query_attuale().filter(gruppo=gruppo,
                                        persona=me).update(fine=poco_fa())
    return messaggio_generico(
        request,
        me,
        titolo="Hai abbandonato il gruppo",
        messaggio="Non fai più parte del gruppo '%s'. <br />"
        "Sei stato disiscritto con successo." % (gruppo.nome, ),
        torna_titolo="Torna all'elenco dei gruppi",
        torna_url="/attivita/gruppi/")
Пример #20
0
def attivita_gruppi_gruppo_elimina_conferma(request, me, pk):
    """
    Elimina un gruppo.
    """
    gruppo = get_object_or_404(Gruppo, pk=pk)

    # Se non ho i permessi per eliminare il gruppo.
    if not me.permessi_almeno(gruppo, MODIFICA):
        return redirect(ERRORE_PERMESSI)

    gruppo.delete()

    return messaggio_generico(request, me, titolo="Hai eliminato il gruppo",
                              messaggio="Il gruppo '%s' è stato eliminato con successo." % (
                                  gruppo.nome,
                              ), torna_titolo="Torna a crea gruppo",
                              torna_url="/attivita/gruppo/")
Пример #21
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
Пример #22
0
def aspirante_corso_base_iscritti_cancella(request, me, pk, iscritto):
    corso = get_object_or_404(CorsoBase, pk=pk)
    if not me.permessi_almeno(corso, MODIFICA):
        return redirect(ERRORE_PERMESSI)

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

    try:
        persona = Persona.objects.get(pk=iscritto)
    except Persona.DoesNotExist:
        return errore_generico(request,
                               me,
                               titolo="Impossibile cancellare iscritto",
                               messaggio="La persona cercata non è iscritta.",
                               torna_titolo="Torna al corso base",
                               torna_url=corso.url_iscritti)
    if request.method == 'POST':
        for partecipazione in corso.partecipazioni_confermate_o_in_attesa(
        ).filter(persona=persona):
            partecipazione.disiscrivi(mittente=me)
        for partecipazione in corso.inviti_confermati_o_in_attesa().filter(
                persona=persona):
            partecipazione.disiscrivi(mittente=me)
        return messaggio_generico(
            request,
            me,
            titolo="Iscritto cancellato",
            messaggio="{} è stato cancellato dal corso {}.".format(
                persona, corso),
            torna_titolo="Torna al corso base",
            torna_url=corso.url_iscritti)
    contesto = {
        "corso": corso,
        "puo_modificare": True,
        "persona": persona,
    }
    return 'aspirante_corso_base_scheda_iscritti_cancella.html', contesto
Пример #23
0
def aspirante_corso_base_iscriviti(request, me=None, pk=None):

    corso = get_object_or_404(CorsoBase, pk=pk)
    puoi_partecipare = corso.persona(me)
    if not puoi_partecipare in corso.PUOI_ISCRIVERTI:
        return errore_generico(request, me, titolo="Non puoi partecipare a questo corso",
                               messaggio="Siamo spiacenti, ma non sembra che tu possa partecipare "
                                         "a questo corso per qualche motivo. ",
                               torna_titolo="Torna al corso",
                               torna_url=corso.url)

    p = PartecipazioneCorsoBase(persona=me, corso=corso)
    p.save()
    p.richiedi()
    return messaggio_generico(request, me, titolo="Sei iscritto al corso base",
                              messaggio="Complimenti! Abbiamo inoltrato la tua richiesta al direttore "
                                        "del corso, che ti contatterà appena possibile.",
                              torna_titolo="Torna al corso",
                              torna_url=corso.url)
Пример #24
0
def attivita_gruppi_gruppo_elimina_conferma(request, me, pk):
    """
    Elimina un gruppo.
    """
    gruppo = get_object_or_404(Gruppo, pk=pk)

    # Se non ho i permessi per eliminare il gruppo.
    if not me.permessi_almeno(gruppo, MODIFICA):
        return redirect(ERRORE_PERMESSI)

    gruppo.delete()

    return messaggio_generico(
        request,
        me,
        titolo="Hai eliminato il gruppo",
        messaggio="Il gruppo '%s' è stato eliminato con successo." %
        (gruppo.nome, ),
        torna_titolo="Torna a crea gruppo",
        torna_url="/attivita/gruppo/")
Пример #25
0
def aspirante_corso_base_ritirati(request, me=None, pk=None):

    corso = get_object_or_404(CorsoBase, pk=pk)
    puoi_partecipare = corso.persona(me)
    if not puoi_partecipare == corso.SEI_ISCRITTO_PUOI_RITIRARTI:
        return errore_generico(request, me, titolo="Non puoi ritirarti da questo corso",
                               messaggio="Siamo spiacenti, ma non sembra che tu possa ritirarti "
                                         "da questo corso per qualche motivo. ",
                               torna_titolo="Torna al corso",
                               torna_url=corso.url)

    p = PartecipazioneCorsoBase.con_esito_pending(corso=corso, persona=me).first()
    p.ritira()

    return messaggio_generico(request, me, titolo="Ti sei ritirato dal corso",
                              messaggio="Siamo spiacenti che hai deciso di ritirarti da questo corso. "
                                        "La tua partecipazione è stata ritirata correttamente. "
                                        "Non esitare a iscriverti a questo o un altro corso, nel caso cambiassi idea.",
                              torna_titolo="Torna alla pagina del corso",
                              torna_url=corso.url)
Пример #26
0
def attivita_scheda_cancella(request, me, pk):
    attivita = get_object_or_404(Attivita, pk=pk)
    if not me.permessi_almeno(attivita, COMPLETO):
        return redirect(ERRORE_PERMESSI)

    if not attivita.cancellabile:
        return errore_generico(
            request,
            me,
            titolo="Attività non cancellabile",
            messaggio="Questa attività non può essere cancellata.")

    attivita.delete()
    return messaggio_generico(
        request,
        me,
        titolo="Attività cancellata",
        messaggio="L'attività è stata cancellata con successo.",
        torna_titolo="Gestione attività",
        torna_url="/attivita/gestisci/")
Пример #27
0
def attivita_scheda_turni_partecipa(request, me, pk=None, turno_pk=None):
    """
    Mostra la scheda "Informazioni" di una attivita'.
    """

    turno = get_object_or_404(Turno, pk=turno_pk)
    stato = turno.persona(me)

    if stato not in turno.TURNO_PUOI_PARTECIPARE:
        return errore_generico(
            request,
            me,
            titolo="Non puoi partecipare a questo turno",
            messaggio="Siamo spiacenti, ma ci risulta che tu non possa "
            "richiedere partecipazione a questo turno. Vai "
            "all'elenco dei turni per maggiori informazioni "
            "sulla motivazione. ",
            torna_titolo="Turni dell'attività",
            torna_url=turno.url,
        )

    p = Partecipazione(
        turno=turno,
        persona=me,
    )
    p.save()
    p.richiedi()

    return messaggio_generico(
        request,
        me,
        titolo="Ottimo! Richiesta inoltrata.",
        messaggio="La tua richiesta è stata inoltrata ai referenti di "
        "questa attività, che potranno confermarla o negarla. "
        "Ti manderemo una e-mail non appena risponderanno alla "
        "tua richiesta. Puoi sempre controllare lo stato delle tue"
        "richieste di partecipazione da 'Attivita' > 'I miei turni'. ",
        torna_titolo="Vai a 'I miei turni'",
        torna_url="/attivita/storico/")
Пример #28
0
def aspirante_impostazioni_cancella(request, me):
    if not me.ha_aspirante:
        return redirect(ERRORE_PERMESSI)

    if not me.cancellabile:
        return errore_generico(
            request,
            me,
            titolo="Impossibile cancellare automaticamente il profilo da Gaia",
            messaggio=
            "E' necessario richiedere la cancellazione manuale al personale di supporto."
        )

    # Cancella!
    me.delete()

    return messaggio_generico(
        request,
        me,
        titolo="Il tuo profilo è stato cancellato da Gaia",
        messaggio="Abbiamo rimosso tutti i tuoi dati dal nostro sistema. "
        "Se cambierai idea, non esitare a iscriverti nuovamente! ")
Пример #29
0
def attivita_scheda_cancella(request, me, pk):
    attivita = get_object_or_404(Attivita, pk=pk)
    if not me.permessi_almeno(attivita, COMPLETO):
        return redirect(ERRORE_PERMESSI)

    if not attivita.cancellabile:
        return errore_generico(request, me, titolo="Attività non cancellabile",
                               messaggio="Questa attività non può essere cancellata.")

    titolo_messaggio = "Attività cancellata"
    testo_messaggio = "L'attività è stata cancellata con successo."
    if 'cancella-gruppo' in request.path.split('/'):
        try:
            gruppo = Gruppo.objects.get(attivita=attivita)
            gruppo.delete()
            titolo_messaggio = "Attività e gruppo cancellati"
            testo_messaggio = "L'attività e il gruppo associato sono stati cancellati con successo."
        except Gruppo.DoesNotExist:
            testo_messaggio = "L'attività è stata cancellata con successo (non esisteva un gruppo associato a quest'attività)."
    attivita.delete()
    return messaggio_generico(request, me, titolo=titolo_messaggio,
                              messaggio=testo_messaggio,
                              torna_titolo="Gestione attività", torna_url="/attivita/gestisci/")
Пример #30
0
def attivita_gruppi_gruppo_iscriviti(request, me, pk):
    """
    Abbandona un gruppo.
    """
    gruppo = get_object_or_404(Gruppo, pk=pk)
    if Appartenenza.query_attuale().filter(
        gruppo=gruppo, persona=me
    ).exists():  # Gia membro
        return redirect("/attivita/gruppi/?gia_membro")

    a = Appartenenza(
        gruppo=gruppo,
        persona=me,
        inizio=poco_fa()
    )
    a.save()

    return messaggio_generico(request, me, titolo="Iscrizione effettuata",
                              messaggio="Sei ora iscritt%s al gruppo di lavoro '%s'. <br />"
                                        "Riceverai per e-mail tutte le comunicazioni "
                                        "relative a questo gruppo" % (
                                  me.genere_o_a, gruppo.nome,
                              ), torna_titolo="Torna all'elenco dei gruppi",
                              torna_url="/attivita/gruppi/")
Пример #31
0
def attivita_gruppi_gruppo_iscriviti(request, me, pk):
    """
    Abbandona un gruppo.
    """
    gruppo = get_object_or_404(Gruppo, pk=pk)
    if Appartenenza.query_attuale().filter(gruppo=gruppo,
                                           persona=me).exists():  # Gia membro
        return redirect("/attivita/gruppi/?gia_membro")

    a = Appartenenza(gruppo=gruppo, persona=me, inizio=poco_fa())
    a.save()

    return messaggio_generico(
        request,
        me,
        titolo="Iscrizione effettuata",
        messaggio="Sei ora iscritt%s al gruppo di lavoro '%s'. <br />"
        "Riceverai per e-mail tutte le comunicazioni "
        "relative a questo gruppo" % (
            me.genere_o_a,
            gruppo.nome,
        ),
        torna_titolo="Torna all'elenco dei gruppi",
        torna_url="/attivita/gruppi/")
Пример #32
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
Пример #33
0
def attivita_organizza(request, me):
    aree = me.oggetti_permesso(GESTIONE_ATTIVITA_AREA)
    sedi = Sede.objects.filter(aree__in=aree)
    deleghe = me.deleghe_attuali()
    from anagrafica.permessi.applicazioni import DELEGATI_NON_SONO_UN_BERSAGLIO
    deleghe_bersaglio = deleghe.filter(tipo__in=DELEGATI_NON_SONO_UN_BERSAGLIO)

    if deleghe_bersaglio:
        if not aree.filter(obiettivo=4,
                           nome__icontains='non sono un bersaglio'):
            for delega in deleghe.filter(
                    tipo__in=DELEGATI_NON_SONO_UN_BERSAGLIO):
                area = Area(nome='Non sono un bersaglio',
                            obiettivo=4,
                            sede=delega.oggetto)
                area.save()

    if not aree:
        return messaggio_generico(
            request,
            me,
            titolo="Crea un'area di intervento, prima!",
            messaggio="Le aree di intervento fungono da 'contenitori' per le "
            "attività. Per organizzare un'attività, è necessario creare "
            "almeno un'area di intervento. ",
            torna_titolo="Gestisci le Aree di intervento",
            torna_url="/attivita/aree/")

    modulo_referente = ModuloOrganizzaAttivitaReferente(request.POST or None)
    modulo = ModuloOrganizzaAttivita(request.POST or None)
    modulo.fields['area'].queryset = me.oggetti_permesso(
        GESTIONE_ATTIVITA_AREA)
    if deleghe_bersaglio:
        modulo_referente.fields[
            'scelta'].choices = ModuloOrganizzaAttivitaReferente.popola_scelta(
            )
    if modulo_referente.is_valid() and modulo.is_valid():
        attivita = modulo.save(commit=False)
        attivita.sede = attivita.area.sede
        attivita.estensione = attivita.sede.comitato
        attivita.save()

        # Crea gruppo per questa specifica attività se la casella viene selezionata.
        crea_gruppo = modulo.cleaned_data['gruppo']
        if crea_gruppo:
            area = attivita.area
            gruppo = Gruppo.objects.create(
                nome=attivita.nome,
                sede=attivita.sede,
                obiettivo=area.obiettivo,
                attivita=attivita,
                estensione=attivita.estensione.estensione,
                area=area)

            gruppo.aggiungi_delegato(REFERENTE_GRUPPO, me)

        if modulo_referente.cleaned_data['scelta'] == modulo_referente.SONO_IO:
            # Io sono il referente.
            attivita.aggiungi_delegato(REFERENTE,
                                       me,
                                       firmatario=me,
                                       inizio=poco_fa())
            return redirect(attivita.url_modifica)
        elif modulo_referente.cleaned_data[
                'scelta'] == modulo_referente.SCEGLI_REFERENTI:  # Il referente e' qualcun altro.
            return redirect("/attivita/organizza/%d/referenti/" %
                            (attivita.pk, ))
        else:
            from anagrafica.models import Persona
            persona = Persona.objects.get(
                pk=modulo_referente.cleaned_data['scelta'])
            attivita.aggiungi_delegato(REFERENTE,
                                       persona,
                                       firmatario=me,
                                       inizio=poco_fa())
            return redirect(attivita.url_modifica)

    contesto = {
        "modulo": modulo,
        "modulo_referente": modulo_referente,
    }
    return 'attivita_organizza.html', contesto
Пример #34
0
def attivita_gruppo(request, me):
    """
    Crea gruppi di lavoro per il mio comitato o elimina quelli di cui sono responsabile.
    """
    # Sono responsabile di queste aree di intervento.
    area_permessi = me.oggetti_permesso(GESTIONE_ATTIVITA_AREA)

    # Attività nelle aree di cui sono responsabile.
    attivita_specifica = Attivita.objects.filter(area__in=area_permessi)

    # Gruppi nelle aree di cui sono responsabile.
    gruppi_gestione = Gruppo.objects.filter(area__in=area_permessi)

    modulo_attivita_specifica = ModuloGruppoSpecifico(
        request.POST or None,
        attivita_specifica=attivita_specifica,
        request=request.POST)
    modulo_attivita_non_specifica = ModuloGruppoNonSpecifico(
        request.POST or None,
        area_permessi=area_permessi,
        request=request.POST)

    from anagrafica.permessi.applicazioni import REFERENTE_GRUPPO
    if 'specifico' in request.POST:
        if modulo_attivita_specifica.is_valid():
            attivita_specifica = modulo_attivita_specifica.cleaned_data[
                'attivita_specifica']
            area = Area.objects.get(id=attivita_specifica.area_id)
            gruppo = Gruppo.objects.create(
                nome=attivita_specifica.nome,
                sede=attivita_specifica.sede,
                obiettivo=area.obiettivo,
                attivita=attivita_specifica,
                estensione=attivita_specifica.estensione.estensione,
                area=attivita_specifica.area)
            gruppo.aggiungi_delegato(REFERENTE_GRUPPO, me)
            return messaggio_generico(
                request,
                None,
                titolo="Gruppo creato",
                messaggio="Hai creato un gruppo per un attività specifica",
                torna_url="/attivita/gruppo/",
                torna_titolo="Torna alla gestione dei gruppi")

    if 'non_specifico' in request.POST:
        if modulo_attivita_non_specifica.is_valid():
            nome_gruppo = modulo_attivita_non_specifica.cleaned_data['nome']
            area = modulo_attivita_non_specifica.cleaned_data['area']
            gruppo = Gruppo.objects.create(nome=nome_gruppo,
                                           sede=area.sede,
                                           obiettivo=area.obiettivo,
                                           attivita=None,
                                           estensione=area.sede.estensione,
                                           area_id=area.id)
            gruppo.aggiungi_delegato(REFERENTE_GRUPPO, me)
            return messaggio_generico(
                request,
                None,
                titolo="Gruppo creato",
                messaggio="Hai creato un gruppo per un'area",
                torna_url="/attivita/gruppo/",
                torna_titolo="Torna alla gestione dei gruppi")

    contesto = {
        "gruppi_gestione": gruppi_gestione,
        "modulo_attivita_specifica": modulo_attivita_specifica,
        "modulo_attivita_non_specifica": modulo_attivita_non_specifica,
    }
    return 'attivita_gruppo.html', contesto
Пример #35
0
def _profilo_credenziali(request, me, persona):
    utenza = Utenza.objects.filter(persona=persona).first()

    modulo_utenza = modulo_modifica = None
    if utenza:
        modulo_modifica = ModuloUSModificaUtenza(request.POST or None,
                                                 instance=utenza)
    else:
        modulo_utenza = ModuloUtenza(request.POST or None,
                                     instance=utenza,
                                     initial={"email": persona.email_contatto})

    if modulo_utenza and modulo_utenza.is_valid():
        utenza = modulo_utenza.save(commit=False)
        utenza.persona = persona
        utenza.save()
        utenza.genera_credenziali()
        return redirect(persona.url_profilo_credenziali)

    if modulo_modifica and modulo_modifica.is_valid():
        vecchia_email_contatto = persona.email
        vecchia_email = Utenza.objects.get(pk=utenza.pk).email
        nuova_email = modulo_modifica.cleaned_data.get('email')

        if vecchia_email == nuova_email:
            return errore_generico(
                request,
                me,
                titolo="Nessun cambiamento",
                messaggio="Per cambiare indirizzo e-mail, inserisci un "
                "indirizzo differente.",
                torna_titolo="Credenziali",
                torna_url=persona.url_profilo_credenziali)

        if Utenza.objects.filter(email__icontains=nuova_email).first():
            return errore_generico(
                request,
                me,
                titolo="E-mail già utilizzata",
                messaggio="Esiste un altro utente in Gaia che utilizza "
                "questa e-mail (%s). Impossibile associarla quindi "
                "a %s." % (nuova_email, persona.nome_completo),
                torna_titolo="Credenziali",
                torna_url=persona.url_profilo_credenziali)

        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)

        _invia_notifica()  # Invia notifica alla vecchia e-mail
        Log.registra_modifiche(me, modulo_modifica)
        modulo_modifica.save()  # Effettua le modifiche
        persona.refresh_from_db()
        if persona.email != vecchia_email_contatto:  # Se e-mail principale cambiata
            _invia_notifica()  # Invia la notifica anche al nuovo indirizzo

        return messaggio_generico(
            request,
            me,
            titolo="Credenziali modificate",
            messaggio=
            "Le credenziali di %s sono state correttamente aggiornate." %
            persona.nome,
            torna_titolo="Credenziali",
            torna_url=persona.url_profilo_credenziali)

    contesto = {
        "utenza": utenza,
        "modulo_creazione": modulo_utenza,
        "modulo_modifica": modulo_modifica
    }
    return 'anagrafica_profilo_credenziali.html', contesto
Пример #36
0
def aspirante_corso_base_termina(request, me, pk):
    corso = get_object_or_404(CorsoBase, pk=pk)
    if not me.permessi_almeno(corso, MODIFICA):
        return redirect(ERRORE_PERMESSI)

    torna = {"torna_url": corso.url_modifica, "torna_titolo": "Modifica corso"}

    if (not corso.op_attivazione) or (not corso.data_attivazione):
        return errore_generico(
            request,
            me,
            titolo="Necessari dati attivazione",
            messaggio=
            "Per generare il verbale, sono necessari i dati (O.P. e data) "
            "dell'attivazione del corso.",
            **torna)

    if not corso.partecipazioni_confermate().exists():
        return errore_generico(
            request,
            me,
            titolo="Impossibile terminare questo corso",
            messaggio="Non ci sono partecipanti confermati per questo corso, "
            "non è quindi possibile generare un verbale per il corso.",
            **torna)

    if corso.stato != corso.ATTIVO:
        return errore_generico(
            request,
            me,
            titolo="Impossibile terminare questo corso",
            messaggio="Il corso non è attivo e non può essere terminato.",
            **torna)

    partecipanti_moduli = []

    azione = request.POST.get(
        'azione', default=ModuloVerbaleAspiranteCorsoBase.SALVA_SOLAMENTE)
    generazione_verbale = azione == ModuloVerbaleAspiranteCorsoBase.GENERA_VERBALE

    termina_corso = generazione_verbale

    for partecipante in corso.partecipazioni_confermate():

        modulo = ModuloVerbaleAspiranteCorsoBase(
            request.POST or None,
            prefix="part_%d" % partecipante.pk,
            instance=partecipante,
            generazione_verbale=generazione_verbale)
        modulo.fields['destinazione'].queryset = corso.possibili_destinazioni()
        modulo.fields['destinazione'].initial = corso.sede

        if modulo.is_valid():
            modulo.save()

        elif generazione_verbale:
            termina_corso = False

        partecipanti_moduli += [(partecipante, modulo)]

    if termina_corso:  # Se il corso può essere terminato.
        corso.termina(mittente=me)
        return messaggio_generico(
            request,
            me,
            titolo="Corso base terminato",
            messaggio=
            "Il verbale è stato generato con successo. Tutti gli idonei "
            "sono stati resi volontari delle rispettive sedi.",
            torna_titolo="Vai al Report del Corso Base",
            torna_url=corso.url_report)

    contesto = {
        "corso": corso,
        "puo_modificare": True,
        "partecipanti_moduli": partecipanti_moduli,
        "azione_genera_verbale":
        ModuloVerbaleAspiranteCorsoBase.GENERA_VERBALE,
        "azione_salva_solamente":
        ModuloVerbaleAspiranteCorsoBase.SALVA_SOLAMENTE,
    }
    return 'aspirante_corso_base_scheda_termina.html', contesto
Пример #37
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
Пример #38
0
def aspirante_corso_base_termina(request, me, pk):
    corso = get_object_or_404(CorsoBase, pk=pk)
    if not me.permessi_almeno(corso, MODIFICA):
        return redirect(ERRORE_PERMESSI)

    torna = {"torna_url": corso.url_modifica, "torna_titolo": "Modifica corso"}

    if (not corso.op_attivazione) or (not corso.data_attivazione):
        return errore_generico(request, me, titolo="Necessari dati attivazione",
                               messaggio="Per generare il verbale, sono necessari i dati (O.P. e data) "
                                         "dell'attivazione del corso.",
                               **torna)

    if not corso.partecipazioni_confermate().exists():
        return errore_generico(request, me, titolo="Impossibile terminare questo corso",
                               messaggio="Non ci sono partecipanti confermati per questo corso, "
                                         "non è quindi possibile generare un verbale per il corso.",
                               **torna)

    if corso.stato != corso.ATTIVO:
        return errore_generico(request, me, titolo="Impossibile terminare questo corso",
                               messaggio="Il corso non è attivo e non può essere terminato.",
                               **torna)

    partecipanti_moduli = []

    azione = request.POST.get('azione', default=ModuloVerbaleAspiranteCorsoBase.SALVA_SOLAMENTE)
    generazione_verbale = azione == ModuloVerbaleAspiranteCorsoBase.GENERA_VERBALE

    termina_corso = generazione_verbale

    for partecipante in corso.partecipazioni_confermate():

        modulo = ModuloVerbaleAspiranteCorsoBase(
            request.POST or None, prefix="part_%d" % partecipante.pk,
            instance=partecipante,
            generazione_verbale=generazione_verbale
        )
        modulo.fields['destinazione'].queryset = corso.possibili_destinazioni()
        modulo.fields['destinazione'].initial = corso.sede

        if modulo.is_valid():
            modulo.save()

        elif generazione_verbale:
            termina_corso = False

        partecipanti_moduli += [(partecipante, modulo)]

    if termina_corso:  # Se il corso può essere terminato.
        corso.termina(mittente=me)
        return messaggio_generico(request, me, titolo="Corso base terminato",
                                  messaggio="Il verbale è stato generato con successo. Tutti gli idonei "
                                            "sono stati resi volontari delle rispettive sedi.",
                                  torna_titolo="Vai al Report del Corso Base",
                                  torna_url=corso.url_report)

    contesto = {
        "corso": corso,
        "puo_modificare": True,
        "partecipanti_moduli": partecipanti_moduli,
        "azione_genera_verbale": ModuloVerbaleAspiranteCorsoBase.GENERA_VERBALE,
        "azione_salva_solamente": ModuloVerbaleAspiranteCorsoBase.SALVA_SOLAMENTE,
    }
    return 'aspirante_corso_base_scheda_termina.html', contesto