@@ -538,14 +538,21 @@ def get_8989_eligibility_querysets(date, base_qs):
538538 previous_five = previous_five_meetings (date )
539539 three_of_five_qs = new_three_of_five_eligible (previous_five = previous_five , queryset = base_qs )
540540
541- three_years_ago = datetime .date (date .year - 3 ,date .month ,date .day )
541+ # If date is Feb 29, neither 3 nor 5 years ago has a Feb 29. Use Feb 28 instead.
542+ if date .month == 2 and date .day == 29 :
543+ three_years_ago = datetime .date (date .year - 3 , 2 , 28 )
544+ five_years_ago = datetime .date (date .year - 5 , 2 , 28 )
545+ else :
546+ three_years_ago = datetime .date (date .year - 3 , date .month , date .day )
547+ five_years_ago = datetime .date (date .year - 5 , date .month , date .day )
548+
542549 officer_qs = base_qs .filter (
543550 # is currently an officer
544551 Q (role__name_id__in = ('chair' ,'secr' ),
545552 role__group__state_id = 'active' ,
546553 role__group__type_id = 'wg' ,
547554 role__group__time__lte = date ,
548- )
555+ )
549556 # was an officer since the given date (I think this is wrong - it looks at when roles _start_, not when roles end)
550557 | Q (rolehistory__group__time__gte = three_years_ago ,
551558 rolehistory__group__time__lte = date ,
@@ -555,7 +562,6 @@ def get_8989_eligibility_querysets(date, base_qs):
555562 )
556563 ).distinct ()
557564
558- five_years_ago = datetime .date (date .year - 5 ,date .month ,date .day )
559565 rfc_pks = set (DocEvent .objects .filter (type = 'published_rfc' ,time__gte = five_years_ago ,time__lte = date ).values_list ('doc__pk' ,flat = True ))
560566 iesgappr_pks = set (DocEvent .objects .filter (type = 'iesg_approved' ,time__gte = five_years_ago ,time__lte = date ).values_list ('doc__pk' ,flat = True ))
561567 qualifying_pks = rfc_pks .union (iesgappr_pks .difference (rfc_pks ))
0 commit comments