Пример #1
0
def search_tree_benefits(request, instance):
    filter_str = request.REQUEST.get('q', '')

    hide_summary_text = request.REQUEST.get('hide_summary', 'false')
    hide_summary = hide_summary_text.lower() == 'true'

    filter = Filter(filter_str, instance)
    total_plots = filter.get_object_count(Plot)

    benefits, basis = get_benefits_for_filter(filter)
    # Inject the plot count as a basis for tree benefit calcs
    basis.get('plot', {})['n_plots'] = total_plots

    formatted = _format_benefits(instance, benefits, basis)
    formatted['hide_summary'] = hide_summary

    return formatted
Пример #2
0
def search_tree_benefits(request, instance):
    filter_str = request.REQUEST.get('q', '')
    display_str = request.REQUEST.get('show', '')

    hide_summary_text = request.REQUEST.get('hide_summary', 'false')
    hide_summary = hide_summary_text.lower() == 'true'

    filter = Filter(filter_str, display_str, instance)
    total_plots = get_cached_plot_count(
        filter, lambda: filter.get_object_count(Plot))

    benefits, basis = get_benefits_for_filter(filter)

    # Inject the plot count as a basis for tree benefit calcs
    basis.get('plot', {})['n_plots'] = total_plots

    # We also want to inject the total currency amount saved
    # for plot-based items except CO2 stored
    total_currency_saved = 0

    for benefit_name, benefit in benefits.get('plot', {}).iteritems():
        if benefit_name != BenefitCategory.CO2STORAGE:
            currency = benefit.get('currency', 0.0)
            if currency:
                total_currency_saved += currency

    # save it as if it were a normal benefit so we get formatting
    # and currency conversion
    benefits.get('plot', {})['totals'] = {
        'value': None,
        'currency': total_currency_saved,
        'label': _('Total annual benefits')
    }

    formatted = format_benefits(instance, benefits, basis, digits=0)
    formatted['hide_summary'] = hide_summary

    formatted['tree_count_label'] = (
        'tree,' if basis['plot']['n_total'] == 1 else 'trees,')
    formatted['plot_count_label'] = (
        'planting site' if basis['plot']['n_plots'] == 1 else 'planting sites')
    if instance.has_resources and 'resource' in basis:
        formatted['plot_count_label'] += ','

    return formatted
Пример #3
0
def search_tree_benefits(request, instance):
    filter_str = request.REQUEST.get('q', '')
    display_str = request.REQUEST.get('show', '')

    hide_summary_text = request.REQUEST.get('hide_summary', 'false')
    hide_summary = hide_summary_text.lower() == 'true'

    filter = Filter(filter_str, display_str, instance)
    total_plots = get_cached_plot_count(filter)

    benefits, basis = get_benefits_for_filter(filter)

    # Inject the plot count as a basis for tree benefit calcs
    basis.get('plot', {})['n_plots'] = total_plots

    # We also want to inject the total currency amount saved
    # for plot-based items except CO2 stored
    total_currency_saved = 0

    for benefit_name, benefit in benefits.get('plot', {}).iteritems():
        if benefit_name != BenefitCategory.CO2STORAGE:
            currency = benefit.get('currency', 0.0)
            if currency:
                total_currency_saved += currency

    # save it as if it were a normal benefit so we get formatting
    # and currency conversion
    benefits.get('plot', {})['totals'] = {
        'value': None,
        'currency': total_currency_saved,
        'label': _('Total annual benefits')
    }

    formatted = format_benefits(instance, benefits, basis, digits=0)
    formatted['hide_summary'] = hide_summary

    formatted['tree_count_label'] = (
        'tree,' if basis['plot']['n_total'] == 1 else 'trees,')
    formatted['plot_count_label'] = (
        'planting site' if basis['plot']['n_plots'] == 1 else 'planting sites')
    if instance.has_resources and 'resource' in basis:
        formatted['plot_count_label'] += ','

    return formatted
