Esempio n. 1
0
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
Esempio n. 2
0
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