Beispiel #1
0
def getAll():
    """
        return all tally sheets
    """

    # Create the list of tally sheets from our data
    people = TallySheetVersion.query.all()

    # Serialize the data for the response
    person_schema = TallySheetVersionSchema(many=True)
    data = person_schema.dump(people).data
    return data
def create(tallySheetId):
    tallySheetVersion = TallySheetVersion_PRE_ALL_ISLAND_RESULT.create(
        tallySheetId=tallySheetId)

    electoralDistricts = tallySheetVersion.submission.area.get_associated_areas(
        areaType=AreaTypeEnum.ElectoralDistrict,
        electionId=tallySheetVersion.submission.electionId)

    query = db.session.query(
        TallySheetVersionRow_PRE_30_ED.Model.candidateId,
        func.sum(TallySheetVersionRow_PRE_30_ED.Model.count).label("count"),
    ).join(
        SubmissionVersion.Model, SubmissionVersion.Model.submissionVersionId ==
        TallySheetVersionRow_PRE_30_ED.Model.tallySheetVersionId).join(
            Submission.Model, Submission.Model.submissionId ==
            SubmissionVersion.Model.submissionId).filter(
                TallySheetVersionRow_PRE_30_ED.Model.tallySheetVersionId ==
                Submission.Model.latestVersionId,
                Submission.Model.areaId.in_([
                    area.areaId for area in electoralDistricts
                ])).group_by(
                    TallySheetVersionRow_PRE_30_ED.Model.candidateId).order_by(
                        TallySheetVersionRow_PRE_30_ED.Model.candidateId).all(
                        )

    for row in query:
        tallySheetVersion.add_row(candidateId=row.candidateId, count=row.count)

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Beispiel #3
0
def create_empty(tallySheetId):
    tallySheet, tallySheetVersion = TallySheet.create_empty_version(
        tallySheetId=tallySheetId
    )
    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Beispiel #4
0
def create(tallySheetId, body):
    request_body = RequestBody(body)
    tallySheetVersion = TallySheetVersionCE201.create(
        tallySheetId=tallySheetId
    )

    tally_sheet_content = request_body.get("content")
    if tally_sheet_content is not None:
        for party_count_body in tally_sheet_content:
            party_count_body = RequestBody(party_count_body)
            tallySheetVersionRow = tallySheetVersion.add_row(
                areaId=party_count_body.get("areaId"),
                ballotsIssued=party_count_body.get("ballotsIssued"),
                ballotsReceived=party_count_body.get("ballotsReceived"),
                ballotsSpoilt=party_count_body.get("ballotsSpoilt"),
                ballotsUnused=party_count_body.get("ballotsUnused"),
                ordinaryBallotCountFromBoxCount=party_count_body.get("ordinaryBallotCountFromBoxCount"),
                tenderedBallotCountFromBoxCount=party_count_body.get("tenderedBallotCountFromBoxCount"),
                ordinaryBallotCountFromBallotPaperAccount=party_count_body.get(
                    "ordinaryBallotCountFromBallotPaperAccount"),
                tenderedBallotCountFromBallotPaperAccount=party_count_body.get(
                    "tenderedBallotCountFromBallotPaperAccount")
            )

            for issued_ballot_box_id in party_count_body.get("ballotBoxesIssued"):
                tallySheetVersionRow.add_issued_ballot_box(issued_ballot_box_id)

            for received_ballot_box_id in party_count_body.get("ballotBoxesReceived"):
                tallySheetVersionRow.add_received_ballot_box(received_ballot_box_id)

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
def create(tallySheetId, body):
    tallySheet = TallySheet.get_by_id(tallySheetId=tallySheetId)
    if tallySheet is None:
        raise NotFoundException("Tally sheet not found. (tallySheetId=%d)" % tallySheetId)

    request_body = RequestBody(body)
    tallySheetVersion = TallySheetVersionPRE41.create(
        tallySheetId=tallySheetId
    )

    tally_sheet_content = request_body.get("content")
    if tally_sheet_content is not None:
        for row in tally_sheet_content:
            party_count_body = RequestBody(row)
            tallySheetVersion.add_row(
                candidateId=party_count_body.get("candidateId"),
                count=party_count_body.get("count"),
                countInWords=party_count_body.get("countInWords")
            )

    tally_sheet_summary_body = request_body.get("summary")
    if tally_sheet_summary_body is not None:
        tallySheetVersion.add_invalid_vote_count(
            electionId=tallySheetVersion.submission.electionId,
            rejectedVoteCount=tally_sheet_summary_body.get("rejectedVoteCount")
        )

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
def get_by_id(tallySheetId, tallySheetVersionId):
    result = TallySheetVersion.get_by_id(
        tallySheetId=tallySheetId,
        tallySheetVersionId=tallySheetVersionId
    )

    return TallySheetVersionSchema().dump(result).data