Пример #4
0
    def test_all_ecobenefits(self):
        p = self._center_as_3857()
        plot = Plot(geom=p, instance=self.instance)
        plot.save_with_user(self.user)

        tree = Tree(plot=plot,
                    instance=self.instance,
                    readonly=False,
                    species=self.species,
                    diameter=1630)

        tree.save_with_user(self.user)

        p.x += 1.1
        p.y += 1.1
        box = self._box_around_point(p)
        bioswale = Bioswale(instance=self.instance,
                            geom=p,
                            polygon=box,
                            feature_type='Bioswale',
                            drainage_area=100.0)
        bioswale.save_with_user(self.user)
        filter = Filter('', '', self.instance)
        benefits, basis = get_benefits_for_filter(filter)

        self.assertIn('plot', benefits)
        plot_benefits = benefits['plot']
        plot_categories = set(plot_benefits.keys())
        self.assertSetEqual(plot_categories, set(BenefitCategory.GROUPS))

        plot_currencies = {
            cat: benefit.get('currency', None)
            for cat, benefit in plot_benefits.items()
        }
        self.assertIsNotNone(min(plot_currencies.values()))

        expected_total_currency = sum(
            [benefit['currency'] for benefit in plot_benefits.values()]) - \
            plot_benefits[BenefitCategory.CO2STORAGE]['currency'] + \
            benefits['resource'][BenefitCategory.STORMWATER]['currency']

        formatted = format_benefits(self.instance, benefits, basis, digits=0)
        self.assertAlmostEqual(formatted['benefits_total_currency'],
                               expected_total_currency, 3)
Пример #5
0
def search_tree_benefits(request, instance):
    filter_str = request.GET.get('q', '')
    display_str = request.GET.get('show', '')

    hide_summary_text = request.GET.get('hide_summary', 'false')
    hide_summary = hide_summary_text.lower() == 'true'

    filter = Filter(filter_str, display_str, instance)
    total_plots = get_cached_plot_count(filter)

    benefits, basis = get_benefits_for_filter(filter)

    # Inject the plot count as a basis for tree benefit calcs
    basis.get('plot', {})['n_plots'] = total_plots

    formatted = format_benefits(instance, benefits, basis, digits=0)

    n_trees = basis['plot']['n_total']
    n_plots = basis['plot']['n_plots']
    n_empty_plots = n_plots - n_trees
    n_resources = 0

    tree_count_label = ungettext('tree', 'trees', n_trees) + ','
    empty_plot_count_label = ungettext(
        'empty planting site', 'empty planting sites', n_empty_plots)
    has_resources = instance.has_resources and 'resource' in basis
    if has_resources:
        n_resources = basis['resource']['n_total']
        empty_plot_count_label += ','

    context = {
        'n_trees': n_trees,
        'n_empty_plots': n_empty_plots,
        'n_resources': n_resources,
        'tree_count_label': tree_count_label,
        'empty_plot_count_label': empty_plot_count_label,
        'has_resources': has_resources,
        'hide_summary': hide_summary,
        'single_result': _single_result_context(instance, n_plots, n_resources,
                                                filter)
    }
    context.update(formatted)
    return context
Пример #6
0
    def test_all_ecobenefits(self):
        p = self._center_as_3857()
        plot = Plot(geom=p, instance=self.instance)
        plot.save_with_user(self.user)

        tree = Tree(plot=plot,
                    instance=self.instance,
                    readonly=False,
                    species=self.species,
                    diameter=1630)

        tree.save_with_user(self.user)

        p.x += 1.1
        p.y += 1.1
        box = self._box_around_point(p)
        bioswale = Bioswale(instance=self.instance,
                            geom=p,
                            polygon=box,
                            feature_type='Bioswale',
                            drainage_area=100.0)
        bioswale.save_with_user(self.user)
        filter = Filter('', '', self.instance)
        benefits, basis = get_benefits_for_filter(filter)

        self.assertIn('plot', benefits)
        plot_benefits = benefits['plot']
        plot_categories = set(plot_benefits.keys())
        self.assertSetEqual(plot_categories, set(BenefitCategory.GROUPS))

        plot_currencies = {
            cat: benefit.get('currency', None)
            for cat, benefit in plot_benefits.items()}
        self.assertIsNotNone(min(plot_currencies.values()))

        expected_total_currency = sum(
            [benefit['currency'] for benefit in plot_benefits.values()]) - \
            plot_benefits[BenefitCategory.CO2STORAGE]['currency'] + \
            benefits['resource'][BenefitCategory.STORMWATER]['currency']

        formatted = format_benefits(self.instance, benefits, basis, digits=0)
        self.assertAlmostEqual(formatted['benefits_total_currency'],
                               expected_total_currency, 3)
