Skip to content

Commit

Permalink
Fix group by error when annotating stations
Browse files Browse the repository at this point in the history
  • Loading branch information
JohnMwashuma committed Aug 6, 2024
1 parent 19f57c9 commit 5a6e731
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 18 deletions.
19 changes: 11 additions & 8 deletions tally_ho/apps/tally/views/reports/administrative_areas_reports.py
Original file line number Diff line number Diff line change
Expand Up @@ -1990,7 +1990,12 @@ def create_results_power_point_headers(tally_id, filtered_electrol_races, qs):
'sub_race_type': electrol_race.ballot_name}\
for electrol_race in filtered_electrol_races\
if electrol_race_has_results(qs, electrol_race)}

tally_stations_qs = Station.objects.filter(tally_id=tally_id)
stations_by_id =\
{
station.id:\
station for station in tally_stations_qs
}
# Calculate voters in counted stations and turnout percentage
for race_type_obj in race_data_by_election_level_names.values():
# race_type_obj =\
Expand All @@ -1999,8 +2004,7 @@ def create_results_power_point_headers(tally_id, filtered_electrol_races, qs):
election_level_name = race_type_obj.get('election_level')
# Calculate voters in counted stations
qs =\
Station.objects.filter(
tally_id=tally_id,
tally_stations_qs.filter(
center__resultform__ballot__electrol_race__election_level=\
election_level_name,
center__resultform__ballot__electrol_race__ballot_name=\
Expand All @@ -2015,13 +2019,12 @@ def create_results_power_point_headers(tally_id, filtered_electrol_races, qs):
race=F('center__resultform__ballot__electrol_race__election_level')
).values('id').annotate(
races=ArrayAgg('race', distinct=True),
number=F('station_number'),
num_registrants=F('registrants')
)
voters = 0
stations_processed = 0
registrants_in_processed_stations = 0
for station in station_ids_by_races:
station_obj = stations_by_id.get(station.get('id'))
# Calculate stations processed and total registrants
form_states =\
ResultForm.objects.filter(
Expand All @@ -2031,7 +2034,7 @@ def create_results_power_point_headers(tally_id, filtered_electrol_races, qs):
center__resultform__ballot__electrol_race__ballot_name=\
sub_race_type,
center__stations__id=station.get('id'),
station_number=station.get('number'),
station_number=station_obj.station_number,
).values_list('form_state', flat=True).distinct()

station_is_processed =\
Expand All @@ -2048,7 +2051,7 @@ def create_results_power_point_headers(tally_id, filtered_electrol_races, qs):

stations_processed += 1
registrants_in_processed_stations +=\
station.get('num_registrants')
station_obj.registrants

# Calculate voters voted in processed stations
votes =\
Expand All @@ -2059,7 +2062,7 @@ def create_results_power_point_headers(tally_id, filtered_electrol_races, qs):
result_form__ballot__electrol_race__ballot_name=\
sub_race_type,
result_form__center__stations__id=station.get('id'),
result_form__station_number=station.get('number'),
result_form__station_number=station_obj.station_number,
entry_version=EntryVersion.FINAL,
active=True,
).annotate(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ def get_stations_in_admin_area(tally_id, admin_level, admin_area):


def get_result_forms_for_station_in_admin_area(
tally_id, admin_level, admin_area, station
tally_id, admin_level, admin_area, station, station_obj
):
"""
get distinct result forms for a given station
Expand All @@ -84,12 +84,12 @@ def get_result_forms_for_station_in_admin_area(
tally__id=tally_id,
**area_filter_map,
center__stations__id=station.get('id'),
station_number=station.get('number'),
station_number=station_obj.station_number,
).values_list('form_state', flat=True).distinct()


def get_station_votes_in_admin_area(
tally_id, admin_level, admin_area, station
tally_id, admin_level, admin_area, station, station_obj
):
"""
Gets the station votes grouped by races for the given station.
Expand All @@ -108,7 +108,7 @@ def get_station_votes_in_admin_area(
result_form__tally__id=tally_id,
**area_filter_map,
result_form__center__stations__id=station.get('id'),
result_form__station_number=station.get('number'),
result_form__station_number=station_obj.station_number,
result_form__ballot__electrol_race_id__in=station.get('races'),
entry_version=EntryVersion.FINAL,
active=True,
Expand Down Expand Up @@ -148,6 +148,13 @@ def get_initial_queryset(self):

ret_value = []

tally_stations_qs = Station.objects.filter(tally_id=tally_id)
stations_by_id =\
{
station.id:\
station for station in tally_stations_qs
}

# Calculate voters in counted stations and turnout percentage
for area in admin_areas_qs:
response = {}
Expand All @@ -168,28 +175,30 @@ def get_initial_queryset(self):
race=F('center__resultform__ballot__electrol_race_id')
).values('id').annotate(
races=ArrayAgg('race', distinct=True),
number=F('station_number'),
num_registrants=F('registrants')
)
voters = 0
stations_processed = 0
registrants_in_processed_stations = 0
for station in station_ids_by_race:
station_obj = stations_by_id.get(station.get('id'))
# Calculate stations processed and total registrants
form_states = get_result_forms_for_station_in_admin_area(
tally_id,
admin_level, area_code, station
admin_level,
area_code,
station,
station_obj
)

if form_states.count() == 1 and \
form_states[0] == FormState.ARCHIVED:
stations_processed += 1
registrants_in_processed_stations += \
station.get('num_registrants')
station_obj.registrants

# Calculate voters voted in processed stations
votes = get_station_votes_in_admin_area(
tally_id, admin_level, area_code, station
tally_id, admin_level, area_code, station, station_obj
)

if votes.count() != 0:
Expand Down
2 changes: 1 addition & 1 deletion tally_ho/celeryapp.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

# set the default Django settings module for the 'celery' program.
os.environ.setdefault("DJANGO_SETTINGS_MODULE",
"tally_ho.settings.default")
"tally_ho.settings.local_settings")
app = Celery(__name__)

# Using a string here means the worker will not have to
Expand Down

0 comments on commit 5a6e731

Please sign in to comment.