def create(tallySheetId):
    tallySheet, tallySheetVersion = TallySheet.create_latest_version(
        tallySheetId=tallySheetId,
        tallySheetCode=TallySheetCodeEnum.PRE_ALL_ISLAND_RESULTS)
    tallySheetVersion.set_complete(
    )  # TODO: valid before setting complete. Refer to PRE_30_PD

    electoralDistricts = db.session.query(Area.Model.areaId).filter(
        Area.Model.areaType == AreaTypeEnum.ElectoralDistrict,
        Area.Model.electionId ==
        tallySheetVersion.submission.electionId).all()

    query = db.session.query(
        TallySheetVersionRow_PRE_30_ED.Model.candidateId,
        func.sum(TallySheetVersionRow_PRE_30_ED.Model.count).label("count"),
    ).join(
        SubmissionVersion.Model, SubmissionVersion.Model.submissionVersionId ==
        TallySheetVersionRow_PRE_30_ED.Model.tallySheetVersionId).join(
            Submission.Model, Submission.Model.submissionId ==
            SubmissionVersion.Model.submissionId).filter(
                TallySheetVersionRow_PRE_30_ED.Model.tallySheetVersionId ==
                Submission.Model.lockedVersionId,
                Submission.Model.areaId.in_([
                    area.areaId for area in electoralDistricts
                ])).group_by(
                    TallySheetVersionRow_PRE_30_ED.Model.candidateId).order_by(
                        TallySheetVersionRow_PRE_30_ED.Model.candidateId).all(
                        )

    for row in query:
        tallySheetVersion.add_row(candidateId=row.candidateId, count=row.count)

    rejected_vote_count_query = db.session.query(
        func.count(Submission.Model.areaId).label("areaCount"),
        func.sum(TallySheetVersionRow_RejectedVoteCount.Model.rejectedVoteCount
                 ).label("rejectedVoteCount"),
    ).join(
        TallySheet.Model,
        TallySheet.Model.tallySheetId == Submission.Model.submissionId).join(
            TallySheetVersionRow_RejectedVoteCount.Model,
            TallySheetVersionRow_RejectedVoteCount.Model.tallySheetVersionId ==
            Submission.Model.lockedVersionId).filter(
                Submission.Model.areaId.in_([
                    area.areaId for area in electoralDistricts
                ]), TallySheet.Model.tallySheetCode ==
                TallySheetCodeEnum.PRE_30_ED).order_by(
                    Submission.Model.areaId).all()

    for row in rejected_vote_count_query:
        if row.areaCount > 0:
            tallySheetVersion.add_invalid_vote_count(
                electionId=tallySheetVersion.submission.electionId,
                rejectedVoteCount=row.rejectedVoteCount)

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
def create(tallySheetId):
    tallySheetVersion = TallySheetVersion_PRE_30_PD.create(
        tallySheetId=tallySheetId)

    countingCentres = tallySheetVersion.submission.area.get_associated_areas(
        areaType=AreaTypeEnum.CountingCentre,
        electionId=tallySheetVersion.submission.electionId)

    query = db.session.query(
        TallySheetVersionRow_PRE_41.Model.candidateId,
        Submission.Model.areaId,
        func.sum(TallySheetVersionRow_PRE_41.Model.count).label("count"),
    ).join(
        SubmissionVersion.Model, SubmissionVersion.Model.submissionVersionId ==
        TallySheetVersionRow_PRE_41.Model.tallySheetVersionId).join(
            Submission.Model, Submission.Model.submissionId ==
            SubmissionVersion.Model.submissionId).filter(
                TallySheetVersionRow_PRE_41.Model.tallySheetVersionId ==
                Submission.Model.latestVersionId,
                Submission.Model.areaId.in_([
                    area.areaId for area in countingCentres
                ])).group_by(TallySheetVersionRow_PRE_41.Model.candidateId,
                             Submission.Model.areaId).order_by(
                                 TallySheetVersionRow_PRE_41.Model.candidateId,
                                 Submission.Model.areaId).all()

    for row in query:
        tallySheetVersion.add_row(candidateId=row.candidateId,
                                  countingCentreId=row.areaId,
                                  count=row.count)

    rejected_vote_count_query = db.session.query(
        Submission.Model.areaId,
        func.sum(TallySheetVersionRow_RejectedVoteCount.Model.rejectedVoteCount
                 ).label("rejectedVoteCount"),
    ).join(
        TallySheet.Model,
        TallySheet.Model.tallySheetId == Submission.Model.submissionId).join(
            TallySheetVersionRow_RejectedVoteCount.Model,
            TallySheetVersionRow_RejectedVoteCount.Model.tallySheetVersionId ==
            Submission.Model.latestVersionId).filter(
                Submission.Model.areaId.in_([
                    area.areaId for area in countingCentres
                ]), TallySheet.Model.tallySheetCode ==
                TallySheetCodeEnum.PRE_41).group_by(
                    Submission.Model.areaId).order_by(
                        Submission.Model.areaId).all()

    for row in rejected_vote_count_query:
        tallySheetVersion.add_invalid_vote_count(
            electionId=tallySheetVersion.submission.electionId,
            areaId=row.areaId,
            rejectedVoteCount=row.rejectedVoteCount)

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Beispiel #9
0
def update(tallySheetId, body):
    """
        Append new version to the tally sheet.
    """
    # Get the tally sheet
    tallySheet = TallySheet.query.filter(
        TallySheet.tallySheetId == tallySheetId).one_or_none()

    if tallySheet is None:
        abort(
            404,
            "Tally Sheet not found for Id: {tallySheetId}".format(
                tallySheetId=tallySheetId),
        )

    create_tallysheet_version(body, tallySheet)

    schema = TallySheetVersionSchema()

    return schema.dump(new_tallysheet).data, 201
def create(tallySheetId, body):
    request_body = RequestBody(body)

    tallySheet, tallySheetVersion = TallySheet.create_latest_version(
        tallySheetId=tallySheetId,
        content=request_body.get("content")
    )

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Beispiel #11
0
def get_by_id(tallySheetId, tallySheetVersionId):
    tallySheet = TallySheet.get_by_id(tallySheetId=tallySheetId)
    if tallySheet is None:
        raise NotFoundException(
            message="Tally sheet not found (tallySheetId=%d)" % tallySheetId,
            code=MESSAGE_CODE_TALLY_SHEET_NOT_FOUND)

    result = TallySheetVersion.get_by_id(
        tallySheetId=tallySheetId, tallySheetVersionId=tallySheetVersionId)

    return TallySheetVersionSchema().dump(result).data
