Пример #1
0
def create_empty(tallySheetId):
    tallySheet, tallySheetVersion = TallySheet.create_empty_version(
        tallySheetId=tallySheetId
    )
    db.session.commit()

    return TallySheetVersionSchema().dump(tallySheetVersion).data
Пример #2
0
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')
Пример #3
0
def _cache_letter_pdf(user_access_area_ids, tally_sheet_id, tally_sheet_version_id, signatures):
    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,
        signatures=signatures
    ))

    db.session.commit()

    return file_response
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 = TallySheetVersionPRE41.get_all(
        tallySheetId=tallySheetId
    )

    return TallySheetVersionPRE41Schema(many=True).dump(result).data
Пример #5
0
    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
Пример #6
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
def create(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)

    result = Model(
        tallySheetVersionId=submissionVersion.submissionVersionId
    )
    db.session.add(result)
    db.session.commit()

    return result
Пример #8
0
def _cache_html(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
        )

    return Response(tally_sheet.html(tallySheetVersionId=tally_sheet_version_id), mimetype='text/html')
Пример #9
0
def create(tallySheetId, body):
    request_body = RequestBody(body)
    tally_sheet = TallySheet.get_by_id(tallySheetId=tallySheetId)

    # validate user inputs to prevent XSS attacks
    validate_tally_sheet_version_request_content_special_characters(request_body.get("content"))

    if tally_sheet is None:
        raise NotFoundException(
            message="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_tally_sheet_post(content=request_body.get("content"))

    db.session.commit()

    return TallySheetApi.get_by_id(tallySheetId=tallySheetId)
Пример #10
0
    def get_exported_pdf_file_id(cls, tallySheetId, tallySheetVersionId):
        tallySheet = TallySheet.get_by_id(tallySheetId=tallySheetId)
        tallySheetVersion = cls.get_by_id(tallySheetId, tallySheetVersionId)

        # Disable persistence check.
        # if tallySheetVersion.exportedPdfFileId is None:
        tally_sheet_version_pdf_content = html_to_pdf(
            html=str(tallySheet.html(tallySheetVersionId=tallySheetVersionId)))
        tally_sheet_version_pdf_file = File.create(
            fileMimeType="application/pdf",
            fileContentLength=len(tally_sheet_version_pdf_content),
            fileContentType="application/pdf",
            fileContent=tally_sheet_version_pdf_content,
            fileName="%d-%d" % (tallySheetId, tallySheetVersionId))

        tallySheetVersion.exportedPdfFileId = tally_sheet_version_pdf_file.fileId

        db.session.add(tallySheetVersion)
        db.session.flush()

        return tallySheetVersion.exportedPdfFileId
Пример #11
0
    def get_exported_letter_pdf_file_id(cls, tallySheetId, tallySheetVersionId,
                                        signatures):
        tallySheet = TallySheet.get_by_id(tallySheetId=tallySheetId)
        tallySheetVersion = cls.get_by_id(tallySheetId, tallySheetVersionId)

        # Disable persistence check since the addition of signatures creates different letters.
        # if tallySheetVersion.exportedLetterPdfFileId is None:
        tally_sheet_version_letter_pdf_content = html_to_pdf(html=str(
            tallySheet.html_letter(tallySheetVersionId=tallySheetVersionId,
                                   signatures=signatures)))
        tally_sheet_version_letter_pdf_file = File.create(
            fileMimeType="application/pdf",
            fileContentLength=len(tally_sheet_version_letter_pdf_content),
            fileContentType="application/pdf",
            fileContent=tally_sheet_version_letter_pdf_content,
            fileName="%d-%d" % (tallySheetId, tallySheetVersionId))

        tallySheetVersion.exportedLetterPdfFileId = tally_sheet_version_letter_pdf_file.fileId

        db.session.add(tallySheetVersion)
        db.session.flush()

        return tallySheetVersion.exportedLetterPdfFileId
Пример #12
0
    def create(cls, tallySheetId):
        tally_sheet = 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)

        # Validate the authorization
        if not has_role_based_access(
                election=tally_sheet.election,
                tally_sheet_code=tally_sheet.tallySheetCode,
                access_type=WORKFLOW_ACTION_TYPE_SAVE):
            raise UnauthorizedException(
                message="Not authorized to edit tally sheet. (tallySheetId=%d)"
                % tallySheetId,
                code=MESSAGE_CODE_TALLY_SHEET_NOT_AUTHORIZED_TO_EDIT)

        historyVersion = HistoryVersion.create(tallySheetId)

        return TallySheetVersionModel(
            tallySheetId=tallySheetId,
            tallySheetVersionId=historyVersion.historyVersionId)
