Source code for akvo.rsr.models.result.disaggregation_contribution_handler

# -*- coding: utf-8 -*-

# Akvo RSR is covered by the GNU Affero General Public License.
# See more details in the license.txt file located at the root folder of the Akvo RSR module.
# For additional details on the GNU license please see < http://www.gnu.org/licenses/agpl.html >.


[docs]class DisaggregationContributionHandler(object): def __init__(self, period_disaggregations, disaggregation_contributions): self.period_disaggregations = period_disaggregations self.disaggregation_contributions = disaggregation_contributions
[docs] def handle(self, disaggregation): child_dimension_values = disaggregation.dimension_value.child_dimension_values.all() for dimension_value in child_dimension_values: contributing_project = dimension_value.name.project child_disaggregations = self.period_disaggregations.filter(dimension_value=dimension_value).all() for child_disaggregation in child_disaggregations: contribution, _ = self.disaggregation_contributions.get_or_create( disaggregation=disaggregation, contributing_project=contributing_project ) contribution.value = child_disaggregation.value contribution.numerator = child_disaggregation.numerator contribution.denominator = child_disaggregation.denominator contribution.save()