Warning, file /office/skrooge/skgbasegui/skgperiodedit.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /*************************************************************************** 0002 * SPDX-FileCopyrightText: 2022 S. MANKOWSKI stephane@mankowski.fr 0003 * SPDX-FileCopyrightText: 2022 G. DE BURE support@mankowski.fr 0004 * SPDX-License-Identifier: GPL-3.0-or-later 0005 ***************************************************************************/ 0006 /** @file 0007 * A period editor. 0008 * 0009 * @author Stephane MANKOWSKI / Guillaume DE BURE 0010 */ 0011 #include "skgperiodedit.h" 0012 #include "skgmainpanel.h" 0013 0014 #include <qdom.h> 0015 0016 #include "skgservices.h" 0017 #include "skgtraces.h" 0018 0019 SKGPeriodEdit::SKGPeriodEdit(QWidget* iParent, bool iModeEnabled) 0020 : QWidget(iParent), m_modeEnable(iModeEnabled), m_count(0) 0021 { 0022 ui.setupUi(this); 0023 this->setFocusProxy(ui.kPeriod); 0024 0025 ui.kPeriod->addItem(i18nc("Period mode", "All Dates"), static_cast<int>(SKGPeriodEdit::ALL)); 0026 ui.kPeriod->addItem(i18nc("Period mode", "Current…"), static_cast<int>(SKGPeriodEdit::CURRENT)); 0027 ui.kPeriod->addItem(i18nc("Period mode", "Previous…"), static_cast<int>(SKGPeriodEdit::PREVIOUS)); 0028 ui.kPeriod->addItem(i18nc("Period mode", "Last…"), static_cast<int>(SKGPeriodEdit::LAST)); 0029 ui.kPeriod->addItem(i18nc("Period mode", "Custom…"), static_cast<int>(SKGPeriodEdit::CUSTOM)); 0030 ui.kPeriod->addItem(i18nc("Period mode", "Timeline…"), static_cast<int>(SKGPeriodEdit::TIMELINE)); 0031 0032 ui.kInterval->addItem(i18nc("Period interval", "day(s)"), 0); 0033 ui.kInterval->addItem(i18nc("Period interval", "week(s)"), 1); 0034 ui.kInterval->addItem(i18nc("Period interval", "month(s)"), 2); 0035 ui.kInterval->addItem(i18nc("Period interval", "quarter(s)"), 4); 0036 ui.kInterval->addItem(i18nc("Period interval", "semester(s)"), 5); 0037 ui.kInterval->addItem(i18nc("Period interval", "year(s)"), 3); 0038 0039 ui.kPeriod->setCurrentIndex(1); 0040 ui.kInterval->setCurrentIndex(2); 0041 0042 connect(ui.kPeriod, static_cast<void (SKGComboBox::*)(const QString&)>(&SKGComboBox::currentTextChanged), this, &SKGPeriodEdit::refresh); 0043 connect(ui.kInterval, static_cast<void (SKGComboBox::*)(const QString&)>(&SKGComboBox::currentTextChanged), this, &SKGPeriodEdit::refresh); 0044 connect(ui.kDateBegin, &SKGDateEdit::dateEntered, this, &SKGPeriodEdit::refresh); 0045 connect(ui.kDateEnd, &SKGDateEdit::dateEntered, this, &SKGPeriodEdit::refresh); 0046 connect(ui.kNbIntervals, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &SKGPeriodEdit::refresh); 0047 connect(ui.kTimeline, &QSlider::valueChanged, this, &SKGPeriodEdit::refresh); 0048 connect(ui.kFuture, &QCheckBox::stateChanged, this, &SKGPeriodEdit::refresh); 0049 } 0050 0051 SKGPeriodEdit::~SKGPeriodEdit() 0052 = default; 0053 0054 QString SKGPeriodEdit::getState() 0055 { 0056 SKGTRACEINFUNC(10) 0057 QDomDocument doc(QStringLiteral("SKGML")); 0058 QDomElement root = doc.createElement(QStringLiteral("parameters")); 0059 doc.appendChild(root); 0060 0061 root.setAttribute(QStringLiteral("period"), SKGServices::intToString(mode())); 0062 if (mode() == CUSTOM) { 0063 root.setAttribute(QStringLiteral("date_begin"), SKGServices::intToString(ui.kDateBegin->date().toJulianDay())); 0064 root.setAttribute(QStringLiteral("date_end"), SKGServices::intToString(ui.kDateEnd->date().toJulianDay())); 0065 } 0066 root.setAttribute(QStringLiteral("interval"), SKGServices::intToString(ui.kInterval->itemData(ui.kInterval->currentIndex()).toInt())); 0067 root.setAttribute(QStringLiteral("nb_intervals"), SKGServices::intToString(ui.kNbIntervals->value())); 0068 root.setAttribute(QStringLiteral("timeline"), SKGServices::intToString(ui.kTimeline->value())); 0069 root.setAttribute(QStringLiteral("future"), ui.kFuture->isChecked() ? QStringLiteral("Y") : QStringLiteral("N")); 0070 0071 return doc.toString(); 0072 } 0073 0074 void SKGPeriodEdit::setState(const QString& iState) 0075 { 0076 SKGTRACEINFUNC(10) 0077 0078 QDomDocument doc(QStringLiteral("SKGML")); 0079 doc.setContent(iState); 0080 QDomElement root = doc.documentElement(); 0081 0082 QString period = root.attribute(QStringLiteral("period")); 0083 QString interval = root.attribute(QStringLiteral("interval")); 0084 QString nb_interval = root.attribute(QStringLiteral("nb_intervals")); 0085 QString timeline = root.attribute(QStringLiteral("timeline")); 0086 QString date_begin = root.attribute(QStringLiteral("date_begin")); 0087 QString date_end = root.attribute(QStringLiteral("date_end")); 0088 QString future = root.attribute(QStringLiteral("future")); 0089 0090 // Default values 0091 if (period.isEmpty()) { 0092 period = '1'; 0093 } 0094 if (interval.isEmpty()) { 0095 interval = '2'; 0096 } 0097 if (nb_interval.isEmpty()) { 0098 nb_interval = '1'; 0099 } 0100 if (timeline.isEmpty()) { 0101 timeline = '1'; 0102 } 0103 ui.kPeriod->setCurrentIndex(ui.kPeriod->findData(SKGServices::stringToInt(period))); 0104 ui.kInterval->setCurrentIndex(ui.kInterval->findData(SKGServices::stringToInt(interval))); 0105 ui.kTimeline->setValue(SKGServices::stringToInt(timeline)); 0106 ui.kNbIntervals->setValue(SKGServices::stringToInt(nb_interval)); 0107 ui.kFuture->setChecked(future == QStringLiteral("Y")); 0108 if (!date_begin.isEmpty()) { 0109 ui.kDateBegin->setDate(QDate::fromJulianDay(SKGServices::stringToInt(date_begin))); 0110 } 0111 if (!date_end.isEmpty()) { 0112 ui.kDateEnd->setDate(QDate::fromJulianDay(SKGServices::stringToInt(date_end))); 0113 } 0114 0115 refresh(); 0116 } 0117 0118 QString SKGPeriodEdit::text() const 0119 { 0120 QString during = ui.kPeriod->text().remove(QStringLiteral("…")); 0121 0122 SKGPeriodEdit::PeriodMode m = mode(); 0123 if (m == CUSTOM || m == TIMELINE) { 0124 during = i18nc("A period", "From %1 to %2", SKGMainPanel::dateToString(ui.kDateBegin->date()), SKGMainPanel::dateToString(ui.kDateEnd->date())); 0125 } else if (m != ALL) { 0126 if (m == PREVIOUS) { 0127 switch (ui.kInterval->itemData(ui.kInterval->currentIndex()).toInt()) { 0128 case 0: 0129 during = i18ncp("A period", "Previous day", "%1 previous days", ui.kNbIntervals->value()); 0130 break; 0131 case 1: 0132 during = i18ncp("A period", "Previous week", "%1 previous weeks", ui.kNbIntervals->value()); 0133 break; 0134 case 2: 0135 during = i18ncp("A period", "Previous month", "%1 previous months", ui.kNbIntervals->value()); 0136 break; 0137 case 3: 0138 during = i18ncp("A period", "Previous year", "%1 previous years", ui.kNbIntervals->value()); 0139 break; 0140 case 4: 0141 during = i18ncp("A period", "Previous quarter", "%1 previous quarters", ui.kNbIntervals->value()); 0142 break; 0143 case 5: 0144 default: 0145 during = i18ncp("A period", "Previous semester", "%1 previous semesters", ui.kNbIntervals->value()); 0146 break; 0147 } 0148 } else if (m == LAST) { 0149 switch (ui.kInterval->itemData(ui.kInterval->currentIndex()).toInt()) { 0150 case 0: 0151 during = i18ncp("A period", "Last day", "%1 last days", ui.kNbIntervals->value()); 0152 break; 0153 case 1: 0154 during = i18ncp("A period", "Last week", "%1 last weeks", ui.kNbIntervals->value()); 0155 break; 0156 case 2: 0157 during = i18ncp("A period", "Last month", "%1 last months", ui.kNbIntervals->value()); 0158 break; 0159 case 3: 0160 during = i18ncp("A period", "Last year", "%1 last years", ui.kNbIntervals->value()); 0161 break; 0162 case 4: 0163 during = i18ncp("A period", "Last quarter", "%1 last quarters", ui.kNbIntervals->value()); 0164 break; 0165 case 5: 0166 default: 0167 during = i18ncp("A period", "Last semester", "%1 last semesters", ui.kNbIntervals->value()); 0168 break; 0169 } 0170 } else if (m == CURRENT) { 0171 switch (ui.kInterval->itemData(ui.kInterval->currentIndex()).toInt()) { 0172 case 0: 0173 during = i18nc("A period", "Current day"); 0174 break; 0175 case 1: 0176 during = i18nc("A period", "Current week"); 0177 break; 0178 case 2: 0179 during = i18nc("A period", "Current month"); 0180 break; 0181 case 3: 0182 during = i18nc("A period", "Current year"); 0183 break; 0184 case 4: 0185 during = i18nc("A period", "Current quarter"); 0186 break; 0187 case 5: 0188 default: 0189 during = i18nc("A period", "Current semester"); 0190 break; 0191 } 0192 } 0193 } 0194 return during; 0195 } 0196 0197 0198 SKGPeriodEdit::PeriodMode SKGPeriodEdit::mode() const 0199 { 0200 return static_cast<PeriodMode>(ui.kPeriod->itemData(ui.kPeriod->currentIndex()).toInt()); 0201 } 0202 0203 void SKGPeriodEdit::getDates(SKGPeriodEdit::PeriodMode iPeriod, SKGPeriodEdit::PeriodInterval iInterval, int iValue, QDate& oBeginDate, QDate& oEndDate, QDate iDate) 0204 { 0205 QDate a = iDate; 0206 QDate b = a; 0207 int val = iValue; 0208 0209 switch (iInterval) { 0210 case DAY: 0211 // Interval is in days 0212 break; 0213 case WEEK: 0214 // Interval is in weeks 0215 val *= 7; 0216 break; 0217 case MONTH: 0218 default: 0219 // Interval is in months 0220 break; 0221 case QUARTER: 0222 // Interval is in quarter 0223 val *= 3; 0224 break; 0225 case SEMESTER: 0226 // Interval is in semester 0227 val *= 6; 0228 break; 0229 case YEAR: 0230 // Interval is in years 0231 break; 0232 } 0233 0234 switch (iPeriod) { 0235 case CURRENT: 0236 // Current Interval 0237 switch (iInterval) { 0238 case DAY: 0239 // Interval is in days 0240 break; 0241 case WEEK: 0242 // Interval is in weeks 0243 a = a.addDays(1 - a.dayOfWeek()); 0244 b = a.addDays(7 - 1); 0245 break; 0246 case MONTH: 0247 default: 0248 // Interval is in months 0249 a = a.addDays(1 - a.day()); 0250 b = a.addMonths(1).addDays(-1); 0251 break; 0252 case YEAR: 0253 // Interval is in years 0254 a = a.addDays(1 - a.day()).addMonths(1 - a.month()); 0255 b = a.addYears(1).addDays(-1); 0256 break; 0257 case QUARTER: 0258 // Interval is in quarter 0259 a = a.addDays(1 - a.day()).addMonths(1 - ((a.month() - 1) % 4)); 0260 b = a.addMonths(3).addDays(-1); 0261 break; 0262 case SEMESTER: 0263 // Interval is in semester 0264 a = a.addDays(1 - a.day()).addMonths(- ((a.month() - 1) % 6)); 0265 b = a.addMonths(6).addDays(-1); 0266 break; 0267 } 0268 break; 0269 case PREVIOUS: 0270 // Previous Interval 0271 switch (iInterval) { 0272 case DAY: 0273 // Interval is in days 0274 b = b.addDays(-1); 0275 a = b.addDays(-val + 1); 0276 break; 0277 case WEEK: 0278 // Interval is in weeks 0279 b = b.addDays(-a.dayOfWeek()); 0280 a = b.addDays(-val + 1); 0281 break; 0282 case MONTH: 0283 default: 0284 // Interval is in months 0285 b = b.addDays(-b.day()); 0286 a = b.addDays(1).addMonths(-val); 0287 break; 0288 case YEAR: 0289 // Interval is in years 0290 b = b.addMonths(1 - b.month()).addDays(-b.day()); 0291 a = b.addDays(1).addYears(-val); 0292 break; 0293 case QUARTER: 0294 // Interval is in quarter 0295 b = b.addMonths(1 - ((b.month() - 1) % 4)).addDays(-b.day()); 0296 a = b.addDays(1).addMonths(-val); 0297 break; 0298 case SEMESTER: 0299 // Interval is in semester 0300 b = b.addMonths(- ((b.month() - 1) % 6)).addDays(-b.day()); 0301 a = b.addDays(1).addMonths(-val); 0302 break; 0303 } 0304 break; 0305 case LAST: 0306 // Last Interval 0307 switch (iInterval) { 0308 case DAY: 0309 // Interval is in days 0310 a = a.addDays(-val); 0311 break; 0312 case WEEK: 0313 // Interval is in weeks 0314 a = a.addDays(-val); 0315 break; 0316 case MONTH: 0317 default: 0318 // Interval is in months 0319 a = a.addMonths(-val); 0320 break; 0321 case YEAR: 0322 // Interval is in years 0323 a = a.addYears(-val); 0324 break; 0325 case QUARTER: 0326 // Interval is in quarter 0327 a = a.addMonths(-val); 0328 break; 0329 case SEMESTER: 0330 // Interval is in semester 0331 a = a.addMonths(-val); 0332 break; 0333 } 0334 a = a.addDays(1); 0335 break; 0336 case TIMELINE: 0337 // Timeline 0338 switch (iInterval) { 0339 case DAY: 0340 // Interval is in days 0341 a = a.addDays(iValue - 12); 0342 b = a; 0343 break; 0344 case WEEK: 0345 // Interval is in weeks 0346 a = a.addDays(1 - a.dayOfWeek()).addDays((iValue - 12) * 7); 0347 b = a.addDays(7 - 1); 0348 break; 0349 case MONTH: 0350 default: 0351 // Interval is in months 0352 a = a.addDays(1 - a.day()).addMonths(iValue - 12); 0353 b = a.addMonths(1).addDays(-1); 0354 break; 0355 case YEAR: 0356 // Interval is in years 0357 a = a.addDays(1 - a.day()).addMonths(1 - a.month()).addYears(iValue - 12); 0358 b = a.addYears(1).addDays(-1); 0359 break; 0360 case QUARTER: 0361 // Interval is in quarter 0362 a = a.addDays(1 - a.day()).addMonths(1 - ((a.month() - 1) % 4)).addMonths(3 * (iValue - 12)); 0363 b = a.addMonths(3).addDays(-1); 0364 break; 0365 case SEMESTER: 0366 // Interval is in semester 0367 a = a.addDays(1 - a.day()).addMonths(- ((a.month() - 1) % 6)).addMonths(6 * (iValue - 12)); 0368 b = a.addMonths(6).addDays(-1); 0369 break; 0370 } 0371 break; 0372 default: 0373 // Take all dates 0374 a = a.addYears(-1); 0375 break; 0376 } 0377 0378 oBeginDate = a; 0379 oEndDate = b; 0380 } 0381 0382 void SKGPeriodEdit::getDates(QDate& oBeginDate, QDate& oEndDate) 0383 { 0384 SKGPeriodEdit::PeriodInterval interval = static_cast<SKGPeriodEdit::PeriodInterval>(ui.kInterval->itemData(ui.kInterval->currentIndex()).toInt()); 0385 int val = ui.kNbIntervals->value(); 0386 0387 getDates(mode(), interval, mode() == TIMELINE ? ui.kTimeline->value() : val, oBeginDate, oEndDate); 0388 } 0389 0390 QString SKGPeriodEdit::getWhereClause(bool iForecast, QString* oWhereClausForPreviousData, QString* oWhereClausForForecastData) const 0391 { 0392 // Build where clause 0393 QString wc; 0394 0395 SKGPeriodEdit::PeriodInterval interval = static_cast<SKGPeriodEdit::PeriodInterval>(ui.kInterval->itemData(ui.kInterval->currentIndex()).toInt()); 0396 QString strfFormat; 0397 QString sqlInterval; 0398 QString sqlAttribute; 0399 int val = ui.kNbIntervals->value(); 0400 int one = 1; 0401 QDate a; 0402 QDate b; 0403 0404 getDates(mode(), interval, mode() == TIMELINE ? ui.kTimeline->value() : val, a, b); 0405 0406 switch (interval) { 0407 case DAY: 0408 // Interval is in days 0409 sqlAttribute = QStringLiteral("d_date"); 0410 strfFormat = QStringLiteral("'D'"); 0411 sqlInterval = QStringLiteral("DAY"); 0412 break; 0413 case WEEK: 0414 // Interval is in weeks 0415 sqlAttribute = QStringLiteral("d_DATEWEEK"); 0416 strfFormat = QStringLiteral("'W'"); 0417 sqlInterval = QStringLiteral("DAY"); 0418 val *= 7; 0419 one *= 7; 0420 break; 0421 case MONTH: 0422 default: 0423 // Interval is in months 0424 sqlAttribute = QStringLiteral("d_DATEMONTH"); 0425 strfFormat = QStringLiteral("'M'"); 0426 sqlInterval = QStringLiteral("MONTH"); 0427 break; 0428 case QUARTER: 0429 // Interval is in quarter 0430 sqlAttribute = QStringLiteral("d_DATEQUARTER"); 0431 strfFormat = QStringLiteral("'Q'"); 0432 sqlInterval = QStringLiteral("MONTH"); 0433 val *= 3; 0434 one *= 3; 0435 break; 0436 case SEMESTER: 0437 // Interval is in quarter 0438 sqlAttribute = QStringLiteral("d_DATESEMESTER"); 0439 strfFormat = QStringLiteral("'S'"); 0440 sqlInterval = QStringLiteral("MONTH"); 0441 val *= 6; 0442 one *= 6; 0443 break; 0444 case YEAR: 0445 // Interval is in years 0446 sqlAttribute = QStringLiteral("d_DATEYEAR"); 0447 strfFormat = QStringLiteral("'Y'"); 0448 sqlInterval = QStringLiteral("YEAR"); 0449 break; 0450 } 0451 0452 switch (mode()) { 0453 case CURRENT: 0454 if (ui.kFuture->isChecked()) { 0455 b = QDate(2099, 12, 31); 0456 } 0457 0458 ui.kDateBegin->setDate(a); 0459 ui.kDateEnd->setDate(b); 0460 wc = sqlAttribute % " = (SELECT period(date('now', 'localtime'), " % strfFormat % "))"; 0461 if (ui.kFuture->isChecked()) { 0462 wc += QStringLiteral(" OR d_date > (SELECT date('now', 'localtime'))"); 0463 } 0464 if (oWhereClausForPreviousData != nullptr) { 0465 *oWhereClausForPreviousData = sqlAttribute % " < (SELECT period(date('now', 'localtime'), " % strfFormat % "))"; 0466 } 0467 if (oWhereClausForForecastData != nullptr) { 0468 *oWhereClausForForecastData = QStringLiteral("d_date > (SELECT date('now', 'localtime'))"); 0469 } 0470 break; 0471 case PREVIOUS: 0472 ui.kDateBegin->setDate(a); 0473 ui.kDateEnd->setDate(b); 0474 wc = sqlAttribute % ">=(SELECT period(date('now', 'localtime','start of month', '-" % SKGServices::intToString(val) % ' ' % sqlInterval % "')," % strfFormat % "))"; 0475 if (iForecast) { 0476 wc += " AND period(d_date, " % strfFormat % ")<=(SELECT period(date('now', 'localtime','start of month', '-" % SKGServices::intToString(one) % ' ' % sqlInterval % "')," % strfFormat % "))"; // For forecast based on scheduled transactions 0477 0478 if (oWhereClausForPreviousData != nullptr) { 0479 *oWhereClausForPreviousData = sqlAttribute % " < (SELECT period(date('now', 'localtime','start of month', '-" % SKGServices::intToString(val) % ' ' % sqlInterval % "')," % strfFormat % "))"; 0480 } 0481 if (oWhereClausForForecastData != nullptr) { 0482 *oWhereClausForForecastData = sqlAttribute % " > (SELECT period(date('now', 'localtime','start of month', '-" % SKGServices::intToString(one) % ' ' % sqlInterval % "')," % strfFormat % "))"; 0483 } 0484 } 0485 break; 0486 case LAST: 0487 if (ui.kFuture->isChecked()) { 0488 b = QDate(2099, 12, 31); 0489 } 0490 0491 ui.kDateBegin->setDate(a); 0492 ui.kDateEnd->setDate(b); 0493 0494 wc = "d_date > (SELECT date('now', 'localtime','-" % SKGServices::intToString(val) % ' ' % sqlInterval % "'))"; 0495 if (iForecast) { 0496 wc += QStringLiteral(" AND d_date<=(SELECT date('now', 'localtime'))"); // For forecast based on scheduled transactions 0497 } 0498 0499 if (ui.kFuture->isChecked()) { 0500 wc += QStringLiteral(" OR d_date > (SELECT date('now', 'localtime'))"); 0501 } 0502 if (oWhereClausForPreviousData != nullptr) { 0503 *oWhereClausForPreviousData = "d_date <= (SELECT date('now', 'localtime','-" % SKGServices::intToString(val) % ' ' % sqlInterval % "'))"; 0504 } 0505 if (oWhereClausForForecastData != nullptr) { 0506 *oWhereClausForForecastData = QStringLiteral("d_date > (SELECT date('now', 'localtime'))"); 0507 } 0508 break; 0509 case CUSTOM: 0510 // Custom Date 0511 wc = "d_date>='" % SKGServices::dateToSqlString(ui.kDateBegin->date()) % '\''; 0512 if (iForecast) { 0513 wc += "AND d_date<='" % SKGServices::dateToSqlString(ui.kDateEnd->date()) % '\''; // For forecast based on scheduled transactions 0514 } 0515 if (oWhereClausForPreviousData != nullptr) { 0516 *oWhereClausForPreviousData = "d_date<'" % SKGServices::dateToSqlString(ui.kDateBegin->date()) % '\''; 0517 } 0518 if (oWhereClausForForecastData != nullptr) { 0519 *oWhereClausForForecastData = QStringLiteral("d_date > (SELECT date('now', 'localtime'))"); 0520 } 0521 break; 0522 case TIMELINE: 0523 // Timeline 0524 ui.kDateBegin->setDate(a); 0525 ui.kDateEnd->setDate(b); 0526 wc = "d_date>='" % SKGServices::dateToSqlString(ui.kDateBegin->date()) % '\''; 0527 if (iForecast) { 0528 wc += "AND d_date<='" % SKGServices::dateToSqlString(ui.kDateEnd->date()) % '\''; // For forecast based on scheduled transactions 0529 } 0530 if (oWhereClausForPreviousData != nullptr) { 0531 *oWhereClausForPreviousData = "d_date<'" % SKGServices::dateToSqlString(ui.kDateBegin->date()) % '\''; 0532 } 0533 if (oWhereClausForForecastData != nullptr) { 0534 *oWhereClausForForecastData = "d_date>'" % SKGServices::dateToSqlString(ui.kDateEnd->date()) % '\''; 0535 } 0536 break; 0537 default: 0538 // Take all dates 0539 a = a.addYears(-1); 0540 ui.kDateBegin->setDate(a); 0541 ui.kDateEnd->setDate(b); 0542 wc = QStringLiteral("1=1"); 0543 if (oWhereClausForPreviousData != nullptr) { 0544 *oWhereClausForPreviousData = QStringLiteral("1=0"); 0545 } 0546 if (oWhereClausForForecastData != nullptr) { 0547 *oWhereClausForForecastData = QStringLiteral("d_date > (SELECT date('now', 'localtime'))"); 0548 } 0549 break; 0550 } 0551 0552 wc = "((" % wc % ") OR d_date='0000') AND d_date!='0000-00-00'"; 0553 if (oWhereClausForPreviousData != nullptr) { 0554 *oWhereClausForPreviousData = "((" % *oWhereClausForPreviousData % ") OR d_date='0000-00-00')"; 0555 } 0556 0557 return wc; 0558 } 0559 0560 void SKGPeriodEdit::refresh() 0561 { 0562 int p = ui.kPeriod->currentIndex(); 0563 0564 // Check dates 0565 QDate d1 = ui.kDateBegin->date(); 0566 QDate d2 = ui.kDateEnd->date(); 0567 if (d1 > d2) { 0568 ui.kDateBegin->setDate(d2); 0569 ui.kDateEnd->setDate(d1); 0570 } 0571 0572 ++m_count; 0573 if (m_count == 5) { 0574 m_modeEnable = false; 0575 } 0576 0577 ui.kDateSelect->setEnabled(p != ALL); 0578 ui.kTimeline->setEnabled(p == TIMELINE); 0579 ui.kFuture->setEnabled(p == CURRENT || p == LAST); 0580 ui.kInterval->setEnabled(p == CURRENT || p == PREVIOUS || p == LAST || p == TIMELINE); 0581 ui.kNbIntervals->setEnabled(p == PREVIOUS || p == LAST); 0582 0583 if (!m_modeEnable) { 0584 ui.kDateSelect->setVisible(p != ALL); 0585 ui.kTimeline->setVisible(p == TIMELINE); 0586 ui.kFuture->setVisible(p == CURRENT || p == LAST); 0587 ui.kInterval->setVisible(p == CURRENT || p == PREVIOUS || p == LAST || p == TIMELINE); 0588 ui.kNbIntervals->setVisible(p == PREVIOUS || p == LAST); 0589 } 0590 0591 ui.kDateSelect->setEnabled(p == CUSTOM); 0592 0593 // Needed to refresh dates 0594 getWhereClause(); 0595 0596 emit changed(); 0597 }