Ejemplo n.º 1
0
    def risultati(self):
        qs_sedi = self.args[0]

        if self.modulo_riempito.cleaned_data[
                'estesi'] == self.modulo_riempito.ESTESI_INGRESSO:
            # Estesi in ingresso
            risultati = Persona.objects.filter(
                Appartenenza.query_attuale(
                    sede__in=qs_sedi,
                    membro=Appartenenza.ESTESO,
                ).via("appartenenze"))

        else:
            # Estesi in uscita
            estesi_da_qualche_parte = Persona.objects.filter(
                Appartenenza.query_attuale(membro=Appartenenza.ESTESO).via(
                    "appartenenze")).values_list('pk', flat=True)

            volontari_da_me = Persona.objects.filter(
                Appartenenza.query_attuale(
                    sede__in=qs_sedi,
                    membro=Appartenenza.VOLONTARIO,
                ).via("appartenenze")).values_list('pk', flat=True)

            risultati = Persona.objects.filter(pk__in=volontari_da_me).filter(
                pk__in=estesi_da_qualche_parte)

        return risultati.annotate(
            appartenenza_tipo=F('appartenenze__membro'),
            appartenenza_inizio=F('appartenenze__inizio'),
            appartenenza_sede=F('appartenenze__sede'),
        ).prefetch_related('appartenenze', 'appartenenze__sede', 'utenza',
                           'numeri_telefono').distinct('cognome', 'nome',
                                                       'codice_fiscale')
Ejemplo n.º 2
0
def espandi_gestione_soci(qs_sedi, al_giorno=None):
    from anagrafica.models import Persona, Appartenenza, Trasferimento, Estensione, Riserva
    from ufficio_soci.models import Quota, Tesserino
    try:
        return [
            (MODIFICA, Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi,
                                                                         membro__in=Appartenenza.MEMBRO_DIRETTO).via(
                "appartenenze"))),
            (LETTURA, Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi,
                                                                        membro__in=Appartenenza.MEMBRO_ESTESO).via(
                "appartenenze"))),
            (MODIFICA, Trasferimento.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi,
                                                                               membro__in=Appartenenza.MEMBRO_DIRETTO).via(
                "persona__appartenenze"))),
            (LETTURA, Trasferimento.objects.filter(destinazione__in=qs_sedi)),
            (MODIFICA, Estensione.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi,
                                                                            membro__in=Appartenenza.MEMBRO_DIRETTO).via(
                "persona__appartenenze"))),
            (LETTURA, Estensione.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi,
                                                                           membro__in=Appartenenza.MEMBRO_ESTESO).via(
                "persona__appartenenze"))),
            (LETTURA, Estensione.objects.filter(destinazione__in=qs_sedi)),
            (MODIFICA, Quota.objects.filter(sede__in=qs_sedi)),
            (LETTURA, Riserva.objects.filter(appartenenza__sede__in=qs_sedi)),
        ]
    except (AttributeError, ValueError, KeyError):
        return []
 def choices_for_request(self):
     self.choices = self.choices.filter(
         Q(Appartenenza.query_attuale(membro=Appartenenza.SOSTENITORE).via("appartenenze")) |
         Q(aspirante__isnull=False)
     ).exclude(
         Q(Appartenenza.query_attuale(membro=Appartenenza.VOLONTARIO).via("appartenenze"))
     ).order_by('nome', 'cognome', 'codice_fiscale').distinct('nome', 'cognome', 'codice_fiscale')
     return super(PersonaAutocompletamento, self).choices_for_request()
Ejemplo n.º 4
0
 def choices_for_request(self):
     self.choices = self.choices.filter(
         Q(Appartenenza.query_attuale(membro=Appartenenza.SOSTENITORE).via("appartenenze")) |
         Q(aspirante__isnull=False)
     ).exclude(
         Q(Appartenenza.query_attuale(membro=Appartenenza.VOLONTARIO).via("appartenenze"))
     ).order_by('nome', 'cognome', 'codice_fiscale').distinct('nome', 'cognome', 'codice_fiscale')
     return super(PersonaAutocompletamento, self).choices_for_request()
Ejemplo n.º 5
0
def _calcola_anni_attivita(queryset, meno=True):

    limite = now().replace(year=now().year - LIMITE_ANNI_ATTIVITA)
    if meno:
        appartenenze_filtrate = Appartenenza.query_attuale().filter(inizio__gte=limite)
    else:
        appartenenze_filtrate = Appartenenza.query_attuale().filter(inizio__lt=limite)

    return queryset.filter(appartenenze__in=appartenenze_filtrate)
Ejemplo n.º 6
0
def _calcola_anni_attivita(queryset, meno=True):

    limite = now().replace(year=now().year - LIMITE_ANNI_ATTIVITA)
    if meno:
        appartenenze_filtrate = Appartenenza.query_attuale().filter(inizio__gte=limite)
    else:
        appartenenze_filtrate = Appartenenza.query_attuale().filter(inizio__lt=limite)

    return queryset.filter(appartenenze__in=appartenenze_filtrate)
Ejemplo n.º 7
0
def espandi_gestione_centrale_operativa_sede(qs_sedi, al_giorno=None):
    from anagrafica.models import Persona, Appartenenza
    try:
        return [
            (LETTURA,   Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi).via("appartenenze"), reperibilita__isnull=False)),
            (LETTURA,   Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi).via("appartenenze"), coturni__isnull=False)),
        ]
    except (AttributeError, ValueError, KeyError, TypeError):
        return []
Ejemplo n.º 8
0
def espandi_gestione_soci(qs_sedi, al_giorno=None):
    from anagrafica.models import Persona, Appartenenza, Trasferimento, Estensione, Riserva
    from ufficio_soci.models import Quota, Tesserino
    return [
        (MODIFICA,  Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_DIRETTO).via("appartenenze"))),
        (LETTURA,   Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_ESTESO).via("appartenenze"))),
        (MODIFICA,  Trasferimento.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_DIRETTO).via("persona__appartenenze"))),
        ##(LETTURA, Trasferimento.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_DIRETTO).via("persona__appartenenze__precedente")))
        (MODIFICA,  Estensione.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_DIRETTO).via("persona__appartenenze"))),
        (LETTURA,   Estensione.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_ESTESO).via("persona__appartenenze"))),
        (MODIFICA,  Quota.objects.filter(sede__in=qs_sedi)),
        (LETTURA,   Riserva.objects.filter(appartenenza__sede__in=qs_sedi)),
    ]
