def startReconciliation():
    badge = getParameter('Badge')
    if toInt(badge) is None:
        return respondHtml(
            'message', flask.g.userGroup, flask.g.language, {
                'message': Result.INVALID_BADGE,
                'badge': badge,
                'okTarget': flask.url_for('.selectBadgeToReconciliate')
            })
    else:
        summary = flask.g.model.getBadgeReconciliationSummary(badge)
        if summary is None:
            return respondHtml(
                'message', flask.g.userGroup, flask.g.language, {
                    'message': Result.ERROR,
                    'okTarget': flask.url_for('.selectBadgeToReconciliate')
                })
        elif len(summary[SummaryField.AVAILABLE_UNSOLD_ITEMS]) == 0 and len(
                summary[SummaryField.AVAILABLE_BOUGHT_ITEMS]) == 0 and len(
                    summary[SummaryField.DELIVERED_SOLD_ITEMS]) == 0 and len(
                        summary[SummaryField.PENDING_SOLD_ITEMS]) == 0:
            return respondHtml(
                'message', flask.g.userGroup, flask.g.language, {
                    'message': Result.BADGE_ALREADY_RECONCILIATED,
                    'badge': badge,
                    'okTarget': flask.url_for('.selectBadgeToReconciliate')
                })
        else:
            return respondReconciliation(badge, summary,
                                         Summary.calculateChecksum(summary))
def printReconciliation():
    badge = toInt(getParameter('Badge'))
    summaryChecksum = toInt(getParameter('SummaryChecksum'))
    language = getParameter('Language') or flask.g.language
    summary = flask.g.model.getBadgeReconciliationSummary(badge)
    if summary is None:
        logging.error(
            'printReconciliation: No summary data available for badge {0}.'.
            format(badge))
        return respondHtml(
            'message', flask.g.userGroup, flask.g.language, {
                'message': Result.ERROR,
                'okTarget': flask.url_for('.selectBadgeToReconciliate')
            })
    elif summaryChecksum != Summary.calculateChecksum(summary):
        logging.error(
            'printReconciliation: Reconciliation data changed for badge {0}.'.
            format(badge))
        return respondHtml(
            'message', flask.g.userGroup, flask.g.language, {
                'message': Result.RECONCILIATION_DATA_CHANGED,
                'badge': badge,
                'okTarget': flask.url_for('.selectBadgeToReconciliate')
            })
    else:
        return respondHtml(
            'receipt', flask.g.userGroup, language, {
                'badge': badge,
                'summary': summary,
                'summaryChecksum': summaryChecksum,
                'datetime': datetime.datetime.now(),
                'printedTarget': flask.url_for('.finalizeReconciliation'),
                'notprintedTarget': flask.url_for('.continueReconciliation'),
                'cancelledTarget': flask.url_for('.selectBadgeToReconciliate')
            })
Example #3
0
def continueReconciliation():
    badge = toInt(getParameter("Badge"))
    summaryChecksum = toInt(getParameter("SummaryChecksum"))
    summary = flask.g.model.getBadgeReconciliationSummary(badge)
    if summary is None:
        return respondHtml(
            "message",
            flask.g.userGroup,
            flask.g.language,
            {"message": Result.ERROR, "okTarget": flask.url_for(".selectBadgeToReconciliate")},
        )
    elif summaryChecksum != Summary.calculateChecksum(summary):
        logging.error("continueReconciliation: Reconciliation data changed.")
        return respondHtml(
            "message",
            flask.g.userGroup,
            flask.g.language,
            {
                "message": Result.RECONCILIATION_DATA_CHANGED,
                "badge": badge,
                "okTarget": flask.url_for(".selectBadgeToReconciliate"),
            },
        )
    else:
        return respondReconciliation(badge, summary, summaryChecksum)
def printRunnerOverview():
    badge = toInt(getParameter('Badge'))
    summaryChecksum = toInt(getParameter('SummaryChecksum'))
    summary = flask.g.model.getBadgeReconciliationSummary(badge)
    if summary is None:
        return respondHtml(
            'message', flask.g.userGroup, flask.g.language, {
                'message': Result.ERROR,
                'okTarget': flask.url_for('.selectBadgeToReconciliate')
            })
    elif summaryChecksum != Summary.calculateChecksum(summary):
        logging.error('printRunnerOverview: Reconciliation data changed.')
        return respondHtml(
            'message', flask.g.userGroup, flask.g.language, {
                'message': Result.RECONCILIATION_DATA_CHANGED,
                'badge': badge,
                'okTarget': flask.url_for('.selectBadgeToReconciliate')
            })
    else:
        runnerItems = summary[SummaryField.AVAILABLE_UNSOLD_ITEMS] + summary[
            SummaryField.AVAILABLE_BOUGHT_ITEMS]
        runnerItems.sort(key=lambda item: item[ItemField.SORT_CODE])

        return respondHtml(
            'runneroverview', flask.g.userGroup, flask.g.language, {
                'badge': badge,
                'items': runnerItems,
                'summaryChecksum': summaryChecksum,
                'printedTarget': flask.url_for('.continueReconciliation'),
                'cancelledTarget': flask.url_for('.continueReconciliation')
            })
    def get_summary(self):
        # Get summary stats about the data and serialize it as JSON
        num_records = self.get_num_records()
        num_features = self.get_num_features()
        index_column = self.id_column
        label_column = self.label_column

        # Count the number of columns missing for each row
        num_rows_missing = self.count_missing(num_records)

        # List of features
        features_list = self.get_features_list()

        # Sample data (five rows or less)
        sample_list = self.get_sample(num_records, features_list)

        summary = Summary(name=self.title,
                          num_records=num_records,
                          num_features=num_features,
                          index_column=index_column,
                          label_column=label_column,
                          rows_missing=num_rows_missing,
                          features_list=features_list,
                          sample_list=sample_list)
        return summary