Beispiel #12
0
def create(tallySheetId, body):
    request_body = RequestBody(body)
    tallySheetVersion = TallySheetVersionPRE21.create(
        tallySheetId=tallySheetId)

    tally_sheet_content = request_body.get("content")
    if tally_sheet_content is not None:
        for row in tally_sheet_content:
            party_count_body = RequestBody(row)
            tallySheetVersion.add_row(
                count=party_count_body.get("count"),
                invalidVoteCategoryId=party_count_body.get(
                    "invalidVoteCategoryId"))

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
def create(tallySheetId, body):
    request_body = RequestBody(body)
    tallySheetVersion = TallySheetVersionPRE41.create(
        tallySheetId=tallySheetId)

    tally_sheet_content = request_body.get("content")
    if tally_sheet_content is not None:
        for row in tally_sheet_content:
            party_count_body = RequestBody(row)
            tallySheetVersion.add_row(
                candidateId=party_count_body.get("candidateId"),
                count=party_count_body.get("count"),
                countInWords=party_count_body.get("countInWords"))

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
def create(tallySheetId, body):
    request_body = RequestBody(body)
    tallySheet, tallySheetVersion = TallySheet.create_latest_version(
        tallySheetId=tallySheetId, tallySheetCode=TallySheetCodeEnum.PRE_21)
    tallySheetVersion.set_complete(
    )  # TODO: valid before setting complete. Refer to PRE_30_PD
    tally_sheet_content = request_body.get("content")
    if tally_sheet_content is not None:
        for row in tally_sheet_content:
            party_count_body = RequestBody(row)
            tallySheetVersion.add_row(
                count=party_count_body.get("count"),
                invalidVoteCategoryId=party_count_body.get(
                    "invalidVoteCategoryId"))

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Beispiel #15
0
def create(tallySheetId, body):
    request_body = RequestBody(body)
    tallySheetVersion = TallySheetVersion_CE_201_PV.create(
        tallySheetId=tallySheetId)

    total_number_of_a_packets_found = 0
    tally_sheet_content = request_body.get("content")
    if tally_sheet_content is not None:
        for row in tally_sheet_content:
            tally_sheet_content_item = RequestBody(row)
            row = tallySheetVersion.add_row(
                ballotBoxStationaryItemId=tally_sheet_content_item.get(
                    "ballotBoxStationaryItemId"),
                numberOfPacketsInserted=tally_sheet_content_item.get(
                    "numberOfPacketsInserted"),
                numberOfAPacketsFound=tally_sheet_content_item.get(
                    "numberOfAPacketsFound"))

            total_number_of_a_packets_found = total_number_of_a_packets_found + row.numberOfAPacketsFound

    tally_sheet_summary = request_body.get("summary")
    time_of_commencement_of_count = tally_sheet_summary.get(
        "timeOfCommencementOfCount")

    # To remove the colon between time zone comming from openapi date-time.
    # This is since the colon is not accepted in python datetime
    # if ":" == time_of_commencement_of_count[-3:-2]:
    #     time_of_commencement_of_count = time_of_commencement_of_count[:-3] + time_of_commencement_of_count[-2:]

    tallySheetVersion.add_summary(
        situation=tally_sheet_summary.get("situation"),
        timeOfCommencementOfCount=datetime.datetime.strptime(
            time_of_commencement_of_count, '%Y-%m-%dT%H:%M:%S.%fZ'),
        numberOfAPacketsFound=total_number_of_a_packets_found,
        numberOfACoversRejected=tally_sheet_summary.get(
            "numberOfACoversRejected"),
        numberOfBCoversRejected=tally_sheet_summary.get(
            "numberOfBCoversRejected"),
        numberOfValidBallotPapers=tally_sheet_summary.get(
            "numberOfValidBallotPapers"))

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
def create(tallySheetId):
    tallySheetVersion = TallySheetVersion_PRE_30_PD.create(
        tallySheetId=tallySheetId
    )

    countingCentres = tallySheetVersion.submission.area.get_associated_areas(
        areaType=AreaTypeEnum.CountingCentre, electionId=tallySheetVersion.submission.electionId
    )

    query = db.session.query(
        TallySheetVersionRow_PRE_41.Model.candidateId,
        Submission.Model.areaId,
        func.sum(TallySheetVersionRow_PRE_41.Model.count).label("count"),
    ).join(
        SubmissionVersion.Model,
        SubmissionVersion.Model.submissionVersionId == TallySheetVersionRow_PRE_41.Model.tallySheetVersionId
    ).join(
        Submission.Model,
        Submission.Model.submissionId == SubmissionVersion.Model.submissionId
    ).filter(
        TallySheetVersionRow_PRE_41.Model.tallySheetVersionId == Submission.Model.latestVersionId,
        Submission.Model.areaId.in_([area.areaId for area in countingCentres])
    ).group_by(
        TallySheetVersionRow_PRE_41.Model.candidateId,
        Submission.Model.areaId
    ).order_by(
        TallySheetVersionRow_PRE_41.Model.candidateId,
        Submission.Model.areaId
    ).all()

    print("################ query ", query)

    for row in query:
        print("################ row ", row)
        tallySheetVersion.add_row(
            candidateId=row.candidateId,
            countingCentreId=row.areaId,
            count=row.count
        )

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Beispiel #17
0
def create(tallySheetId, body):
    tallySheet = TallySheet.get_by_id(tallySheetId=tallySheetId)
    if tallySheet is None:
        raise NotFoundException("Tally sheet not found. (tallySheetId=%d)" %
                                tallySheetId)

    request_body = RequestBody(body)

    tallySheet, tallySheetVersion = TallySheet.create_latest_version(
        tallySheetId=tallySheetId, tallySheetCode=TallySheetCodeEnum.PRE_34_CO)

    tally_sheet_content = request_body.get("content")
    print(request_body.body)
    if tally_sheet_content is not None:
        for row in tally_sheet_content:
            party_count_body = RequestBody(row)
            row = tallySheetVersion.add_row(
                candidateId=party_count_body.get("candidateId"),
                notCountedBallotPapers=party_count_body.get(
                    "notCountedBallotPapers"),
                remainingBallotPapers=party_count_body.get(
                    "remainingBallotPapers"))
            # Lets add the preferences for the above row
            preferences = party_count_body.get("preferences")
            for preference in preferences:
                print(preference)
                TallySheetVersionRow_PRE_34_CO_PREFERENCES.create(
                    tallySheetVersionRowId=row.tallySheetVersionRowId,
                    candidateId=preference.get('candidateId'),
                    no2ndPreferences=preference.get('no2rdPreferences'),
                    no3rdPreferences=preference.get('no3rdPreferences'))

    tally_sheet_summary_body = request_body.get("summary")
    if tally_sheet_summary_body is not None:
        tallySheetVersion.add_invalid_vote_count(
            electionId=tallySheetVersion.submission.electionId,
            rejectedVoteCount=tally_sheet_summary_body.get(
                "rejectedVoteCount"))

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Beispiel #18
0
def create(tallySheetId):
    tallySheetVersion = TallySheetVersion_PRE_30_ED.create(
        tallySheetId=tallySheetId
    )

    pollingDivisions = tallySheetVersion.submission.area.get_associated_areas(AreaTypeEnum.PollingDivision)

    query = db.session.query(
        TallySheetVersionRow_PRE_30_PD.Model.candidateId,
        Submission.Model.areaId,
        func.sum(TallySheetVersionRow_PRE_30_PD.Model.count).label("count"),
    ).join(
        SubmissionVersion.Model,
        SubmissionVersion.Model.submissionVersionId == TallySheetVersionRow_PRE_30_PD.Model.tallySheetVersionId
    ).join(
        Submission.Model,
        Submission.Model.submissionId == SubmissionVersion.Model.submissionId
    ).filter(
        TallySheetVersionRow_PRE_30_PD.Model.tallySheetVersionId == Submission.Model.latestVersionId,
        Submission.Model.areaId.in_([area.areaId for area in pollingDivisions])
    ).group_by(
        TallySheetVersionRow_PRE_30_PD.Model.candidateId,
        Submission.Model.areaId
    ).order_by(
        TallySheetVersionRow_PRE_30_PD.Model.candidateId,
        Submission.Model.areaId
    ).all()

    for row in query:
        tallySheetVersion.add_row(
            candidateId=row.candidateId,
            pollingDivisionId=row.areaId,
            count=row.count
        )

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Beispiel #19
0
def create(tallySheetId, body):
    request_body = RequestBody(body)
    tallySheet, tallySheetVersion = TallySheet.create_latest_version(
        tallySheetId=tallySheetId, tallySheetCode=TallySheetCodeEnum.PRE_41)

    tally_sheet_content = request_body.get("content")
    if tally_sheet_content is not None:
        for row in tally_sheet_content:
            party_count_body = RequestBody(row)
            tallySheetVersion.add_row(
                candidateId=party_count_body.get("candidateId"),
                count=party_count_body.get("count"),
                countInWords=party_count_body.get("countInWords"))

    tally_sheet_summary_body = request_body.get("summary")
    if tally_sheet_summary_body is not None:
        tallySheetVersion.add_invalid_vote_count(
            electionId=tallySheetVersion.submission.electionId,
            rejectedVoteCount=tally_sheet_summary_body.get(
                "rejectedVoteCount"))

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Beispiel #20
0
def create(tallySheetId, body):
    request_body = RequestBody(body)
    tallySheet, tallySheetVersion = TallySheet.create_latest_version(
        tallySheetId=tallySheetId, tallySheetCode=TallySheetCodeEnum.PRE_21)
    tally_sheet_content = request_body.get("content")
    if tally_sheet_content is not None:
        is_complete = True
        for row in tally_sheet_content:
            party_count_body = RequestBody(row)
            count = party_count_body.get("count")
            invalidVoteCategoryId = party_count_body.get(
                "invalidVoteCategoryId")

            if (count and invalidVoteCategoryId) is not None:
                tallySheetVersion.add_row(
                    count=count, invalidVoteCategoryId=invalidVoteCategoryId)
            else:
                is_complete = False

        if is_complete:
            tallySheetVersion.set_complete()
    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Beispiel #21