Ejemplo n.º 9
0
def espandi_elenchi_soci(qs_sedi, al_giorno=None):
    from anagrafica.models import Persona, Appartenenza, Sede, Riserva
    from ufficio_soci.models import Quota, Tesserino
    return [
        (LETTURA,  Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi).via("appartenenze"))),
        (LETTURA,  Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_DIRETTO).via("appartenenze"))),
        (LETTURA,  Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_ESTESO).via("appartenenze"))),
        (LETTURA,  Quota.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_ESTESO).via("persona__appartenenze"))),
        (LETTURA,  Quota.objects.filter(Q(Q(sede__in=qs_sedi) | Q(appartenenza__sede__in=qs_sedi)))),
        (LETTURA,  Persona.objects.filter(Appartenenza.con_esito_ok(sede__in=qs_sedi).via("appartenenze"))),
        (LETTURA,  Persona.objects.filter(Appartenenza.con_esito_pending(sede__in=qs_sedi).via("appartenenze"))),
        (LETTURA,  Persona.objects.filter(Appartenenza.con_esito_no(sede__in=qs_sedi).via("appartenenze"))),
        (LETTURA,  Riserva.objects.filter(Appartenenza.con_esito_ok(sede__in=qs_sedi).via("persona__appartenenze"))),
        (LETTURA,  Tesserino.objects.filter(Appartenenza.con_esito_ok(sede__in=qs_sedi).via("persona__appartenenze"))),
    ]
Ejemplo n.º 10
0
    def risultati(self):
        qs_sedi = self.args[0]
        tesserini_richiesti = super(ElencoTesseriniDaRichiedere, self).risultati()
        return Persona.objects.filter(
            Appartenenza.query_attuale(
                sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_TESSERINO,
            ).via("appartenenze"),

            # Con fototessera confermata
            Q(Fototessera.con_esito_ok().via("fototessere")),

            # Escludi tesserini rifiutati
            ~Q(tesserini__stato_richiesta=Tesserino.RIFIUTATO),

        ).exclude(  # Escludi quelli richiesti da genitore
            pk__in=tesserini_richiesti.values_list('id', flat=True)

        ).annotate(
            appartenenza_tipo=F('appartenenze__membro'),
            appartenenza_inizio=F('appartenenze__inizio'),
            appartenenza_sede=F('appartenenze__sede'),
        ).prefetch_related(
            'appartenenze', 'appartenenze__sede',
            'utenza', 'numeri_telefono'
        ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 11
0
    def risultati(self):
        qs_sedi = self.args[0]
        tesserini_richiesti = super(ElencoTesseriniDaRichiedere, self).risultati()
        return Persona.objects.filter(
            Appartenenza.query_attuale(
                sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_TESSERINO,
            ).via("appartenenze"),

            # Con fototessera confermata
            Fototessera.con_esito_ok().via("fototessere"),

            # Escludi tesserini rifiutati
            ~Q(tesserini__stato_richiesta=Tesserino.RIFIUTATO),

        ).exclude(  # Escludi quelli richiesti da genitore
            pk__in=tesserini_richiesti.values_list('id', flat=True)

        ).annotate(
            appartenenza_tipo=F('appartenenze__membro'),
            appartenenza_inizio=F('appartenenze__inizio'),
            appartenenza_sede=F('appartenenze__sede'),
        ).prefetch_related(
            'appartenenze', 'appartenenze__sede',
            'utenza', 'numeri_telefono'
        ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 12
0
    def risultati(self):
        qs_sedi = self.args[0]

        cd = self.modulo_riempito.cleaned_data
        metodo = cd['metodo']
        titoli = cd['titoli']

        base = Persona.objects.filter(
            Appartenenza.query_attuale(
                sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_SOCIO,
            ).via("appartenenze")
        ).prefetch_related(
            'appartenenze', 'appartenenze__sede',
            'utenza', 'numeri_telefono'
        )

        if metodo == self.modulo_riempito.METODO_OR:
            # Almeno un titolo
            return base.filter(titoli_personali__in=TitoloPersonale.con_esito_ok().filter(
                    titolo__in=titoli,
            )).distinct('cognome', 'nome', 'codice_fiscale')
        else:
            # Tutti i titoli
            base = base.filter(titoli_personali__in=TitoloPersonale.con_esito_ok())
            for titolo in titoli:
                base = base.filter(titoli_personali__titolo=titolo)
            return base.distinct('cognome', 'nome', 'codice_fiscale')
    def choices_for_request(self, filtra_per_sede=True):

        # Le mie sedi di competenza:
        #  1. La mia Sede attuale
        #  2. Il mio Comitato
        #  3. Le mie Sedi di competenza
        sedi = self.request.user.persona.sedi_attuali() \
            | self.request.user.persona.sedi_attuali().ottieni_comitati().espandi() \
            | self.request.user.persona.sedi_deleghe_attuali(espandi=True, pubblici=True)

        self.choices = self.choices.filter(
            # 1. Appartenente a una delle sedi
            Q(Appartenenza.query_attuale(sede__in=sedi).via("appartenenze"),)
            # 2. Iscritto confermato a un corso base presso una mia sede
            | Q(PartecipazioneCorsoBase.con_esito(
                    PartecipazioneCorsoBase.ESITO_OK,
                    corso__sede__in=sedi
                ).via("partecipazioni_corsi"))
            # 3. Iscritto in attesa a un corso base presso una mia sede
            | Q(PartecipazioneCorsoBase.con_esito(
                    PartecipazioneCorsoBase.ESITO_PENDING,
                    corso__sede__in=sedi
                ).via("partecipazioni_corsi"))
        )\
            .order_by('nome', 'cognome', 'codice_fiscale')\
            .distinct('nome', 'cognome', 'codice_fiscale')
        return super(PersonaAutocompletamento, self).choices_for_request()
Ejemplo n.º 14
0
    def choices_for_request(self):

        # Le mie sedi di competenza:
        #  1. La mia Sede attuale
        #  2. Il mio Comitato
        #  3. Le mie Sedi di competenza
        sedi = self.request.user.persona.sedi_attuali() \
            | self.request.user.persona.sedi_attuali().ottieni_comitati().espandi() \
            | self.request.user.persona.sedi_deleghe_attuali(espandi=True, pubblici=True)

        self.choices = self.choices.filter(
            # 1. Appartenente a una delle sedi
            Q(Appartenenza.query_attuale(sede__in=sedi).via("appartenenze"),)
            # 2. Iscritto confermato a un corso base presso una mia sede
            | Q(PartecipazioneCorsoBase.con_esito(
                    PartecipazioneCorsoBase.ESITO_OK,
                    corso__sede__in=sedi
                ).via("partecipazioni_corsi"))
            # 3. Iscritto in attesa a un corso base presso una mia sede
            | Q(PartecipazioneCorsoBase.con_esito(
                    PartecipazioneCorsoBase.ESITO_PENDING,
                    corso__sede__in=sedi
                ).via("partecipazioni_corsi"))
        )\
            .order_by('nome', 'cognome', 'codice_fiscale')\
            .distinct('nome', 'cognome', 'codice_fiscale')
        return super(PersonaAutocompletamento, self).choices_for_request()
Ejemplo n.º 15
0
    def risultati(self):
        qs_sedi = self.args[0]

        cd = self.modulo_riempito.cleaned_data
        metodo = cd['metodo']
        titoli = cd['titoli']

        base = Persona.objects.filter(
            Appartenenza.query_attuale(
                sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_SOCIO,
            ).via("appartenenze")
        ).prefetch_related(
            'appartenenze', 'appartenenze__sede',
            'utenza', 'numeri_telefono'
        )

        if metodo == self.modulo_riempito.METODO_OR:
            # Almeno un titolo
            return base.filter(titoli_personali__in=TitoloPersonale.con_esito_ok().filter(
                    titolo__in=titoli,
            )).distinct('cognome', 'nome', 'codice_fiscale')
        else:
            # Tutti i titoli
            base = base.filter(titoli_personali__in=TitoloPersonale.con_esito_ok())
            for titolo in titoli:
                base = base.filter(titoli_personali__titolo=titolo)

        return base.distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 16
0
    def choices_for_request(self):
        volontari = self.model.objects.filter(
            Q(
                Appartenenza.query_attuale(
                    membro=Appartenenza.VOLONTARIO).via("appartenenze")))

        self.choices = self.choices.filter(
            Q(
                Appartenenza.query_attuale(
                    membro=Appartenenza.SOSTENITORE).via("appartenenze"))
            | Q(aspirante__isnull=False)).exclude(
                pk__in=volontari.values_list('pk', flat=True)).order_by(
                    'nome', 'cognome',
                    'codice_fiscale').distinct('nome', 'cognome',
                                               'codice_fiscale')

        return super(PersonaAutocompletamento, self).choices_for_request()
Ejemplo n.º 17
0
 def choices_for_request(self):
     sedi = self.request.user.persona.sedi_deleghe_attuali(
         tipo__in=(UFFICIO_SOCI, UFFICIO_SOCI_UNITA), espandi=True)
     self.choices = self.choices.filter(
         Appartenenza.query_attuale(membro=Appartenenza.VOLONTARIO,
                                    sede__in=sedi).via("appartenenze"))
     return super(VolontarioSedeAutocompletamento,
                  self).choices_for_request()
Ejemplo n.º 18
0
def espandi_gestione_gruppo(qs_gruppi, al_giorno=None):
    from anagrafica.models import Persona
    from gruppi.models import Appartenenza
    return [
        (MODIFICA,  qs_gruppi),
        (LETTURA,   Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno).via("appartenenze_gruppi"),
                                           appartenenze_gruppi__gruppo__in=qs_gruppi)),
    ]
