Beispiel #1
0
    def get(self, request, *args, **kwargs):
        import locale

        locale.setlocale(locale.LC_ALL, 'it_IT.UTF-8')

        self.object = self.get_object()

        comuni_con_pro_capite = self.top_comuni_pro_capite(
            filters=self.comuni_con_pro_capite_filter(), qnt=None)
        altri_comuni = list(
            Territorio.objects.comuni().filter(**self.comuni_filter()).exclude(
                pk__in=(x.pk for x in comuni_con_pro_capite)).defer('geom'))

        comuni = comuni_con_pro_capite + altri_comuni

        response = HttpResponse(mimetype='text/csv')
        response[
            'Content-Disposition'] = 'attachment; filename={}_pro_capite.csv'.format(
                self.kwargs.get('slug', 'all'))

        writer = utils.UnicodeWriter(response, dialect=utils.excel_semicolon)

        writer.writerow(['Comune', 'Provincia', 'Finanziamento pro capite'])

        for comune in comuni:
            writer.writerow([
                comune.denominazione,
                comune.provincia.denominazione,
                locale.format('%.2f', getattr(comune, 'totale_pro_capite', 0)),
            ])

        return response
Beispiel #2
0
    def get(self, request, *args, **kwargs):
        import locale

        locale.setlocale(locale.LC_ALL, 'it_IT.UTF-8')

        self.object = self.get_object()

        response = HttpResponse(mimetype='text/csv')
        response[
            'Content-Disposition'] = 'attachment; filename=pagamenti_{}.csv'.format(
                self.kwargs.get('slug'))

        writer = utils.UnicodeWriter(response, dialect=utils.excel_semicolon)

        writer.writerow(
            ['COD_LOCALE_PROGETTO', 'OC_DATA_PAGAMENTI', 'TOT_PAGAMENTI'])

        ammontare_cumulato = 0

        for pagamento in self.object.pagamenti:
            writer.writerow([
                self.object.codice_locale,
                pagamento.data.strftime('%x'),
                locale.format('%.2f',
                              pagamento.ammontare - ammontare_cumulato,
                              grouping=True),
            ])

            ammontare_cumulato = pagamento.ammontare

        return response
    def handle(self, *args, **options):
        verbosity = options['verbosity']
        if verbosity == '0':
            self.logger.setLevel(logging.ERROR)
        elif verbosity == '1':
            self.logger.setLevel(logging.WARNING)
        elif verbosity == '2':
            self.logger.setLevel(logging.INFO)
        elif verbosity == '3':
            self.logger.setLevel(logging.DEBUG)

        csv_writer = utils.UnicodeWriter(sys.stdout,
                                         dialect=utils.excel_semicolon)
        csv_writer.writerow(self.get_first_row())

        provincie = Territorio.objects.provincie()
        progetti = Progetto.objects

        if options['region']:
            try:
                territorio = Territorio.objects.regioni().get(
                    denominazione__icontains=options['region'])
            except Territorio.DoesNotExist:
                raise Exception('Unknown region {}'.format(options['region']))
            else:
                provincie = provincie.filter(cod_reg=territorio.cod_reg)
                progetti = progetti.nei_territori([territorio])
        else:
            territorio = Territorio.objects.nazione()

        costo = progetti.totale_costi()
        costo_procapite = round(costo / territorio.popolazione_totale
                                ) if territorio.popolazione_totale else 0

        for provincia in provincie:
            costo_provincia = Progetto.objects.nei_territori(
                [provincia]).totale_costi()
            costo_procapite_provincia = round(
                costo_provincia / provincia.popolazione_totale
            ) if provincia.popolazione_totale else 0
            csv_writer.writerow([
                provincia.denominazione,
                '{:.2f}'.format(costo_provincia),
                '{:.2f}'.format(costo_procapite_provincia),
                '{:.2f}'.format(costo_provincia / costo * 100),
            ])

        csv_writer.writerow([
            'TOTALE',
            '{:.2f}'.format(costo),
            '{:.2f}'.format(costo_procapite),
            '{:.2f}'.format(100),
        ])
