From 97517c358632d58c3495d410052878647ccc247e Mon Sep 17 00:00:00 2001 From: Fanda Vacek Date: Tue, 22 Aug 2023 22:10:03 +0200 Subject: [PATCH] [#941 fixed] Printing results not working --- .../src/reportoptionsdialog.cpp | 63 ++-- .../src/reportoptionsdialog.h | 8 +- .../src/reportoptionsdialog.ui | 271 ++++++++---------- .../plugins/Runs/src/runsplugin.cpp | 5 +- 4 files changed, 155 insertions(+), 192 deletions(-) diff --git a/libquickevent/libquickeventgui/src/reportoptionsdialog.cpp b/libquickevent/libquickeventgui/src/reportoptionsdialog.cpp index f48eaeff4..c1d27101e 100644 --- a/libquickevent/libquickeventgui/src/reportoptionsdialog.cpp +++ b/libquickevent/libquickeventgui/src/reportoptionsdialog.cpp @@ -39,25 +39,21 @@ ReportOptionsDialog::ReportOptionsDialog(QWidget *parent) ui->grpResultOptions->setVisible(false); ui->grpStartTimes->setVisible(false); ui->grpStartlistOrderBy->setVisible(false); - ui->grpClassStartSelection->setVisible(false); ui->btRegExp->setEnabled(QSqlDatabase::database().driverName().endsWith(QLatin1String("PSQL"), Qt::CaseInsensitive)); - // fill start numbers from courses - QString query_str = "SELECT codes.code FROM codes" - " ORDER BY id"; - qf::core::sql::Query q; - q.exec(query_str, qf::core::Exception::Throw); - while (q.next()) { - auto code = q.value(0).toInt(); - if(auto n = core::CodeDef::codeToStartNumber(code); n.has_value()) { - ui->cbxStartNumber->addItem(QString("Start %1").arg(n.value()),n.value()); + { + // fill start numbers from courses + ui->cbxStartNumber->addItem(QString("All"), 0); + QString query_str = "SELECT codes.code FROM codes ORDER BY id"; + qf::core::sql::Query q; + q.exec(query_str, qf::core::Exception::Throw); + while (q.next()) { + auto code = q.value(0).toInt(); + if(auto n = core::CodeDef::codeToStartNumber(code); n.has_value()) { + ui->cbxStartNumber->addItem(QString("Start %1").arg(n.value()),n.value()); + } } } - if (ui->cbxStartNumber->count() < 1) { - ui->grpClassStartSelection->setEnabled(false); - ui->grpClassStartSelection->setChecked(false); - ui->cbxStartNumber->clear(); - } connect(ui->btSaveAsDefault, &QPushButton::clicked, [this]() { savePersistentSettings(); }); @@ -77,11 +73,6 @@ ReportOptionsDialog::ReportOptionsDialog(QWidget *parent) connect(this, &ReportOptionsDialog::resultOptionsVisibleChanged, ui->grpResultOptions, &QGroupBox::setVisible); connect(this, &ReportOptionsDialog::startTimeFormatVisibleChanged, ui->grpStartTimes, &QGroupBox::setVisible); connect(this, &ReportOptionsDialog::startlistOrderFirstByVisibleChanged, ui->grpStartlistOrderBy, &QGroupBox::setVisible); - connect(this, &ReportOptionsDialog::classStartSelectionVisibleChanged, ui->grpClassStartSelection, &QGroupBox::setVisible); - - //connect(ui->edStagesCount, &QSpinBox::valueChanged, [this](int n) { - // qfInfo() << "stage cnt value changed:" << n; - //}); } ReportOptionsDialog::~ReportOptionsDialog() @@ -108,7 +99,6 @@ void ReportOptionsDialog::setClassNamesFilter(const QStringList &class_names) ui->btClassNames->setChecked(true); ui->chkClassFilterDoesntMatch->setChecked(false); ui->edFilter->setText(class_names.join(',')); - ui->grpClassStartSelection->setChecked(false); } int ReportOptionsDialog::stagesCount() const @@ -174,6 +164,12 @@ QString ReportOptionsDialog::getClassesForStartNumber(const int number, const in QString ReportOptionsDialog::sqlWhereExpression(const ReportOptionsDialog::Options &opts,const int stage_id) { + QStringList conditions; + if (opts.startNumber() > 0) { + qf::core::String s = getClassesForStartNumber(opts.startNumber(),stage_id); + QStringList sl = s.splitAndTrim(','); + conditions << QString("classes.name IN('%2')").arg(sl.join("','")); + } if(opts.isUseClassFilter()) { QString filter_str = opts.classFilter(); if(!filter_str.isEmpty()) { @@ -181,34 +177,24 @@ QString ReportOptionsDialog::sqlWhereExpression(const ReportOptionsDialog::Optio if(filter_type == FilterType::RegExp) { QString filter_operator = opts.isInvertClassFilter()? "!~*": "~*"; QString ret = "classes.name %1 '%2'"; - ret = ret.arg(filter_operator).arg(filter_str); - return ret; + conditions << ret.arg(filter_operator).arg(filter_str); } else if(filter_type == FilterType::WildCard) { filter_str.replace('*', '%').replace('?', '_'); QString filter_operator = opts.isInvertClassFilter()? "NOT LIKE": "LIKE"; QString ret = "classes.name %1 '%2'"; - ret = ret.arg(filter_operator).arg(filter_str); - return ret; + conditions << ret.arg(filter_operator).arg(filter_str); } else if(filter_type == FilterType::ClassName) { qf::core::String s = filter_str; QStringList sl = s.splitAndTrim(','); QString filter_operator = opts.isInvertClassFilter()? "NOT IN": "IN"; QString ret = "classes.name %1('%2')"; - ret = ret.arg(filter_operator).arg(sl.join("','")); - return ret; + conditions << ret.arg(filter_operator).arg(sl.join("','")); } } - - } - else if (opts.isUseClassStartSelectionFilter()) { - qf::core::String s = getClassesForStartNumber(opts.classStartNumber(),stage_id); - QStringList sl = s.splitAndTrim(','); - QString ret = QString("classes.name IN('%2')").arg(sl.join("','")); - return ret; } - return QString(); + return conditions.isEmpty()? "": "(" + conditions.join(") AND (") + ")"; } /* void ReportOptionsDialog::showEvent(QShowEvent *event) @@ -253,9 +239,7 @@ void ReportOptionsDialog::setOptions(const ReportOptionsDialog::Options &options ui->btWildCard->setChecked(filter_type == FilterType::WildCard); ui->btRegExp->setChecked(filter_type == FilterType::RegExp); ui->btClassNames->setChecked(filter_type == FilterType::ClassName); - if (ui->grpClassStartSelection->isEnabled() && ui->grpClassStartSelection->isVisible()) - ui->grpClassStartSelection->setChecked(options.isUseClassStartSelectionFilter()); - auto index = ui->cbxStartNumber->findData(options.classStartNumber()); + auto index = ui->cbxStartNumber->findData(options.startNumber()); ui->cbxStartNumber->setCurrentIndex(index); ui->chkStartOpts_PrintVacants->setChecked(options.isStartListPrintVacants()); ui->chkStartOpts_PrintStartNumbers->setChecked(options.isStartListPrintStartNumbers()); @@ -289,8 +273,7 @@ ReportOptionsDialog::Options ReportOptionsDialog::options() const opts.setUseClassFilter(ui->grpClassFilter->isChecked()); opts.setInvertClassFilter(ui->chkClassFilterDoesntMatch->isChecked()); opts.setClassFilter(ui->edFilter->text()); - opts.setClassStartNumber(ui->cbxStartNumber->currentData().toInt()); - opts.setUseClassStartSelectionFilter(ui->grpClassStartSelection->isChecked()); + opts.setStartNumber(ui->cbxStartNumber->currentData().toInt()); FilterType filter_type = ui->btWildCard->isChecked()? FilterType::WildCard: ui->btRegExp->isChecked()? FilterType::RegExp: FilterType::ClassName; opts.setClassFilterType((int)filter_type); opts.setStartListPrintVacants(isStartListPrintVacants()); diff --git a/libquickevent/libquickeventgui/src/reportoptionsdialog.h b/libquickevent/libquickeventgui/src/reportoptionsdialog.h index 10fc1346a..f0d42713c 100644 --- a/libquickevent/libquickeventgui/src/reportoptionsdialog.h +++ b/libquickevent/libquickeventgui/src/reportoptionsdialog.h @@ -32,7 +32,7 @@ class QUICKEVENTGUI_DECL_EXPORT ReportOptionsDialog : public QDialog, public qf: Q_PROPERTY(bool resultOptionsVisible READ isResultOptionsVisible WRITE setResultOptionsVisible NOTIFY resultOptionsVisibleChanged) Q_PROPERTY(bool startTimeFormatVisible READ isStartTimeFormatVisible WRITE setStartTimeFormatVisible NOTIFY startTimeFormatVisibleChanged) Q_PROPERTY(bool startlistOrderFirstByVisible READ isStartlistOrderFirstByVisible WRITE setStartlistOrderFirstByVisible NOTIFY startlistOrderFirstByVisibleChanged) - Q_PROPERTY(bool classStartSelectionVisible READ isClassStartSelectionVisible WRITE setClassStartSelectionVisible NOTIFY classStartSelectionVisibleChanged) + //Q_PROPERTY(bool classStartSelectionVisible READ isClassStartSelectionVisible WRITE setClassStartSelectionVisible NOTIFY classStartSelectionVisibleChanged) QF_PROPERTY_BOOL_IMPL2(c, C, lassFilterVisible, true) QF_PROPERTY_BOOL_IMPL2(s, S, tartListOptionsVisible, false) @@ -45,7 +45,6 @@ class QUICKEVENTGUI_DECL_EXPORT ReportOptionsDialog : public QDialog, public qf: QF_PROPERTY_BOOL_IMPL2(r, R, esultOptionsVisible, false) QF_PROPERTY_BOOL_IMPL2(s, S, tartTimeFormatVisible, false) QF_PROPERTY_BOOL_IMPL2(s, S, tartlistOrderFirstByVisible, false) - QF_PROPERTY_BOOL_IMPL2(c, C, lassStartSelectionVisible, false) private: using Super = QDialog; public: @@ -76,8 +75,7 @@ class QUICKEVENTGUI_DECL_EXPORT ReportOptionsDialog : public QDialog, public qf: QF_VARIANTMAP_FIELD2(bool, isR, setR, esultExcludeDisq, false) QF_VARIANTMAP_FIELD2(int, s, setS, tartTimeFormat, 0) QF_VARIANTMAP_FIELD2(int, s, setS, tartlistOrderFirstBy, 0) - QF_VARIANTMAP_FIELD(bool, is, set, UseClassStartSelectionFilter) - QF_VARIANTMAP_FIELD2(int, c, setC, lassStartNumber, 0) + QF_VARIANTMAP_FIELD2(int, s, setS, tartNumber, 0) public: Options(const QVariantMap &o = QVariantMap()) : QVariantMap(o) {} }; @@ -103,7 +101,7 @@ class QUICKEVENTGUI_DECL_EXPORT ReportOptionsDialog : public QDialog, public qf: void loadPersistentSettings(const Options &default_options); Q_SLOT void loadPersistentSettings(); Q_SLOT void savePersistentSettings(); - Q_SLOT void resetPersistentSettings(); + Q_SLOT void resetPersistentSettings(); void setClassNamesFilter(const QStringList &class_names); diff --git a/libquickevent/libquickeventgui/src/reportoptionsdialog.ui b/libquickevent/libquickeventgui/src/reportoptionsdialog.ui index fa777ccf2..48ef5b7c8 100644 --- a/libquickevent/libquickeventgui/src/reportoptionsdialog.ui +++ b/libquickevent/libquickeventgui/src/reportoptionsdialog.ui @@ -7,16 +7,13 @@ 0 0 747 - 969 + 1126 Print Report Options - - - 9 - + 5 @@ -29,45 +26,45 @@ 5 - - + + - Stages count + Legs count - + - + - Number of stages + Number of legs - + - - + + - Legs count + Stages count - + - + - Number of legs + Number of stages - + - + Class filter @@ -76,7 +73,7 @@ true - true + false @@ -137,68 +134,7 @@ - - - - Class filter - start number selection - - - true - - - - - - Use only class from selected start - - - - - - - - - - - - - Result options - - - - - - Number of places in each class - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 1 - - - 9999 - - - 9999 - - - - - - - Exclude DISQ - - - - - - - + Starters options @@ -239,12 +175,12 @@ - + Start options - + 5 @@ -257,89 +193,73 @@ 5 - + Print vacants - + Print start numbers - - - - - - - Start time format - - - - + + - start at 0 (mmm.ss) - - - true + Use only class from selected start - - - - daytime (hh:mm:ss) - - + + - - + + - Start list is sorted first by + Result options - + - - - <html><head/><body><p>(class name, start time, runner name)</p></body></html> - + - Class names + Number of places in each class - - - <html><head/><body><p>(start time, class name, runner name)</p></body></html> + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - Start times + + 1 + + + 9999 + + + 9999 - - - <html><head/><body><p>(runner name, class name, start time)</p></body></html> - + - Runner names + Exclude DISQ - + Page layout @@ -507,20 +427,7 @@ - - - - Qt::Vertical - - - - 20 - 40 - - - - - + @@ -548,6 +455,84 @@ + + + + Start list is sorted first by + + + + + + <html><head/><body><p>(class name, start time, runner name)</p></body></html> + + + Class names + + + + + + + <html><head/><body><p>(start time, class name, runner name)</p></body></html> + + + Start times + + + + + + + <html><head/><body><p>(runner name, class name, start time)</p></body></html> + + + Runner names + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Start time format + + + + + + start at 0 (mmm.ss) + + + true + + + + + + + daytime (hh:mm:ss) + + + + + + @@ -559,8 +544,6 @@ btClassNames edFilter chkClassFilterDoesntMatch - grpClassStartSelection - cbxStartNumber edNumPlaces chkExcludeDisq edStartersOptionsLineSpacing diff --git a/quickevent/app/quickevent/plugins/Runs/src/runsplugin.cpp b/quickevent/app/quickevent/plugins/Runs/src/runsplugin.cpp index f568f96b4..fbbb3816b 100644 --- a/quickevent/app/quickevent/plugins/Runs/src/runsplugin.cpp +++ b/quickevent/app/quickevent/plugins/Runs/src/runsplugin.cpp @@ -1448,7 +1448,6 @@ void RunsPlugin::report_startListClasses() dlg.setStartListOptionsVisible(true); dlg.setPageLayoutVisible(true); dlg.setStartTimeFormatVisible(true); - dlg.setClassStartSelectionVisible(true); if(dlg.exec()) { auto tt = startListClassesTable(dlg.sqlWhereExpression(getPlugin()->currentStageId()), dlg.isStartListPrintVacants(), dlg.startTimeFormat()); auto opts = dlg.optionsMap(); @@ -1502,7 +1501,6 @@ void RunsPlugin::report_startListStarters() dlg.setStartListOptionsVisible(true); dlg.setStartListPrintVacantsVisible(false); dlg.setStartersOptionsVisible(true); - dlg.setClassStartSelectionVisible(true); if(dlg.exec()) { auto tt = startListStartersTable(dlg.sqlWhereExpression(getPlugin()->currentStageId())); auto opts = dlg.optionsMap(); @@ -1592,7 +1590,8 @@ void RunsPlugin::report_resultsClasses() dlg.setResultOptionsVisible(true); //dlg.setPageLayoutVisible(false); if(dlg.exec()) { - auto tt = currentStageResultsTable(dlg.sqlWhereExpression(), dlg.resultNumPlaces(), dlg.options().isResultExcludeDisq()); + auto sql_where = dlg.sqlWhereExpression(); + auto tt = currentStageResultsTable(sql_where, dlg.resultNumPlaces(), dlg.options().isResultExcludeDisq()); auto opts = dlg.optionsMap(); QVariantMap props; props["options"] = opts;