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
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), ])
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
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
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
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]))), ])