Add Date arithmetic to DataFilter

.. use "Date" and "Today" which evaluate to the number
   of days since 1st Jan 1900.

.. so a filter for the last 90 days would be:
   (Today - Date) < 30

.. will add date strings next.
This commit is contained in:
Mark Liversedge
2014-12-25 09:12:34 +00:00
parent 44aea09d97
commit da679d3f20

View File

@@ -106,7 +106,9 @@ bool Leaf::isNumber(DataFilter *df, Leaf *leaf)
{
QString symbol = *(leaf->lvalue.n);
if (symbol == "isRun") return true;
if (isCoggan(symbol)) return true;
else if (!symbol.compare("Date", Qt::CaseInsensitive)) return true;
else if (!symbol.compare("Today", Qt::CaseInsensitive)) return true;
else if (isCoggan(symbol)) return true;
else return df->lookupType.value(symbol, false);
}
break;
@@ -158,7 +160,9 @@ void Leaf::validateFilter(DataFilter *df, Leaf *leaf)
if (lookup == "") {
// isRun isa special, we may add more later (e.g. date)
if (symbol != "isRun" && !isCoggan(symbol))
if (symbol.compare("Date", Qt::CaseInsensitive) &&
symbol.compare("Today", Qt::CaseInsensitive) &&
symbol != "isRun" && !isCoggan(symbol))
DataFiltererrors << QString(QObject::tr("%1 is unknown")).arg(symbol);
}
}
@@ -438,6 +442,16 @@ double Leaf::eval(Context *context, DataFilter *df, Leaf *leaf, RideItem *m)
lhsdouble = m->isRun ? 1 : 0;
lhsisNumber = true;
} else if (!symbol.compare("Today", Qt::CaseInsensitive)) {
lhsdouble = QDate(1900,01,01).daysTo(QDate::currentDate());
lhsisNumber = true;
} else if (!symbol.compare("Date", Qt::CaseInsensitive)) {
lhsdouble = QDate(1900,01,01).daysTo(m->dateTime.date());
lhsisNumber = true;
} else if (isCoggan(symbol)) {
// a coggan PMC metric
PMCData *pmcData = context->athlete->getPMCFor("coggan_tss");
@@ -503,6 +517,16 @@ double Leaf::eval(Context *context, DataFilter *df, Leaf *leaf, RideItem *m)
rhsdouble = m->isRun ? 1 : 0;
rhsisNumber = true;
} else if (!symbol.compare("Today", Qt::CaseInsensitive)) {
rhsdouble = QDate(1900,01,01).daysTo(QDate::currentDate());
rhsisNumber = true;
} else if (!symbol.compare("Date", Qt::CaseInsensitive)) {
rhsdouble = QDate(1900,01,01).daysTo(m->dateTime.date());
rhsisNumber = true;
} else if (isCoggan(symbol)) {
// a coggan PMC metric