Beispiel #4
0
    def create_response(self):
        """
        Generates a zipped, downloadale CSV file, from search results
        """
        results = self.get_results()

        response = HttpResponse(mimetype='text/csv')
        response[
            'Content-Disposition'] = 'attachment; filename=codici_localita.csv'

        writer = utils.UnicodeWriter(response, dialect=utils.excel_semicolon)

        writer.writerow([
            'COD_LOCALE_PROGETTO', 'OC_TERRITORIO_PROG', 'COD_COMUNE',
            'COD_PROVINCIA', 'COD_REGIONE'
        ])

        chunk_size = 10000
        for i in xrange(0, len(results), chunk_size):
            chunked_results = results[i:i + chunk_size]

            objects_by_pk = self._get_objects_by_pk(chunked_results)
            for result in chunked_results:
                try:
                    object = objects_by_pk[result]
                except KeyError:
                    pass
                else:
                    for territorio in object.territori:
                        writer.writerow([
                            object.codice_locale,
                            territorio.territorio,
                            '{:06d}'.format(int(territorio.cod_com)),
                            '{:03d}'.format(int(territorio.cod_prov)),
                            '{:03d}'.format(int(territorio.cod_reg)),
                        ])

        return response
Beispiel #5
0
    def create_response_old(self):
        """
        Generates a zipped, downloadale CSV file, from search results
        """
        import datetime
        import decimal
        import locale

        locale.setlocale(locale.LC_ALL, 'it_IT.UTF-8')

        def get_repr(value):
            if callable(value):
                return '{}'.format(value())
            return value

        def get_field(instance, field):
            field_path = field.split('.')
            attr = instance
            for elem in field_path:
                try:
                    attr = getattr(attr, elem)
                except AttributeError:
                    return None
            return attr

        columns = OrderedDict([
            ('COD_LOCALE_PROGETTO', 'codice_locale'),
            ('CUP', 'cup'),
            ('OC_TITOLO_PROGETTO', 'titolo_progetto'),
            ('OC_TEMA_SINTETICO', 'tema.tema_superiore.descrizione'),
            ('CUP_DESCR_NATURA',
             'classificazione_azione.classificazione_superiore.descrizione'),
            # ('OC_TIPO_PROGETTO', 'get_tipo_progetto_display'),
            ('FINANZ_UE', 'fin_ue'),
            ('FINANZ_STATO_FONDO_ROTAZIONE', 'fin_stato_fondo_rotazione'),
            ('FINANZ_STATO_FSC', 'fin_stato_fsc'),
            ('FINANZ_STATO_PAC', 'fin_stato_pac'),
            ('FINANZ_STATO_ALTRI_PROVVEDIMENTI',
             'fin_stato_altri_provvedimenti'),
            ('FINANZ_REGIONE', 'fin_regione'),
            ('FINANZ_PROVINCIA', 'fin_provincia'),
            ('FINANZ_COMUNE', 'fin_comune'),
            ('FINANZ_ALTRO_PUBBLICO', 'fin_altro_pubblico'),
            ('FINANZ_STATO_ESTERO', 'fin_stato_estero'),
            ('FINANZ_PRIVATO', 'fin_privato'),
            ('FINANZ_DA_REPERIRE', 'fin_da_reperire'),
            ('FINANZ_RISORSE_LIBERATE', 'fin_risorse_liberate'),
            ('FINANZ_TOTALE_PUBBLICO', 'fin_totale_pubblico'),
            ('TOT_PAGAMENTI', 'pagamento'),
            ('QSN_FONDO_COMUNITARIO', 'fondo_comunitario'),
            ('OC_DATA_INIZIO_PREVISTA', 'data_inizio_prevista'),
            ('OC_DATA_FINE_PREVISTA', 'data_fine_prevista'),
            ('OC_DATA_INIZIO_EFFETTIVA', 'data_inizio_effettiva'),
            ('OC_DATA_FINE_EFFETTIVA', 'data_fine_effettiva'),
            ('SOGGETTI_PROGRAMMATORI', 'nomi_programmatori'),
            ('SOGGETTI_ATTUATORI', 'nomi_attuatori'),
            ('AMBITI_TERRITORIALI', 'ambiti_territoriali'),
            ('TERRITORI', 'nomi_territori'),
        ])

        results = self.get_results()

        response = HttpResponse(content_type='application/x-zip-compressed')
        response[
            'Content-Disposition'] = 'attachment; filename=progetti.csv.zip'

        z = zipfile.ZipFile(response, 'w', zipfile.ZIP_DEFLATED)

        output = StringIO.StringIO()

        writer = utils.UnicodeWriter(output, dialect=utils.excel_semicolon)

        writer.writerow(columns.keys())

        chunk_size = 10000
        for i in xrange(0, len(results), chunk_size):
            chunked_results = results[i:i + chunk_size]

            # objects_by_pk = self._get_objects_by_pk([result.pk for result in chunked_results])
            objects_by_pk = self._get_objects_by_pk(chunked_results)
            for result in chunked_results:
                # try:
                #     result.object = objects_by_pk[result.pk]
                # except KeyError:
                #     pass
                #
                # object = result.object
                try:
                    object = objects_by_pk[result]
                except KeyError:
                    pass
                else:
                    row = []
                    for fld in columns.values():
                        val = get_repr(get_field(object, fld))

                        try:
                            if val is None:
                                val = ''
                            elif isinstance(val, bool):
                                val = {True: u'Sì', False: u'No'}[val]
                            elif isinstance(val, datetime.date):
                                val = val.strftime('%Y%m%d')
                            elif isinstance(val, decimal.Decimal):
                                val = locale.format('%.2f', val)
                            elif isinstance(val, (list, set)):
                                val = u':::'.join(val)
                            else:
                                val = unicode(val)
                        except ValueError:
                            val = ''

                        row.append(val)

                    writer.writerow(row)

        z.writestr('progetti.csv', output.getvalue())

        z.close()

        return response