Пример #7
0
def search_tree_benefits(request, instance):
    filter_str = request.REQUEST.get("q", "")
    display_str = request.REQUEST.get("show", "")

    hide_summary_text = request.REQUEST.get("hide_summary", "false")
    hide_summary = hide_summary_text.lower() == "true"

    filter = Filter(filter_str, display_str, instance)
    total_plots = filter.get_object_count(Plot)

    benefits, basis = get_benefits_for_filter(filter)

    # Inject the plot count as a basis for tree benefit calcs
    basis.get("plot", {})["n_plots"] = total_plots

    # We also want to inject the total currency amount saved
    # for plot-based items except CO2 stored
    total_currency_saved = 0

    for benefit_name, benefit in benefits.get("plot", {}).iteritems():
        if benefit_name != "co2storage":
            currency = benefit.get("currency", 0.0)
            if currency:
                total_currency_saved += currency

    # save it as if it were a normal benefit so we get formatting
    # and currency conversion
    benefits.get("plot", {})["totals"] = {
        "value": None,
        "currency": total_currency_saved,
        "label": trans("Total annual benefits"),
    }

    formatted = format_benefits(instance, benefits, basis)
    formatted["hide_summary"] = hide_summary

    formatted["tree_count_label"] = "tree," if basis["plot"]["n_total"] == 1 else "trees,"
    formatted["plot_count_label"] = "planting site" if basis["plot"]["n_plots"] == 1 else "planting sites"
    if instance.supports_resources and "resource" in benefits:
        formatted["plot_count_label"] += ","

    return formatted
Пример #8
0
    def test_resource_ecobenefits(self):
        p = self._center_as_3857()
        box = self._box_around_point(p)
        bioswale = Bioswale(instance=self.instance,
                            geom=p,
                            polygon=box,
                            feature_type='Bioswale',
                            drainage_area=100.0)
        bioswale.save_with_user(self.user)
        filter = Filter('', '', self.instance)
        benefits, __ = get_benefits_for_filter(filter)

        self.assertIn('resource', benefits)
        resource_benefits = benefits['resource']
        self.assertIn(BenefitCategory.STORMWATER, resource_benefits)
        stormwater = resource_benefits[BenefitCategory.STORMWATER]
        self.assertTrue(isinstance(stormwater['value'], float))
        self.assertGreater(stormwater['value'], 0.0)
        self.assertTrue(isinstance(stormwater['currency'], float))
        self.assertEqual(stormwater['value'], stormwater['currency'])
Пример #9
0
    def test_resource_ecobenefits(self):
        p = self._center_as_3857()
        box = self._box_around_point(p)
        bioswale = Bioswale(instance=self.instance,
                            geom=p,
                            polygon=box,
                            feature_type='Bioswale',
                            drainage_area=100.0)
        bioswale.save_with_user(self.user)
        filter = Filter('', '', self.instance)
        benefits, __ = get_benefits_for_filter(filter)

        self.assertIn('resource', benefits)
        resource_benefits = benefits['resource']
        self.assertIn(BenefitCategory.STORMWATER, resource_benefits)
        stormwater = resource_benefits[BenefitCategory.STORMWATER]
        self.assertTrue(isinstance(stormwater['value'], float))
        self.assertGreater(stormwater['value'], 0.0)
        self.assertTrue(isinstance(stormwater['currency'], float))
        self.assertEqual(stormwater['value'], stormwater['currency'])
