Infrastructure/VotingApp2

= Voting Application 2 =

Voting App 1
The current voting application is a simple python cgi script that verifies a user is a member of a set of FAS groups and then allows them to vote for a set of candidates.

The code lives in cvs and can be viewed here:

Features to Keep

 * Ties into the Fedora Account System for candidate information and verifying voter eligibility.
 * Does consistency checks on the ballots on the server to be sure the user has not voted more than once or for more candidates than allowed.
 * Able to restrict access to information about who voted for a candidate to privileged users. Normal users can only read the results from the tallysheet view.

Deficiencies
The voting application needs to be enhanced in the following ways to support the  Election Policy


 * Web based administration to create a new election.
 * Creation of a new election needs to trigger generation of a script that will interact with the accounts db and election db to send out a reminder to vote message three days before the close of the election.
 * The interface will show the voter ballots for all the elections that they can vote in.

Other enhancements:
 * Support polls and referendum. For instance, voting for the code name of a Fedora Release.
 * List upcoming elections.
 * List results for current and previous elections.

Other Requirements

 * Should be written in TurboGears for deployment on our app servers.
 * Should allow this method of Range Voting from the FESCo Election Policy:

A voter receives a ballot listing all the candidates. For each candidate the voter assigns from 0 to number of candidates points. At the close of the election, the points for each candidate are tallied and the ones with the most points win a seat. For example, if we have 20 candidates running for 13 seats, the voter will be presented with a ballot where they can assign 0-20 points to each candidate. After voting, the 13 candidates with the most points will win the election.