0
def create(tallySheetId):
    tallySheet, tallySheetVersion = TallySheet.create_latest_version(
        tallySheetId=tallySheetId, tallySheetCode=TallySheetCodeEnum.PRE_34_AI)

    electoral_districts = db.session.query(
        AreaMap.Model.electoralDistrictId).filter(
            AreaMap.Model.countryId == tallySheet.submission.areaId).group_by(
                AreaMap.Model.electoralDistrictId).all()

    electoral_district_ids = []
    for electoral_district in electoral_districts:
        electoral_district_ids.append(electoral_district.electoralDistrictId)

    query = db.session.query(
        func.count(Area.Model.areaId).label("areaCount"),
        ElectionCandidate.Model.candidateId,
        TallySheetVersionRow_PRE_34_preference.Model.preferenceNumber,
        func.sum(TallySheetVersionRow_PRE_34_preference.Model.preferenceCount).
        label("preferenceCount"), Submission.Model.electionId).join(
            Submission.Model, Submission.Model.areaId == Area.Model.areaId
        ).join(Election.Model,
               Election.Model.electionId == Area.Model.electionId).join(
                   ElectionCandidate.Model,
                   or_(
                       ElectionCandidate.Model.electionId ==
                       Election.Model.electionId,
                       ElectionCandidate.Model.electionId ==
                       Election.Model.parentElectionId)
               ).join(
                   TallySheet.Model,
                   and_(
                       TallySheet.Model.tallySheetId ==
                       Submission.Model.submissionId,
                       TallySheet.Model.tallySheetCode ==
                       TallySheetCodeEnum.PRE_34_ED)
               ).join(
                   TallySheetVersionRow_PRE_34_preference.Model,
                   and_(
                       TallySheetVersionRow_PRE_34_preference.Model.
                       tallySheetVersionId == Submission.Model.lockedVersionId,
                       TallySheetVersionRow_PRE_34_preference.Model.candidateId
                       == ElectionCandidate.Model.candidateId),
               ).filter(Submission.Model.areaId.in_(
                   electoral_district_ids)).group_by(
                       ElectionCandidate.Model.candidateId,
                       TallySheetVersionRow_PRE_34_preference.Model.
                       preferenceNumber).order_by(
                           TallySheetVersionRow_PRE_34_preference.Model.
                           candidateId, TallySheetVersionRow_PRE_34_preference.
                           Model.preferenceNumber).all()

    is_complete = True  # TODO:Change other reports to validate like this
    for row in query:
        if row.candidateId is not None and row.preferenceNumber is not None and row.preferenceCount:
            print("========== row ======== ", row)
            tallySheetVersion.add_row(electionId=row.electionId,
                                      candidateId=row.candidateId,
                                      preferenceNumber=row.preferenceNumber,
                                      preferenceCount=row.preferenceCount)
        else:
            is_complete = False

    if is_complete:
        tallySheetVersion.set_complete()

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
def create(tallySheetId):
    tallySheet, tallySheetVersion = TallySheet.create_latest_version(
        tallySheetId=tallySheetId,
        tallySheetCode=TallySheetCodeEnum.
        PRE_ALL_ISLAND_RESULTS_BY_ELECTORAL_DISTRICTS)

    electionId = tallySheetVersion.submission.electionId

    query = db.session.query(
        func.count(Area.Model.areaId).label("areaCount"),
        ElectionCandidate.Model.candidateId,
        Submission.Model.areaId.label("electoralDistrictId"),
        func.sum(TallySheetVersionRow_PRE_30_ED.Model.count).label("count"),
    ).join(
        Election.Model, Election.Model.electionId == Area.Model.electionId
    ).join(
        ElectionCandidate.Model,
        ElectionCandidate.Model.electionId == Election.Model.electionId).join(
            Submission.Model,
            Submission.Model.areaId == Area.Model.areaId).join(
                TallySheet.Model,
                and_(
                    TallySheet.Model.tallySheetId ==
                    Submission.Model.submissionId,
                    TallySheet.Model.tallySheetCode ==
                    TallySheetCodeEnum.PRE_30_ED)
            ).join(TallySheetVersionRow_PRE_30_ED.Model,
                   and_(
                       TallySheetVersionRow_PRE_30_ED.Model.tallySheetVersionId
                       == Submission.Model.lockedVersionId,
                       TallySheetVersionRow_PRE_30_ED.Model.candidateId ==
                       ElectionCandidate.Model.candidateId),
                   isouter=True).filter(
                       Area.Model.areaType == AreaTypeEnum.ElectoralDistrict,
                       Area.Model.electionId == electionId).group_by(
                           ElectionCandidate.Model.candidateId,
                           Area.Model.areaId).order_by(
                               ElectionCandidate.Model.candidateId,
                               Area.Model.areaId).all()

    is_complete = True
    for row in query:
        if (row.candidateId and row.electoralDistrictId
                and row.count) is not None:
            tallySheetVersion.add_row(
                candidateId=row.candidateId,
                electoralDistrictId=row.electoralDistrictId,
                count=row.count)
        else:
            is_complete = False

    rejected_vote_count_query = db.session.query(
        Area.Model.areaId,
        Submission.Model.electionId,
        func.sum(TallySheetVersionRow_RejectedVoteCount.Model.rejectedVoteCount
                 ).label("rejectedVoteCount"),
    ).join(
        Submission.Model, Submission.Model.areaId == Area.Model.areaId).join(
            TallySheet.Model,
            and_(
                TallySheet.Model.tallySheetId == Submission.Model.submissionId,
                TallySheet.Model.tallySheetCode ==
                TallySheetCodeEnum.PRE_30_ED)).join(
                    TallySheetVersionRow_RejectedVoteCount.Model,
                    TallySheetVersionRow_RejectedVoteCount.Model.
                    tallySheetVersionId == Submission.Model.lockedVersionId,
                    isouter=True).filter(
                        Area.Model.areaType == AreaTypeEnum.ElectoralDistrict,
                        Area.Model.electionId == electionId,
                    ).group_by(Submission.Model.electionId,
                               Submission.Model.areaId).order_by(
                                   Submission.Model.electionId,
                                   Submission.Model.areaId).all()

    for row in rejected_vote_count_query:
        if (tallySheetVersion.submission.electionId and row.areaId
                and row.rejectedVoteCount) is not None:
            tallySheetVersion.add_invalid_vote_count(
                electionId=tallySheetVersion.submission.electionId,
                areaId=row.areaId,
                rejectedVoteCount=row.rejectedVoteCount)
        else:
            is_complete = False

    if is_complete:
        tallySheetVersion.set_complete()

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Beispiel #23
0
def get_all(tallySheetId):
    result = TallySheetVersion.get_all(tallySheetId=tallySheetId)

    result = get_paginated_query(result).all()

    return TallySheetVersionSchema(many=True).dump(result).data
