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 try: tesseramento = Tesseramento.objects.get( anno=modulo.cleaned_data.get('anno')) except Tesseramento.DoesNotExist: # Errore tesseramento anno non esistente raise ValueError( "Anno di tesseramento non valido o gestito da Gaia.") 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_in_anno(modulo.cleaned_data.get('anno')) app = Appartenenza.objects.filter(pk__in=q).filter( sede__in=qs_sedi, membro=Appartenenza.VOLONTARIO) 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')
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 try: tesseramento = Tesseramento.objects.get(anno=modulo.cleaned_data.get('anno')) except Tesseramento.DoesNotExist: # Errore tesseramento anno non esistente raise ValueError("Anno di tesseramento non valido o gestito da Gaia.") 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_in_anno(modulo.cleaned_data.get('anno')) app = Appartenenza.objects.filter(pk__in=q).filter(sede__in=qs_sedi, membro=Appartenenza.VOLONTARIO) 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')
def passibili_pagamento(self, membri=Appartenenza.MEMBRO_SOCIO): """ Ritorna un elenco di tutti i passibili di pagamento di quota associativa per il tesseramento in essere. :param membri: Lista o tupla di appartenenze da considerare :return: QuerySet<Persona> """ # Soci che hanno almeno una appartenenza confermata # durante l'anno presso un Comitato CRI return Persona.objects.filter( Appartenenza.query_attuale_in_anno(self.anno).via("appartenenze"), # Membri nell'anno appartenenze__membro__in=membri, # ...di un socio cri appartenenze__sede__tipo=Sede.COMITATO, # ...presso un Comitato )
def _q_volontari(self, solo_paganti=True): return Q( # Oppure volontario che ha pagato almeno quota volontario Appartenenza.query_attuale_in_anno(self.anno).via("appartenenze"), self._q_pagante() if solo_paganti else Q(), appartenenze__membro=Appartenenza.VOLONTARIO, )
def _q_ordinari(self, solo_paganti=True): return Q( # Ordinario che ha pagato almeno quota ordinario Appartenenza.query_attuale_in_anno(self.anno).via("appartenenze"), self._q_pagante() if solo_paganti else Q(), appartenenze__membro=Appartenenza.ORDINARIO, )