Beispiel #6
0
    def create_response(self):
        """
        Generates a zipped, downloadale CSV file, from search results
        """

        import json
        # import os
        # from csvkit import convert
        # from open_coesione.views import OpendataView
        import decimal
        import locale

        locale.setlocale(locale.LC_ALL, 'it_IT.UTF-8')

        def myformat(val):
            if isinstance(val, (float, decimal.Decimal)):
                val = locale.format('%.2f', val)
            elif isinstance(val, (list, set)):
                val = u':::'.join(val)
            return val

        # reader = csv.DictReader(convert.xls2csv(open(OpendataView.get_latest_localfile('metadati_OC_2007_2013.xls'), 'rb'), sheet='Progetti').splitlines())
        # csv_columns = [row['Variabile'].strip() for row in reader if row['Presenza nei dataset da query su www.opencoesione.gov.it'].strip()]

        # reader = csv.DictReader(convert.xls2csv(open(os.path.join(settings.STATIC_ROOT, 'metadati_risultati_ricerca.xls'), 'rb'), sheet='Progetti').splitlines())
        # columns = [row['Variabile'].strip() for row in reader]
        # columns = [{'FINANZ_STATO_FONDO_ROTAZIONE': u'FINANZ_STATO_FONDO_DI_ROTAZIONE', 'FINANZ_STATO_PRIVATO': u'FINANZ_PRIVATO'}.get(c, c) for c in columns]

        # columns = ['COD_LOCALE_PROGETTO', 'CUP', 'OC_TITOLO_PROGETTO', 'QSN_FONDO_COMUNITARIO', 'OC_TEMA_SINTETICO', 'OC_DESCR_FONTE', 'OC_CODICE_PROGRAMMA', 'OC_DESCRIZIONE_PROGRAMMA', 'DESCR_STRUMENTO', 'DESCR_TIPO_STRUMENTO', 'DATA_APPROV_STRUMENTO', 'CUP_DESCR_NATURA', 'CUP_DESCR_SETTORE', 'CUP_DESCR_SOTTOSETTORE', 'CUP_DESCR_CATEGORIA', 'COD_ATECO', 'DESCRIZIONE_ATECO', 'OC_TIPO_PROGETTO', 'FINANZ_UE', 'FINANZ_STATO_FONDO_DI_ROTAZIONE', 'FINANZ_STATO_FSC', 'FINANZ_STATO_PAC', 'FINANZ_STATO_ALTRI_PROVVEDIMENTI', 'FINANZ_REGIONE', 'FINANZ_PROVINCIA', 'FINANZ_COMUNE', 'FINANZ_RISORSE_LIBERATE', 'FINANZ_ALTRO_PUBBLICO', 'FINANZ_STATO_ESTERO', 'FINANZ_PRIVATO', 'FINANZ_DA_REPERIRE', 'FINANZ_TOTALE_PUBBLICO', 'COSTO_RENDICONTABILE_UE', 'IMPEGNI', 'TOT_PAGAMENTI', 'OC_TOT_PAGAMENTI_RENDICONTAB_UE', 'OC_DATA_INIZIO_PREVISTA', 'OC_DATA_FINE_PREVISTA', 'OC_DATA_INIZIO_EFFETTIVA', 'OC_DATA_FINE_EFFETTIVA', 'OC_STATO_PROGETTO', 'DESCR_PROCED_ATTIVAZIONE', 'DESCR_TIPO_PROCED_ATTIVAZIONE', 'DATA_PREVISTA_BANDO_PROC_ATTIV', 'DATA_EFFETTIVA_BANDO_PROC_ATTIV', 'DATA_PREVISTA_FINE_PROC_ATTIV', 'DATA_EFFETTIVA_FINE_PROC_ATTIV', 'DATA_AGGIORNAMENTO', 'SOGGETTI_PROGRAMMATORI', 'SOGGETTI_ATTUATORI', 'AMBITI_TERRITORIALI', 'TERRITORI']
        columns = [
            'COD_LOCALE_PROGETTO', 'CUP', 'OC_TITOLO_PROGETTO',
            'QSN_FONDO_COMUNITARIO', 'OC_TEMA_SINTETICO', 'OC_DESCR_FONTE',
            'OC_CODICE_PROGRAMMA', 'OC_DESCRIZIONE_PROGRAMMA',
            'DESCR_STRUMENTO', 'DESCR_TIPO_STRUMENTO', 'DATA_APPROV_STRUMENTO',
            'CUP_DESCR_NATURA', 'CUP_DESCR_SETTORE', 'CUP_DESCR_SOTTOSETTORE',
            'CUP_DESCR_CATEGORIA', 'COD_ATECO', 'DESCRIZIONE_ATECO',
            'FINANZ_UE', 'FINANZ_STATO_FONDO_DI_ROTAZIONE', 'FINANZ_STATO_FSC',
            'FINANZ_STATO_PAC', 'FINANZ_STATO_ALTRI_PROVVEDIMENTI',
            'FINANZ_REGIONE', 'FINANZ_PROVINCIA', 'FINANZ_COMUNE',
            'FINANZ_RISORSE_LIBERATE', 'FINANZ_ALTRO_PUBBLICO',
            'FINANZ_STATO_ESTERO', 'FINANZ_PRIVATO', 'FINANZ_DA_REPERIRE',
            'FINANZ_TOTALE_PUBBLICO', 'COSTO_RENDICONTABILE_UE', 'IMPEGNI',
            'TOT_PAGAMENTI', 'OC_TOT_PAGAMENTI_RENDICONTAB_UE',
            'OC_DATA_INIZIO_PREVISTA', 'OC_DATA_FINE_PREVISTA',
            'OC_DATA_INIZIO_EFFETTIVA', 'OC_DATA_FINE_EFFETTIVA',
            'OC_STATO_PROGETTO', 'DESCR_PROCED_ATTIVAZIONE',
            'DESCR_TIPO_PROCED_ATTIVAZIONE', 'DATA_PREVISTA_BANDO_PROC_ATTIV',
            'DATA_EFFETTIVA_BANDO_PROC_ATTIV', 'DATA_PREVISTA_FINE_PROC_ATTIV',
            'DATA_EFFETTIVA_FINE_PROC_ATTIV', 'OC_FLAG_VISUALIZZAZIONE',
            'DATA_AGGIORNAMENTO', 'SOGGETTI_PROGRAMMATORI',
            'SOGGETTI_ATTUATORI', 'AMBITI_TERRITORIALI', 'TERRITORI'
        ]

        extra_columns = OrderedDict([
            # ('OC_TIPO_PROGETTO', 'get_tipo_progetto_display'),
            ('SOGGETTI_PROGRAMMATORI', 'nomi_programmatori'),
            ('SOGGETTI_ATTUATORI', 'nomi_attuatori'),
            ('AMBITI_TERRITORIALI', 'ambiti_territoriali'),
            ('TERRITORI', 'nomi_territori'),
        ])

        results = self.get_results()

        response = HttpResponse(content_type='application/x-zip-compressed')
        response[
            'Content-Disposition'] = 'attachment; filename=progetti.csv.zip'

        z = zipfile.ZipFile(response, 'w', zipfile.ZIP_DEFLATED)

        output = StringIO.StringIO()

        writer = utils.UnicodeWriter(output, dialect=utils.excel_semicolon)

        # writer.writerow(csv_columns + extra_columns.keys())
        writer.writerow(columns)

        chunk_size = 10000
        for i in xrange(0, len(results), chunk_size):
            chunked_results = results[i:i + chunk_size]

            objects_by_pk = self._get_objects_by_pk(chunked_results)
            for result in chunked_results:
                try:
                    object = objects_by_pk[result]
                except KeyError:
                    pass
                else:
                    csv_data = json.loads(object.csv_data,
                                          object_pairs_hook=OrderedDict)
                    csv_data = {{
                        'COD_DIPE':
                        u'COD_LOCALE_PROGETTO',
                        'ASSEGNAZIONE_CIPE_AGG':
                        u'FINANZ_TOTALE_PUBBLICO'
                    }.get(k, k): v
                                for k, v in csv_data.items()
                                }  # necessario per assegnazioni CIPE

                    # row = [myformat(csv_data.get(x, '')) for x in csv_columns] + [myformat(getattr(object, x) or '') for x in extra_columns.values()]
                    row = [
                        myformat(
                            getattr(object, extra_columns[c]) or '' if c in
                            extra_columns else csv_data.get(c, ''))
                        for c in columns
                    ]

                    writer.writerow(row)

        z.writestr('progetti.csv', output.getvalue())

        z.close()

        return response