Ejemplo n.º 19
0
def espandi_elenchi_soci(qs_sedi, al_giorno=None):
    from anagrafica.models import Persona, Appartenenza, Sede, Riserva
    from ufficio_soci.models import Quota, Tesserino
    try:
        return [
            (LETTURA, Persona.objects.filter(
                Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi).via("appartenenze"))),
            (LETTURA, Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi,
                                                                        membro__in=Appartenenza.MEMBRO_DIRETTO).via(
                "appartenenze"))),
            (LETTURA, Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi,
                                                                        membro__in=Appartenenza.MEMBRO_ESTESO).via(
                "appartenenze"))),
            (LETTURA, Quota.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi,
                                                                      membro__in=Appartenenza.MEMBRO_ESTESO).via(
                "persona__appartenenze"))),
            (LETTURA, Quota.objects.filter(Q(Q(sede__in=qs_sedi) | Q(appartenenza__sede__in=qs_sedi)))),
            (LETTURA, Persona.objects.filter(
                Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi, confermata=True, ritirata=False).via(
                    "appartenenze"))),
            (LETTURA, Persona.objects.filter(Appartenenza.con_esito_pending(sede__in=qs_sedi).via("appartenenze"))),
            (LETTURA, Persona.objects.filter(Appartenenza.con_esito_no(sede__in=qs_sedi).via("appartenenze"))),
            (LETTURA, Riserva.objects.filter(
                Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi, confermata=True, ritirata=False).via(
                    "persona__appartenenze"))),
            (LETTURA, Tesserino.objects.filter(
                Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi, confermata=True, ritirata=False).via(
                    "persona__appartenenze"))),
        ]
    except (AttributeError, ValueError, KeyError):
        return []
Ejemplo n.º 20
0
    def risultati(self):
        qs_sedi = self.args[0]

        oggi = self.modulo_riempito.cleaned_data['al_giorno']
        nascita_minima = date(oggi.year - 18, oggi.month, oggi.day)
        if self.modulo_riempito.cleaned_data[
                'elettorato'] == ModuloElencoElettorato.ELETTORATO_ATTIVO:
            anzianita_minima = datetime(
                oggi.year - Appartenenza.MEMBRO_ANZIANITA_ELETTORATO_ATTIVO,
                oggi.month, oggi.day, 23, 59, 59)
        else:
            anzianita_minima = datetime(
                oggi.year - Appartenenza.MEMBRO_ANZIANITA_ANNI, oggi.month,
                oggi.day, 23, 59, 59)

        aggiuntivi = {
            # Anzianita' minima
            "pk__in":
            Persona.objects.filter(
                Appartenenza.con_esito_ok(
                    membro__in=Appartenenza.MEMBRO_ANZIANITA,
                    inizio__lte=anzianita_minima).via("appartenenze")).only(
                        "id")
        }
        if self.modulo_riempito.cleaned_data[
                'elettorato'] == ModuloElencoElettorato.ELETTORATO_PASSIVO:
            # Elettorato passivo,
            aggiuntivi.update({
                # Eta' minima
                "data_nascita__lte": nascita_minima,
            })

        r = Persona.objects.filter(
            Appartenenza.query_attuale(
                al_giorno=oggi,
                sede__in=qs_sedi,
                membro=Appartenenza.VOLONTARIO,
            ).via("appartenenze"),
            Q(**aggiuntivi),
        ).exclude(  # Escludi quelli con dimissione negli anni di anzianita'
            appartenenze__terminazione__in=[
                Appartenenza.DIMISSIONE, Appartenenza.ESPULSIONE
            ],
            appartenenze__fine__gte=anzianita_minima,
        ).exclude(  # Escludi quelli con provvedimento di sospensione non terminato
            pk__in=ProvvedimentoDisciplinare.objects.filter(
                Q(fine__gte=oggi) | Q(fine__isnull=True),
                inizio__lte=oggi,
                tipo=ProvvedimentoDisciplinare.SOSPENSIONE).values_list(
                    'persona_id', flat=True)).annotate(
                        appartenenza_tipo=F('appartenenze__membro'),
                        appartenenza_inizio=F('appartenenze__inizio'),
                        appartenenza_sede=F('appartenenze__sede'),
                    ).prefetch_related('appartenenze', 'appartenenze__sede',
                                       'utenza', 'numeri_telefono').distinct(
                                           'cognome', 'nome', 'codice_fiscale')
        return r