Пример #10
0
def search_tree_benefits(request, instance):
    filter_str = request.REQUEST.get('q', '')
    display_str = request.REQUEST.get('show', '')

    hide_summary_text = request.REQUEST.get('hide_summary', 'false')
    hide_summary = hide_summary_text.lower() == 'true'

    filter = Filter(filter_str, display_str, instance)
    total_plots = get_cached_plot_count(filter)

    benefits, basis = get_benefits_for_filter(filter)

    # Inject the plot count as a basis for tree benefit calcs
    basis.get('plot', {})['n_plots'] = total_plots

    # We also want to inject the total currency amount saved
    # for plot-based items except CO2 stored
    total_currency_saved = 0

    for benefit_name, benefit in benefits.get('plot', {}).iteritems():
        if benefit_name != BenefitCategory.CO2STORAGE:
            currency = benefit.get('currency', 0.0)
            if currency:
                total_currency_saved += currency

    # save it as if it were a normal benefit so we get formatting
    # and currency conversion
    benefits.get('plot', {})['totals'] = {
        'value': None,
        'currency': total_currency_saved,
        'label': _('Total annual benefits')
    }

    formatted = format_benefits(instance, benefits, basis, digits=0)

    n_trees = basis['plot']['n_total']
    n_plots = basis['plot']['n_plots']
    n_empty_plots = n_plots - n_trees
    n_resources = 0

    tree_count_label = ungettext('tree', 'trees', n_trees) + ','
    empty_plot_count_label = ungettext('empty planting site',
                                       'empty planting sites', n_empty_plots)
    has_resources = instance.has_resources and 'resource' in basis
    if has_resources:
        n_resources = basis['resource']['n_total']
        empty_plot_count_label += ','

    context = {
        'n_trees':
        n_trees,
        'n_empty_plots':
        n_empty_plots,
        'n_resources':
        n_resources,
        'tree_count_label':
        tree_count_label,
        'empty_plot_count_label':
        empty_plot_count_label,
        'has_resources':
        has_resources,
        'hide_summary':
        hide_summary,
        'single_result':
        _single_result_context(instance, n_plots, n_resources, filter)
    }
    context.update(formatted)
    return context
Пример #11
0
def search_tree_benefits(request, instance):
    filter_str = request.REQUEST.get('q', '')
    display_str = request.REQUEST.get('show', '')

    hide_summary_text = request.REQUEST.get('hide_summary', 'false')
    hide_summary = hide_summary_text.lower() == 'true'

    filter = Filter(filter_str, display_str, instance)
    total_plots = get_cached_plot_count(filter)

    benefits, basis = get_benefits_for_filter(filter)

    # Inject the plot count as a basis for tree benefit calcs
    basis.get('plot', {})['n_plots'] = total_plots

    # We also want to inject the total currency amount saved
    # for plot-based items except CO2 stored
    total_currency_saved = 0

    for benefit_name, benefit in benefits.get('plot', {}).iteritems():
        if benefit_name != BenefitCategory.CO2STORAGE:
            currency = benefit.get('currency', 0.0)
            if currency:
                total_currency_saved += currency

    # save it as if it were a normal benefit so we get formatting
    # and currency conversion
    benefits.get('plot', {})['totals'] = {
        'value': None,
        'currency': total_currency_saved,
        'label': _('Total annual benefits')
    }

    formatted = format_benefits(instance, benefits, basis, digits=0)

    n_trees = basis['plot']['n_total']
    n_plots = basis['plot']['n_plots']
    n_empty_plots = n_plots - n_trees
    n_resources = 0

    tree_count_label = ungettext('tree', 'trees', n_trees) + ','
    empty_plot_count_label = ungettext(
        'empty planting site', 'empty planting sites', n_empty_plots)
    has_resources = instance.has_resources and 'resource' in basis
    if has_resources:
        n_resources = basis['resource']['n_total']
        empty_plot_count_label += ','

    context = {
        'n_trees': n_trees,
        'n_empty_plots': n_empty_plots,
        'n_resources': n_resources,
        'tree_count_label': tree_count_label,
        'empty_plot_count_label': empty_plot_count_label,
        'has_resources': has_resources,
        'hide_summary': hide_summary,
        'single_result': _single_result_context(instance, n_plots, n_resources,
                                                filter)
    }
    context.update(formatted)
    return context