Пример #13
0
    def content(self):
        try:
            meta_data_key_to_column_map = {
                # "areaId": Area.Model.areaId,
                "partyId": Party.Model.partyId
            }

            tally_sheet = TallySheet.get_by_id(tallySheetId=self.tallySheetId)
            query_filter = []
            for meta_data in tally_sheet.meta.metaDataList:
                if meta_data.metaDataKey in meta_data_key_to_column_map:
                    query_filter.append(meta_data_key_to_column_map[
                        meta_data.metaDataKey] == meta_data.metaDataValue)

            query_args = [
                TallySheetVersionRow.Model.tallySheetVersionRowId,
                TallySheetVersionRow.Model.electionId,
                TemplateRowModel.templateRowId,
                TemplateRowModel.templateRowType, Election.Model.electionId,
                Election.Model.voteType, Election.Model.rootElectionId,
                Area.Model.areaId, Area.Model.areaName,
                TallySheetVersionRow.Model.ballotBoxId,
                Candidate.Model.candidateId, Candidate.Model.candidateName,
                Candidate.Model.candidateNumber, Candidate.Model.candidateType,
                ElectionParty.Model.electionPartyId, Party.Model.partyId,
                Party.Model.partyName, Party.Model.partySymbol,
                Party.Model.partyAbbreviation,
                InvalidVoteCategory.Model.invalidVoteCategoryId,
                InvalidVoteCategory.Model.categoryDescription.label(
                    "invalidVoteCategoryDescription"),
                TallySheetVersionRow.Model.strValue,
                TallySheetVersionRow.Model.numValue
            ]
            return db.session.query(*query_args).join(
                TemplateRowModel, TemplateRowModel.templateRowId ==
                TallySheetVersionRow.Model.templateRowId).join(
                    Election.Model,
                    Election.Model.electionId ==
                    TallySheetVersionRow.Model.electionId,
                    isouter=True).join(
                        Area.Model,
                        Area.Model.areaId == TallySheetVersionRow.Model.areaId,
                        isouter=True).join(
                            Candidate.Model,
                            Candidate.Model.candidateId ==
                            TallySheetVersionRow.Model.candidateId,
                            isouter=True).join(
                                Party.Model,
                                Party.Model.partyId ==
                                TallySheetVersionRow.Model.partyId,
                                isouter=True).join(
                                    ElectionParty.Model,
                                    and_(
                                        ElectionParty.Model.electionId ==
                                        self.tallySheet.election.electionId,
                                        ElectionParty.Model.partyId ==
                                        Party.Model.partyId),
                                    isouter=True).join(
                                        InvalidVoteCategory.Model,
                                        InvalidVoteCategory.Model.
                                        invalidVoteCategoryId ==
                                        TallySheetVersionRow.Model.
                                        invalidVoteCategoryId,
                                        isouter=True).filter(
                                            TallySheetVersionRow.Model.
                                            tallySheetVersionId ==
                                            self.tallySheetVersionId,
                                            *query_filter).order_by(
                                                InvalidVoteCategory.Model.
                                                invalidVoteCategoryId,
                                                Party.Model.partyId,
                                                Candidate.Model.candidateId,
                                                Area.Model.areaId).all()
        except Exception as e:
            print("\n\n\n\n\n\n\n### ERROR ### ", e)
def getAll(electionId=None, officeId=None):
    result = TallySheet.get_all(electionId=electionId, officeId=officeId)

    return Schema(many=True).dump(result).data