Beispiel #7
0
    def handle(self, *args, **options):

        verbosity = options['verbosity']
        if verbosity == '0':
            self.logger.setLevel(logging.ERROR)
        elif verbosity == '1':
            self.logger.setLevel(logging.WARNING)
        elif verbosity == '2':
            self.logger.setLevel(logging.INFO)
        elif verbosity == '3':
            self.logger.setLevel(logging.DEBUG)

        ## get top value from options
        top = int(options['top'])

        csv_writer = utils.UnicodeWriter(sys.stdout, dialect=utils.excel_semicolon)

        ## which forma giuridica has more attuatori
        self.logger.info(u"---- Che forma giuridica ha più attuatori?")
        print("---- Che forma giuridica ha più attuatori?")
        # extract all forma_giuridicas related to attuatori
        fgs = FormaGiuridica.objects.filter(
            soggetto__ruolo__ruolo=Ruolo.RUOLO.attuatore
        ).distinct()
        # annotate manually each forma giuridica, counting the number of soggetti
        fgs_annotated = [(fg.denominazione, fg.soggetti.count()) for fg in fgs]
        # sort based on number of sogetti, reversed
        fgs_annotated.sort(key=lambda x: x[1], reverse=True)
        # print the top brasses
        csv_writer.writerow(
            ['Denominazione', 'Numero soggetti']
        )

        if top == 0:
            top = len(fgs_annotated)
        for fg in fgs_annotated[:top]:
            csv_writer.writerow([
                fg[0],
                "{0}".format(fg[1]),
            ])


        # fetch all soggetti that have attuatore Role
        attuatori = Soggetto.objects.filter(
            ruolo__ruolo=Ruolo.RUOLO.attuatore
        ).distinct()

        ## which attuatore has more projects assigned
        self.logger.info(u"---- Quali attuatori hanno più soggetti?")
        print("---- Quali attuatori hanno più soggetti?")
        attuatori_n_projects_annotated = [(s.denominazione, s.slug, s.ruoli.count()) for s in attuatori]
        attuatori_n_projects_annotated.sort(key=lambda x: x[2], reverse=True)
        # print the top brasses
        csv_writer.writerow(
            ['Denominazione', 'Slug', 'Numero progetti']
        )
        if top == 0:
            top = len(attuatori_n_projects_annotated)
        for att in attuatori_n_projects_annotated[:top]:
            csv_writer.writerow([
                att[0],
                att[1],
                "{0}".format(att[2]),
            ])


        ## which attuatore has more money assigned
        self.logger.info(u"---- Quali attuatori hanno più finanziamenti?")
        print("---- Quali attuatori hanno più finanziamenti?")
        attuatori_fin_annotated = [
            (s.denominazione, s.slug,
             sum(p.fin_totale_pubblico for p in s.progetti)) for s in attuatori
        ]
        attuatori_fin_annotated.sort(key=lambda x: x[2], reverse=True)
        # print the top brasses
        csv_writer.writerow(
            ['Denominazione', 'Slug', 'Finanziamento']
        )
        if top == 0:
            top = len(attuatori_fin_annotated)
        for att in attuatori_fin_annotated[:top]:
            csv_writer.writerow([
                att[0],
                att[1],
                "{0:.2f}".format(att[2]),
            ])

        ## which attuatore has projects in more different regions
        self.logger.info(u"---- Quali attuatori hanno progetti in regioni differenti?")
        print("---- Quali attuatori hanno progetti in regioni differenti?")
        attuatori_regioni_annotated = [
            (s.denominazione, s.slug, s.regioni) for s in attuatori
        ]
        attuatori_regioni_annotated.sort(key=lambda x: len(x[2]), reverse=True)
        # print the top brasses
        csv_writer.writerow(
            ['Denominazione', 'Slug', 'Num Regioni', 'Regioni']
        )
        if top == 0:
            top = len(attuatori_regioni_annotated)
        for att in attuatori_regioni_annotated[:top]:
            csv_writer.writerow([
                att[0],
                att[1],
                str(len(att[2])),
                ",".join(map(str,list(att[2]))),
            ])