Beispiel #24
0
def create(tallySheetId):
    tallySheet, tallySheetVersion = TallySheet.create_latest_version(
        tallySheetId=tallySheetId, tallySheetCode=TallySheetCodeEnum.PRE_34_PD)

    query = db.session.query(
        Election.Model.electionId,
        Area.Model.areaId,
        ElectionCandidate.Model.candidateId,
        func.sum(
            func.IF(TallySheetVersionRow_PRE_30_PD.Model.count == None, 0,
                    TallySheetVersionRow_PRE_30_PD.Model.count)).label(
                        "firstPreferenceCount"),
        func.sum(
            func.IF(
                and_(TallySheetVersionRow_PRE_34_preference.Model.
                     preferenceNumber == 2),
                TallySheetVersionRow_PRE_34_preference.Model.preferenceCount,
                0)).label("secondPreferenceCount"),
        func.sum(
            func.IF(
                and_(TallySheetVersionRow_PRE_34_preference.Model.
                     preferenceNumber == 3),
                TallySheetVersionRow_PRE_34_preference.Model.preferenceCount,
                0)).label("thirdPreferenceCount"),
    ).join(
        Submission.Model, Submission.Model.areaId == Area.Model.areaId).join(
            Election.Model,
            Election.Model.electionId == Area.Model.electionId).join(
                ElectionCandidate.Model,
                or_(
                    ElectionCandidate.Model.electionId ==
                    Election.Model.electionId,
                    ElectionCandidate.Model.electionId ==
                    Election.Model.parentElectionId)).join(
                        TallySheet.Model,
                        and_(
                            TallySheet.Model.tallySheetId ==
                            Submission.Model.submissionId,
                            TallySheet.Model.tallySheetCode.in_([
                                TallySheetCodeEnum.PRE_30_PD,
                                TallySheetCodeEnum.PRE_34_I_RO
                            ]))
                    ).join(
                        TallySheetVersionRow_PRE_30_PD.Model,
                        and_(
                            TallySheetVersionRow_PRE_30_PD.Model.
                            tallySheetVersionId == Submission.Model.
                            lockedVersionId,
                            TallySheetVersionRow_PRE_30_PD.Model.candidateId ==
                            ElectionCandidate.Model.candidateId),
                        isouter=True).join(
                            TallySheetVersionRow_PRE_34_preference.Model,
                            and_(
                                TallySheetVersionRow_PRE_34_preference.Model.
                                tallySheetVersionId ==
                                Submission.Model.lockedVersionId,
                                TallySheetVersionRow_PRE_34_preference.Model.
                                candidateId ==
                                ElectionCandidate.Model.candidateId),
                            isouter=True).filter(
                                Area.Model.areaId ==
                                tallySheet.submission.areaId,
                                ElectionCandidate.Model.qualifiedForPreferences
                                == True).group_by(
                                    ElectionCandidate.Model.candidateId,
                                    Submission.Model.areaId).order_by(
                                        ElectionCandidate.Model.candidateId,
                                        Submission.Model.areaId).all()

    is_complete = True  # TODO:Change other reports to validate like this
    for row in query:
        if row.candidateId is not None and row.firstPreferenceCount is not None and row.secondPreferenceCount is not None and row.thirdPreferenceCount is not None:
            tallySheetVersion.add_row(electionId=row.electionId,
                                      candidateId=row.candidateId,
                                      preferenceNumber=1,
                                      preferenceCount=row.firstPreferenceCount)
            tallySheetVersion.add_row(
                electionId=row.electionId,
                candidateId=row.candidateId,
                preferenceNumber=2,
                preferenceCount=row.secondPreferenceCount)
            tallySheetVersion.add_row(electionId=row.electionId,
                                      candidateId=row.candidateId,
                                      preferenceNumber=3,
                                      preferenceCount=row.thirdPreferenceCount)
        else:
            is_complete = False

    if is_complete:
        tallySheetVersion.set_complete()

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Beispiel #25
0
def create(tallySheetId):
    tallySheet, tallySheetVersion = TallySheet.create_latest_version(
        tallySheetId=tallySheetId, tallySheetCode=TallySheetCodeEnum.PRE_30_ED)

    polling_division_and_electoral_district_subquery = tallySheetVersion.polling_division_and_electoral_district_query(
    ).subquery()

    query = db.session.query(
        polling_division_and_electoral_district_subquery.c.areaId,
        ElectionCandidate.Model.candidateId,
        Submission.Model.electionId,
        func.sum(TallySheetVersionRow_PRE_30_PD.Model.count).label("count"),
    ).join(
        Election.Model, Election.Model.electionId ==
        polling_division_and_electoral_district_subquery.c.electionId).join(
            ElectionCandidate.Model,
            ElectionCandidate.Model.electionId == Election.Model.electionId
        ).join(
            Submission.Model, Submission.Model.areaId ==
            polling_division_and_electoral_district_subquery.c.areaId
        ).join(
            TallySheet.Model,
            and_(
                TallySheet.Model.tallySheetId == Submission.Model.submissionId,
                TallySheet.Model.tallySheetCode == TallySheetCodeEnum.PRE_30_PD
            )).join(
                TallySheetVersionRow_PRE_30_PD.Model,
                and_(
                    TallySheetVersionRow_PRE_30_PD.Model.tallySheetVersionId ==
                    Submission.Model.lockedVersionId,
                    TallySheetVersionRow_PRE_30_PD.Model.candidateId ==
                    ElectionCandidate.Model.candidateId),
                isouter=True).group_by(ElectionCandidate.Model.candidateId,
                                       Submission.Model.electionId,
                                       Submission.Model.areaId).order_by(
                                           ElectionCandidate.Model.candidateId,
                                           Submission.Model.electionId,
                                           Submission.Model.areaId).all()

    is_complete = True
    for row in query:
        print("###### row [1] ##### ", row)
        if (row.candidateId and row.areaId and row.count
                and row.electionId) is not None:
            tallySheetVersion.add_row(candidateId=row.candidateId,
                                      areaId=row.areaId,
                                      count=row.count,
                                      electionId=row.electionId)
        else:
            is_complete = False

    rejected_vote_count_query = db.session.query(
        polling_division_and_electoral_district_subquery.c.areaId,
        Submission.Model.electionId,
        func.sum(TallySheetVersionRow_RejectedVoteCount.Model.rejectedVoteCount
                 ).label("rejectedVoteCount"),
    ).join(
        Submission.Model, Submission.Model.areaId ==
        polling_division_and_electoral_district_subquery.c.areaId).join(
            TallySheet.Model,
            and_(
                TallySheet.Model.tallySheetId == Submission.Model.submissionId,
                TallySheet.Model.tallySheetCode ==
                TallySheetCodeEnum.PRE_30_PD)).join(
                    TallySheetVersionRow_RejectedVoteCount.Model,
                    TallySheetVersionRow_RejectedVoteCount.Model.
                    tallySheetVersionId == Submission.Model.lockedVersionId,
                    isouter=True).group_by(Submission.Model.electionId,
                                           Submission.Model.areaId).order_by(
                                               Submission.Model.electionId,
                                               Submission.Model.areaId).all()

    for row in rejected_vote_count_query:
        print("###### row [2] ##### ", row)
        if (row.electionId and row.areaId
                and row.rejectedVoteCount) is not None:
            tallySheetVersion.add_invalid_vote_count(
                electionId=row.electionId,
                areaId=row.areaId,
                rejectedVoteCount=row.rejectedVoteCount)
        else:
            is_complete = False

    if is_complete:
        tallySheetVersion.set_complete()

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Beispiel #26
0
def get_tallysheet_response(new_tallysheet):
    if new_tallysheet.code == "PRE-41":
        return TallySheet_PRE_41_Schema().dump(new_tallysheet).data
    else:
        return TallySheetVersionSchema().dump(new_tallysheet).data
