Ejemplo n.º 1
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.º 2
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.º 3
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.º 4
0
    def risultati(self):
        from datetime import datetime

        qs_sedi = self.args[0]
        form = self.modulo_riempito
        cd = form.cleaned_data

        oggi = cd['al_giorno']  # date
        elettorato = cd['elettorato']

        # Impostazione Anzianità
        oggi = datetime.combine(oggi, datetime.min.time())  # date -> datetime
        delta_months = oggi - relativedelta(months=Appartenenza.MEMBRO_ANZIANITA_MESI)
        anzianita_minima = delta_months.replace(hour=23, minute=59, second=59)

        aggiuntivi = {
            # Anzianita' minima 
            "pk__in": Persona.objects.filter(
                Appartenenza.con_esito_ok(
                    membro__in=[Appartenenza.VOLONTARIO, ],
                    inizio__lte=anzianita_minima,
                    terminazione__isnull=True,
                ).via("appartenenze")
            ).only("id")
        }

        # Impostazione età minima
        ETA_MINIMA_ANNI = 18 if elettorato == ModuloElencoElettorato.ELETTORATO_PASSIVO else 14
        nascita_minima = date(oggi.year - ETA_MINIMA_ANNI, oggi.month, oggi.day)

        # Update criteri query
        aggiuntivi.update({
            # Registrazione versamento della quota associativa annuale (da commentare)
            # 'quota__stato': Quota.REGISTRATA,
            # 'quota__tipo': Quota.QUOTA_SOCIO,

            "data_nascita__lte": nascita_minima,  # Età minima
        })

        # Cerca dipendenti da escludere
        dipendenti = Persona.objects.filter(
            Q(Appartenenza.query_attuale(
                membro=Appartenenza.DIPENDENTE,
                sede__in=qs_sedi,
                al_giorno=oggi,
            ).via("appartenenze")))

        # print("dipendenti", dipendenti.values_list('pk', flat=True) )

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

        r = persone.exclude(
            # Escludi quelli con provvedimento di sospensione non terminato
            pk__in=ProvvedimentoDisciplinare.objects.filter(
                Q(fine__lte=oggi) | Q(fine__isnull=True),
                inizio__gte=oggi - relativedelta(months=24),
                tipo__in=[ProvvedimentoDisciplinare.SOSPENSIONE,
                          ProvvedimentoDisciplinare.ESPULSIONE,
                          ProvvedimentoDisciplinare.RADIAZIONE, ]
            ).values_list('persona__id', flat=True)

        ).exclude(
            pk__in=dipendenti.values_list('pk', flat=True)
        )

        # Escludi nelle liste elettorali di dove è volontario, essendo dipendente,
        # anche se in un altro comitato, non DEVE essere nella lista ne attiva e ne passiva
        qs_sedi_pk_list = qs_sedi if isinstance(qs_sedi, list) else qs_sedi.values_list('pk', flat=True)

        return r.exclude(
            pk__in=Appartenenza.query_attuale(
                membro=Appartenenza.DIPENDENTE,
                al_giorno=oggi,
                sede__pk__in=set(qs_sedi_pk_list) ^
                             set(Persona.objects.filter(pk__in=r.values_list('pk', flat=True)).values_list('appartenenze__sede__pk', flat=True)),
            ).values_list('persona__pk', 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')