Source code for akvo.rsr.management.commands.recalculate_periods

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

# Akvo Reporting 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 >.


from django.core.management.base import BaseCommand
from django.db.models import Count
from akvo.rsr.usecases.period_update_aggregation import aggregate

from ...models import IndicatorPeriod


[docs]class Command(BaseCommand): args = '[<project_id>]' help = 'Script for recalculating periods which have children'
[docs] def handle(self, *args, **options): # parse options verbosity = int(options['verbosity']) if len(args) == 1: project_id = args[0] else: project_id = None periods = IndicatorPeriod.objects\ .annotate(child_count=Count('child_periods'))\ .filter(child_count__gt=0) if project_id: periods = periods.filter(indicator__result__project=project_id) if verbosity > 1: print('Recalculating periods on project {}'.format(project_id)) if verbosity > 1: print('Recalculating {} periods'.format(periods.count())) for period in periods: if verbosity > 1: print('Recalculating period {}'.format(period.id)) aggregate(period)