Ejemplo n.º 21
0
    def risultati(self):
        qs_sedi = self.args[0]
        gruppo = self.args[1]

        return Persona.objects.filter(
            Appartenenza.query_attuale().via("appartenenze_gruppi"),
            App.query_attuale(sede__in=qs_sedi).via("appartenenze"),
            appartenenze_gruppi__gruppo=gruppo
        ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 22
0
    def risultati(self):
        qs_sedi = self.args[0]
        gruppo = self.args[1]

        return Persona.objects.filter(
            Appartenenza.query_attuale().via("appartenenze_gruppi"),
            App.query_attuale(sede__in=qs_sedi).via("appartenenze"),
            appartenenze_gruppi__gruppo=gruppo).distinct(
                'cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 23
0
def co_reperibilita(request, me):
    sedi = me.oggetti_permesso(GESTIONE_CENTRALE_OPERATIVA_SEDE)
    ora = poco_fa()
    reperibilita = Reperibilita.query_attuale(Appartenenza.query_attuale(sede__in=sedi).via("persona__appartenenze"),
                                              al_giorno=ora).order_by('attivazione', '-creazione')
    contesto = {
        "reperibilita": reperibilita,
        "ora": ora,
    }
    return "centrale_operativa_reperibilita.html", contesto
Ejemplo n.º 24
0
 def risultati(self):
     qs_sedi = self.args[0]
     return Persona.objects.filter(
         Appartenenza.query_attuale(
             sede__in=qs_sedi, membro=Appartenenza.SOSTENITORE,
         ).via("appartenenze")
     ).prefetch_related(
         'appartenenze', 'appartenenze__sede',
         'utenza', 'numeri_telefono'
     )
Ejemplo n.º 25
0
 def risultati(self):
     qs_sedi = self.args[0]
     return Persona.objects.filter(
         Appartenenza.query_attuale(
             sede__in=qs_sedi, membro=Appartenenza.SOSTENITORE,
         ).via("appartenenze")
     ).prefetch_related(
         'appartenenze', 'appartenenze__sede',
         'utenza', 'numeri_telefono'
     )
Ejemplo n.º 26
0
    def risultati(self):
        qs_sedi = self.args[0]

        oggi = self.modulo_riempito.cleaned_data['al_giorno']
        nascita_minima = date(oggi.year - 18, oggi.month, oggi.day)
        if self.modulo_riempito.cleaned_data['elettorato'] == ModuloElencoElettorato.ELETTORATO_ATTIVO:
            anzianita_minima = datetime(
                oggi.year - Appartenenza.MEMBRO_ANZIANITA_ELETTORATO_ATTIVO, oggi.month, oggi.day, 23, 59, 59
            )
        else:
            anzianita_minima = datetime(
                oggi.year - Appartenenza.MEMBRO_ANZIANITA_ANNI, oggi.month, oggi.day, 23, 59, 59
            )

        aggiuntivi = {
            # Anzianita' minima
            "pk__in": Persona.objects.filter(
                Appartenenza.con_esito_ok(
                    membro__in=Appartenenza.MEMBRO_ANZIANITA,
                    inizio__lte=anzianita_minima
                ).via("appartenenze")
            ).only("id")
        }
        if self.modulo_riempito.cleaned_data['elettorato'] == ModuloElencoElettorato.ELETTORATO_PASSIVO:
            # Elettorato passivo,
            aggiuntivi.update({
                # Eta' minima
                "data_nascita__lte": nascita_minima,
            })

        r = Persona.objects.filter(
            Appartenenza.query_attuale(
                al_giorno=oggi,
                sede__in=qs_sedi, membro=Appartenenza.VOLONTARIO,
            ).via("appartenenze"),
            Q(**aggiuntivi),

        ).exclude(  # Escludi quelli con dimissione negli anni di anzianita'
            appartenenze__terminazione__in=[Appartenenza.DIMISSIONE, Appartenenza.ESPULSIONE],
            appartenenze__fine__gte=anzianita_minima,

        ).exclude(  # Escludi quelli con provvedimento di sospensione non terminato
            pk__in=ProvvedimentoDisciplinare.objects.filter(
                Q(fine__gte=oggi) | Q(fine__isnull=True), inizio__lte=oggi, tipo=ProvvedimentoDisciplinare.SOSPENSIONE
            ).values_list('persona_id', flat=True)

        ).annotate(
            appartenenza_tipo=F('appartenenze__membro'),
            appartenenza_inizio=F('appartenenze__inizio'),
            appartenenza_sede=F('appartenenze__sede'),
        ).prefetch_related(
            'appartenenze', 'appartenenze__sede',
            'utenza', 'numeri_telefono'
        ).distinct('cognome', 'nome', 'codice_fiscale')
        return r
Ejemplo n.º 27
0
def espandi_gestione_gruppo(qs_gruppi, al_giorno=None):
    from anagrafica.models import Persona
    from gruppi.models import Appartenenza
    try:
        return [
            (MODIFICA, qs_gruppi),
            (LETTURA, Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno).via("appartenenze_gruppi"),
                                             appartenenze_gruppi__gruppo__in=qs_gruppi)),
        ]
    except (AttributeError, ValueError, KeyError, TypeError):
        return []