Beispiel #27
0
def create(tallySheetId, body):
    request_body = RequestBody(body)
    tallySheet, tallySheetVersion = TallySheet.create_latest_version(
        tallySheetId=tallySheetId, tallySheetCode=TallySheetCodeEnum.PRE_41)

    election = tallySheet.submission.election
    voteType = election.electionName
    status = "Entered"
    electionId = election.parentElectionId
    countingCentreId = tallySheet.areaId
    area = Area.get_by_id(areaId=countingCentreId)
    electoralDistrictId = area.get_associated_areas(
        AreaTypeEnum.ElectoralDistrict, electionId=electionId)[0].areaId
    pollingDivisionId = None
    pollingDivisionResult = area.get_associated_areas(
        AreaTypeEnum.PollingDivision, electionId=electionId)
    if len(pollingDivisionResult) > 0:
        pollingDivisionId = area.get_associated_areas(
            AreaTypeEnum.PollingDivision, electionId=electionId)[0].areaId

    tally_sheet_content = request_body.get("content")
    is_complete = True
    if tally_sheet_content is not None:

        for row in tally_sheet_content:
            party_count_body = RequestBody(row)
            candidateId = party_count_body.get("candidateId")
            count = party_count_body.get("count")
            countInWords = party_count_body.get("countInWords")

            if (candidateId and count and countInWords) is not None:
                tallySheetVersion.add_row(candidateId=candidateId,
                                          count=count,
                                          countInWords=countInWords)
            else:
                is_complete = False

            voteCount = party_count_body.get("count")
            pollingStationId = party_count_body.get("areaId")
            candidateId = party_count_body.get("candidateId")
            if election is not None:
                existingStatus = StatusPRE41.get_status_record(
                    electionId=electionId,
                    electoralDistrictId=electoralDistrictId,
                    pollingDivisionId=pollingDivisionId,
                    countingCentreId=countingCentreId,
                    pollingStationId=pollingStationId,
                    candidateId=candidateId)
                if existingStatus is None:
                    StatusPRE41.create(
                        voteType=voteType,
                        status=status,
                        electionId=electionId,
                        electoralDistrictId=electoralDistrictId,
                        pollingDivisionId=pollingDivisionId,
                        countingCentreId=countingCentreId,
                        pollingStationId=pollingStationId,
                        voteCount=voteCount,
                        candidateId=candidateId,
                    )
                else:
                    existingStatus.voteType = voteType,
                    existingStatus.electionId = electionId,
                    existingStatus.electoralDistrictId = electoralDistrictId,
                    existingStatus.pollingDivisionId = pollingDivisionId,
                    existingStatus.countingCentreId = countingCentreId,
                    existingStatus.pollingStationId = pollingStationId,
                    existingStatus.voteCount = voteCount,
                    existingStatus.candidateId = candidateId

    tally_sheet_summary_body = request_body.get("summary")
    if tally_sheet_summary_body is not None:
        electionId = tallySheetVersion.submission.electionId
        rejectedVoteCount = tally_sheet_summary_body.get("rejectedVoteCount")

        if (electionId and rejectedVoteCount) is not None:
            tallySheetVersion.add_invalid_vote_count(
                electionId=electionId, rejectedVoteCount=rejectedVoteCount)
        else:
            is_complete = False

        voteCount = tally_sheet_summary_body.get("rejectedVoteCount")
        candidateId = None
        pollingStationId = None
        if election is not None:
            existingStatus = StatusPRE41.get_status_record(
                electionId=election.parentElectionId,
                electoralDistrictId=electoralDistrictId,
                pollingDivisionId=pollingDivisionId,
                countingCentreId=countingCentreId,
                candidateId=candidateId)
            if existingStatus is None:
                StatusPRE41.create(
                    voteType=voteType,
                    status=status,
                    electionId=election.parentElectionId,
                    electoralDistrictId=electoralDistrictId,
                    pollingDivisionId=pollingDivisionId,
                    countingCentreId=countingCentreId,
                    pollingStationId=pollingStationId,
                    voteCount=voteCount,
                    candidateId=candidateId,
                )
            else:
                existingStatus.voteType = voteType,
                existingStatus.electionId = election.parentElectionId,
                existingStatus.electoralDistrictId = electoralDistrictId,
                existingStatus.pollingDivisionId = pollingDivisionId,
                existingStatus.countingCentreId = countingCentreId,
                existingStatus.voteCount = voteCount,
                existingStatus.pollingStationId = pollingStationId,
                existingStatus.candidateId = candidateId

    if is_complete:
        tallySheetVersion.set_complete()
    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
