示例#1
0
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()
    }
示例#2
0
    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)
示例#3
0
    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]
示例#4
0
    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
        )
示例#5
0
    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]
示例#6
0
 def items(self):
     return Territorio.get_territori_cratere().values("slug")
示例#7
0
 def items(self):
     return Territorio.get_territori_cratere().values('slug')
示例#8
0
    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