def generate_csv(request): response = HttpResponse(mimetype='application/csv') response['Content-Disposition'] = 'filename=blokkendoos-report.csv' writer = UnicodeWriter(response, dialect='excel', delimiter=';', quoting=csv.QUOTE_ALL) writer.writerow(['Titel', 'Code', 'Type', 'Km van', 'Km tot', 'Riviertak', 'Rivierdeel', 'MHW winst m', 'MHW winst m2', 'Kosten investering', 'Levensduur kosten (ME)', 'Projectkosten gehele lifecyle (ME)', 'Investering per m2']) measures = models.Measure.objects.filter( short_name__in=_selected_measures(request)) for measure in measures: # mhw_profit_cm must be a number not None mhw_profit_cm = measure.mhw_profit_cm or 0 writer.writerow([measure.name, measure.short_name, measure.measure_type, measure.km_from, measure.km_to, measure.reach, measure.riverpart, mhw_profit_cm / 100, measure.mhw_profit_m2, measure.investment_costs, measure.life_costs, measure.total_costs, measure.investment_m2]) writer.writerow([]) selected_vertex = _selected_vertex(request) writer.writerow(['Strategie:', selected_vertex.name]) writer.writerow([]) fieldnames = [_('reach'), _('reach kilometer'), _('remaining water level rise in m')] writer.writerow(fieldnames) # Get the segments in the trajectory in with the selected river is. river = _selected_river(request) # Just get the first reach since reaches can only be in one trajectory. reach = models.NamedReach.objects.get(name=river ).subsetreach_set.all()[0].reach reaches = reach.trajectory_set.get().reach.all() segments = models.RiverSegment.objects.filter(reach__in=reaches ).order_by('location') water_levels = (_segment_level(segment, measures, selected_vertex) for segment in segments) for water_level in water_levels: writer.writerow([water_level['location_segment'], water_level['location'], water_level['measures_level'], ]) return response
def generate_csv(request): response = HttpResponse(mimetype='application/csv') response['Content-Disposition'] = 'filename=blokkendoos-report.csv' writer = UnicodeWriter(response, dialect='excel', delimiter=';', quoting=csv.QUOTE_ALL) writer.writerow(['Titel', 'Code', 'Type', 'Km van', 'Km tot', 'Riviertak', 'Rivierdeel', 'MHW winst m', 'MHW winst m2', 'Minimale investeringskosten (ME)', 'Investeringskosten (ME)', 'Maximale investeringskosten (ME)', 'Efficiency', 'Natuur', 'Grondverzet']) measures = models.Measure.objects.filter( short_name__in=_selected_measures(request)) summed_minimal_investment_costs = 0.0 summed_maximal_investment_costs = 0.0 summed_investment_costs = 0.0 def floatf(f): if f is None: return "Onbekend" return "{:.1f}".format(f) for measure in measures: # mhw_profit_cm must be a number not None mhw_profit_cm = measure.mhw_profit_cm or 0.0 writer.writerow([measure.name, measure.short_name, measure.measure_type, measure.km_from, measure.km_to, measure.reach, measure.riverpart, floatf(mhw_profit_cm / 100), floatf(measure.mhw_profit_m2), floatf(measure.minimal_investment_costs), floatf(measure.investment_costs), floatf(measure.maximal_investment_costs), measure.efficiency, measure.natuur, measure.grondverzet]) summed_minimal_investment_costs += ( measure.minimal_investment_costs or 0) summed_maximal_investment_costs += ( measure.maximal_investment_costs or 0) summed_investment_costs += ( measure.investment_costs or 0) writer.writerow([''] * 9 + ['Totaal:'] * 3) writer.writerow([''] * 9 + [ floatf(summed_minimal_investment_costs), floatf(summed_investment_costs), floatf(summed_maximal_investment_costs)]) selected_vertex = _selected_vertex(request) selected_year = _selected_year(request) selected_protection_level = _selected_protection_level(selected_vertex) writer.writerow(['Strategie:', selected_vertex.name]) writer.writerow(['Geselecteerd zichtjaar:', selected_year]) writer.writerow(['Geselecteerd beschermingsniveau:', '1 / %s' % selected_protection_level]) writer.writerow([]) fieldnames = [_('reach'), _('reach kilometer'), _('remaining water level rise in m')] writer.writerow(fieldnames) # Get the segments in the trajectory in with the selected river is. river = _selected_river(request) # Expand using the 'hoofdtrajecten' list reaches = models.NamedReach.objects.get(name=river ).expanded_reaches() segments = models.RiverSegment.objects.filter(reach__in=reaches ).order_by('location') water_levels = (_segment_level(segment, measures, selected_vertex, selected_year, selected_protection_level) for segment in segments) water_levels = (level for level in water_levels if level is not None) for water_level in water_levels: writer.writerow([water_level['location_segment'], water_level['location'], water_level['measures_level'], ]) return response