def lock(tallySheetId, body): request_body = RequestBody(body) tallySheetVersionId = request_body.get("lockedVersionId") tally_sheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tally_sheet is None: raise NotFoundException("Tally sheet not found (tallySheetId=%d)" % tallySheetId) tally_sheet_version = TallySheetVersion.get_by_id( tallySheetVersionId=tallySheetVersionId, tallySheetId=tallySheetId) if tally_sheet_version is None: raise NotFoundException( message="Tally sheet version not found (tallySheetVersionId=%d)" % tallySheetVersionId, code=MESSAGE_CODE_TALLY_SHEET_VERSION_NOT_FOUND) if not tally_sheet_version.isComplete: raise NotFoundException( message="Incomplete tally sheet version (tallySheetVersionId=%d)" % tallySheetVersionId, code= MESSAGE_CODE_TALLY_SHEET_INCOMPLETE_TALLY_SHEET_CANNOT_BE_LOCKED) tally_sheet.set_locked_version(tally_sheet_version) if tally_sheet.tallySheetCode in [ TallySheetCodeEnum.CE_201, TallySheetCodeEnum.CE_201_PV ]: election = tally_sheet.submission.election electionId = election.parentElectionId countingCentreId = tally_sheet.areaId results = StatusCE201.get_status_records(electionId, countingCentreId) for item in results: item.status = "Verified" if tally_sheet.tallySheetCode in [TallySheetCodeEnum.PRE_41]: election = tally_sheet.submission.election electionId = election.parentElectionId countingCentreId = tally_sheet.areaId results = StatusPRE41.get_status_records(electionId, countingCentreId) for item in results: item.status = "Verified" if tally_sheet.tallySheetCode in [TallySheetCodeEnum.PRE_34_CO]: election = tally_sheet.submission.election electionId = election.parentElectionId countingCentreId = tally_sheet.areaId results = StatusPRE34.get_status_records(electionId, countingCentreId) for item in results: item.status = "Verified" db.session.commit() return TallySheetSchema().dump(tally_sheet).data, 201
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 submit(tallySheetId, body): request_body = RequestBody(body) tallySheetVersionId = request_body.get("submittedVersionId") tally_sheet: TallySheetModel = TallySheet.get_by_id(tallySheetId=tallySheetId) if tally_sheet is None: raise NotFoundException( message="Tally sheet not found (tallySheetId=%d)" % tallySheetId, code=MESSAGE_CODE_TALLY_SHEET_NOT_FOUND ) if tally_sheet.tallySheetCode not in [TallySheetCodeEnum.PRE_41, TallySheetCodeEnum.CE_201, TallySheetCodeEnum.CE_201_PV, TallySheetCodeEnum.PRE_34_CO]: raise ForbiddenException( message="Submit operation is not supported for this tally sheet type.", code=MESSAGE_CODE_TALLY_SHEET_SUBMIT_IS_NOT_SUPPORTED ) tally_sheet_version = TallySheetVersion.get_by_id(tallySheetVersionId=tallySheetVersionId, tallySheetId=tallySheetId) if tally_sheet_version is None: raise NotFoundException( message="Tally sheet version not found (tallySheetVersionId=%d)" % tallySheetVersionId, code=MESSAGE_CODE_TALLY_SHEET_VERSION_NOT_FOUND ) tally_sheet.set_submitted_version(tally_sheet_version) if tally_sheet.tallySheetCode in [TallySheetCodeEnum.CE_201, TallySheetCodeEnum.CE_201_PV]: election = tally_sheet.submission.election electionId = election.parentElectionId countingCentreId = tally_sheet.areaId results = StatusCE201.get_status_records(electionId, countingCentreId) for item in results: item.status = "Submitted" if tally_sheet.tallySheetCode in [TallySheetCodeEnum.PRE_41]: election = tally_sheet.submission.election electionId = election.parentElectionId countingCentreId = tally_sheet.areaId results = StatusPRE41.get_status_records(electionId, countingCentreId) for item in results: item.status = "Submitted" if tally_sheet.tallySheetCode in [TallySheetCodeEnum.PRE_34_CO]: election = tally_sheet.submission.election electionId = election.parentElectionId countingCentreId = tally_sheet.areaId results = StatusPRE34.get_status_records(electionId, countingCentreId) for item in results: item.status = "Submitted" db.session.commit() return TallySheetSchema().dump(tally_sheet).data, 201
def create_empty(tallySheetId): tallySheet, tallySheetVersion = TallySheet.create_empty_version( tallySheetId=tallySheetId ) db.session.commit() return TallySheetVersionSchema().dump(tallySheetVersion).data
def create_empty_and_get_html(tallySheetId): tallySheet, tallySheetVersion = TallySheet.create_empty_version( tallySheetId=tallySheetId ) db.session.commit() return Response(tallySheetVersion.html(), mimetype='text/html')
def _cache_get_all(user_access_area_ids, electionId=None, areaId=None, tallySheetCode=None, voteType=None, partyId=None, limit=None, offset=None): tally_sheets = TallySheet.get_all(electionId=electionId, areaId=areaId, tallySheetCode=tallySheetCode, voteType=voteType, partyId=partyId, limit=limit, offset=offset) tally_sheet_response_list = [] for tally_sheet_index in range(len(tally_sheets)): tally_sheet = tally_sheets[tally_sheet_index] refactor_tally_sheet(tally_sheet) tally_sheet_response_list_item = dict( TallySheetSchema_1(only=[ "tallySheetId", "tallySheetCode", "templateId", "template", "electionId", "areaId", "metaDataList", "workflowInstanceId" ]).dump(tally_sheet).data) tally_sheet_response_list.append(tally_sheet_response_list_item) return tally_sheet_response_list
def workflow(tallySheetId, body): request_body = RequestBody(body) workflowActionId = request_body.get("workflowActionId") tallySheetVersionId = request_body.get("tallySheetVersionId") tally_sheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tally_sheet is None: raise NotFoundException("Tally sheet not found (tallySheetId=%d)" % tallySheetId, code=MESSAGE_CODE_TALLY_SHEET_NOT_FOUND) extended_tally_sheet: ExtendedTallySheet = tally_sheet.get_extended_tally_sheet( ) extended_tally_sheet.execute_workflow_action( workflowActionId=workflowActionId, tallySheetVersionId=tallySheetVersionId) db.session.commit() tally_sheet_response = TallySheetSchema_1().dump( refactor_tally_sheet(tally_sheet)).data _append_latest_workflow_instance_to_cached_tally_sheets( cached_tally_sheets=[tally_sheet_response]) _append_latest_version_ids_to_cached_tally_sheets( cached_tally_sheets=[tally_sheet_response]) return tally_sheet_response
def upload_workflow_proof_file(body): request_body = RequestBody(body) tallySheetId = request_body.get("tallySheetId") tally_sheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tally_sheet is None: raise NotFoundException("Tally sheet not found (tallySheetId=%d)" % tallySheetId, code=MESSAGE_CODE_TALLY_SHEET_NOT_FOUND) body["proofId"] = tally_sheet.workflowInstance.proofId ProofApi.upload_file(body=body) extended_tally_sheet: ExtendedTallySheet = tally_sheet.get_extended_tally_sheet( ) extended_tally_sheet.execute_tally_sheet_proof_upload() tally_sheet_response = TallySheetSchema_1().dump( refactor_tally_sheet(tally_sheet)).data _append_latest_workflow_instance_to_cached_tally_sheets( cached_tally_sheets=[tally_sheet_response]) _append_latest_version_ids_to_cached_tally_sheets( cached_tally_sheets=[tally_sheet_response]) return tally_sheet_response
def release(tallySheetId): tally_sheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tally_sheet is None: raise NotFoundException("Tally sheet not found (tallySheetId=%d)" % tallySheetId) # TODO refactor tally_sheet.submissionProof.close() tally_sheet.set_released_version() db.session.commit() try: result_push_service.release_results( tally_sheet=tally_sheet, tally_sheet_version_id=tally_sheet.releasedVersionId) except: # rollback release flag print("Result push service failed. Check the url configuration.") tally_sheet.releasedVersionId = None tally_sheet.releasedStampId = None db.session.commit() return "Push Service Failed. Please check configuration and try again.", 500 return TallySheetSchema().dump(tally_sheet).data, 201
def _cache_letter_pdf(user_access_area_ids, tally_sheet_id, tally_sheet_version_id): tally_sheet = TallySheet.get_by_id(tallySheetId=tally_sheet_id) if tally_sheet is None: raise NotFoundException( message="Tally sheet not found (tallySheetId=%d)" % tally_sheet_id, code=MESSAGE_CODE_TALLY_SHEET_NOT_FOUND) tally_sheet_version = TallySheetVersion.get_by_id( tallySheetId=tally_sheet_id, tallySheetVersionId=tally_sheet_version_id) if tally_sheet_version is None: raise NotFoundException( message="Tally sheet version not found (tallySheetVersionId=%d)" % tally_sheet_version_id, code=MESSAGE_CODE_TALLY_SHEET_VERSION_NOT_FOUND) file_response = FileApi.get_download_file( fileId=tally_sheet_version.get_exported_letter_pdf_file_id( tallySheetId=tally_sheet_id, tallySheetVersionId=tally_sheet_version_id)) db.session.commit() return file_response
def getAll(electionId=None, officeId=None, tallySheetCode=None): result = TallySheet.get_all( electionId=electionId, officeId=officeId, tallySheetCode=tallySheetCode ) return TallySheetSchema(many=True).dump(result).data
def get_by_id(tallySheetId): tally_sheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tally_sheet is None: NotFoundException("Tally sheet not found (tallySheetId=%d)" % tallySheetId) return TallySheetSchema().dump(tally_sheet).data
def getAll(electionId=None, areaId=None, tallySheetCode=None): result = TallySheet.get_all(electionId=electionId, areaId=areaId, tallySheetCode=tallySheetCode) result = get_paginated_query(result).all() return TallySheetSchema(many=True).dump(result).data
def get_all(tallySheetId): tallySheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tallySheet is None: raise NotFoundException("Tally sheet not found. (tallySheetId=%d)" % tallySheetId) result = TallySheetVersionPRE21.get_all(tallySheetId=tallySheetId) return TallySheetVersionPRE21Schema(many=True).dump(result).data
def create(tallySheetId): tallySheet, tallySheetVersion = TallySheet.create_latest_version( tallySheetId=tallySheetId, tallySheetCode=TallySheetCodeEnum.PRE_30_PD) 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.lockedVersionId, 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.lockedVersionId).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
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 get_by_id(tallySheetId): tally_sheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tally_sheet is None: NotFoundException(message="Tally sheet not found (tallySheetId=%s)" % tallySheetId, code=MESSAGE_CODE_TALLY_SHEET_NOT_FOUND) return TallySheetSchema().dump(tally_sheet).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) 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
def get_workflow_logs(tallySheetId): tally_sheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tally_sheet is None: raise NotFoundException("Tally sheet not found (tallySheetId=%d)" % tallySheetId, code=MESSAGE_CODE_TALLY_SHEET_NOT_FOUND) workflow_logs = tally_sheet.workflowInstance.logs return WorkflowInstanceLogSchema(many=True).dump(workflow_logs).data
def get_all(tallySheetId): tallySheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tallySheet is None: raise NotFoundException("Tally sheet not found. (tallySheetId=%d)" % tallySheetId) result = TallySheetVersion.get_all(tallySheetId=tallySheetId) result = get_paginated_query(result).all() return TallySheetVersion_CE_201_PV_Schema(many=True).dump(result).data
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
def get_workflow_proof_download_file(tallySheetId, fileId): tally_sheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tally_sheet is None: raise NotFoundException("Tally sheet not found (tallySheetId=%d)" % tallySheetId, code=MESSAGE_CODE_TALLY_SHEET_NOT_FOUND) # TODO validate fileId return FileApi.get_download_file(fileId=fileId)
def get_by_id(tallySheetId, tallySheetVersionId): tallySheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tallySheet is None: raise NotFoundException("Tally sheet not found. (tallySheetId=%d)" % tallySheetId) result = get_tally_sheet_version_class(tallySheet.tallySheetCode).Model.query.filter( Model.tallySheetVersionId == tallySheetVersionId, Model.tallySheetId == tallySheetId ).one_or_none() return result
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
def unlock(tallySheetId): tally_sheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tally_sheet is None: raise NotFoundException("Tally sheet not found (tallySheetId=%d)" % tallySheetId) tally_sheet.set_locked_version(None) db.session.commit() return TallySheetSchema().dump(tally_sheet).data, 201
def get_all(tallySheetId): 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_all(tallySheetId=tallySheetId) result = get_paginated_query(result).all() return TallySheetVersion_CE_201_PV_Schema(many=True).dump(result).data
def get_by_id(tallySheetId, tallySheetVersionId): tallySheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tallySheet is None: raise NotFoundException("Tally sheet not found. (tallySheetId=%d)" % tallySheetId) elif tallySheet.tallySheetCode is not TallySheetCodeEnum.CE_201_PV: raise NotFoundException("Requested version not found. (tallySheetId=%d)" % tallySheetId) result = Model.query.filter( Model.tallySheetVersionId == tallySheetVersionId ).one_or_none() return result
def get_by_id(tallySheetId): tally_sheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tally_sheet is None: NotFoundException(message="Tally sheet not found (tallySheetId=%s)" % tallySheetId, code=MESSAGE_CODE_TALLY_SHEET_NOT_FOUND) extended_tally_sheet: ExtendedTallySheet = tally_sheet.get_extended_tally_sheet( ) extended_tally_sheet.execute_tally_sheet_get() return TallySheetSchema_1().dump(tally_sheet).data
def __init__(self, tallySheetId): tallySheet = TallySheet.get_by_id(tallySheetId=tallySheetId) if tallySheet is None: raise NotFoundException( "Tally sheet not found. (tallySheetId=%d)" % tallySheetId) submissionVersion = SubmissionVersion.create(submissionId=tallySheetId) super(TallySheetVersionModel, self).__init__( tallySheetVersionId=submissionVersion.submissionVersionId) db.session.add(self) db.session.commit()
def get_by_id(cls, 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) tallySheetVersion = Model.query.filter( Model.tallySheetVersionId == tallySheetVersionId, Model.tallySheetId == tallySheetId).one_or_none() return tallySheetVersion