def create(tallySheetId):
    tallySheet, tallySheetVersion = TallySheet.create_latest_version(
        tallySheetId=tallySheetId, tallySheetCode=TallySheetCodeEnum.PRE_34_PD)

    polling_division_id = tallySheet.submission.areaId

    query = db.session.query(
        Election.Model.electionId,
        Area.Model.areaId,
        ElectionCandidate.Model.candidateId,
        ElectionCandidate.Model.qualifiedForPreferences,
        func.sum(TallySheetVersionRow_PRE_30_PD.Model.count).label(
            "firstPreferenceCount"),
        func.sum(
            func.IF(
                and_(TallySheetVersionRow_PRE_34_preference.Model.
                     preferenceNumber == 2),
                TallySheetVersionRow_PRE_34_preference.Model.preferenceCount,
                None)).label("secondPreferenceCount"),
        func.sum(
            func.IF(
                and_(TallySheetVersionRow_PRE_34_preference.Model.
                     preferenceNumber == 3),
                TallySheetVersionRow_PRE_34_preference.Model.preferenceCount,
                None)).label("thirdPreferenceCount"),
    ).join(
        Submission.Model, Submission.Model.areaId == Area.Model.areaId).join(
            Election.Model,
            Election.Model.electionId == Area.Model.electionId).join(
                ElectionCandidate.Model,
                or_(
                    ElectionCandidate.Model.electionId ==
                    Election.Model.electionId,
                    ElectionCandidate.Model.electionId ==
                    Election.Model.parentElectionId)).join(
                        TallySheet.Model,
                        and_(
                            TallySheet.Model.tallySheetId ==
                            Submission.Model.submissionId,
                            TallySheet.Model.tallySheetCode.in_([
                                TallySheetCodeEnum.PRE_30_PD,
                                TallySheetCodeEnum.PRE_34_I_RO
                            ]))
                    ).join(
                        TallySheetVersionRow_PRE_30_PD.Model,
                        and_(
                            TallySheetVersionRow_PRE_30_PD.Model.
                            tallySheetVersionId == Submission.Model.
                            lockedVersionId,
                            TallySheetVersionRow_PRE_30_PD.Model.candidateId ==
                            ElectionCandidate.Model.candidateId),
                        isouter=True
                    ).join(
                        TallySheetVersionRow_PRE_34_preference.Model,
                        and_(
                            TallySheetVersionRow_PRE_34_preference.Model.
                            tallySheetVersionId == Submission.Model.
                            lockedVersionId,
                            TallySheetVersionRow_PRE_34_preference.Model.
                            candidateId ==
                            ElectionCandidate.Model.candidateId),
                        isouter=True
                    ).filter(
                        Area
                        .Model.
                        areaId
                        == polling_division_id,
                        # ElectionCandidate.Model.qualifiedForPreferences == True
                    ).group_by(ElectionCandidate.Model.candidateId,
                               Submission.Model.areaId).order_by(
                                   ElectionCandidate.Model.candidateId,
                                   Submission.Model.areaId).all()

    is_complete = True
    for row in query:

        print("###### ABCD #### ", [
            row.candidateId, row.qualifiedForPreferences,
            row.firstPreferenceCount, row.secondPreferenceCount,
            row.thirdPreferenceCount
        ])
        if (row.candidateId and row.firstPreferenceCount) is not None:
            tallySheetVersion.add_row(electionId=row.electionId,
                                      candidateId=row.candidateId,
                                      preferenceNumber=1,
                                      preferenceCount=row.firstPreferenceCount,
                                      areaId=polling_division_id)

            if row.qualifiedForPreferences is True:
                if (row.secondPreferenceCount
                        and row.thirdPreferenceCount) is not None:
                    tallySheetVersion.add_row(
                        electionId=row.electionId,
                        candidateId=row.candidateId,
                        preferenceNumber=2,
                        preferenceCount=row.secondPreferenceCount,
                        areaId=polling_division_id)
                    tallySheetVersion.add_row(
                        electionId=row.electionId,
                        candidateId=row.candidateId,
                        preferenceNumber=3,
                        preferenceCount=row.thirdPreferenceCount,
                        areaId=polling_division_id)
                else:
                    is_complete = False
        else:
            is_complete = False

    if is_complete:
        tallySheetVersion.set_complete()

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Beispiel #29
0
def create(tallySheetId):
    tallySheet, tallySheetVersion = TallySheet.create_latest_version(
        tallySheetId=tallySheetId, tallySheetCode=TallySheetCodeEnum.PRE_34_AI)

    electoral_districts = db.session.query(
        AreaMap.Model.electoralDistrictId).filter(
            AreaMap.Model.countryId == tallySheet.submission.areaId).group_by(
                AreaMap.Model.electoralDistrictId).all()

    electoral_district_ids = []
    for electoral_district in electoral_districts:
        electoral_district_ids.append(electoral_district.electoralDistrictId)

    query = db.session.query(
        Area.Model.areaId,
        ElectionCandidate.Model.candidateId,
        ElectionCandidate.Model.qualifiedForPreferences,
        Submission.Model.electionId,
        func.sum(
            func.IF(
                and_(TallySheetVersionRow_PRE_34_preference.Model.
                     preferenceNumber == 1),
                TallySheetVersionRow_PRE_34_preference.Model.preferenceCount,
                None)).label("firstPreferenceCount"),
        func.sum(
            func.IF(
                and_(TallySheetVersionRow_PRE_34_preference.Model.
                     preferenceNumber == 2),
                TallySheetVersionRow_PRE_34_preference.Model.preferenceCount,
                None)).label("secondPreferenceCount"),
        func.sum(
            func.IF(
                and_(TallySheetVersionRow_PRE_34_preference.Model.
                     preferenceNumber == 3),
                TallySheetVersionRow_PRE_34_preference.Model.preferenceCount,
                None)).label("thirdPreferenceCount"),
    ).join(Submission.Model,
           Submission.Model.areaId == Area.Model.areaId).join(
               Election.Model,
               Election.Model.electionId == Area.Model.electionId).join(
                   ElectionCandidate.Model,
                   or_(
                       ElectionCandidate.Model.electionId ==
                       Election.Model.electionId,
                       ElectionCandidate.Model.electionId ==
                       Election.Model.parentElectionId)
               ).join(
                   TallySheet.Model,
                   and_(
                       TallySheet.Model.tallySheetId ==
                       Submission.Model.submissionId,
                       TallySheet.Model.tallySheetCode ==
                       TallySheetCodeEnum.PRE_34_ED)
               ).join(
                   TallySheetVersionRow_PRE_34_preference.Model,
                   and_(
                       TallySheetVersionRow_PRE_34_preference.Model.
                       tallySheetVersionId == Submission.Model.lockedVersionId,
                       TallySheetVersionRow_PRE_34_preference.Model.candidateId
                       == ElectionCandidate.Model.candidateId),
                   isouter=True).filter(
                       Area.Model.areaId.in_(electoral_district_ids)).group_by(
                           ElectionCandidate.Model.candidateId,
                           Area.Model.areaId).order_by(
                               ElectionCandidate.Model.candidateId,
                               Area.Model.areaId).all()

    is_complete = True
    for row in query:
        if (row.candidateId and row.firstPreferenceCount) is not None:
            tallySheetVersion.add_row(electionId=row.electionId,
                                      candidateId=row.candidateId,
                                      preferenceNumber=1,
                                      preferenceCount=row.firstPreferenceCount,
                                      areaId=row.areaId)

            if row.qualifiedForPreferences is True:
                if (row.secondPreferenceCount
                        and row.thirdPreferenceCount) is not None:
                    tallySheetVersion.add_row(
                        electionId=row.electionId,
                        candidateId=row.candidateId,
                        preferenceNumber=2,
                        preferenceCount=row.secondPreferenceCount,
                        areaId=row.areaId)
                    tallySheetVersion.add_row(
                        electionId=row.electionId,
                        candidateId=row.candidateId,
                        preferenceNumber=3,
                        preferenceCount=row.thirdPreferenceCount,
                        areaId=row.areaId)
                else:
                    is_complete = False
        else:
            is_complete = False

    if is_complete:
        tallySheetVersion.set_complete()

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
def create(tallySheetId):
    tallySheetVersion = TallySheetVersion_PRE_ALL_ISLAND_RESULTS_BY_ELECTORAL_DISTRICTS.create(
        tallySheetId=tallySheetId
    )

    electoralDistricts = tallySheetVersion.submission.area.get_associated_areas(
        areaType=AreaTypeEnum.ElectoralDistrict, electionId=tallySheetVersion.submission.electionId
    )

    query = db.session.query(
        TallySheetVersionRow_PRE_30_ED.Model.candidateId,
        Submission.Model.areaId.label("electoralDistrictId"),
        func.sum(TallySheetVersionRow_PRE_30_ED.Model.count).label("count"),
    ).join(
        SubmissionVersion.Model,
        SubmissionVersion.Model.submissionVersionId == TallySheetVersionRow_PRE_30_ED.Model.tallySheetVersionId
    ).join(
        Submission.Model,
        Submission.Model.submissionId == SubmissionVersion.Model.submissionId
    ).filter(
        TallySheetVersionRow_PRE_30_ED.Model.tallySheetVersionId == Submission.Model.latestVersionId,
        Submission.Model.areaId.in_([area.areaId for area in electoralDistricts])
    ).group_by(
        TallySheetVersionRow_PRE_30_ED.Model.candidateId,
        Submission.Model.areaId
    ).order_by(
        TallySheetVersionRow_PRE_30_ED.Model.candidateId,
        Submission.Model.areaId
    ).all()

    for row in query:
        tallySheetVersion.add_row(
            candidateId=row.candidateId,
            electoralDistrictId=row.electoralDistrictId,
            count=row.count
        )

    rejected_vote_count_query = db.session.query(
        Submission.Model.areaId,
        func.sum(TallySheetVersionRow_RejectedVoteCount.Model.rejectedVoteCount).label("rejectedVoteCount"),
    ).join(
        TallySheet.Model,
        TallySheet.Model.tallySheetId == Submission.Model.submissionId
    ).join(
        TallySheetVersionRow_RejectedVoteCount.Model,
        TallySheetVersionRow_RejectedVoteCount.Model.tallySheetVersionId == Submission.Model.latestVersionId
    ).filter(
        Submission.Model.areaId.in_([area.areaId for area in electoralDistricts]),
        TallySheet.Model.tallySheetCode == TallySheetCodeEnum.PRE_30_ED
    ).group_by(
        Submission.Model.areaId
    ).order_by(
        Submission.Model.areaId
    ).all()

    for row in rejected_vote_count_query:
        tallySheetVersion.add_invalid_vote_count(
            electionId=tallySheetVersion.submission.electionId,
            areaId=row.areaId,
            rejectedVoteCount=row.rejectedVoteCount
        )

    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data