added a conversion process to turn party votes into candidate votes

This commit is contained in:
Jay Robson 2025-05-03 23:32:36 +10:00
parent 05834a9691
commit ea3e405295
2 changed files with 25 additions and 1 deletions

View File

@ -64,5 +64,29 @@ impl Ballot {
ty, ty,
}) })
} }
pub fn to_candidate_ballot(self, header: &Header) -> Self {
match self.ty {
BallotType::Candidate => self,
BallotType::Party => {
let mut votes = Vec::<usize>::new();
for party_id in self.votes {
votes.extend(header.parties[party_id].member_ids.iter().copied());
}
Ballot {
state: self.state,
division: self.division,
collection_point: self.collection_point,
collection_point_id: self.collection_point_id,
batch_id: self.batch_id,
paper_id: self.paper_id,
ty: BallotType::Candidate,
votes,
}
},
}
}
} }

View File

@ -13,7 +13,7 @@ impl Counter {
let mut ballots = Vec::new(); let mut ballots = Vec::new();
for row in csv { for row in csv {
ballots.push(Ballot::parse(row?, &header)?); ballots.push(Ballot::parse(row?, &header)?.to_candidate_ballot(&header));
} }
Ok(Counter { Ok(Counter {