Ejemplo n.º 28
0
 def risultati(self):
     qs_sedi = self.args[0]
     return Persona.objects.filter(
         ~Appartenenza.query_attuale(
             sede__in=qs_sedi,
         ).via("appartenenze"),
         appartenenze__sede__in=qs_sedi,
         appartenenze__terminazione__in=[Appartenenza.DIMISSIONE, Appartenenza.ESPULSIONE],
     ).prefetch_related(
         'appartenenze', 'appartenenze__sede',
         'utenza', 'numeri_telefono'
     ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 29
0
 def risultati(self):
     qs_sedi = self.args[0]
     return Persona.objects.filter(
         ~Appartenenza.query_attuale(
             sede__in=qs_sedi,
         ).via("appartenenze"),
         appartenenze__sede__in=qs_sedi,
         appartenenze__terminazione__in=[Appartenenza.DIMISSIONE, Appartenenza.ESPULSIONE],
     ).prefetch_related(
         'appartenenze', 'appartenenze__sede',
         'utenza', 'numeri_telefono'
     ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 30
0
 def risultati(self):
     qs_sedi = self.args[0]
     return Persona.objects.filter(
         Riserva.query_attuale(
             Riserva.con_esito_ok().q,
             Appartenenza.query_attuale(sede__in=qs_sedi).via(
                 "appartenenza")).via("riserve")).annotate(
                     appartenenza_tipo=F('appartenenze__membro'),
                     appartenenza_inizio=F('appartenenze__inizio'),
                 ).prefetch_related('appartenenze', 'appartenenze__sede',
                                    'utenza', 'numeri_telefono').distinct(
                                        'cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 31
0
    def risultati(self):
        qs_sedi = self.args[0]

        from django.db.models import BooleanField, Value
        if self.modulo_riempito.cleaned_data['estesi'] == self.modulo_riempito.ESTESI_INGRESSO:
            # Estesi in ingresso
            risultati = Persona.objects.filter(
                Appartenenza.query_attuale(
                    sede__in=qs_sedi, membro=Appartenenza.ESTESO,
                ).via("appartenenze")
            ).annotate(is_ingresso=Value(value=True, output_field=BooleanField()))

        else:
            # Estesi in uscita
            estesi_da_qualche_parte = Persona.objects.filter(
                Appartenenza.query_attuale(
                    membro=Appartenenza.ESTESO
                ).via("appartenenze")
            ).values_list('pk', flat=True)

            volontari_da_me = Persona.objects.filter(
                Appartenenza.query_attuale(
                    sede__in=qs_sedi, membro=Appartenenza.VOLONTARIO,
                ).via("appartenenze")
            ).values_list('pk', flat=True)

            risultati = Persona.objects.filter(
                pk__in=volontari_da_me
            ).filter(
                pk__in=estesi_da_qualche_parte
            ).annotate(is_ingresso=Value(value=False, output_field=BooleanField()))

        return risultati.annotate(
                appartenenza_tipo=F('appartenenze__membro'),
                appartenenza_inizio=F('appartenenze__inizio'),
                appartenenza_sede=F('appartenenze__sede'),
        ).prefetch_related(
            'appartenenze', 'appartenenze__sede',
            'utenza', 'numeri_telefono'
        ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 32
0
 def risultati(self):
     qs_sedi = self.args[0]
     return Persona.objects.filter(
         Appartenenza.query_attuale(
             sede__in=qs_sedi,
             membro=Appartenenza.ORDINARIO,
         ).via("appartenenze")).annotate(
             appartenenza_tipo=F('appartenenze__membro'),
             appartenenza_inizio=F('appartenenze__inizio'),
             appartenenza_sede=F('appartenenze__sede'),
         ).prefetch_related('appartenenze', 'appartenenze__sede', 'utenza',
                            'numeri_telefono').distinct(
                                'cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 33
0
 def risultati(self):
     qs_sedi = self.args[0]
     return Persona.objects.filter(
         Appartenenza.query_attuale(
             al_giorno=self.modulo_riempito.cleaned_data['al_giorno'],
             sede__in=qs_sedi,
             membro__in=Appartenenza.MEMBRO_SOCIO,
         ).via("appartenenze")).annotate(
             appartenenza_tipo=F('appartenenze__membro'),
             appartenenza_inizio=F('appartenenze__inizio'),
             appartenenza_sede=F('appartenenze__sede'),
         ).prefetch_related('appartenenze', 'appartenenze__sede', 'utenza',
                            'numeri_telefono').distinct(
                                'cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 34
0
 def risultati(self):
     qs_sedi = self.args[0]
     return Persona.objects.filter(
         Appartenenza.query_attuale(
             sede__in=qs_sedi, membro=Appartenenza.ORDINARIO,
         ).via("appartenenze")
     ).annotate(
             appartenenza_tipo=F('appartenenze__membro'),
             appartenenza_inizio=F('appartenenze__inizio'),
             appartenenza_sede=F('appartenenze__sede'),
     ).prefetch_related(
         'appartenenze', 'appartenenze__sede',
         'utenza', 'numeri_telefono'
     ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 35
0
 def risultati(self):
     qs_sedi = self.args[0]
     return Persona.objects.filter(
         appartenenze__sede__in=qs_sedi,
         appartenenze__terminazione__in=[
             Appartenenza.TRASFERIMENTO,
         ],
     ).exclude(  # Escludi tutti i membri attuali delle mie sedi (es. trasf. interni)
         pk__in=Persona.objects.filter(
             Appartenenza.query_attuale(
                 sede__in=qs_sedi).via("appartenenze")).values_list(
                     'id', flat=True)).prefetch_related(
                         'appartenenze', 'appartenenze__sede', 'utenza',
                         'numeri_telefono').distinct(
                             'cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 36
0
    def risultati(self):
        qs_sedi = self.args[0]

        sostenitori = Persona.objects.filter(
            Appartenenza.query_attuale(
                sede__in=qs_sedi,
                membro=Appartenenza.SOSTENITORE,
            ).via("appartenenze")).values_list('pk', flat=True)
        ex = Persona.objects.filter(
            appartenenze__in=Appartenenza.objects.filter(
                sede__in=qs_sedi,
                membro=Appartenenza.SOSTENITORE,
                fine__isnull=False)).exclude(pk__in=sostenitori)
        return ex.prefetch_related('appartenenze', 'appartenenze__sede',
                                   'utenza', 'numeri_telefono')
Ejemplo n.º 37
0
 def risultati(self):
     qs_sedi = self.args[0]
     return Persona.objects.filter(
         Appartenenza.query_attuale(
             al_giorno=self.modulo_riempito.cleaned_data['al_giorno'],
             sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_SOCIO,
         ).via("appartenenze")
     ).annotate(
             appartenenza_tipo=F('appartenenze__membro'),
             appartenenza_inizio=F('appartenenze__inizio'),
             appartenenza_sede=F('appartenenze__sede'),
     ).prefetch_related(
         'appartenenze', 'appartenenze__sede',
         'utenza', 'numeri_telefono'
     ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 38
0
 def risultati(self):
     qs_sedi = self.args[0]
     return Persona.objects.filter(
         Appartenenza.query_attuale(
             sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_TESSERINO,
         ).via("appartenenze"),
         tesserini__stato_richiesta__in=(Tesserino.ACCETTATO, Tesserino.RICHIESTO),
     ).annotate(
             appartenenza_tipo=F('appartenenze__membro'),
             appartenenza_inizio=F('appartenenze__inizio'),
             appartenenza_sede=F('appartenenze__sede'),
             tesserino_codice=F('tesserini__codice'),
     ).prefetch_related(
         'appartenenze', 'appartenenze__sede',
         'utenza', 'numeri_telefono'
     ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 39
0
 def risultati(self):
     qs_sedi = self.args[0]
     return Persona.objects.filter(
         Riserva.query_attuale(
             Riserva.con_esito_ok().q,
             Appartenenza.query_attuale(
                 sede__in=qs_sedi
             ).via("appartenenza"),
         ).via("riserve")
     ).annotate(
             appartenenza_tipo=F('appartenenze__membro'),
             appartenenza_inizio=F('appartenenze__inizio'),
     ).prefetch_related(
         'appartenenze', 'appartenenze__sede',
         'utenza', 'numeri_telefono'
     ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 40
0
def attivita_gruppi_gruppo(request, me, pk):
    """
    Mostra i membri del gruppo
    """
    gruppo = get_object_or_404(Gruppo, pk=pk)
    if not me.permessi_almeno(gruppo, MODIFICA):
        return redirect(ERRORE_PERMESSI)

    sedi = Sede.objects.filter(App.query_attuale().via("appartenenze"),
                               appartenenze__persona__appartenenze_gruppi__in=gruppo.appartenenze.all())
    elenco = ElencoMembriGruppo(sedi, gruppo, gruppo=gruppo)

    contesto = {
        "elenco": elenco,
        "gruppo": gruppo,
    }
    return 'attivita_gruppi_gruppo.html', contesto
Ejemplo n.º 41
0
    def risultati(self):
        qs_sedi = self.args[0]
        return Persona.objects.filter(
            appartenenze__sede__in=qs_sedi,
            appartenenze__terminazione__in=[Appartenenza.TRASFERIMENTO,],

        ).exclude(  # Escludi tutti i membri attuali delle mie sedi (es. trasf. interni)
            pk__in=Persona.objects.filter(
                Appartenenza.query_attuale(
                    sede__in=qs_sedi
                ).via("appartenenze")
            ).values_list('id', flat=True)

        ).prefetch_related(
            'appartenenze', 'appartenenze__sede',
            'utenza', 'numeri_telefono'
        ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 42
0
 def risultati(self):
     qs_sedi = self.args[0]
     return Persona.objects.filter(
         Appartenenza.query_attuale(
             sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_TESSERINO,
         ).via("appartenenze"),
         tesserini__stato_richiesta__in=(Tesserino.ACCETTATO, Tesserino.RICHIESTO, Tesserino.DUPLICATO),
     ).annotate(
             appartenenza_tipo=F('appartenenze__membro'),
             appartenenza_inizio=F('appartenenze__inizio'),
             appartenenza_sede=F('appartenenze__sede'),
             tesserino_pk=F('tesserini__pk'),
             tesserino_codice=F('tesserini__codice'),
             tesserino_tipo_richiesta=F('tesserini__tipo_richiesta'),
     ).prefetch_related(
         'appartenenze', 'appartenenze__sede',
         'utenza', 'numeri_telefono'
     ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 43
0
    def risultati(self):
        qs_sedi = self.args[0]

        sostenitori = Persona.objects.filter(
            Appartenenza.query_attuale(
                sede__in=qs_sedi, membro=Appartenenza.SOSTENITORE,
            ).via("appartenenze")
        ).values_list('pk', flat=True)
        ex = Persona.objects.filter(
            appartenenze__in=Appartenenza.objects.filter(
                sede__in=qs_sedi, membro=Appartenenza.SOSTENITORE,
                fine__isnull=False
            )
        ).exclude(pk__in=sostenitori)
        return ex.prefetch_related(
            'appartenenze', 'appartenenze__sede',
            'utenza', 'numeri_telefono'
        )
Ejemplo n.º 44
0
    def risultati(self):
        qs_sedi = self.args[0]
        modulo = self.modulo_riempito

        membri = modulo.cleaned_data['membri']
        attivi = membri == modulo.MEMBRI_VOLONTARI
        ordinari = membri == modulo.MEMBRI_ORDINARI

        anno = modulo.cleaned_data['anno']

        try:
            tesseramento = Tesseramento.objects.get(anno=anno)

        except Tesseramento.DoesNotExist:  # Errore tesseramento anno non esistente
            raise ValueError(
                "Anno di tesseramento non valido o gestito da Gaia.")

        # Dobbiamo ridurre il set a tutti i volontari che sono, al giorno attuale, appartenenti a questa sede
        # Nel caso di un anno passato, generiamo l'elenco al 31 dicembre. Nel caso dell'anno in corso,
        # generiamo l'elenco al giorno attuale. Questo e' equivalente a:
        #  giorno = min(31/dicembre/<anno selezionato>, oggi)
        giorno_appartenenza = min(date(day=31, month=12, year=anno), oggi())

        if modulo.cleaned_data['tipo'] == modulo.VERSATE:
            origine = tesseramento.paganti(
                attivi=attivi, ordinari=ordinari)  # Persone con quote pagate

        else:
            origine = tesseramento.non_paganti(
                attivi=attivi,
                ordinari=ordinari)  # Persone con quote NON pagate

        # Ora filtra per Sede
        q = Appartenenza.query_attuale(
            al_giorno=giorno_appartenenza,
            membro=Appartenenza.VOLONTARIO).filter(sede__in=qs_sedi).defer(
                'membro', 'inizio', 'sede')

        return origine.filter(appartenenze__in=q).annotate(
            appartenenza_tipo=F('appartenenze__membro'),
            appartenenza_inizio=F('appartenenze__inizio'),
            appartenenza_sede=F('appartenenze__sede'),
        ).prefetch_related('quote').distinct('cognome', 'nome',
                                             'codice_fiscale')
Ejemplo n.º 45
0
def attivita_gruppi_gruppo(request, me, pk):
    """
    Mostra i membri del gruppo
    """
    gruppo = get_object_or_404(Gruppo, pk=pk)
    if not me.permessi_almeno(gruppo, MODIFICA):
        return redirect(ERRORE_PERMESSI)

    sedi = Sede.objects.filter(
        App.query_attuale().via("appartenenze"),
        appartenenze__persona__appartenenze_gruppi__in=gruppo.appartenenze.all(
        ))
    elenco = ElencoMembriGruppo(sedi, gruppo, gruppo=gruppo)

    contesto = {
        "elenco": elenco,
        "gruppo": gruppo,
    }
    return 'attivita_gruppi_gruppo.html', contesto
Ejemplo n.º 46
0
    def risultati(self):
        qs_sedi = self.args[0]

        modulo = self.modulo_riempito
        query = Q()
        if modulo.IV == modulo.cleaned_data['includi']:
            query &= Q(iv=True)
        if modulo.CM == modulo.cleaned_data['includi']:
            query &= Q(cm=True)
        return Persona.objects.filter(
            query,
            Appartenenza.query_attuale(
                sede__in=qs_sedi,
                membro__in=Appartenenza.MEMBRO_DIRETTO,
            ).via("appartenenze")).annotate(
                appartenenza_tipo=F('appartenenze__membro'),
                appartenenza_inizio=F('appartenenze__inizio'),
                appartenenza_sede=F('appartenenze__sede'),
            ).prefetch_related('appartenenze', 'appartenenze__sede', 'utenza',
                               'numeri_telefono').distinct(
                                   'cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 47
0
    def risultati(self):
        qs_sedi = self.args[0]

        modulo = self.modulo_riempito
        attivi = Partecipazione.objects.filter(
            turno__fine__gte=modulo.cleaned_data['inizio'], turno__inizio__lte=modulo.cleaned_data['fine'],
            turno__attivita__sede__in=qs_sedi,
            confermata=True,
        ).values_list('persona_id', flat=True)
        return Persona.objects.filter(
            Appartenenza.query_attuale(
                sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_ATTIVITA,
            ).via("appartenenze")
        ).exclude(pk__in=attivi).annotate(
                appartenenza_tipo=F('appartenenze__membro'),
                appartenenza_inizio=F('appartenenze__inizio'),
                appartenenza_sede=F('appartenenze__sede'),
        ).prefetch_related(
            'appartenenze', 'appartenenze__sede',
            'utenza', 'numeri_telefono'
        ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 48
0
    def risultati(self):
        qs_sedi = self.args[0]

        modulo = self.modulo_riempito
        if modulo and modulo.cleaned_data['includi_estesi'] == modulo.SI:
            appartenenze = [Appartenenza.VOLONTARIO, Appartenenza.ESTESO]
        else:
            appartenenze = [Appartenenza.VOLONTARIO,]

        return Persona.objects.filter(
            Appartenenza.query_attuale(
                sede__in=qs_sedi, membro__in=appartenenze,
            ).via("appartenenze")
        ).annotate(
                appartenenza_tipo=F('appartenenze__membro'),
                appartenenza_inizio=F('appartenenze__inizio'),
                appartenenza_sede=F('appartenenze__sede'),
        ).prefetch_related(
            'appartenenze', 'appartenenze__sede',
            'utenza', 'numeri_telefono'
        ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 49
0
    def risultati(self):
        qs_sedi = self.args[0]

        modulo = self.modulo_riempito
        attivi = Partecipazione.objects.filter(
            turno__fine__gte=modulo.cleaned_data['inizio'], turno__inizio__lte=modulo.cleaned_data['fine'],
            turno__attivita__sede__in=qs_sedi,
            confermata=True,
        ).values_list('persona_id', flat=True)
        return Persona.objects.filter(
            Appartenenza.query_attuale(
                sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_ATTIVITA,
            ).via("appartenenze")
        ).exclude(pk__in=attivi).annotate(
                appartenenza_tipo=F('appartenenze__membro'),
                appartenenza_inizio=F('appartenenze__inizio'),
                appartenenza_sede=F('appartenenze__sede'),
        ).prefetch_related(
            'appartenenze', 'appartenenze__sede',
            'utenza', 'numeri_telefono'
        ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 50
0
    def risultati(self):
        qs_sedi = self.args[0]

        modulo = self.modulo_riempito
        if modulo and modulo.cleaned_data['includi_estesi'] == modulo.SI:
            appartenenze = [Appartenenza.VOLONTARIO, Appartenenza.ESTESO]
        else:
            appartenenze = [Appartenenza.VOLONTARIO,]

        return Persona.objects.filter(
            Appartenenza.query_attuale(
                sede__in=qs_sedi, membro__in=appartenenze,
            ).via("appartenenze")
        ).annotate(
                appartenenza_tipo=F('appartenenze__membro'),
                appartenenza_inizio=F('appartenenze__inizio'),
                appartenenza_sede=F('appartenenze__sede'),
        ).prefetch_related(
            'appartenenze', 'appartenenze__sede',
            'utenza', 'numeri_telefono'
        ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 51
0
 def risultati(self):
     qs_sedi = self.args[0]
     tesserini_da_richiedere = super(ElencoTesseriniSenzaFototessera,
                                     self).risultati()
     tesserini_richiesti = super(ElencoTesseriniDaRichiedere,
                                 self).risultati()
     return Persona.objects.filter(
         Appartenenza.query_attuale(
             sede__in=qs_sedi,
             membro__in=Appartenenza.MEMBRO_TESSERINO,
         ).via("appartenenze"),
     ).exclude(  # Escludi quelli che posso richiedere
         pk__in=tesserini_da_richiedere.values_list(
             'id', flat=True)).exclude(  # Escludi quelli gia richiesti
                 pk__in=tesserini_richiesti.values_list('id', flat=True),
             ).annotate(
                 appartenenza_tipo=F('appartenenze__membro'),
                 appartenenza_inizio=F('appartenenze__inizio'),
                 appartenenza_sede=F('appartenenze__sede'),
             ).prefetch_related('appartenenze', 'appartenenze__sede',
                                'utenza', 'numeri_telefono').distinct(
                                    'cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 52
0
    def risultati(self):
        qs_sedi = self.args[0]

        modulo = self.modulo_riempito
        query = Q()
        if modulo.IV == modulo.cleaned_data['includi']:
            query &= Q(iv=True)
        if modulo.CM == modulo.cleaned_data['includi']:
            query &= Q(cm=True)
        return Persona.objects.filter(
            query,
            Appartenenza.query_attuale(
                sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_DIRETTO,
            ).via("appartenenze")
        ).annotate(
                appartenenza_tipo=F('appartenenze__membro'),
                appartenenza_inizio=F('appartenenze__inizio'),
                appartenenza_sede=F('appartenenze__sede'),
        ).prefetch_related(
            'appartenenze', 'appartenenze__sede',
            'utenza', 'numeri_telefono'
        ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 53
0
    def risultati(self):
        qs_sedi = self.args[0]
        tesserini_da_richiedere = super(ElencoTesseriniSenzaFototessera, self).risultati()
        tesserini_richiesti = super(ElencoTesseriniDaRichiedere, self).risultati()
        return Persona.objects.filter(
            Appartenenza.query_attuale(
                sede__in=qs_sedi, membro__in=Appartenenza.MEMBRO_TESSERINO,
            ).via("appartenenze"),

        ).exclude(  # Escludi quelli che posso richiedere
            pk__in=tesserini_da_richiedere.values_list('id', flat=True)
        ).exclude(  # Escludi quelli gia richiesti
            pk__in=tesserini_richiesti.values_list('id', flat=True),

        ).annotate(
                appartenenza_tipo=F('appartenenze__membro'),
                appartenenza_inizio=F('appartenenze__inizio'),
                appartenenza_sede=F('appartenenze__sede'),
        ).prefetch_related(
            'appartenenze', 'appartenenze__sede',
            'utenza', 'numeri_telefono'
        ).distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 54
0
    def risultati(self):
        qs_sedi = self.args[0]
        modulo = self.modulo_riempito

        membri = modulo.cleaned_data['membri']
        attivi = membri == modulo.MEMBRI_VOLONTARI
        ordinari = membri == modulo.MEMBRI_ORDINARI

        anno = modulo.cleaned_data['anno']

        try:
            tesseramento = Tesseramento.objects.get(anno=anno)

        except Tesseramento.DoesNotExist:  # Errore tesseramento anno non esistente
            raise ValueError("Anno di tesseramento non valido o gestito da Gaia.")

        # Dobbiamo ridurre il set a tutti i volontari che sono, al giorno attuale, appartenenti a questa sede
        # Nel caso di un anno passato, generiamo l'elenco al 31 dicembre. Nel caso dell'anno in corso,
        # generiamo l'elenco al giorno attuale. Questo e' equivalente a:
        #  giorno = min(31/dicembre/<anno selezionato>, oggi)
        giorno_appartenenza = min(date(day=31, month=12, year=anno), oggi())

        if modulo.cleaned_data['tipo'] == modulo.VERSATE:
            origine = tesseramento.paganti(attivi=attivi, ordinari=ordinari)  # Persone con quote pagate

        else:
            origine = tesseramento.non_paganti(attivi=attivi, ordinari=ordinari)  # Persone con quote NON pagate

        # Ora filtra per Sede
        q = Appartenenza.query_attuale(al_giorno=giorno_appartenenza,
                                       membro=Appartenenza.VOLONTARIO)

        app = Appartenenza.objects.filter(pk__in=q).filter(sede__in=qs_sedi)
        return origine.filter(appartenenze__in=app).annotate(
                appartenenza_tipo=F('appartenenze__membro'),
                appartenenza_inizio=F('appartenenze__inizio'),
                appartenenza_sede=F('appartenenze__sede'),
        ).prefetch_related('quote').distinct('cognome', 'nome', 'codice_fiscale')
Ejemplo n.º 55
0
    def _sposta_persone(self, request, form_class, queryset=None):
        from anagrafica.forms import ModuloSpostaPersoneManuale, ModuloSpostaPersoneDaCSV

        contesto = {}
        trasferimenti = None
        esclusi = None
        errori = None
        eseguito = False
        if not self._has_transfer_permission(request):
            self.message_user(request, 'Non si hanno i diritti per l\'operazione richiesta', level=messages.WARNING)
            return HttpResponseRedirect(reverse('admin:anagrafica_persona_changelist'))

        if request.method.lower() == 'post':
            if form_class == ModuloSpostaPersoneDaCSV:
                form = form_class(request.POST, files=request.FILES)
                contesto.update({
                    'url': reverse('admin:anagrafica_persona_trasferisci'),
                })
                if form.is_valid():
                    if form.cleaned_data.get('procedi', False) and request.session.get('dati_persone', None):
                        trasferimenti = form.sposta_persone(request.user.persona, persone=request.session['dati_persone'])
                        errori = [persona for persona in trasferimenti if persona[1] is not True and isinstance(persona[1], text_type)]
                        trasferimenti = [persona[0] for persona in trasferimenti if persona[1] is True or isinstance(persona[1], Appartenenza)]
                        self.message_user(request, self.messaggio_spostamento % {'num': len(trasferimenti)})
                        contesto.update({
                            'title': 'Esito dei trasferimenti',
                        })
                        eseguito = True
                    else:
                        dati, esclusi = form.elenco_persone(request.FILES['dati'])
                        form.fields['dati'].widget = forms.HiddenInput()
                        form.data['procedi'] = 1
                        request.session['dati_persone'] = dati
                        contesto.update({
                            'title': 'Conferma trasferimenti',
                            'etichetta_invio': 'Avvia trasferimento',
                            'dati_csv': dati,
                        })
            elif form_class == ModuloSpostaPersoneManuale:
                if 'do_action' in request.POST and request.POST.get(helpers.ACTION_CHECKBOX_NAME, ''):
                    form = form_class(request.POST)
                    queryset = Persona.objects.filter(
                        pk__in=[int(pk) for pk in request.POST.get(helpers.ACTION_CHECKBOX_NAME, '').split(',')]
                    )

                    # Escludiamo i non volontari
                    volontari = Appartenenza.objects.filter(
                        Appartenenza.query_attuale(membro=Appartenenza.VOLONTARIO).q,
                        persona__in=queryset
                    ).values_list('persona', flat=True)
                    esclusi = queryset.exclude(pk__in=volontari)
                    queryset = queryset.filter(pk__in=volontari)
                    if form.is_valid():
                        persone, scarti = form.mappa_persone(queryset)
                        trasferimenti = form.sposta_persone(request.user.persona, persone=persone)
                        errori = [persona for persona in trasferimenti if persona[1] is not True and isinstance(persona[1], text_type)]
                        trasferimenti = [persona[0] for persona in trasferimenti if persona[1] is True or isinstance(persona[1], Appartenenza)]
                        self.message_user(request, self.messaggio_spostamento % {'num': len(trasferimenti)})
                    contesto.update({
                        'title': 'Esito dei trasferimenti',
                        'url': reverse('admin:anagrafica_persona_trasferisci_post'),
                    })
                else:
                    form = form_class()
                    contesto.update({
                        'title': 'Seleziona gli estremi dei trasferimenti',
                        'etichetta_invio': 'Avvia trasferimento',
                        'eseguito': False,
                        'dati_pronti': True,
                        'queryset': queryset,
                        'url': reverse('admin:anagrafica_persona_trasferisci_post'),
                    })
                eseguito = 'do_action' in request.POST
        else:
            if form_class == ModuloSpostaPersoneDaCSV:
                contesto = {
                    'title': 'Carica dati dei trasferimenti',
                    'etichetta_invio': 'Carica dati',
                    'eseguito': False,
                    'url': reverse('admin:anagrafica_persona_trasferisci'),
                }
            elif form_class == ModuloSpostaPersoneManuale:
                contesto.update({
                    'title': 'Seleziona gli estremi dei trasferimenti',
                    'etichetta_invio': 'Avvia trasferimento',
                    'eseguito': False,
                    'url': reverse('admin:anagrafica_persona_trasferisci_post'),
                })
                eseguito = 'do_action' in request.POST
            form = form_class()

        contesto.update({
            'opts': self.model._meta,
            'form': form,
            'queryset': queryset,
            'action': 'sposta_persone',
            'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
            'pks': queryset.values_list('pk', flat=True) if queryset else '',
            'trasferimenti': trasferimenti,
            'errori': errori,
            'esclusi': esclusi,
            'eseguito': eseguito,
        })
        return render(request, 'admin/anagrafica/trasferimento_massivo.html', contesto)
Ejemplo n.º 56
0
def espandi_gestione_centrale_operativa_sede(qs_sedi, al_giorno=None):
    from anagrafica.models import Persona, Appartenenza
    return [
        (LETTURA,   Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi).via("appartenenze"), reperibilita__isnull=False)),
        (LETTURA,   Persona.objects.filter(Appartenenza.query_attuale(al_giorno=al_giorno, sede__in=qs_sedi).via("appartenenze"), coturni__isnull=False)),
    ]
Ejemplo n.º 57
0
 def choices_for_request(self):
     self.choices = self.choices.filter(Appartenenza.query_attuale(membro=Appartenenza.SOSTENITORE).via("appartenenze"))
     return super(SostenitoreAutocompletamento, self).choices_for_request()
Ejemplo n.º 58
0
def _appartenenze_attive(queryset):
    return queryset.filter(
        appartenenze__in=Appartenenza.query_attuale().values_list('pk', flat='True')
    )
Ejemplo n.º 59
0
 def choices_for_request(self):
     sedi = [d.oggetto for d in self.request.user.persona.deleghe_attuali(tipo__in=(UFFICIO_SOCI, UFFICIO_SOCI_UNITA))]
     self.choices = self.choices.filter(Appartenenza.query_attuale(membro=Appartenenza.VOLONTARIO, sede__in=sedi).via("appartenenze"))
     return super(VolontarioSedeAutocompletamento, self).choices_for_request()