Example #6
0
def finalizeReconciliation():
    badge = toInt(getParameter("Badge"))
    summaryChecksum = toInt(getParameter("SummaryChecksum"))
    summary = flask.g.model.getBadgeReconciliationSummary(badge)
    if summary is None:
        logging.error("finalizeReconciliation: No summary data available for badge {0}.".format(badge))
        return respondHtml(
            "message",
            flask.g.userGroup,
            flask.g.language,
            {"message": Result.ERROR, "okTarget": flask.url_for(".selectBadgeToReconciliate")},
        )
    elif summaryChecksum != Summary.calculateChecksum(summary):
        logging.error("finalizeReconciliation: Reconciliation data changed for badge {0}.".format(badge))
        return respondHtml(
            "message",
            flask.g.userGroup,
            flask.g.language,
            {
                "message": Result.RECONCILIATION_DATA_CHANGED,
                "badge": badge,
                "okTarget": flask.url_for(".selectBadgeToReconciliate"),
            },
        )
    elif not flask.g.model.reconciliateBadge(badge):
        logging.error("reconciliate: Reconciliation failed for badge {0}.")
        return respondHtml(
            "message",
            flask.g.userGroup,
            flask.g.language,
            {
                "message": Result.BADGE_RECONCILIATION_FAILED,
                "badge": badge,
                "okTarget": flask.url_for(".selectBadgeToReconciliate"),
            },
        )
    else:
        logging.info("reconciliate: Reconciliation succeeded for badge {0}.")
        return respondHtml(
            "message",
            flask.g.userGroup,
            flask.g.language,
            {
                "message": Result.BADGE_RECONCILIATION_SUCCEEDED,
                "badge": badge,
                "okTarget": flask.url_for(".selectBadgeToReconciliate"),
            },
        )
def continueReconciliation():
    badge = toInt(getParameter('Badge'))
    summaryChecksum = toInt(getParameter('SummaryChecksum'))
    summary = flask.g.model.getBadgeReconciliationSummary(badge)
    if summary is None:
        return respondHtml(
            'message', flask.g.userGroup, flask.g.language, {
                'message': Result.ERROR,
                'okTarget': flask.url_for('.selectBadgeToReconciliate')
            })
    elif summaryChecksum != Summary.calculateChecksum(summary):
        logging.error('continueReconciliation: Reconciliation data changed.')
        return respondHtml(
            'message', flask.g.userGroup, flask.g.language, {
                'message': Result.RECONCILIATION_DATA_CHANGED,
                'badge': badge,
                'okTarget': flask.url_for('.selectBadgeToReconciliate')
            })
    else:
        return respondReconciliation(badge, summary, summaryChecksum)
Example #8
0
def printReconciliation():
    badge = toInt(getParameter("Badge"))
    summaryChecksum = toInt(getParameter("SummaryChecksum"))
    language = getParameter("Language") or flask.g.language
    summary = flask.g.model.getBadgeReconciliationSummary(badge)
    if summary is None:
        logging.error("printReconciliation: No summary data available for badge {0}.".format(badge))
        return respondHtml(
            "message",
            flask.g.userGroup,
            flask.g.language,
            {"message": Result.ERROR, "okTarget": flask.url_for(".selectBadgeToReconciliate")},
        )
    elif summaryChecksum != Summary.calculateChecksum(summary):
        logging.error("printReconciliation: Reconciliation data changed for badge {0}.".format(badge))
        return respondHtml(
            "message",
            flask.g.userGroup,
            flask.g.language,
            {
                "message": Result.RECONCILIATION_DATA_CHANGED,
                "badge": badge,
                "okTarget": flask.url_for(".selectBadgeToReconciliate"),
            },
        )
    else:
        return respondHtml(
            "receipt",
            flask.g.userGroup,
            language,
            {
                "badge": badge,
                "summary": summary,
                "summaryChecksum": summaryChecksum,
                "datetime": datetime.datetime.now(),
                "printedTarget": flask.url_for(".finalizeReconciliation"),
                "notprintedTarget": flask.url_for(".continueReconciliation"),
                "cancelledTarget": flask.url_for(".selectBadgeToReconciliate"),
            },
        )
