def main_settings(request): return { 'site': get_current_site(request), "DEBUG": settings.DEBUG, "TEMPLATE_DEBUG": settings.TEMPLATE_DEBUG, "INSTANCE_TYPE": settings.INSTANCE_TYPE, "territori_cratere": list(Territorio.get_territori_cratere()), "tipologie_immobile": TipoImmobile.get_tipologie(), "tipologie_sogg_att": SoggettoAttuatore.get_tipologie(), "interventi_search_form": InterventoProgrammaSearchFormNavbar(), "impresa_search_form": ImpresaSearchFormNavbar(), "url": request.build_absolute_uri(), "ultimo_aggiornamento": UltimoAggiornamento.objects.get( tipologia=UltimoAggiornamento.TIPOLOGIA.INTERVENTI, ).data, "n_comuni_cratere": len(settings.COMUNI_CRATERE), "n_comuni_monitorati": Territorio.objects.filter( interventoprogramma__isnull=False, istat_id__in=settings.COMUNI_CRATERE).distinct('slug').count() }
def check_request_params(self): # check that GET parameters are ONLY the ones in the accepted_params variable. if NOT -> redirect 404 if not (set(self._filterset.form.data.keys()) <= set( self.accepted_parameters)): self.validation = False territori_set = Territorio.get_territori_cratere().values_list( 'slug', flat=True) self.filters['territorio_filter'] = self.get_parameter( 'territorio__slug', territori_set, model=Territorio) vari_territori_set = ['False', 'True'] self.filters['vari_territori_filter'] = self.get_parameter( 'vari_territori', vari_territori_set, ) tipo_immobile_set = TipoImmobile.objects.all().values_list('slug', flat=True) self.filters['tipo_immobile_filter'] = self.get_parameter( 'tipo_immobile__slug', tipo_immobile_set, model=TipoImmobile) # if filter vari territori is True, there cannot be territorio filter on specific territorio if self.filters['vari_territori_filter'] == u'True' and self.filters[ 'territorio_filter'] is not None: self.validation = False sogg_attuatore_set = SoggettoAttuatore.objects.all().values_list( 'slug', flat=True) self.filters['sogg_attuatore_filter'] = self.get_parameter( 'soggetto_attuatore__slug', sogg_attuatore_set, model=SoggettoAttuatore) sogg_attuatore_tipologia_set = SoggettoAttuatore.TIPOLOGIA._db_values sogg_att_tipologia_slug = self.get_parameter( 'soggetto_attuatore__tipologia', sogg_attuatore_tipologia_set) if sogg_att_tipologia_slug is not None and sogg_att_tipologia_slug is not False: self.filters[ 'sogg_attuatore_tipologia_filter'] = SoggettoAttuatore.TIPOLOGIA._display_map[ sogg_att_tipologia_slug] #status filters bool_set = [u'True', u'False'] self.filters['a_piano_filter'] = self.get_parameter( 'a_piano', bool_set) self.filters['in_attuazione_filter'] = self.get_parameter( 'in_attuazione', bool_set) stato_attuazione_set = list( InterventoProgramma.STATO_ATTUAZIONE._db_values) self.filters['stato_attuazione_filter'] = self.get_parameter( 'stato_attuazione', stato_attuazione_set) impresa_set = Impresa.objects.all().values_list('slug', flat=True) self.filters['impresa_filter'] = self.get_parameter( 'interventopiano__intervento__imprese__slug', impresa_set, model=Impresa)
def check_request_params(self): # check that GET parameters are ONLY the ones in the accepted_params variable. if NOT -> redirect 404 if not (set(self._filterset.form.data.keys()) <= set( self.accepted_parameters)): self.validation = False territori_set = Territorio.get_territori_cratere().values_list( 'slug', flat=True) self.filters['territorio_filter'] = self.get_parameter( 'territorio__slug', territori_set, model=Territorio) tipo_immobile_set = TipoImmobile.objects.all().values_list('slug', flat=True) self.filters['tipo_immobile_filter'] = self.get_parameter( 'interventi_programma__tipo_immobile__slug', tipo_immobile_set, model=TipoImmobile) interventi_programma_set = InterventoProgramma.objects.all( ).values_list('slug', flat=True) self.filters['interventi_programma_filter'] = self.get_parameter( 'interventi_programma__slug', interventi_programma_set, model=InterventoProgramma) tipologia_cedente_set = Donazione.TIPO_CEDENTE tc_val = self.get_parameter('tipologia_cedente', tipologia_cedente_set) # translate numeric value to string for display if tc_val: self.filters[ 'tipologia_cedente_filter'] = tipologia_cedente_set._display_map[ tc_val]
def check_request_params(self): # check that GET parameters are ONLY the ones in the accepted_params variable. if NOT -> redirect 404 if not (set(self._filterset.form.data.keys()) <= set(self.accepted_parameters)): self.validation = False territori_set = Territorio.get_territori_cratere().values_list("slug", flat=True) self.filters["territorio_filter"] = self.get_parameter("territorio__slug", territori_set, model=Territorio) vari_territori_set = ["False", "True"] self.filters["vari_territori_filter"] = self.get_parameter("vari_territori", vari_territori_set) tipo_immobile_set = TipoImmobile.objects.all().values_list("slug", flat=True) self.filters["tipo_immobile_filter"] = self.get_parameter( "tipo_immobile__slug", tipo_immobile_set, model=TipoImmobile ) # if filter vari territori is True, there cannot be territorio filter on specific territorio if self.filters["vari_territori_filter"] == u"True" and self.filters["territorio_filter"] is not None: self.validation = False sogg_attuatore_set = SoggettoAttuatore.objects.all().values_list("slug", flat=True) self.filters["sogg_attuatore_filter"] = self.get_parameter( "soggetto_attuatore__slug", sogg_attuatore_set, model=SoggettoAttuatore ) sogg_attuatore_tipologia_set = SoggettoAttuatore.TIPOLOGIA._db_values sogg_att_tipologia_slug = self.get_parameter("soggetto_attuatore__tipologia", sogg_attuatore_tipologia_set) if sogg_att_tipologia_slug is not None and sogg_att_tipologia_slug is not False: self.filters["sogg_attuatore_tipologia_filter"] = SoggettoAttuatore.TIPOLOGIA._display_map[ sogg_att_tipologia_slug ] # status filters bool_set = [u"True", u"False"] self.filters["a_piano_filter"] = self.get_parameter("a_piano", bool_set) self.filters["in_attuazione_filter"] = self.get_parameter("in_attuazione", bool_set) stato_attuazione_set = list(InterventoProgramma.STATO_ATTUAZIONE._db_values) self.filters["stato_attuazione_filter"] = self.get_parameter("stato_attuazione", stato_attuazione_set) impresa_set = Impresa.objects.all().values_list("slug", flat=True) self.filters["impresa_filter"] = self.get_parameter( "interventopiano__intervento__imprese__slug", impresa_set, model=Impresa )
def check_request_params(self): # check that GET parameters are ONLY the ones in the accepted_params variable. if NOT -> redirect 404 if not (set(self._filterset.form.data.keys()) <= set(self.accepted_parameters)): self.validation = False territori_set = Territorio.get_territori_cratere().values_list('slug', flat=True) self.filters['territorio_filter'] = self.get_parameter('territorio__slug', territori_set, model=Territorio) tipo_immobile_set = TipoImmobile.objects.all().values_list('slug', flat=True) self.filters['tipo_immobile_filter'] = self.get_parameter('interventi_programma__tipo_immobile__slug', tipo_immobile_set, model=TipoImmobile) interventi_programma_set = InterventoProgramma.objects.all().values_list('slug', flat=True) self.filters['interventi_programma_filter'] = self.get_parameter('interventi_programma__slug', interventi_programma_set, model=InterventoProgramma) tipologia_cedente_set = Donazione.TIPO_CEDENTE tc_val = self.get_parameter('tipologia_cedente', tipologia_cedente_set) # translate numeric value to string for display if tc_val: self.filters['tipologia_cedente_filter'] = tipologia_cedente_set._display_map[tc_val]
def items(self): return Territorio.get_territori_cratere().values("slug")
def items(self): return Territorio.get_territori_cratere().values('slug')
def get_cached_context_data(self): sum_dict = lambda *ds: { k: sum(d.get(k, 0) or 0 for d in ds) for k in ds[0] } context = self.get_aggregate_data() context['top_progetti'] = context.pop('top_progetti_per_costo') context[ 'territori_piu_finanziati_pro_capite'] = self.top_comuni_pro_capite( filters={'progetto__soggetto_set__pk': self.object.pk}) # == COLLABORATORI CON CUI SI SPARTISCONO PIÙ SOLDI ======================================= top_collaboratori = Soggetto.objects.filter( progetto__ruolo__soggetto=self.object).exclude( pk=self.object.pk).values('pk').annotate( totale=Count('pk')).order_by('-totale')[:5] soggetto_by_pk = Soggetto.objects.in_bulk(x['pk'] for x in top_collaboratori) context['top_collaboratori'] = [] for c in top_collaboratori: soggetto = soggetto_by_pk[c['pk']] soggetto.totale = c['totale'] context['top_collaboratori'].append(soggetto) # == TOTALI PER REGIONI (E NAZIONI) ======================================================= progetti = self.get_progetti_queryset() # i progetti del soggetto localizzati in più territori (vengono considerati a parte per evitare di contarli più volte nelle aggregazioni) progetti_multilocalizzati_pks = [ x['pk'] for x in progetti.values('pk').annotate( cnt=Count('territorio_set__cod_reg', distinct=True)).filter( cnt__gt=1) ] totali_non_multilocalizzati = { x.pop('id'): x for x in progetti.exclude(pk__in=progetti_multilocalizzati_pks). totali_group_by('territorio_set__cod_reg') } totali_multilocalizzati_nazionali = {} totali_multilocalizzati_non_nazionali = {} for progetto in Progetto.objects.filter( pk__in=progetti_multilocalizzati_pks).prefetch_related( 'territorio_set'): totali_progetto = { 'totale_costi': float(progetto.fin_totale_pubblico or 0), 'totale_pagamenti': float(progetto.pagamento or 0), 'totale_progetti': 1 } if any(t.is_nazionale for t in progetto.territori) and not any( t.is_estero for t in progetto.territori ): # con almeno una localizzazione nazionale e nessuna estera totali_multilocalizzati_nazionali = sum_dict( totali_progetto, totali_multilocalizzati_nazionali) else: totali_multilocalizzati_non_nazionali = sum_dict( totali_progetto, totali_multilocalizzati_non_nazionali) if any(totali_multilocalizzati_nazionali.viewvalues()): totali_non_multilocalizzati[0] = sum_dict( totali_multilocalizzati_nazionali, totali_non_multilocalizzati.get(0, {})) # totali_non_multilocalizzati = {key: tots for key, tots in totali_non_multilocalizzati.items() if any(tots.viewvalues())} context['territori'] = [] for territorio in Territorio.objects.regioni(with_nation=True).filter( cod_reg__in=totali_non_multilocalizzati.keys()).order_by( '-territorio', 'denominazione').defer('geom'): territorio.totali = totali_non_multilocalizzati[territorio.cod_reg] context['territori'].append(territorio) # assegno a un territorio fittizio i progetti multilocalizzati senza localizzazione nazionale if any(totali_multilocalizzati_non_nazionali.viewvalues()): territorio = Territorio(denominazione=u'In più territori', territorio='X') territorio.totali = totali_multilocalizzati_non_nazionali context['territori'].append(territorio) # == TOTALI PER RUOLO ===================================================================== totali_by_ruolo_by_progetto = defaultdict(dict) for ruolo in dict(Ruolo.RUOLO).keys(): for totali in Ruolo.objects.filter( soggetto=self.object, ruolo=ruolo, progetto__active_flag=True, progetto__visualizzazione_flag='0').values( 'progetto_id').annotate( totale_costi=Sum('progetto__fin_totale_pubblico'), totale_pagamenti=Sum('progetto__pagamento'), totale_progetti=Count('progetto')): totali_by_ruolo_by_progetto[totali.pop( 'progetto_id')][ruolo] = totali totali_by_ruolo = defaultdict(dict) for totaliprogetto_by_ruolo in totali_by_ruolo_by_progetto.values(): codice = ''.join( totaliprogetto_by_ruolo.keys() ) # in caso di più ruoli per uno stesso progetto si crea un nuovo codice totali = totaliprogetto_by_ruolo.values( )[0] # prendo il primo dei totali per ruolo, tanto DEVONO essere tutti uguali totali_by_ruolo[codice] = sum_dict(totali, totali_by_ruolo[codice]) context['ruoli'] = [{ 'nome': '/'.join(sorted([dict(Ruolo.RUOLO)[r] for r in codice])), 'codice': codice, 'totali': totali } for codice, totali in totali_by_ruolo.items()] return context