diff --git a/.clang-tidy b/.clang-tidy
index 7f9662c4d..fd21b3531 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -77,6 +77,7 @@ Checks:
-readability-inconsistent-declaration-parameter-name,
-readability-isolate-declaration,
-readability-magic-numbers,
+ -readability-math-missing-parentheses,
-readability-named-parameter,
-readability-non-const-parameter,
-readability-qualified-auto,
diff --git a/libqf/plugins/qf/core/core.qrc b/libqf/plugins/qf/core/core.qrc
index 3b3440ba4..421882bfb 100644
--- a/libqf/plugins/qf/core/core.qrc
+++ b/libqf/plugins/qf/core/core.qrc
@@ -1,7 +1,6 @@
- qml/js/stringext.js
- qml/js/timeext.js
- qml/js/treetable.js
+ qml/js/stringext.js
+ qml/js/treetable.js
diff --git a/libqf/plugins/qf/core/qml/js/timeext.js b/libquickevent/libquickeventcore/js/timeext.js
similarity index 100%
rename from libqf/plugins/qf/core/qml/js/timeext.js
rename to libquickevent/libquickeventcore/js/timeext.js
diff --git a/libquickevent/libquickeventcore/libquickeventcore.qrc b/libquickevent/libquickeventcore/libquickeventcore.qrc
index b50162c20..3de5dadf9 100644
--- a/libquickevent/libquickeventcore/libquickeventcore.qrc
+++ b/libquickevent/libquickeventcore/libquickeventcore.qrc
@@ -1,5 +1,6 @@
js/ogtime.js
+ js/timeext.js
diff --git a/libquickevent/libquickeventcore/src/si/checkedcard.h b/libquickevent/libquickeventcore/src/si/checkedcard.h
index f9886354f..d8ed83750 100644
--- a/libquickevent/libquickeventcore/src/si/checkedcard.h
+++ b/libquickevent/libquickeventcore/src/si/checkedcard.h
@@ -30,7 +30,7 @@ class QUICKEVENTCORE_DECL_EXPORT CheckedCard : public QVariantMap
QF_VARIANTMAP_FIELD(QVariantList, p, setP, unches)
QF_VARIANTMAP_FIELD(bool, is, set, BadCheck)
QF_VARIANTMAP_FIELD(bool, is, set, MisPunch)
-
+ QF_VARIANTMAP_FIELD(QVariantMap, d, setD, ata)
public:
CheckedCard(const QVariantMap &data = QVariantMap());
diff --git a/libquickevent/libquickeventcore/src/si/readcard.cpp b/libquickevent/libquickeventcore/src/si/readcard.cpp
index 7a4cea3ff..f1023c81a 100644
--- a/libquickevent/libquickeventcore/src/si/readcard.cpp
+++ b/libquickevent/libquickeventcore/src/si/readcard.cpp
@@ -54,6 +54,9 @@ ReadCard::ReadCard(const QSqlRecord &rec)
punchlst << punch;
}
this->setPunches(punchlst);
+ auto s = rec.value("data").toString();
+ auto data = qf::core::Utils::jsonToQVariant(s).toMap();
+ setData(data);
}
int ReadCard::punchCount() const
diff --git a/libquickevent/libquickeventcore/src/si/readcard.h b/libquickevent/libquickeventcore/src/si/readcard.h
index f0ab950b3..e4b51ded7 100644
--- a/libquickevent/libquickeventcore/src/si/readcard.h
+++ b/libquickevent/libquickeventcore/src/si/readcard.h
@@ -8,11 +8,7 @@
class QSqlRecord;
-namespace siut { class SICard; }
-
-namespace quickevent {
-namespace core {
-namespace si {
+namespace quickevent::core::si {
class QUICKEVENTCORE_DECL_EXPORT ReadPunch : public QVariantMap
{
@@ -49,6 +45,7 @@ class QUICKEVENTCORE_DECL_EXPORT ReadCard : public QVariantMap
QF_VARIANTMAP_FIELD(int, f, setF, inishTimeMs)
QF_VARIANTMAP_FIELD(QVariantList, p, setP, unches)
QF_VARIANTMAP_FIELD(QString, r, setR, unIdAssignError)
+ QF_VARIANTMAP_FIELD(QVariantMap, d, setD, ata)
public:
ReadCard(const QVariantMap &data = QVariantMap()) : QVariantMap(data) {}
ReadCard(const QSqlRecord &rec);
@@ -59,5 +56,5 @@ class QUICKEVENTCORE_DECL_EXPORT ReadCard : public QVariantMap
QString toString() const;
};
-}}}
+}
diff --git a/libsiut/src/device/sitask.cpp b/libsiut/src/device/sitask.cpp
index a7e90d7d3..9f275185c 100644
--- a/libsiut/src/device/sitask.cpp
+++ b/libsiut/src/device/sitask.cpp
@@ -572,7 +572,70 @@ void SiTaskReadCard8::start()
sendCommand((int)SIMessageData::Command::GetSICard8, QByteArray(1, 0x00));
}
}
-
+/*
+CARD 10, block 0
+00 0000 02 ef 83 00 01 00 85 df c1 9b ea ea ea ea 0c 0f
+01 0010 9c d0 ee ee ee ee 8c a5 a6 3a 08 2c 09 31 0f 7b
+02 0020 3a e3 0b 17 58 66 38 30 37 36 30 30 33 3b 4b 65
+03 0030 41 72 20 73 2e 72 2e 6f 2e 3b 3b 3b 3b 3b 3b 3b
+04 0040 3b 3b 3b ee ee ee ee ee ee ee ee ee ee ee ee ee
+05 0050 ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee
+06 0060 ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee
+07 0070 ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee
+08 0080 ee ee ee ee ee ee 5b f8 03
+
+SIAC, block 0
+00 0000 02 ef 83 00 04 00 ad 49 13 9e ea ea ea ea 0d 03
+01 0010 55 1b ee ee ee ee 8d da 6a 58 11 14 12 33 0f 7d
+02 0020 86 13 07 18 3f 78 38 32 32 36 33 32 33 3b 48 2e
+03 0030 53 2e 48 2e 20 53 70 6f 72 74 20 73 2e 72 2e 6f
+04 0040 2e 3b 3b 3b 3b 3b 3b 3b 3b 3b 3b ee ee ee ee ee
+05 0050 ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee
+06 0060 ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee
+07 0070 ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee
+08 0080 ee ee ee ee ee ee 0c b1 03
+
+both have card serie == 15
+ */
+namespace {
+enum class CardTypeByNumber {
+ InvalidNumber,
+ Siac,
+ Card11,
+ Card10,
+ Card9,
+ Card8,
+ Card6,
+ Card5,
+ pCard,
+};
+
+CardTypeByNumber cardNumberToType(int number)
+{
+ if (number < 500000) {
+ return CardTypeByNumber::Card5;
+ }
+ if (number < 1000000 || (number >= 2003000 && number < 2004000)) {
+ return CardTypeByNumber::Card6;
+ }
+ if ((number >= 2000000 && number < 2003000) || (number >= 2004000 && number < 3000000)) {
+ return CardTypeByNumber::Card8;
+ }
+ if (number >= 1000000 && number < 2000000) {
+ return CardTypeByNumber::Card9;
+ }
+ if (number >= 7000000 && number < 8000000) {
+ return CardTypeByNumber::Card10;
+ }
+ if (number >= 8000000 && number < 9000000) {
+ return CardTypeByNumber::Siac;
+ }
+ if (number >= 9000000 && number < 10000000) {
+ return CardTypeByNumber::Card11;
+ }
+ return CardTypeByNumber::InvalidNumber;
+}
+}
void SiTaskReadCard8::onSiMessageReceived(const SIMessageData &msg)
{
SIMessageData::Command cmd = msg.command();
@@ -586,6 +649,7 @@ void SiTaskReadCard8::onSiMessageReceived(const SIMessageData &msg)
int station_number = (int)SIPunch::getUnsigned(data, base - 3);
int card_number = (int)SIPunch::getUnsigned(data, base + 0x19, 3);
m_cardSerie = static_cast(((uint8_t)data[base + 0x18]) & 15);
+ qfInfo() << "CS:" << m_cardSerie;
logCardRead() << "CS:" << m_cardSerie << cardSerieToString(m_cardSerie) << "SI:" << card_number;
m_card.setStationNumber(station_number);
m_card.setCardNumber(card_number);
@@ -619,8 +683,17 @@ void SiTaskReadCard8::onSiMessageReceived(const SIMessageData &msg)
sendCommand((int)SIMessageData::Command::GetSICard8, QByteArray(1, 0x01));
else if(m_cardSerie == pCard)
sendCommand((int)SIMessageData::Command::GetSICard8, QByteArray(1, 0x01));
- else if(m_cardSerie == Siac)
- sendCommand((int)SIMessageData::Command::GetSICard8, QByteArray(1, 0x03));
+ else if(m_cardSerie == Siac) {
+ if (cardNumberToType(m_card.cardNumber()) == CardTypeByNumber::Siac) {
+ // Invoke battery voltage measurement
+ // 02 EA 05 7E 05 05 05 05 B2 31 03 - EA - PROBABLY SIAC battery measurement request
+ auto ba = QByteArray::fromHex("7E05050505");
+ sendCommand((int)SIMessageData::Command::SiacMeasureBattery, ba);
+ } else {
+ // Card 10, 11
+ sendCommand((int)SIMessageData::Command::GetSICard8, QByteArray(1, 0x04));
+ }
+ }
}
}
else {
@@ -682,11 +755,14 @@ void SiTaskReadCard8::onSiMessageReceived(const SIMessageData &msg)
}
else if(m_cardSerie == Siac) {
if(block_number == 3) {
- // read battery date
+ // read battery data
+ SiCardBatteryStatus battery_status;
int yy = (uint8_t)data[base + (0xf*4) + 0];
int mm = (uint8_t)data[base + (0xf*4) + 1];
int dd = (uint8_t)data[base + (0xf*4) + 2];
- logCardRead().nospace() << "SIAC batery date: " << (2000 + yy) << '-' << mm << '-' << dd;
+ QDate date(yy + 2000, mm, dd);
+ battery_status.setReplaceDate(date.toString(Qt::ISODate));
+ logCardRead().nospace() << "SIAC batery date: " << battery_status.replaceDate();
auto hw_ver_1 = (uint8_t)data[base + (0x10*4) + 0];
auto hw_ver_0 = (uint8_t)data[base + (0x10*4) + 1];
auto sw_ver_1 = (uint8_t)data[base + (0x10*4) + 2];
@@ -696,11 +772,14 @@ void SiTaskReadCard8::onSiMessageReceived(const SIMessageData &msg)
auto mvbat = (uint8_t)data[base + (0x11*4) + 3];
auto rbat = (uint8_t)data[base + (0x15*4) + 0];
auto lbat = (uint8_t)data[base + (0x15*4) + 1];
- logCardRead().nospace() << "MVBAT: " << mvbat << " 0x" << QString::number(mvbat, 16);
- logCardRead().nospace() << "RBAT : " << rbat << " 0x" << QString::number(rbat, 16);
- logCardRead().nospace() << "LBAT : " << lbat << " 0x" << QString::number(lbat, 16) << " " << (lbat == 0xAA? "OK": "LOW");
+ battery_status.setLow(lbat != 0xAA);
+ battery_status.setVoltage(1.9 + 0.09 * mvbat);
+ battery_status.setReferenceVoltage(1.9 + 0.09 * rbat);
+ logCardRead().nospace() << "MVBAT: " << " 0x" << QString::number(mvbat, 16);
+ logCardRead().nospace() << "RBAT : " << " 0x" << QString::number(rbat, 16);
+ logCardRead().nospace() << "LBAT : " << " 0x" << QString::number(lbat, 16) << " " << (lbat == 0xAA? "OK": "LOW");
+ m_card.setBatteryStatus(battery_status);
- // read battery status
sendCommand((int)SIMessageData::Command::GetSICard8, QByteArray(1, (char)(block_number + 1)));
}
else if(block_number >= 4 && block_number <= 7) {
@@ -734,6 +813,10 @@ void SiTaskReadCard8::onSiMessageReceived(const SIMessageData &msg)
}
}
}
+ else if (cmd == SIMessageData::Command::SiacMeasureBattery) {
+ // continue SIAC card read out
+ sendCommand((int)SIMessageData::Command::GetSICard8, QByteArray(1, 0x03));
+ }
else {
qfError() << "Invalid command:" << "0x" + QString::number((int)cmd, 16) << "received";
if(cmd == SIMessageData::Command::SICardRemoved)
diff --git a/libsiut/src/message/simessagedata.h b/libsiut/src/message/simessagedata.h
index 32b600d94..699626687 100644
--- a/libsiut/src/message/simessagedata.h
+++ b/libsiut/src/message/simessagedata.h
@@ -30,7 +30,9 @@ class SIUT_DECL_EXPORT SIMessageData
SICardRemoved=0xE7,
GetSICard5=0xB1,
GetSICard6=0xE1,
+ SiacMeasureBattery=0xEA,
GetSICard8=0xEF,
+
//GetPunch2=0x53, /// autosend only (ie. punch)
SetDirectRemoteMode=0xF0,
//TimeSend=0x54, /// autosend only (ie. trigger data)
diff --git a/libsiut/src/sicard.cpp b/libsiut/src/sicard.cpp
index 9c970d24c..bd71c3967 100644
--- a/libsiut/src/sicard.cpp
+++ b/libsiut/src/sicard.cpp
@@ -25,9 +25,6 @@ static QString ob_time_str(int _time)
}
*/
-SICard::SICard()
-= default;
-
SICard::SICard(int card_number)
{
setCardNumber(card_number);
@@ -46,6 +43,7 @@ QString SICard::toString() const
sl << tr("check: %1").arg(time_str(checkTime()));
sl << tr("start: %1").arg(time_str(startTime()));
sl << tr("finish: %1").arg(time_str(finishTime()));
+ sl << tr("batteryStatus: %1").arg(qf::core::Utils::qvariantToJson(batteryStatus()));
for (int n = 0; n < punchCount(); ++n) {
SIPunch p = punchAt(n);
sl << (" " + QString::number(n+1)).right(4) + ".\t" + QString::number(p.code()) + "\t" + time_str(p.time());
diff --git a/libsiut/src/sicard.h b/libsiut/src/sicard.h
index 9e8532c70..42225b7f5 100644
--- a/libsiut/src/sicard.h
+++ b/libsiut/src/sicard.h
@@ -11,6 +11,19 @@
namespace siut {
+class SIUT_DECL_EXPORT SiCardBatteryStatus : public QVariantMap
+{
+ using Super = QVariantMap;
+public:
+ SiCardBatteryStatus() = default;
+ SiCardBatteryStatus(const QVariantMap &o) : Super(o) {}
+
+ QF_VARIANTMAP_FIELD(double, v, setV, oltage)
+ QF_VARIANTMAP_FIELD(double, r, setR, eferenceVoltage)
+ QF_VARIANTMAP_FIELD(bool, is, set, Low)
+ QF_VARIANTMAP_FIELD(QString, r, setR, eplaceDate)
+};
+
class SIUT_DECL_EXPORT SICard : public QVariantMap
{
Q_DECLARE_TR_FUNCTIONS(SICard)
@@ -19,7 +32,7 @@ class SIUT_DECL_EXPORT SICard : public QVariantMap
using PunchList = QVariantList;
static constexpr int INVALID_SI_TIME = 0xEEEE;
- SICard();
+ SICard() = default;
SICard(const QVariantMap &o) : Super(o) {}
SICard(int card_number);
@@ -30,6 +43,7 @@ class SIUT_DECL_EXPORT SICard : public QVariantMap
QF_VARIANTMAP_FIELD(int, f, setF, inishTime)
QF_VARIANTMAP_FIELD(int, f, setF, inishTimeMs)
QF_VARIANTMAP_FIELD(QVariantList, p, setP, unches)
+ QF_VARIANTMAP_FIELD(SiCardBatteryStatus, b, setB, atteryStatus)
QString toString() const;
diff --git a/quickevent/app/quickevent/plugins/CardReader/src/cardcheckerclassiccpp.cpp b/quickevent/app/quickevent/plugins/CardReader/src/cardcheckerclassiccpp.cpp
index 9852c8206..c5edfffd2 100644
--- a/quickevent/app/quickevent/plugins/CardReader/src/cardcheckerclassiccpp.cpp
+++ b/quickevent/app/quickevent/plugins/CardReader/src/cardcheckerclassiccpp.cpp
@@ -31,7 +31,7 @@ quickevent::core::si::CheckedCard CardCheckerClassicCpp::checkCard(const quickev
checked_card.setCourseId(course.id());
checked_card.setRunId(run_id);
- //checked_card.setPunches();
+ checked_card.setData(read_card.data());
//Log.info("course:", JSON.stringify(read_card, null, 2));
int stage_id = stageIdForRun(run_id);
diff --git a/quickevent/app/quickevent/plugins/CardReader/src/cardreaderplugin.cpp b/quickevent/app/quickevent/plugins/CardReader/src/cardreaderplugin.cpp
index df6488fa0..bf68b0dd8 100644
--- a/quickevent/app/quickevent/plugins/CardReader/src/cardreaderplugin.cpp
+++ b/quickevent/app/quickevent/plugins/CardReader/src/cardreaderplugin.cpp
@@ -264,8 +264,8 @@ int CardReaderPlugin::saveCardToSql(const quickevent::core::si::ReadCard &read_c
punches << p.toJsonArrayString();
}
qf::core::sql::Query q;
- q.prepare(QStringLiteral("INSERT INTO cards (stationNumber, siId, checkTime, startTime, finishTime, punches, runId, stageId, readerConnectionId, runIdAssignError)"
- " VALUES (:stationNumber, :siId, :checkTime, :startTime, :finishTime, :punches, :runId, :stageId, :readerConnectionId, :runIdAssignError)")
+ q.prepare(QStringLiteral("INSERT INTO cards (stationNumber, siId, checkTime, startTime, finishTime, punches, runId, stageId, readerConnectionId, runIdAssignError, data)"
+ " VALUES (:stationNumber, :siId, :checkTime, :startTime, :finishTime, :punches, :runId, :stageId, :readerConnectionId, :runIdAssignError, :data)")
, qf::core::Exception::Throw);
q.bindValue(QStringLiteral(":stationNumber"), read_card.stationNumber());
q.bindValue(QStringLiteral(":siId"), read_card.cardNumber());
@@ -277,6 +277,7 @@ int CardReaderPlugin::saveCardToSql(const quickevent::core::si::ReadCard &read_c
q.bindValue(QStringLiteral(":stageId"), currentStageId());
q.bindValue(QStringLiteral(":readerConnectionId"), qf::core::sql::Connection::defaultConnection().connectionId());
q.bindValue(QStringLiteral(":runIdAssignError"), read_card.runIdAssignError());
+ q.bindValue(QStringLiteral(":data"), qf::core::Utils::qvariantToJson(read_card.data()));
if(q.exec()) {
ret = q.lastInsertId().toInt();
}
diff --git a/quickevent/app/quickevent/plugins/CardReader/src/cardreaderwidget.cpp b/quickevent/app/quickevent/plugins/CardReader/src/cardreaderwidget.cpp
index 373b892e0..bd57e44a6 100644
--- a/quickevent/app/quickevent/plugins/CardReader/src/cardreaderwidget.cpp
+++ b/quickevent/app/quickevent/plugins/CardReader/src/cardreaderwidget.cpp
@@ -653,6 +653,11 @@ void CardReaderWidget::processSICard(const siut::SICard &card)
quickevent::core::si::ReadCard read_card(card);
read_card.setRunId(run_id);
read_card.setRunIdAssignError(err_msg);
+ if (card.batteryStatus_isset()) {
+ auto data = read_card.data();
+ data["batteryStatus"] = card.batteryStatus();
+ read_card.setData(data);
+ }
processReadCardInTransaction(read_card);
}
diff --git a/quickevent/app/quickevent/plugins/Event/qml/DbSchema.qml b/quickevent/app/quickevent/plugins/Event/qml/DbSchema.qml
index 8ac207afa..c6a8946ac 100644
--- a/quickevent/app/quickevent/plugins/Event/qml/DbSchema.qml
+++ b/quickevent/app/quickevent/plugins/Event/qml/DbSchema.qml
@@ -66,13 +66,13 @@ Schema {
Field { name: 'id'; type: Serial { primaryKey: true } },
Field { name: 'code'; type: Int { } },
Field { name: 'altCode'; type: Int { } },
- Field { name: 'outOfOrder';
- type: Boolean { }
+ Field { name: 'outOfOrder';
+ type: Boolean { }
defaultValue: false;
notNull: true
},
- Field { name: 'radio';
- type: Boolean { }
+ Field { name: 'radio';
+ type: Boolean { }
defaultValue: false
notNull: true
},
@@ -124,13 +124,13 @@ Schema {
},
Field { name: 'startTimeMin'; type: Int { } },
Field { name: 'startIntervalMin'; type: Int { } },
- Field { name: 'vacantsBefore'; type: Int { }
+ Field { name: 'vacantsBefore'; type: Int { }
comment: 'place n vacants gap before first competitor in class start list'
},
- Field { name: 'vacantEvery'; type: Int { }
+ Field { name: 'vacantEvery'; type: Int { }
comment: 'place vacant every n-th competitor in class start list'
},
- Field { name: 'vacantsAfter'; type: Int { }
+ Field { name: 'vacantsAfter'; type: Int { }
comment: 'place n vacants gap after last competitor in class start list'
},
Field { name: 'mapCount'; type: Int { } },
@@ -419,6 +419,10 @@ Schema {
}
comment: 'JSON of format [[code, time, msec, day_of_week, week_cnt], ...]}'
},
+ Field { name: 'data'
+ type: String { }
+ comment: 'JSON of auxiliary card data like Siac battery status, etc.'
+ },
Field { name: 'readerConnectionId'
type: Int { }
comment: 'connection id of QuickEvent instance which has read this card'
diff --git a/quickevent/app/quickevent/plugins/Event/src/eventplugin.cpp b/quickevent/app/quickevent/plugins/Event/src/eventplugin.cpp
index eedb23639..15b35cd87 100644
--- a/quickevent/app/quickevent/plugins/Event/src/eventplugin.cpp
+++ b/quickevent/app/quickevent/plugins/Event/src/eventplugin.cpp
@@ -552,7 +552,7 @@ DbSchema *EventPlugin::dbSchema()
int EventPlugin::dbVersion()
{
// equals to minimal app version compatible with this DB
- return 30300;
+ return 30301;
}
QString EventPlugin::dbVersionString()
diff --git a/quickevent/app/quickevent/plugins/Receipts/qml/reports/receipts/Classic.qml b/quickevent/app/quickevent/plugins/Receipts/qml/reports/receipts/Classic.qml
index d6c753505..bcf14be15 100644
--- a/quickevent/app/quickevent/plugins/Receipts/qml/reports/receipts/Classic.qml
+++ b/quickevent/app/quickevent/plugins/Receipts/qml/reports/receipts/Classic.qml
@@ -2,7 +2,7 @@ import QtQml 2.0
import qf.core 1.0
import qf.qmlreports 1.0
import shared.qml.reports 1.0
-import "qrc:/qf/core/qml/js/timeext.js" as TimeExt
+import "qrc:/quickevent/core/js/timeext.js" as TimeExt
import "qrc:/quickevent/core/js/ogtime.js" as OGTime
import "private" as Private
@@ -65,8 +65,9 @@ Report {
textFn: function() {
var s = "";
var stage_cnt = bandCompetitor.data("stageCount")
- if(stage_cnt > 1)
+ if(stage_cnt > 1) {
s = qsTr("E") + bandCompetitor.data("currentStageId") + " - ";
+ }
s += bandCompetitor.data("event.name")
return s;
}
@@ -400,6 +401,20 @@ Report {
}
}
}
+ Frame {
+ width: "%"
+ hinset: 1
+ layout: Frame.LayoutHorizontal
+ Para {
+ textFn: function() {
+ var data = bandCard.data("data");
+ var battery_status = data.batteryStatus;
+ if(battery_status)
+ return qsTr("Siac battery: ") + battery_status.voltage.toFixed(2) + "V - " + (battery_status.low? "LOW": "Ok");
+ return "";
+ }
+ }
+ }
}
}
}
diff --git a/quickevent/app/quickevent/plugins/Receipts/qml/reports/receipts/Default.qml b/quickevent/app/quickevent/plugins/Receipts/qml/reports/receipts/Default.qml
index b4395d0ac..2a75a5a70 100644
--- a/quickevent/app/quickevent/plugins/Receipts/qml/reports/receipts/Default.qml
+++ b/quickevent/app/quickevent/plugins/Receipts/qml/reports/receipts/Default.qml
@@ -2,7 +2,7 @@ import QtQml 2.0
import qf.core 1.0
import qf.qmlreports 1.0
import shared.qml.reports 1.0
-import "qrc:/qf/core/qml/js/timeext.js" as TimeExt
+import "qrc:/quickevent/core/js/timeext.js" as TimeExt
import "qrc:/quickevent/core/js/ogtime.js" as OGTime
import "private" as Private
diff --git a/quickevent/app/quickevent/plugins/Receipts/qml/reports/receipts/private/LotteryTicket.qml b/quickevent/app/quickevent/plugins/Receipts/qml/reports/receipts/private/LotteryTicket.qml
index 71b3bd2d2..858482454 100644
--- a/quickevent/app/quickevent/plugins/Receipts/qml/reports/receipts/private/LotteryTicket.qml
+++ b/quickevent/app/quickevent/plugins/Receipts/qml/reports/receipts/private/LotteryTicket.qml
@@ -1,7 +1,7 @@
import QtQml 2.0
import qf.qmlreports 1.0
import shared.qml.reports 1.0
-import "qrc:/qf/core/qml/js/timeext.js" as TimeExt
+import "qrc:/quickevent/core/js/timeext.js" as TimeExt
import "qrc:/quickevent/core/js/ogtime.js" as OGTime
Frame {
diff --git a/quickevent/app/quickevent/plugins/Receipts/qml/reports/sicard.qml b/quickevent/app/quickevent/plugins/Receipts/qml/reports/sicard.qml
index 1290c080c..c6762e4f5 100644
--- a/quickevent/app/quickevent/plugins/Receipts/qml/reports/sicard.qml
+++ b/quickevent/app/quickevent/plugins/Receipts/qml/reports/sicard.qml
@@ -1,7 +1,7 @@
import QtQml 2.0
import qf.qmlreports 1.0
import shared.qml.reports 1.0
-import "qrc:/qf/core/qml/js/timeext.js" as TimeExt
+import "qrc:/quickevent/core/js/timeext.js" as TimeExt
import "qrc:/quickevent/core/js/ogtime.js" as OGTime
Report {
@@ -207,24 +207,20 @@ Report {
width: "%"
topBorder: Pen { basedOn: "black2" }
}
- /*
Frame {
width: "%"
- vinset: 1
hinset: 1
layout: Frame.LayoutHorizontal
Para {
- text: "Time: "
- }
- Para {
- width: "%"
textFn: function() {
- var msec = bandCard.data("timeMs");
- return OGTime.msecToString_mmss(msec);
+ var data = bandCard.data("data");
+ var battery_status = data.batteryStatus;
+ if(battery_status)
+ return qsTr("Siac battery: ") + battery_status.voltage.toFixed(2) + "V - " + (battery_status.low? "LOW": "Ok");
+ return "";
}
}
}
- */
}
}
}
diff --git a/quickevent/app/quickevent/plugins/Receipts/src/receiptsplugin.cpp b/quickevent/app/quickevent/plugins/Receipts/src/receiptsplugin.cpp
index 613ee6a92..db5ebe84c 100644
--- a/quickevent/app/quickevent/plugins/Receipts/src/receiptsplugin.cpp
+++ b/quickevent/app/quickevent/plugins/Receipts/src/receiptsplugin.cpp
@@ -79,8 +79,10 @@ QVariantMap ReceiptsPlugin::readCardTablesData(int card_id)
QMapIterator it(read_card);
while(it.hasNext()) {
it.next();
- if(it.key() != QLatin1String("punches"))
+ if(it.key() != QLatin1String("punches")) {
+ // qfInfo() << card_id << it.key() << "-->" << it.value().toString();
tt.setValue(it.key(), it.value());
+ }
}
int position = 0;
int start_time_ms = read_card.startTime();
diff --git a/quickevent/app/quickevent/plugins/Relays/src/relaysplugin.cpp b/quickevent/app/quickevent/plugins/Relays/src/relaysplugin.cpp
index 5072e0d31..6812329a3 100644
--- a/quickevent/app/quickevent/plugins/Relays/src/relaysplugin.cpp
+++ b/quickevent/app/quickevent/plugins/Relays/src/relaysplugin.cpp
@@ -194,8 +194,9 @@ qf::core::utils::TreeTable RelaysPlugin::nLegsResultsTable(const QString &where_
}
auto wt = [tt]() {
QFile f("/home/fanda/t/relays.json");
- f.open(QFile::WriteOnly);
- f.write(tt.toString().toUtf8());
+ if (f.open(QFile::WriteOnly)) {
+ f.write(tt.toString().toUtf8());
+ }
return f.fileName();
};
qfDebug() << "nLegsResultsTable table:" << wt();
diff --git a/quickevent/app/quickevent/src/appversion.h b/quickevent/app/quickevent/src/appversion.h
index 391c5d699..2ccc8b76a 100644
--- a/quickevent/app/quickevent/src/appversion.h
+++ b/quickevent/app/quickevent/src/appversion.h
@@ -1,4 +1,4 @@
#pragma once
-#define APP_VERSION "3.4.21"
+#define APP_VERSION "3.4.22"