def finalizeReconciliation():
    badge = toInt(getParameter('Badge'))
    summaryChecksum = toInt(getParameter('SummaryChecksum'))
    summary = flask.g.model.getBadgeReconciliationSummary(badge)
    if summary is None:
        logging.error(
            'finalizeReconciliation: No summary data available for badge {0}.'.
            format(badge))
        return respondHtml(
            'message', flask.g.userGroup, flask.g.language, {
                'message': Result.ERROR,
                'okTarget': flask.url_for('.selectBadgeToReconciliate')
            })
    elif summaryChecksum != Summary.calculateChecksum(summary):
        logging.error(
            'finalizeReconciliation: Reconciliation data changed for badge {0}.'
            .format(badge))
        return respondHtml(
            'message', flask.g.userGroup, flask.g.language, {
                'message': Result.RECONCILIATION_DATA_CHANGED,
                'badge': badge,
                'okTarget': flask.url_for('.selectBadgeToReconciliate')
            })
    elif not flask.g.model.reconciliateBadge(badge):
        logging.error('reconciliate: Reconciliation failed for badge {0}.')
        return respondHtml(
            'message', flask.g.userGroup, flask.g.language, {
                'message': Result.BADGE_RECONCILIATION_FAILED,
                'badge': badge,
                'okTarget': flask.url_for('.selectBadgeToReconciliate')
            })
    else:
        logging.info('reconciliate: Reconciliation succeeded for badge {0}.')
        return respondHtml(
            'message', flask.g.userGroup, flask.g.language, {
                'message': Result.BADGE_RECONCILIATION_SUCCEEDED,
                'badge': badge,
                'okTarget': flask.url_for('.selectBadgeToReconciliate')
            })
Example #10
0
def printRunnerOverview():
    badge = toInt(getParameter("Badge"))
    summaryChecksum = toInt(getParameter("SummaryChecksum"))
    summary = flask.g.model.getBadgeReconciliationSummary(badge)
    if summary is None:
        return respondHtml(
            "message",
            flask.g.userGroup,
            flask.g.language,
            {"message": Result.ERROR, "okTarget": flask.url_for(".selectBadgeToReconciliate")},
        )
    elif summaryChecksum != Summary.calculateChecksum(summary):
        logging.error("printRunnerOverview: Reconciliation data changed.")
        return respondHtml(
            "message",
            flask.g.userGroup,
            flask.g.language,
            {
                "message": Result.RECONCILIATION_DATA_CHANGED,
                "badge": badge,
                "okTarget": flask.url_for(".selectBadgeToReconciliate"),
            },
        )
    else:
        runnerItems = summary[SummaryField.AVAILABLE_UNSOLD_ITEMS] + summary[SummaryField.AVAILABLE_BOUGHT_ITEMS]
        runnerItems.sort(key=lambda item: item[ItemField.SORT_CODE])

        return respondHtml(
            "runneroverview",
            flask.g.userGroup,
            flask.g.language,
            {
                "badge": badge,
                "items": runnerItems,
                "summaryChecksum": summaryChecksum,
                "printedTarget": flask.url_for(".continueReconciliation"),
                "cancelledTarget": flask.url_for(".continueReconciliation"),
            },
        )
Example #11
0
def startReconciliation():
    badge = getParameter("Badge")
    if toInt(badge) is None:
        return respondHtml(
            "message",
            flask.g.userGroup,
            flask.g.language,
            {"message": Result.INVALID_BADGE, "badge": badge, "okTarget": flask.url_for(".selectBadgeToReconciliate")},
        )
    else:
        summary = flask.g.model.getBadgeReconciliationSummary(badge)
        if summary is None:
            return respondHtml(
                "message",
                flask.g.userGroup,
                flask.g.language,
                {"message": Result.ERROR, "okTarget": flask.url_for(".selectBadgeToReconciliate")},
            )
        elif (
            len(summary[SummaryField.AVAILABLE_UNSOLD_ITEMS]) == 0
            and len(summary[SummaryField.AVAILABLE_BOUGHT_ITEMS]) == 0
            and len(summary[SummaryField.DELIVERED_SOLD_ITEMS]) == 0
            and len(summary[SummaryField.PENDING_SOLD_ITEMS]) == 0
        ):
            return respondHtml(
                "message",
                flask.g.userGroup,
                flask.g.language,
                {
                    "message": Result.BADGE_ALREADY_RECONCILIATED,
                    "badge": badge,
                    "okTarget": flask.url_for(".selectBadgeToReconciliate"),
                },
            )
        else:
            return respondReconciliation(badge, summary, Summary.calculateChecksum(summary))
Example #12
0
 def test_summaryChecksum(self):
     summaryA = self.model.getBadgeReconciliationSummary(1)
     summaryB = self.model.getBadgeReconciliationSummary(11)
     self.assertNotEqual(Summary.calculateChecksum(summaryA), Summary.calculateChecksum(summaryB))