diff --git a/ietf/meeting/helpers.py b/ietf/meeting/helpers.py index dea02605b..3ba280514 100644 --- a/ietf/meeting/helpers.py +++ b/ietf/meeting/helpers.py @@ -618,3 +618,14 @@ def populate_important_dates(meeting): assert meeting.type_id=='ietf' for datename in ImportantDateName.objects.filter(used=True): ImportantDate.objects.create(meeting=meeting,name=datename,date=meeting.date+datetime.timedelta(days=datename.default_offset_days)) + +def update_important_dates(meeting): + assert meeting.type_id=='ietf' + for datename in ImportantDateName.objects.filter(used=True): + date = meeting.date+datetime.timedelta(days=datename.default_offset_days) + d = ImportantDate.objects.filter(meeting=meeting, name=datename).first() + if d: + d.date = date + d.save() + else: + ImportantDate.objects.create(meeting=meeting, name=datename, date=date) diff --git a/ietf/meeting/management/commands/update_important_dates.py b/ietf/meeting/management/commands/update_important_dates.py new file mode 100644 index 000000000..841c5ba06 --- /dev/null +++ b/ietf/meeting/management/commands/update_important_dates.py @@ -0,0 +1,45 @@ +# Copyright The IETF Trust 2018, All Rights Reserved +from __future__ import unicode_literals + +import sys +import datetime + +from django.core.management.base import BaseCommand, CommandError +from django.core import serializers + +import debug # pyflakes:ignore + +from ietf.name.models import ImportantDateName +from ietf.meeting.helpers import get_meeting, update_important_dates +from ietf.meeting.models import Meeting, ImportantDate + +class Command(BaseCommand): + + help = 'Updates the important dates for the given meeting' + + def add_arguments(self, parser): + parser.add_argument('meeting', nargs='+', type=int) + + def handle(self, *args, **options): + datenames = ImportantDateName.objects.all() + slugs = list(datenames.values_list('slug', flat=True)) + max_offset = - min(list(datenames.values_list('default_offset_days', flat=True))) + # + for m in options['meeting']: + meeting = Meeting.objects.filter(number=m).first() + if not meeting: + self.stderr.write("\nMeeting not found: %s\n" % (m, )) + continue + if meeting.date < datetime.date.today() + datetime.timedelta(days=max_offset): + self.stderr.write("\nMeeting %s: Won't change dates for meetings in the past or close future\n" % (meeting, )) + continue + self.stdout.write('\n%s\n\n' % (meeting, )) + pre_dates = dict( (d.name_id, d) for d in ImportantDate.objects.filter(meeting=meeting) ) + update_important_dates(meeting) + post_dates = dict( (d.name_id, d) for d in ImportantDate.objects.filter(meeting=meeting) ) + for slug in slugs: + if slug in pre_dates: + if pre_dates[slug].date == post_dates[slug].date: + self.stdout.write('%-16s %s unchanged\n' % (slug, pre_dates[slug].date )) + else: + self.stdout.write('%-16s %s > %s\n' % (slug, pre_dates[slug].date, post_dates[slug].date))