1 /***************************************************************************
2 dataproxy_sqlite.cpp - description
3 -------------------
4 begin : sept 2014
5 copyright : (C) 2014 by Jaime Robles
6 email : jaime@robles.es
7 ***************************************************************************/
8
9 /*****************************************************************************
10 * This file is part of KLog. *
11 * *
12 * KLog is free software: you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation, either version 3 of the License, or *
15 * (at your option) any later version. *
16 * *
17 * KLog is distributed in the hope that it will be useful, *
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
20 * GNU General Public License for more details. *
21 * *
22 * You should have received a copy of the GNU General Public License *
23 * along with KLog. If not, see <https://www.gnu.org/licenses/>. *
24 * *
25 *****************************************************************************/
26
27 #include "dataproxy_sqlite.h"
28 #include "utilities.h"
29 //#include <QDebug>
30
DataProxy_SQLite(const QString & _parentFunction,const QString & _softVersion)31 DataProxy_SQLite::DataProxy_SQLite(const QString &_parentFunction, const QString &_softVersion)
32 {
33 #ifdef QT_DEBUG
34 //qDebug() << Q_FUNC_INFO << _softVersion << _parentFunction << QT_ENDL;
35 #else
36 //qDebug() << Q_FUNC_INFO << "Running a release build";
37 #endif
38
39 //qDebug() << "DataProxy_SQLite::DataProxy_SQLite" << _softVersion << _parentFunction << QT_ENDL;
40
41 //qDebug() << "DataProxy_SQLite::DataProxy_SQLite 1" << QT_ENDL;
42 util = new Utilities();
43 util->setVersion(_softVersion);
44 qso = new QSO;
45
46 db = new DataBase(Q_FUNC_INFO, _softVersion, util->getKLogDBFile());
47 dbCreated = db->createConnection(Q_FUNC_INFO);
48 //dbCreated = db->createBandModeMaps();
49 //qDebug() << "DataProxy_SQLite::DataProxy_SQLite - END" << QT_ENDL;
50 searching = false;
51 executionN = 0;
52
53 //preparedQuery = new QSqlQuery;
54 //db = new DataBase(0);
55 //DataProxy_SQLite = new DataProxy_SQLite();
56 //qDebug() << "DataProxy_SQLite::DataProxy_SQLite END" << QT_ENDL;
57
58 //connect(db, SIGNAL(debugLog(QString, QString, int)), this, SLOT(slotCaptureDebugLogs(QString, QString, int)) );
59 }
60
~DataProxy_SQLite()61 DataProxy_SQLite::~DataProxy_SQLite()
62 {
63 //qDebug() << "DataProxy_SQLite::~DataProxy_SQLite" << QT_ENDL;
64 }
65
getHowManyQSOPerPropMode(const QString & _p,const int _logn)66 int DataProxy_SQLite::getHowManyQSOPerPropMode(const QString &_p, const int _logn)
67 {
68 //qDebug() << "DataProxy_SQLite::getHowManyQSOPerPropMode: " << _p << "/" << QString::number(_logn) << QT_ENDL;
69
70 QSqlQuery query;
71 QString queryString;
72 bool sqlOK;
73 if (_logn < 0)
74 {
75 queryString = QString("SELECT COUNT (DISTINCT id) FROM log WHERE prop_mode='%1'").arg(_p);
76 }
77 else
78 {
79 queryString = QString("SELECT COUNT (DISTINCT id) FROM log where lognumber='%1' AND prop_mode='%2'").arg(_logn).arg(_p);
80 }
81
82 sqlOK = query.exec(queryString);
83
84 //qDebug() << "DataProxy_SQLite::getHowManyQSOPerPropMode: queryString: " << queryString << QT_ENDL;
85 if (sqlOK)
86 {
87 query.next();
88 if (query.isValid())
89 {
90 //qDebug() << "DataProxy_SQLite::getHowManyQSOPerPropMode: " << QString::number((query.value(0)).toInt()) << QT_ENDL;
91 int v = (query.value(0)).toInt();
92 query.finish();
93 return v;
94 }
95 else
96 {
97 //qDebug() << "DataProxy_SQLite::getHowManyQSOPerPropModer: 0" << QT_ENDL;
98 query.finish();
99 return 0;
100 }
101 }
102 else
103 {
104 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
105 //qDebug() << "DataProxy_SQLite::getHowManyQSOPerPropMode: Query error" << QT_ENDL;
106 query.finish();
107 return 0;
108 }
109 }
110
getSoftVersion()111 QString DataProxy_SQLite::getSoftVersion()
112 { //SELECT MAX (softversion) FROM softwarecontrol
113 QSqlQuery query;
114 QString stQuery = QString("SELECT MAX (softversion) FROM softwarecontrol");
115 if (query.exec(stQuery))
116 {
117 query.next();
118 if (query.isValid())
119 {
120 QString v = (query.value(0)).toString();
121 query.finish();
122 //qDebug() << "DataProxy_SQLite::getSoftVersion: DATA: " << v << QT_ENDL;
123 if (v.length()<1)
124 {
125 //The following is not a query error but if the softwareversion value is lower than 0 or empty
126 queryError(Q_FUNC_INFO, tr("Software version in DB is null"), "-1", tr("Query didn't failed")); // To alert about any failed query execution
127 }
128 return v;
129 }
130 else
131 {
132 query.finish();
133 //qDebug() << "DataProxy_SQLite::getSoftVersion: version empty-1" << QT_ENDL;
134 return QString();
135 }
136 }
137 else
138 {
139 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
140 query.finish();
141 //qDebug() << "DataProxy_SQLite::getSoftVersion: version empty-1 - ERROR" << QT_ENDL;
142 return QString();
143 }
144 }
145
getDBVersion()146 QString DataProxy_SQLite::getDBVersion()
147 { //SELECT MAX (dbversion) FROM softwarecontrol
148 QSqlQuery query;
149 QString stQuery = QString("SELECT MAX (dbversion) FROM softwarecontrol");
150 if (query.exec(stQuery))
151 {
152 query.next();
153 if (query.isValid())
154 {
155 QString v = (query.value(0)).toString();
156 query.finish();
157 return v;
158 }
159 else
160 {
161 query.finish();
162 return QString();
163 }
164 }
165 else
166 {
167 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
168 query.finish();
169 return QString();
170 }
171 }
172
reconnectDB()173 bool DataProxy_SQLite::reconnectDB()
174 {
175 return db->reConnect(util->getKLogDBFile());
176 }
177
createLogModel()178 void DataProxy_SQLite::createLogModel()
179 {
180 //qDebug() << "DataProxy_SQLite::createLogModel" << QT_ENDL;
181 }
182
createLogPanel()183 void DataProxy_SQLite::createLogPanel(){
184 //qDebug() << "DataProxy_SQLite::createLogPanel" << QT_ENDL;
185 }
186
getIdFromModeName(const QString & _modeName)187 int DataProxy_SQLite::getIdFromModeName(const QString& _modeName)
188 {
189 //qDebug() << "DataProxy_SQLite::getIdFromModeName: " << _modeName << "/" << QString::number(db->getModeIDFromName2(_modeName)) << QT_ENDL;
190 if (_modeName.length()<2)
191 {
192 return -4;
193 }
194 return db->getModeIDFromName2(_modeName);
195 }
196
getSubModeIdFromSubMode(const QString & _subModeName)197 int DataProxy_SQLite::getSubModeIdFromSubMode(const QString &_subModeName)
198 {
199 //qDebug() << "DataProxy_SQLite::getSubModeIdFromSubMode: " << _subModeName << QT_ENDL;
200
201 if (_subModeName.length()<2)
202 {
203 return -3;
204 }
205 QSqlQuery query;
206 QString stQuery = QString("SELECT id FROM mode WHERE submode='%1'").arg(_subModeName.toUpper());
207 if (query.exec(stQuery))
208 {
209 query.next();
210 if (query.isValid())
211 {
212 int v = (query.value(0)).toInt();
213 query.finish();
214 return v;
215 }
216 else
217 {
218 query.finish();
219 return -1;
220 }
221 }
222 else
223 {
224 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
225 query.finish();
226 return -2;
227 }
228 }
229
getModeIdFromSubModeId(const int _sm)230 int DataProxy_SQLite::getModeIdFromSubModeId(const int _sm)
231 {
232 return getIdFromModeName(getNameFromSubMode(getSubModeFromId(_sm)));
233 }
234
isModeDeprecated(const QString & _sm)235 bool DataProxy_SQLite::isModeDeprecated (const QString &_sm)
236 {
237 if (_sm.length()<2)
238 {
239 return -3;
240 }
241 QSqlQuery query;
242 QString stQuery = QString("SELECT deprecated FROM mode WHERE submode='%1'").arg(_sm);
243 if (query.exec(stQuery))
244 {
245 query.next();
246 if (query.isValid())
247 {
248 if ( (query.value(0)).toInt() == 1 )
249 {
250 query.finish();
251 return true;
252 }
253 else
254 {
255 query.finish();
256 return false;
257 }
258 }
259 else
260 {
261 query.finish();
262 return false; // In case we can't check, we don't state it as deprecated
263 }
264 }
265 else
266 {
267 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
268 query.finish();
269 return false; // In case we can't check, we don't state it as deprecated
270 }
271 }
272
getIdFromBandName(const QString & _bandName)273 int DataProxy_SQLite::getIdFromBandName(const QString& _bandName)
274 {
275 //qDebug() << "DataProxy_SQLite::getIdFromBandName: " << _bandName << "/" << QString::number(db->getBandIDFromName2(_bandName))<< QT_ENDL;
276 if (_bandName.length()<1)
277 {
278 //qDebug() << "DataProxy_SQLite::getIdFromBandName:-4: " << _bandName << "/" << QString::number(db->getBandIDFromName2(_bandName))<< QT_ENDL;
279 return -4;
280 }
281
282 return db->getBandIDFromName2(_bandName);
283 }
284
getNameFromBandId(const int _id)285 QString DataProxy_SQLite::getNameFromBandId (const int _id)
286 {
287 //qDebug() << "DataProxy_SQLite::getNameFromBandId: " << QString::number(_id) << QT_ENDL;
288 return db->getBandNameFromID2(_id);
289 }
290
getNameFromModeId(const int _id)291 QString DataProxy_SQLite::getNameFromModeId (const int _id)
292 {
293 //qDebug() << "DataProxy_SQLite::getNameFromModeId" << QT_ENDL;
294 //return db->getModeNameFromID2(_id);
295
296 return db->getModeNameFromNumber(_id);
297 }
298
getNameFromSubModeId(const int _id)299 QString DataProxy_SQLite::getNameFromSubModeId (const int _id)
300 {
301 //qDebug() << "DataProxy_SQLite::getNameFromSubModeId: " << QString::number(_id) << "DB: " << db->getModeNameFromID2(_id) << QT_ENDL;
302 return db->getSubModeNameFromID2(_id);
303
304 /*
305 QSqlQuery query;
306 QString queryString = QString("SELECT submode, name, deprecated FROM mode WHERE id='%1'").arg(_id);
307 bool sqlOK = query.exec(queryString);
308 if (sqlOK)
309 {
310 query.next();
311 if (query.isValid())
312 {
313 if ( (query.value(2)).toInt()<0 )
314 { // DEPRECATED VALUE, return the MODE
315 return (query.value(1)).toString();
316 }
317 else
318 {
319 return (query.value(0)).toString();
320 }
321 }
322 else
323 {
324 return QString();
325 }
326 }
327 else
328 {
329 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
330 return QString();
331 }
332 */
333 }
334
getSubModeFromId(const int _id)335 QString DataProxy_SQLite::getSubModeFromId (const int _id)
336 {
337 //qDebug() << "DataProxy_SQLite::getSubModeFromId: " << QString::number(_id) << QT_ENDL;
338 QSqlQuery query;
339 QString queryString = QString("SELECT submode FROM mode WHERE id='%1'").arg(_id);
340 bool sqlOK = query.exec(queryString);
341
342 if (sqlOK)
343 {
344 query.next();
345 if (query.isValid())
346 {
347 QString v = (query.value(0)).toString();
348 query.finish();
349 return v;
350 }
351 else
352 {
353 query.finish();
354 return QString();
355 }
356 }
357 else
358 {
359 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
360 query.finish();
361 return QString();
362 }
363 }
364
getNameFromSubMode(const QString & _sm)365 QString DataProxy_SQLite::getNameFromSubMode (const QString &_sm)
366 {
367 QSqlQuery query;
368 QString queryString = QString("SELECT name FROM mode WHERE submode='%1'").arg(_sm.toUpper());
369 //QString queryString = QString("SELECT name, deprecated FROM mode WHERE submode='%1'").arg(_sm.toUpper());
370 bool sqlOK = query.exec(queryString);
371
372 if (sqlOK)
373 {
374 query.next();
375 if (query.isValid())
376 {
377 QString v = (query.value(0)).toString();
378 query.finish();
379 return v;
380 }
381 else
382 {
383 query.finish();
384 return QString();
385 }
386 }
387 else
388 {
389 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
390 query.finish();
391 return QString();
392 }
393 }
394
getFreqFromBandId(const int _id)395 QString DataProxy_SQLite::getFreqFromBandId(const int _id)
396 {
397 //qDebug() << "DataProxy_SQLite::getFreqFromBandId: " << QString::number(_id) << QT_ENDL;
398 return db->getFreqFromBandId(_id);
399 }
400
getBandIdFromFreq(const double _n)401 int DataProxy_SQLite::getBandIdFromFreq(const double _n)
402 {
403 //qDebug() << "DataProxy_SQLite::getBandIdFromFreq: " << QString::number(_n) << QT_ENDL;
404 //Freq should be in MHz
405 bool sqlOk = false;
406 QString queryString = QString("SELECT id FROM band WHERE lower <= '%1' and upper >= '%2'").arg(_n).arg(_n);
407
408 QSqlQuery query(queryString);
409 sqlOk = query.exec();
410
411 //qDebug() << "DataProxy_SQLite::getBandIdFromFreq: Query: " << query.lastQuery() << QT_ENDL;
412 if (sqlOk)
413 {
414 //qDebug() << "DataProxy_SQLite::getBandIdFromFreq: Query OK" << QT_ENDL;
415 query.next();
416
417
418 if (query.isValid())
419 {
420 int v = (query.value(0)).toInt();
421 query.finish();
422 return v;
423 }
424 else
425 {
426 query.finish();
427 return -1;
428 }
429 }
430 else
431 {
432 //qDebug() << "DataProxy_SQLite::getBandIdFromFreq: Query NOK" << QT_ENDL;
433 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
434 query.finish();
435 return -2;
436 }
437 //return -3;
438 }
439
getBandNameFromFreq(const double _n)440 QString DataProxy_SQLite::getBandNameFromFreq(const double _n)
441 {
442 //qDebug() << "DataProxy_SQLite::getBandNameFromFreq: " << QString::number(_n) << QT_ENDL;
443 return getNameFromBandId(getBandIdFromFreq(_n));
444 }
445
getLowLimitBandFromBandName(const QString & _sm)446 double DataProxy_SQLite::getLowLimitBandFromBandName(const QString &_sm)
447 {
448 //qDebug() << "DataProxy_SQLite::getLowLimitBandFromBandName: " << _sm << QT_ENDL;
449 if (_sm.length ()<2)
450 {
451 return -1.0;
452 }
453 QSqlQuery query;
454 QString queryString = QString("SELECT lower FROM band WHERE name='%1' OR name='%2'").arg(_sm).arg(_sm.toUpper());
455 bool sqlOK = query.exec(queryString);
456
457 if (sqlOK)
458 {
459 query.next();
460 if (query.isValid())
461 {
462 if ( (query.value(0)).toDouble()<0 )
463 {
464 //qDebug() << "DataProxy_SQLite::getLowLimitBandFromBandName: -1.0-1" << QT_ENDL;
465 query.finish();
466 return -1.0;
467 }
468 else
469 {
470 //qDebug() << "DataProxy_SQLite::getLowLimitBandFromBandName(else): " << QString::number((query.value(0)).toDouble()) << QT_ENDL;
471 double v = (query.value(0)).toDouble();
472 query.finish();
473 return v;
474 }
475 }
476 else
477 {
478 //qDebug() << "DataProxy_SQLite::getLowLimitBandFromBandName: -1.0-2" << QT_ENDL;
479 query.finish();
480 return -1.0;
481 }
482
483 //qDebug() << "DataProxy_SQLite::getLowLimitBandFromBandName: -1.0-3" << QT_ENDL;
484 //query.finish();
485 //return -1.0;
486 }
487 else
488 {
489 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
490 query.finish();
491 return -1.0;
492 }
493 //return -1.0;
494 }
495
496
getLowLimitBandFromBandId(const int _sm)497 double DataProxy_SQLite::getLowLimitBandFromBandId(const int _sm)
498 {
499 //qDebug() << "DataProxy_SQLite::getLowLimitBandFromBandId" << QT_ENDL;
500
501 QSqlQuery query;
502 QString queryString = QString("SELECT lower FROM band WHERE id='%1'").arg(_sm);
503 bool sqlOK = query.exec(queryString);
504
505 if (sqlOK)
506 {
507 query.next();
508 if (query.isValid())
509 {
510 if ( (query.value(1)).toDouble()<0 )
511 {
512 //qDebug() << "DataProxy_SQLite::getLowLimitBandFromBandId: -1.0-1" << QT_ENDL;
513 query.finish();
514 return -1.0;
515 }
516 else
517 {
518 //qDebug() << "DataProxy_SQLite::getLowLimitBandFromBandId: " << QString::number((query.value(0)).toDouble()) << QT_ENDL;
519 double v = (query.value(0)).toDouble();
520 query.finish();
521 return v;
522 }
523 }
524 else
525 {
526 //qDebug() << "DataProxy_SQLite::getLowLimitBandFromBandId: -1.0-2" << QT_ENDL;
527 query.finish();
528 return -1.0;
529 }
530 }
531 else
532 {
533 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
534 query.finish();
535 return -1.0;
536 }
537 }
538
getUpperLimitBandFromBandName(const QString & _sm)539 double DataProxy_SQLite::getUpperLimitBandFromBandName(const QString &_sm)
540 {
541 //qDebug() << Q_FUNC_INFO << ": " << _sm << QT_ENDL;
542 if (_sm.length ()<2)
543 {
544 return -1.0;
545 }
546 QSqlQuery query;
547 QString queryString = QString("SELECT upper FROM band WHERE name='%1' OR name='%2'").arg(_sm).arg(_sm.toUpper());
548 bool sqlOK = query.exec(queryString);
549
550 if (sqlOK)
551 {
552 query.next();
553 if (query.isValid())
554 {
555 if ( (query.value(0)).toDouble()<0 )
556 {
557 //qDebug() << Q_FUNC_INFO << ": -1.0-1" << QT_ENDL;
558 query.finish();
559 return -1.0;
560 }
561 else
562 {
563 //qDebug() << Q_FUNC_INFO << ": (else): " << QString::number((query.value(0)).toDouble()) << QT_ENDL;
564 double v = (query.value(0)).toDouble();
565 query.finish();
566 return v;
567 }
568 }
569 else
570 {
571 //qDebug() << Q_FUNC_INFO << ": -1.0-2" << QT_ENDL;
572 query.finish();
573 return -1.0;
574 }
575
576 //qDebug() << Q_FUNC_INFO << ": -1.0-3" << QT_ENDL;
577 //query.finish();
578 //return -1.0;
579 }
580 else
581 {
582 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
583 query.finish();
584 return -1.0;
585 }
586 //return -1.0;
587 }
588
isThisFreqInBand(const QString & _band,const QString & _fr)589 bool DataProxy_SQLite::isThisFreqInBand(const QString &_band, const QString &_fr)
590 {
591 return db->isThisFreqInBand(_band, _fr);
592 }
593
getFields()594 QStringList DataProxy_SQLite::getFields()
595 {
596 //qDebug() << Q_FUNC_INFO;
597 QStringList fields;
598 fields.clear();
599 QSqlQuery q;
600 QSqlRecord localRecord = q.driver()->record("log");
601 for (int var = 0; var < localRecord.count(); ++var) {
602 QString fieldName = localRecord.fieldName(var);
603 fields << fieldName;
604 //qDebug() << fieldName;
605 }
606 /*
607 QString LogWindow::getColumnName(int col)
608 {
609 return logModel->record().fieldName(col);
610 }
611 */
612 return fields;
613 }
614
getBands()615 QStringList DataProxy_SQLite::getBands()
616 {
617 //qDebug() << "DataProxy_SQLite::getBands - DEPRECATED please use getBandNames - TODO: Remove this function and change the calls" << QT_ENDL;
618 return getBandNames();
619 /*
620 QStringList bands = QStringList();
621 QSqlQuery query("SELECT name FROM band");
622 while (query.next()) {
623 if (query.isValid()){
624 bands << query.value(0).toString();
625 }
626 }
627 //return bands;
628 return sortBandNamesBottonUp(bands);
629 */
630 }
631
getBandNames()632 QStringList DataProxy_SQLite::getBandNames()
633 {
634 //qDebug() << "DataProxy_SQLite::getBandNames" << QT_ENDL;
635 QStringList bands = QStringList();
636 QSqlQuery query;
637 QString queryString;
638 bool sqlOK;
639 queryString = QString("SELECT DISTINCT name FROM band");
640 sqlOK = query.exec(queryString);
641
642 if (sqlOK)
643 {
644 while(query.next())
645 {
646 if (query.isValid())
647 {
648 queryString = (query.value(0)).toString();
649 //qDebug() << "DataProxy_SQLite::getBandNames: " << queryString << QT_ENDL;
650 bands.append(queryString);
651 }
652 else
653 {
654 query.finish();
655 return QStringList();
656 }
657 }
658 query.finish();
659 return sortBandNamesBottonUp(bands);
660 //return bands;
661 }
662 else
663 {
664 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
665 query.finish();
666 return QStringList();
667 }
668 }
669
getModes()670 QStringList DataProxy_SQLite::getModes()
671 {
672 QStringList modes = QStringList();
673 QSqlQuery query("SELECT submode FROM mode ORDER BY submode");
674
675 while (query.next()) {
676 if (query.isValid()){
677 modes << query.value(0).toString();
678 }
679 }
680 query.finish();
681 modes.sort();
682 return modes;
683 }
684
sortBandNamesBottonUp(const QStringList _qs)685 QStringList DataProxy_SQLite::sortBandNamesBottonUp(const QStringList _qs)
686 {
687 //Receives a list of band names, sorts it from the lower band to the upper band and returns
688 //qDebug() << "DataProxy_SQLite::sortBandNamesBottonUp: " << QString::number(_qs.length()) << QT_ENDL;
689 if (_qs.length()<2)
690 {
691 return _qs;
692 }
693
694 QMap<double, QString> map;
695 map.clear();
696 QStringList qs;
697 qs.clear();
698 //qDebug() << "DataProxy_SQLite::sortBandNamesBottonUp-00" << QT_ENDL;
699
700 for (int j=0; j<_qs.count(); j++)
701 {
702 map.insert(getLowLimitBandFromBandName(_qs.at(j)), _qs.at(j));
703 }
704 //qDebug() << "DataProxy_SQLite::sortBandNamesBottonUp-10" << QT_ENDL;
705 QMap<double, QString>::const_iterator i = map.constBegin();
706 //qDebug() << "DataProxy_SQLite::sortBandNamesBottonUp-20" << QT_ENDL;
707 while (i != map.constEnd()) {
708 qs << i.value();
709 ++i;
710 }
711
712 //qDebug() << "DataProxy_SQLite::sortBandNamesBottonUp - END -lengh = " << QString::number(qs.length()) << QT_ENDL;
713 qs.removeDuplicates();
714 return qs;
715 }
716
717
getBandIDs()718 QStringList DataProxy_SQLite::getBandIDs()
719 {
720 //qDebug() << "DataProxy_SQLite::getBandIDs" << QT_ENDL;
721 QStringList bands = QStringList();
722 QSqlQuery query("SELECT id FROM band");
723
724 while (query.next()) {
725 if (query.isValid()){
726 bands << query.value(0).toString();
727 }
728 }
729 query.finish();
730 return sortBandIdBottonUp(bands);
731 }
732
sortBandIdBottonUp(const QStringList _qs)733 QStringList DataProxy_SQLite::sortBandIdBottonUp(const QStringList _qs)
734 {
735 //Receives a list of band id, sorts it from the lower band to the upper band and returns
736 QMap<double, QString> map;
737 QStringList qs;
738 qs.clear();
739
740
741 for (int j=0; j<_qs.count(); j++)
742 {
743 map.insert(getLowLimitBandFromBandId(_qs.at(j).toInt()), _qs.at(j));
744 }
745
746 QMap<double, QString>::const_iterator i = map.constBegin();
747
748 while (i != map.constEnd()) {
749 qs << i.value();
750 ++i;
751 }
752
753 return qs;
754 }
755
getModesIDs()756 QStringList DataProxy_SQLite::getModesIDs()
757 {
758 QStringList modes = QStringList();
759 QSqlQuery query("SELECT id FROM mode");
760
761 while (query.next()) {
762 if (query.isValid()){
763 modes << query.value(0).toString();
764 }
765 }
766 query.finish();
767 return modes;
768 }
769
770
getBandsInLog(const int _log)771 QStringList DataProxy_SQLite::getBandsInLog(const int _log)
772 {
773 //qDebug() << "DataProxy_SQLite::getBandsInLog: " << QT_ENDL;
774 QStringList bands = QStringList();
775 QString queryString = QString();
776 if (_log <= 0)
777 {
778 queryString = QString("SELECT DISTINCT band.name FROM log, band WHERE band.id = log.bandid ORDER BY band.id DESC");
779 }
780 else
781 {
782 queryString = QString("SELECT DISTINCT band.name FROM log, band WHERE band.id = log.bandid AND log.lognumber='%1' ORDER BY band.id DESC").arg(_log);
783 }
784
785 QSqlQuery query(queryString);
786
787 while (query.next()) {
788 if (query.isValid()){
789 bands << query.value(0).toString();
790 }
791 }
792 query.finish();
793 return sortBandNamesBottonUp(bands);
794 //return bands;
795 }
796
getModesInLog(const int _log)797 QStringList DataProxy_SQLite::getModesInLog(const int _log)
798 {
799 //qDebug() << "DataProxy_SQLite::getModesInLog: " << QT_ENDL;
800 QStringList modes = QStringList();
801 QString queryString = QString();
802 if (_log <=0 )
803 {
804 queryString = QString("SELECT mode.id, mode.submode, COUNT (mode.submode) FROM log, mode WHERE mode.id = log.modeid GROUP BY mode.submode ORDER BY count (mode.submode) DESC");
805 }
806 else
807 {
808 queryString = QString("SELECT mode.id, mode.submode, COUNT (mode.submode) FROM log, mode WHERE mode.id = log.modeid AND log.lognumber='%1' GROUP BY mode.submode ORDER BY count (mode.submode) DESC").arg(_log);
809 }
810
811 QSqlQuery query(queryString);
812
813 while (query.next()) {
814 if (query.isValid()){
815 modes << query.value(1).toString();
816 }
817 }
818 query.finish();
819 //qDebug() << "DataProxy_SQLite::getModesInLog: " << modes.join(" - ") << QT_ENDL;
820 modes.sort();
821 return modes;
822 }
823
getMostUsedBand(const int _log)824 int DataProxy_SQLite::getMostUsedBand(const int _log)
825 {
826 //qDebug() << "DataProxy_SQLite::getMostUsedBand: " << QT_ENDL;
827
828 QString queryString = QString();
829 if (_log <=0 )
830 {
831 queryString = QString("SELECT band.id, band.name, COUNT (band.name) FROM log, band WHERE band.id = log.bandid GROUP BY band.id ORDER BY count (band.id) DESC LIMIT 1");
832 }
833 else
834 {
835 queryString = QString("SELECT band.id, band.name, COUNT (band.name) FROM log, band WHERE band.id = log.bandid AND log.lognumber='%1' GROUP BY band.id ORDER BY count (band.id) DESC LIMIT 1").arg(_log);
836 }
837 QSqlQuery query;
838 bool sqlOK = query.exec(queryString);
839
840 if (sqlOK)
841 {
842 if (query.next())
843 {
844 if (query.isValid())
845 {
846 int v = query.value(0).toInt();
847 query.finish();
848 //qDebug() << "DataProxy_SQLite::getMostUsedBand-OK: " << QString::number(v)<< QT_ENDL;
849 return v;
850 }
851 }
852 }
853 else
854 {
855 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
856 query.finish();
857 //qDebug() << "DataProxy_SQLite::getMostUsedBand-ERROR-1: " << QT_ENDL;
858 return -1;
859 }
860 //qDebug() << "DataProxy_SQLite::getMostUsedBand-ERROR-2: " << QT_ENDL;
861 return -2;
862 }
863
getMostUsedMode(const int _log)864 int DataProxy_SQLite::getMostUsedMode(const int _log)
865 {
866 //qDebug() << "DataProxy_SQLite::getMostUsedMode: " << QT_ENDL;
867
868 QString queryString = QString();
869 if (_log <=0 )
870 {
871 queryString = QString("SELECT mode.id, mode.submode, COUNT (mode.submode) FROM log, mode WHERE mode.id = log.modeid GROUP BY mode.submode ORDER BY count (mode.submode) DESC LIMIT 1");
872 }
873 else
874 {
875 queryString = QString("SELECT mode.id, mode.submode, COUNT (mode.submode) FROM log, mode WHERE mode.id = log.modeid AND log.lognumber='%1' GROUP BY mode.submode ORDER BY count (mode.submode) DESC LIMIT 1").arg(_log);
876 }
877 QSqlQuery query;
878 bool sqlOK = query.exec(queryString);
879
880 if (sqlOK)
881 {
882 if (query.next())
883 {
884 if (query.isValid())
885 {
886 int v = query.value(0).toInt();
887 query.finish();
888 return v;
889 }
890 }
891 query.finish();
892 }
893 else
894 {
895 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
896 query.finish();
897 return -1;
898 }
899 return -2;
900 }
901
902
getLastQSOid()903 int DataProxy_SQLite::getLastQSOid()
904 {
905 //qDebug() << "DataProxy_SQLite::getLastQSOid" << QT_ENDL;
906 QSqlQuery query;
907 bool sqlOK = query.exec("SELECT MAX(id) from log");
908
909 if (sqlOK)
910 {
911 query.next();
912 if (query.isValid())
913 {
914 int v = query.value(0).toInt();
915 query.finish();
916 return v;
917 }
918 else
919 {
920 query.finish();
921 return -1;
922 }
923 }
924 else
925 {
926 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
927 query.finish();
928 return -1;
929 }
930 }
931
getFirstQSODateFromCall(const QString & _call)932 QDate DataProxy_SQLite::getFirstQSODateFromCall (const QString &_call)
933 {
934 //qDebug() << "DataProxy_SQLite::getFirstQSODateFromCall: " << _call << QT_ENDL;
935
936 QSqlQuery query;
937 QString stringQuery;
938 QDate _date;
939 if (util->isValidCall(_call))
940 {
941 stringQuery = QString("SELECT qso_date from log where station_callsign='%1' ORDER BY qso_date ASC LIMIT 1").arg(_call);
942 }
943 else
944 {
945 stringQuery = QString("SELECT qso_date from log where 1 ORDER BY qso_date ASC LIMIT 1");
946 }
947
948 bool sqlOK = query.exec(stringQuery);
949
950 if (sqlOK)
951 {
952 query.next();
953 if (query.isValid())
954 {
955 _date = util->getDateFromSQliteString((query.value(0)).toString());
956 //_date = QDate::fromString((query.value(0)).toString(), "yyyy-MM-dd");
957 //stringQuery = query.value(0).toString();
958 query.finish();
959 if (_date.isValid())
960 {
961 //qDebug() << "DataProxy_SQLite::getFirstQSODateFromCall: END OK" << QT_ENDL;
962 return _date;
963 }
964 else
965 {
966 //qDebug() << "DataProxy_SQLite::getFirstQSODateFromCall: END-1 " << QT_ENDL;
967 return QDate();
968 }
969 }
970 else
971 {
972 query.finish();
973 //qDebug() << "DataProxy_SQLite::getFirstQSODateFromCall: END-2" << QT_ENDL;
974 return QDate();
975 }
976 }
977 else
978 {
979 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
980 query.finish();
981 //qDebug() << "DataProxy_SQLite::getFirstQSODateFromCall: END-3" << QT_ENDL;
982 return QDate();
983 }
984 }
985
getLastQSODateFromCall(const QString & _call)986 QDate DataProxy_SQLite::getLastQSODateFromCall (const QString &_call)
987 {
988 //qDebug() << "DataProxy_SQLite::getLastQSODateFromCall: " << _call << QT_ENDL;
989 QSqlQuery query;
990 QString stringQuery;
991 QDate _date;
992 if (util->isValidCall(_call))
993 {
994 stringQuery = QString("SELECT qso_date from log where station_callsign='%1' ORDER BY qso_date DESC LIMIT 1").arg(_call);
995 }
996 else
997 {
998 stringQuery = QString("SELECT qso_date from log where 1 ORDER BY qso_date DESC LIMIT 1");
999 }
1000
1001 bool sqlOK = query.exec(stringQuery);
1002
1003 if (sqlOK)
1004 {
1005 query.next();
1006 if (query.isValid())
1007 {
1008 _date = util->getDateFromSQliteString((query.value(0)).toString());
1009 //_date = QDate::fromString((query.value(0)).toString(), "yyyy-MM-dd");
1010 //stringQuery = query.value(0).toString();
1011 query.finish();
1012 if (_date.isValid())
1013 {
1014 //qDebug() << "DataProxy_SQLite::getLastQSODateFromCall: OK" << QT_ENDL;
1015 return _date;
1016 }
1017 else
1018 {
1019 //qDebug() << "DataProxy_SQLite::getLastQSODateFromCall: END-1" << QT_ENDL;
1020 return QDate();
1021 }
1022 }
1023 else
1024 {
1025 query.finish();
1026 //qDebug() << "DataProxy_SQLite::getLastQSODateFromCall: END-2" << QT_ENDL;
1027 return QDate();
1028 }
1029 }
1030 else
1031 {
1032 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1033 query.finish();
1034 //qDebug() << "DataProxy_SQLite::getLastQSODateFromCall: END-3" << QT_ENDL;
1035 return QDate();
1036 }
1037 }
1038
clearLog()1039 bool DataProxy_SQLite::clearLog()
1040 {
1041 //qDebug() << "DataProxy_SQLite::clearLog" << QT_ENDL;
1042 //int errorCode = 0;
1043 QSqlQuery query;
1044 bool sqlOK = query.exec("DELETE FROM log");
1045
1046 if (sqlOK)
1047 {
1048 //qDebug() << "DataProxy_SQLite::clearLog: Log deleted!" << QT_ENDL;
1049 }
1050 else
1051 {
1052 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1053 //qDebug() << "DataProxy_SQLite::clearLog: Log deleted FAILED" << QT_ENDL;
1054 //errorCode = query.lastError().nativeErrorCode();
1055
1056 //qDebug() << "DataProxy_SQLite::clearLog: LastQuery: " << query.lastQuery() << QT_ENDL;
1057 //qDebug() << "DataProxy_SQLite::clearLog: LastError-data: " << query.lastError().databaseText() << QT_ENDL;
1058 //qDebug() << "DataProxy_SQLite::clearLog: LastError-driver: " << query.lastError().driverText() << QT_ENDL;
1059 //qDebug() << "DataProxy_SQLite::clearLog: LastError-n: " << QString::number(query.lastError().nativeErrorCode() ) << QT_ENDL;
1060 }
1061 query.finish();
1062 sqlOK = query.exec("DELETE FROM awarddxcc");
1063
1064
1065 if (sqlOK)
1066 {
1067 //qDebug() << "DataProxy_SQLite::clearLog: Awarddxcc deleted!" << QT_ENDL;
1068 }
1069 else
1070 {
1071 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1072 //qDebug() << "DataProxy_SQLite::clearLog: Awarddxcc deletedFAILED" << QT_ENDL;
1073
1074 //qDebug() << "DataProxy_SQLite::clearLog - query error: " << QString::number(query.lastError().nativeErrorCode()) << QT_ENDL;
1075 //qDebug() << "DataProxy_SQLite::clearLog: LastQuery: " << query.lastQuery() << QT_ENDL;
1076 //qDebug() << "DataProxy_SQLite::clearLog: LastError-data: " << query.lastError().databaseText() << QT_ENDL;
1077 //qDebug() << "DataProxy_SQLite::clearLog: LastError-driver: " << query.lastError().driverText() << QT_ENDL;
1078 //qDebug() << "DataProxy_SQLite::clearLog: LastError-n: " << QString::number(query.lastError().nativeErrorCode() ) << QT_ENDL;
1079 }
1080 query.finish();
1081 if (query.exec("DELETE FROM awardwaz"))
1082 {
1083 //qDebug() << "DataProxy_SQLite::clearLog: Awardwaz deleted!" << QT_ENDL;
1084 }
1085 else
1086 {
1087 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1088 //qDebug() << "DataProxy_SQLite::clearLog: Awardwaz deleted FAILED" << QT_ENDL;
1089 //errorCode = query.lastError().nativeErrorCode();
1090 //qDebug() << "DataProxy_SQLite::clearLog - query error: " << QString::number(query.lastError().nativeErrorCode()) << QT_ENDL;
1091 //qDebug() << "DataProxy_SQLite::clearLog: LastQuery: " << query.lastQuery() << QT_ENDL;
1092 //qDebug() << "DataProxy_SQLite::clearLog: LastError-data: " << query.lastError().databaseText() << QT_ENDL;
1093 //qDebug() << "DataProxy_SQLite::clearLog: LastError-driver: " << query.lastError().driverText() << QT_ENDL;
1094 //qDebug() << "DataProxy_SQLite::clearLog: LastError-n: " << QString::number(query.lastError().nativeErrorCode() ) << QT_ENDL;
1095 }
1096
1097 query.finish();
1098 //query.clear();
1099
1100 if (query.isActive())
1101 {
1102 //qDebug() << "DataProxy_SQLite::clearLog: Query Active!" << QT_ENDL;
1103 query.finish();
1104 return false;
1105 }
1106 else
1107 {
1108 query.prepare("VACUUM;");
1109
1110 //qDebug() << "DataProxy_SQLite::clearLog: Query Not Active!" << QT_ENDL;
1111 if (query.exec())
1112 {
1113 //qDebug() << "DataProxy_SQLite::clearLog: VACUUM OK!" << QT_ENDL;
1114 query.finish();
1115 return true;
1116 }
1117 else
1118 {
1119 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1120 //qDebug() << "DataProxy_SQLite::clearLog: VACUUM FAILED" << QT_ENDL;
1121 //errorCode = query.lastError().nativeErrorCode();
1122 //qDebug() << "DataProxy_SQLite::clearLog - query error: " << QString::number(query.lastError().nativeErrorCode()) << QT_ENDL;
1123 //qDebug() << "DataProxy_SQLite::clearLog: LastQuery: " << query.lastQuery() << QT_ENDL;
1124 //qDebug() << "DataProxy_SQLite::clearLog: LastError-data: " << query.lastError().databaseText() << QT_ENDL;
1125 //qDebug() << "DataProxy_SQLite::clearLog: LastError-driver: " << query.lastError().driverText() << QT_ENDL;
1126 //qDebug() << "DataProxy_SQLite::clearLog: LastError-n: " << QString::number(query.lastError().nativeErrorCode() ) << QT_ENDL;
1127 }
1128 }
1129 query.finish();
1130 return false;
1131 }
1132
qslSentViaDirect(const int _qsoId,const QDate & _updateDate)1133 bool DataProxy_SQLite::qslSentViaDirect(const int _qsoId, const QDate &_updateDate)
1134 {
1135 //qDebug() << "DataProxy_SQLite::qslSentViaDirect" << QT_ENDL;
1136 QSqlQuery query;
1137 QString queryString;
1138 queryString = QString("UPDATE log SET qsl_sent = 'Y', qsl_sent_via = 'D', qslsdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1139 //qDebug() << "DataProxy_SQLite::qslSentViaDirect: " << queryString << QT_ENDL;
1140 bool sqlOK = query.exec(queryString);
1141 query.finish();
1142 if (sqlOK)
1143 {
1144 return true;
1145 }
1146 else
1147 {
1148 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1149 }
1150 return false;
1151 }
1152
qslSentViaBureau(const int _qsoId,const QDate & _updateDate)1153 bool DataProxy_SQLite::qslSentViaBureau(const int _qsoId, const QDate &_updateDate)
1154 {
1155 //qDebug() << "DataProxy_SQLite::qslSentViaBureau" << QT_ENDL;
1156
1157 QSqlQuery query;
1158 QString queryString;
1159 queryString = QString("UPDATE log SET qsl_sent = 'Y', qsl_sent_via = 'B', qslsdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1160
1161 bool sqlOK = query.exec(queryString);
1162 query.finish();
1163 if (sqlOK)
1164 {
1165 //qDebug() << "DataProxy_SQLite::qslSentViaBureau - OK" << QT_ENDL;
1166 return true;
1167 }
1168 else
1169 {
1170 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1171 //qDebug() << "DataProxy_SQLite::qslSentViaBureau - NOK" << QT_ENDL;
1172 }
1173 return false;
1174 }
1175
qslRecViaBureau(const int _qsoId,const QDate & _updateDate)1176 bool DataProxy_SQLite::qslRecViaBureau(const int _qsoId, const QDate &_updateDate)
1177 {
1178 //qDebug() << "DataProxy_SQLite::" << QString::number (_qsoId) << "/" << _updateDate << QT_ENDL;
1179 QSqlQuery query;
1180 QString queryString;
1181
1182
1183 queryString = QString("UPDATE log SET qsl_rcvd = 'Y', qsl_rcvd_via = 'B', qslrdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1184 bool sqlOK = query.exec(queryString);
1185 query.finish();
1186 if (sqlOK)
1187 {
1188 //qDebug() << "DataProxy_SQLite:: TRUE" << QT_ENDL;
1189 //setDXCCAwardStatus(_qsoId);
1190 //setWAZAwardStatus(_qsoId);
1191 return true;
1192 }
1193 else
1194 {
1195 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1196 }
1197 //qDebug() << "DataProxy_SQLite:: FALSE" << QT_ENDL;
1198 return false;
1199 }
1200
qslRecViaBureau(const int _qsoId,const QDate & _updateDate,const bool _queueSentQSL)1201 bool DataProxy_SQLite::qslRecViaBureau(const int _qsoId, const QDate &_updateDate, const bool _queueSentQSL)
1202 {
1203 //qDebug() << "DataProxy_SQLite::qslRecViaBureau: " << _updateDate << QT_ENDL;
1204 QSqlQuery query;
1205 QString queryString;
1206 //bool requestQSL = false;
1207 bool sqlOK;
1208
1209 if (_queueSentQSL)
1210 {
1211 queryString = QString("SELECT qsl_sent FROM log WHERE id = '%1'").arg(_qsoId);
1212
1213 sqlOK = query.exec(queryString);
1214
1215 if (sqlOK)
1216 {
1217 query.next();
1218 if (query.isValid())
1219 {
1220 queryString = (query.value(0)).toString();
1221 if ((queryString == "Y") || (queryString == "R"))
1222 {
1223 // NO ACTION REQUIRED, QSL IS ALREADY SENT
1224 //qDebug() << "DataProxy_SQLite::qslRecViaBureau: QSL already requested" << QT_ENDL;
1225 //requestQSL = false;
1226 queryString = QString("UPDATE log SET qsl_rcvd = 'Y', qsl_rcvd_via = 'B', qslrdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1227 }
1228 else
1229 {
1230 //qDebug() << "DataProxy_SQLite::qslRecViaBureau: Request QSL-1" << QT_ENDL;
1231 //requestQSL = true;
1232 queryString = QString("UPDATE log SET qsl_rcvd = 'Y', qsl_rcvd_via = 'B', qsl_sent='R', qslrdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1233 }
1234 }
1235 else
1236 {
1237 //qDebug() << "DataProxy_SQLite::qslRecViaBureau: Request QSL-2" << QT_ENDL;
1238 queryString = QString("UPDATE log SET qsl_rcvd = 'Y', qsl_rcvd_via = 'B', qsl_sent='R', qslrdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1239 //requestQSL = true;
1240 }
1241 }
1242 else
1243 {
1244 //qDebug() << "DataProxy_SQLite::qslRecViaBureau: Request QSL-3" << QT_ENDL;
1245 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1246 queryString = QString("UPDATE log SET qsl_rcvd = 'Y', qsl_rcvd_via = 'B', qsl_sent='R', qslrdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1247 //requestQSL = true;
1248 }
1249 }
1250 else
1251 {
1252 //requestQSL = false;
1253 queryString = QString("UPDATE log SET qsl_rcvd = 'Y', qsl_rcvd_via = 'B', qslrdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1254 }
1255 query.finish();
1256 sqlOK = query.exec(queryString);
1257
1258 //queryString = QString("UPDATE log SET qsl_rcvd = 'Y', qsl_rcvd_via = 'B', qslrdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1259 if (sqlOK)
1260 {
1261 //qDebug() << "DataProxy_SQLite::qslRecViaBureau TRUE" << QT_ENDL;
1262 query.finish();
1263 //setDXCCAwardStatus(_qsoId);
1264 //setWAZAwardStatus(_qsoId);
1265
1266 return true;
1267 }
1268 else
1269 {
1270 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1271 }
1272
1273 //qDebug() << "DataProxy_SQLite::qslRecViaBureau FALSE" << QT_ENDL;
1274 query.finish();
1275 return false;
1276 }
1277
qslRecViaDirect(const int _qsoId,const QDate & _updateDate)1278 bool DataProxy_SQLite::qslRecViaDirect(const int _qsoId, const QDate &_updateDate)
1279 {
1280 //qDebug() << "DataProxy_SQLite::qslRecViaDirect" << QT_ENDL;
1281 QSqlQuery query;
1282 QString queryString;
1283 queryString = QString("UPDATE log SET qsl_rcvd = 'Y', qsl_rcvd_via = 'D', qslrdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1284 bool sqlOK = query.exec(queryString);
1285
1286 if (sqlOK)
1287 {
1288 query.finish();
1289 //setDXCCAwardStatus(_qsoId);
1290 //setWAZAwardStatus(_qsoId);
1291 return true;
1292 }
1293 else
1294 {
1295 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1296 }
1297 query.finish();
1298 return false;
1299 }
1300
qslRecViaDirect(const int _qsoId,const QDate & _updateDate,const bool _queueSentQSL)1301 bool DataProxy_SQLite::qslRecViaDirect(const int _qsoId, const QDate &_updateDate, const bool _queueSentQSL)
1302 {
1303 //qDebug() << "DataProxy_SQLite::qslRecViaDirect: " << _updateDate << QT_ENDL;
1304 QSqlQuery query;
1305 QString queryString;
1306 bool sqlOK;
1307
1308 if (_queueSentQSL)
1309 {
1310 queryString = QString("SELECT qsl_sent FROM log WHERE id = '%1'").arg(_qsoId);
1311 sqlOK = query.exec(queryString);
1312
1313 if(sqlOK)
1314 {
1315 query.next();
1316 if (query.isValid())
1317 {
1318 queryString = (query.value(0)).toString();
1319 if ((queryString == "Y") || (queryString == "R"))
1320 {
1321 // NO ACTION REQUIRED, QSL IS ALREADY SENT
1322 //qDebug() << "DataProxy_SQLite::qslRecViaDirect: QSL already requested" << QT_ENDL;
1323 queryString = QString("UPDATE log SET qsl_rcvd = 'Y', qsl_rcvd_via = 'D', qslrdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1324 }
1325 else
1326 {
1327 //qDebug() << "DataProxy_SQLite::qslRecViaDirect: Request QSL-1" << QT_ENDL;
1328 queryString = QString("UPDATE log SET qsl_rcvd = 'Y', qsl_rcvd_via = 'D', qsl_sent='R', qslrdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1329 }
1330 }
1331 else
1332 {
1333 //qDebug() << "DataProxy_SQLite::qslRecViaDirect: Request QSL-2" << QT_ENDL;
1334 queryString = QString("UPDATE log SET qsl_rcvd = 'Y', qsl_rcvd_via = 'D', qsl_sent='R', qslrdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1335 }
1336 }
1337 else
1338 {
1339 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1340 //qDebug() << "DataProxy_SQLite::qslRecViaDirect: Request QSL-3" << QT_ENDL;
1341 queryString = QString("UPDATE log SET qsl_rcvd = 'Y', qsl_rcvd_via = 'D', qsl_sent='R', qslrdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1342 }
1343 }
1344 else
1345 {
1346 queryString = QString("UPDATE log SET qsl_rcvd = 'Y', qsl_rcvd_via = 'D', qslrdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1347 }
1348 query.finish();
1349 sqlOK = query.exec(queryString);
1350
1351
1352 if (sqlOK)
1353 {
1354 //qDebug() << "DataProxy_SQLite::qslRecViaDirect TRUE" << QT_ENDL;
1355 query.finish();
1356 //setDXCCAwardStatus(_qsoId);
1357 //setWAZAwardStatus(_qsoId);
1358 return true;
1359 }
1360 else
1361 {
1362 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1363 }
1364
1365 //qDebug() << "DataProxy_SQLite::qslRecViaDirect FALSE" << QT_ENDL;
1366 query.finish();
1367 return false;
1368 }
1369
1370
qslSentAsRequested(const int _qsoId,const QDate & _updateDate)1371 bool DataProxy_SQLite::qslSentAsRequested(const int _qsoId, const QDate &_updateDate)
1372 {
1373 //TODO: Add some protection to the data before modifying
1374 //qDebug() << "DataProxy_SQLite::qslSentAsRequested" << QT_ENDL;
1375 QSqlQuery query;
1376 QString queryString;
1377 queryString = QString("UPDATE log SET qsl_sent = 'R', qslsdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1378 //qDebug() << "DataProxy_SQLite::qslSentAsRequested: " << queryString << QT_ENDL;
1379
1380 bool sqlOK = query.exec(queryString);
1381
1382 if (sqlOK)
1383 {
1384 //qDebug() << "DataProxy_SQLite::qslSentAsRequested" << QT_ENDL;
1385 query.finish();
1386 return true;
1387 }
1388 else
1389 {
1390 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1391 }
1392 query.finish();
1393 return false;
1394 }
1395
qslRecAsRequested(const int _qsoId,const QDate & _updateDate)1396 bool DataProxy_SQLite::qslRecAsRequested(const int _qsoId, const QDate &_updateDate)
1397 {
1398 //TODO: Add some protection to the data before modifying
1399 //qDebug() << "DataProxy_SQLite::qslRecAsRequested" << QT_ENDL;
1400 QSqlQuery query;
1401 QString queryString;
1402 queryString = QString("UPDATE log SET qsl_rcvd = 'R', qslsdate = '%1' WHERE id = '%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1403 //qDebug() << "DataProxy_SQLite::qslRecAsRequested: " << queryString << QT_ENDL;
1404
1405 bool sqlOK = query.exec(queryString);
1406
1407 if (sqlOK)
1408 {
1409 //qDebug() << "DataProxy_SQLite::qslRecAsRequested OK" << QT_ENDL;
1410 query.finish();
1411 return true;
1412 }
1413 else
1414 {
1415 //qDebug() << "DataProxy_SQLite::qslRecAsRequested NOK" << QT_ENDL;
1416 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1417 }
1418 query.finish();
1419 return false;
1420 }
1421
setClubLogSent(const int _qsoId,const QString & _st,const QDate & _updateDate)1422 bool DataProxy_SQLite::setClubLogSent(const int _qsoId, const QString &_st, const QDate &_updateDate)
1423 { // Updates the QSO with the ClubLog status & date
1424 QSqlQuery query;
1425 QString queryString;
1426 queryString = QString("UPDATE log SET clublog_qso_upload_status = '%1', clublog_qso_upload_date = '%2' WHERE id = '%3'").arg(_st).arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1427 //qDebug() << "DataProxy_SQLite::setClubLogSent: " << queryString << QT_ENDL;
1428 bool sqlOK = query.exec(queryString);
1429
1430 if (sqlOK)
1431 {
1432 //qDebug() << "DataProxy_SQLite::setClubLogSent - TRUE" << QT_ENDL;
1433 query.finish();
1434 return true;
1435 }
1436 else
1437 {
1438 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1439 }
1440 //qDebug() << "DataProxy_SQLite::setClubLogSent - FALSE" << QT_ENDL;
1441 query.finish();
1442 return false;
1443 }
1444
setLoTWQSLRec(const int _qsoId,const QString & _st,const QDate & _updateDate)1445 bool DataProxy_SQLite::setLoTWQSLRec (const int _qsoId, const QString &_st, const QDate &_updateDate)
1446 {
1447 QSqlQuery query;
1448 QString queryString;
1449 if (!util->isValidQSL_Rcvd(_st))
1450 {
1451 return false;
1452 }
1453 if (!_updateDate.isValid())
1454 {
1455 return false;
1456 }
1457 queryString = QString("UPDATE log SET lotw_qsl_rcvd = '%1', lotw_qslrdate = '%2' WHERE id = '%3'").arg(_st).arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_qsoId);
1458 //qDebug() << "DataProxy_SQLite::setLoTWQSLRec: " << queryString << QT_ENDL;
1459 bool sqlOK = query.exec(queryString);
1460
1461 if (sqlOK)
1462 {
1463 //qDebug() << "DataProxy_SQLite::setLoTWQSLRec - TRUE" << QT_ENDL;
1464 query.finish();
1465 return true;
1466 }
1467 else
1468 {
1469 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1470 }
1471 //qDebug() << "DataProxy_SQLite::setLoTWQSLRec - FALSE" << QT_ENDL;
1472 query.finish();
1473 return false;
1474 }
isQSOConfirmed(const int _qsoId,const bool _checkPaper,const bool _checkLoTW)1475 bool DataProxy_SQLite::isQSOConfirmed(const int _qsoId, const bool _checkPaper, const bool _checkLoTW)
1476 { // Returns true if the QSO has been confirmed via paper and/or LoTW
1477 QSqlQuery query;
1478 QString queryString;
1479 queryString = QString("SELECT qsl_rcvd, lotw_qsl_rcvd FROM log WHERE id = '%1'").arg(_qsoId);
1480
1481 if (!query.exec(queryString))
1482 {
1483 return false;
1484 }
1485 if (!query.next ())
1486 {
1487 return false;
1488 }
1489 if (!query.isValid ())
1490 {
1491 return false;
1492 }
1493
1494 QString paperQSL = (query.value(0)).toString();
1495 QString lotwQSL = (query.value(1)).toString();
1496 query.finish();
1497
1498 if (_checkPaper && _checkLoTW)
1499 {
1500 return ((paperQSL == "Y") || (lotwQSL == "Y"));
1501 }
1502 else if (_checkPaper && !_checkLoTW)
1503 {
1504 return (paperQSL == "Y");
1505 }
1506 else if (!_checkPaper && _checkLoTW)
1507 {
1508 return (lotwQSL == "Y");
1509 }
1510 else
1511 {
1512 return false;
1513 }
1514 }
1515
isQSLReceived(const int _qsoId)1516 bool DataProxy_SQLite::isQSLReceived(const int _qsoId)
1517 {
1518 //qDebug() << "DataProxy_SQLite::isQSLReceived" << QString::number(_qsoId) << QT_ENDL;
1519 QSqlQuery query;
1520 QString queryString;
1521 queryString = QString("SELECT qsl_rcvd FROM log WHERE id = '%1'").arg(_qsoId);
1522 bool sqlOK = query.exec(queryString);
1523
1524
1525 if (sqlOK)
1526 {
1527 query.next();
1528 if (query.isValid())
1529 {
1530 queryString = (query.value(0)).toString();
1531 query.finish();
1532 if (queryString == "Y")
1533 {
1534 //qDebug() << "DataProxy_SQLitew::isQSLReceived: " << QString::number(_qsoId) << "QSL Received" << QT_ENDL;
1535 return true;
1536 }
1537 else
1538 {
1539 //qDebug() << "DataProxy_SQLite::isQSLReceived: " << QString::number(_qsoId) << "QSL NOT Received-1" << QT_ENDL;
1540 return false;
1541 }
1542 }
1543 else
1544 {
1545 //qDebug() << "DataProxy_SQLite::isQSLReceived: " << QString::number(_qsoId) << "QSL NOT Received-2" << QT_ENDL;
1546 query.finish();
1547 return false;
1548 }
1549 }
1550 else
1551 {
1552 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1553 query.finish();
1554 }
1555 return false;
1556 }
1557
isQSLSent(const int _qsoId)1558 bool DataProxy_SQLite::isQSLSent(const int _qsoId)
1559 {
1560 //qDebug() << "DataProxy_SQLite::isQSLSent: " << QString::number(_qsoId) << QT_ENDL;
1561 QSqlQuery query;
1562 QString queryString;
1563 queryString = QString("SELECT qsl_sent FROM log WHERE id = '%1'").arg(_qsoId);
1564 bool sqlOK = query.exec(queryString);
1565
1566 if (sqlOK)
1567 {
1568 query.next();
1569 if (query.isValid())
1570 {
1571 queryString = (query.value(0)).toString();
1572 query.finish();
1573 if (queryString == "Y")
1574 {
1575 //qDebug() << "DataProxy_SQLite::isQSLSent: " << QString::number(_qsoId) << "QSL Sent" << QT_ENDL;
1576 return true;
1577 }
1578 else
1579 {
1580 //qDebug() << "DataProxy_SQLite::isQSLSent: " << QString::number(_qsoId) << "QSL NOT Sent-1" << QT_ENDL;
1581 return false;
1582 }
1583 }
1584 else
1585 {
1586 //qDebug() << "DataProxy_SQLite::isQSLSent: " << QString::number(_qsoId) << "QSL NOT Sent-2" << QT_ENDL;
1587 return false;
1588 }
1589 }
1590 else
1591 {
1592 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1593 query.finish();
1594 return false;
1595 }
1596 //return false;
1597 }
1598
1599
1600
getBandFromId(const int _qsoId)1601 int DataProxy_SQLite::getBandFromId(const int _qsoId)
1602 {
1603 QSqlQuery query;
1604 QString queryString = QString("SELECT bandid FROM log WHERE id='%1'").arg(_qsoId);
1605 bool sqlOK = query.exec(queryString);
1606
1607 if (sqlOK)
1608 {
1609 query.next();
1610 if (query.isValid())
1611 {
1612 int v = (query.value(0)).toInt();
1613 query.finish();
1614 return v;
1615 }
1616 else
1617 {
1618 query.finish();
1619 return -1;
1620 }
1621 }
1622 else
1623 {
1624 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1625 query.finish();
1626 }
1627 return -1;
1628 }
1629
getModeFromId(const int _qsoId)1630 int DataProxy_SQLite::getModeFromId(const int _qsoId)
1631 {
1632 QSqlQuery query;
1633 QString queryString = QString("SELECT modeid FROM log WHERE id='%1'").arg(_qsoId);
1634 bool sqlOK = query.exec(queryString);
1635
1636 if (sqlOK)
1637 {
1638 query.next();
1639 if (query.isValid())
1640 {
1641 int v = (query.value(0)).toInt();
1642 query.finish();
1643 return v;
1644 }
1645 else
1646 {
1647 query.finish();
1648 return -1;
1649 }
1650 }
1651 else
1652 {
1653 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1654 query.finish();
1655 }
1656 return -1;
1657 }
1658
getDXCCFromId(const int _qsoId)1659 int DataProxy_SQLite::getDXCCFromId(const int _qsoId)
1660 {
1661 QSqlQuery query;
1662 QString queryString = QString("SELECT dxcc FROM log WHERE id='%1'").arg(_qsoId);
1663 bool sqlOK = query.exec(queryString);
1664
1665 if (sqlOK)
1666 {
1667 query.next();
1668 if (query.isValid())
1669 {
1670 int v = (query.value(0)).toInt();
1671 query.finish();
1672 return v;
1673 }
1674 else
1675 {
1676 query.finish();
1677 return -1;
1678 }
1679 }
1680 else
1681 {
1682 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1683 query.finish();
1684 }
1685 return -1;
1686 }
1687
getCQZFromId(const int _qsoId)1688 int DataProxy_SQLite::getCQZFromId(const int _qsoId)
1689 {
1690 QSqlQuery query;
1691 QString queryString = QString("SELECT cqz FROM log WHERE id='%1'").arg(_qsoId);
1692 bool sqlOK = query.exec(queryString);
1693
1694 if (sqlOK)
1695 {
1696 query.next();
1697 if (query.isValid())
1698 {
1699 int v = (query.value(0)).toInt();
1700 query.finish();
1701 return v;
1702 }
1703 else
1704 {
1705 query.finish();
1706 return -1;
1707 }
1708 }
1709 else
1710 {
1711 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1712 query.finish();
1713 }
1714 return -1;
1715 }
1716
getBandModeDXCCCQZlogIDFromId(const int _qsoId)1717 QList<int> DataProxy_SQLite::getBandModeDXCCCQZlogIDFromId(const int _qsoId)
1718 {
1719 QList<int> result;
1720 result.clear();
1721
1722 QSqlQuery query;
1723 QString queryString = QString("SELECT bandid, modeid, dxcc, cqz, lognumber FROM log WHERE id='%1'").arg(_qsoId);
1724 if (!query.exec(queryString))
1725 {
1726 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1727 query.finish ();
1728 return result;
1729 }
1730 if (!query.next ())
1731 {
1732 query.finish ();
1733 return result;
1734 }
1735 if (!query.isValid ())
1736 {
1737 query.finish ();
1738 return result;
1739 }
1740 QSqlRecord rec = query.record();
1741 int nameCol = rec.indexOf("bandid");
1742
1743 int v = (query.value(nameCol)).toInt();
1744 if (v<1)
1745 {
1746 return result;
1747 }
1748 result.append (v);
1749
1750 nameCol = rec.indexOf("modeid");
1751 v = (query.value(nameCol)).toInt();
1752 v = (query.value(nameCol)).toInt();
1753 if (v<1)
1754 {
1755 result.clear();
1756 return result;
1757 }
1758 result.append (v);
1759
1760 nameCol = rec.indexOf("dxcc");
1761 v = (query.value(nameCol)).toInt();
1762 v = (query.value(nameCol)).toInt();
1763 if (v<1)
1764 {
1765 result.clear();
1766 return result;
1767 }
1768 result.append (v);
1769
1770 nameCol = rec.indexOf("cqz");
1771 v = (query.value(nameCol)).toInt();
1772 v = (query.value(nameCol)).toInt();
1773 if (v<1)
1774 {
1775 result.clear();
1776 return result;
1777 }
1778 result.append (v);
1779
1780 nameCol = rec.indexOf("lognumber");
1781 v = (query.value(nameCol)).toInt();
1782 v = (query.value(nameCol)).toInt();
1783 if (v<1)
1784 {
1785 result.clear();
1786 return result;
1787 }
1788 result.append (v);
1789
1790 query.finish ();
1791 return result;
1792 }
1793
getCallFromId(const int _qsoId)1794 QString DataProxy_SQLite::getCallFromId(const int _qsoId)
1795 {
1796 //qDebug() << "DataProxy_SQLite::getCallFromId" << QT_ENDL;
1797 QSqlQuery query;
1798 QString queryString = QString("SELECT call FROM log WHERE id='%1'").arg(_qsoId);
1799 bool sqlOK = query.exec(queryString);
1800
1801 if (sqlOK)
1802 {
1803 query.next();
1804 if (query.isValid())
1805 {
1806 QString v = (query.value(0)).toString();
1807 query.finish();
1808 return v;
1809 }
1810 else
1811 {
1812 query.finish();
1813 return QString();
1814 }
1815 }
1816 else
1817 {
1818 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1819 query.finish();
1820 }
1821 return QString();
1822 }
1823
1824
getClubLogRealTimeFromId(const int _qsoId)1825 QStringList DataProxy_SQLite::getClubLogRealTimeFromId(const int _qsoId)
1826 {
1827 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: " << QString::number(_qsoId) << QT_ENDL;
1828 /* Return a QStringList with 16 fields with these data:
1829
1830 QSO_DATE, TIME_ON, QSLRDATE, QSLSDATE, CALL, OPERATOR, MODE, BAND, BAND_RX, FREQ, QSL_RCVD,
1831 LOTW_QSL_RCVD, QSL_SENT, DXCC, PROP_MODE, CREDIT_GRANTED
1832
1833 */
1834 QSqlQuery query;
1835 int nameCol = -1;
1836 QStringList dataC = QStringList();
1837 //QString aux1 = QString();
1838 //QString aux2 = QString();
1839 //QString call = QString();
1840
1841 // IMPORTANT: band_rx is not always present, and if it is not present, the query with INNER JOIN will fail.
1842 // To fix that we will do two queries, one to check if I have all the data and if not another one with a reduced scope.
1843 QString queryString = QString("SELECT band_rx FROM log WHERE id='%1'").arg(_qsoId);
1844
1845 bool sqlOk = query.exec(queryString);
1846 bool haveBandRX = false;
1847 if (sqlOk)
1848 {
1849 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: sqlOK -1" << QT_ENDL;
1850 if (query.next())
1851 {
1852 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: qsl next -1" << QT_ENDL;
1853 if (query.isValid())
1854 {
1855 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: sql valid -1" << QT_ENDL;
1856 QSqlRecord rec = query.record();
1857 nameCol = rec.indexOf("band_rx");
1858 QString aux = (query.value(nameCol)).toString();
1859 if (aux.length()<1)
1860 { // We DON'T have a band_rx available
1861 query.finish();
1862 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: without BAND-RX" << QT_ENDL;
1863 queryString = QString("SELECT qso_date, qslrdate, qslsdate, call, station_callsign, operator, M.name, B.name, freq, qsl_rcvd, lotw_qsl_rcvd, qsl_sent, dxcc, prop_mode, credit_granted FROM log INNER JOIN band as B ON bandid = B.id INNER JOIN mode as M ON modeid = M.id WHERE log.id='%1'").arg(_qsoId);
1864 }
1865 else {
1866 haveBandRX = true;
1867 queryString = QString("SELECT qso_date, qslrdate, qslsdate, call, station_callsign, operator, M.name, B.name, R.name, freq, qsl_rcvd, lotw_qsl_rcvd, qsl_sent, dxcc, prop_mode, credit_granted FROM log INNER JOIN band as B ON bandid = B.id INNER JOIN band as R ON band_rx = R.id INNER JOIN mode as M ON modeid = M.id WHERE log.id='%1'").arg(_qsoId);
1868 }
1869 }
1870 else
1871 { // We have a band_rx available
1872 query.finish();
1873 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: NO VALID" << QT_ENDL;
1874 return QStringList();
1875 }
1876 }
1877 else
1878 {
1879 query.finish();
1880 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: ERROR-1" << QT_ENDL;
1881 return QStringList();
1882 }
1883 }
1884 else
1885 {
1886 query.finish();
1887 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: ERROR-2" << QT_ENDL;
1888 return QStringList();
1889 }
1890
1891
1892 sqlOk = query.exec(queryString);
1893 dataC << QString::number(_qsoId);
1894 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: lastQuery: " << query.lastQuery() << QT_ENDL;
1895
1896 if (sqlOk)
1897 {
1898 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId sqlOK-1" << QT_ENDL;
1899 if (query.next())
1900 {
1901 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId query next = OK" << QT_ENDL;
1902 if (query.isValid())
1903 {
1904 QSqlRecord rec = query.record();
1905 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId query valid = OK" << QT_ENDL;
1906 QString aux;
1907 nameCol = rec.indexOf("qso_date");
1908 aux = util->getADIFDateFromQDateTime(util->getDateTimeFromSQLiteString((query.value(nameCol)).toString()));
1909 if (aux.length()<1)
1910 {
1911 query.finish();
1912 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: ERROR-3: " << aux << QT_ENDL;
1913 return QStringList();
1914 }
1915 dataC << aux;
1916 aux = util->getADIFTimeFromQDateTime(util->getDateTimeFromSQLiteString((query.value(nameCol)).toString()));
1917 if (aux.length()<1)
1918 {
1919 query.finish();
1920 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: ERROR-4: " << aux<< endl;
1921 return QStringList();
1922 }
1923 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId Time_on: " << aux << QT_ENDL;
1924 dataC << aux;
1925 //dataC << (query.value(nameCol)).toString();
1926 nameCol = rec.indexOf("qslrdate");
1927 dataC << util->getADIFDateFromQDate( util->getDateFromSQliteString((query.value(nameCol)).toString()) );
1928 //dataC << (query.value(nameCol)).toString();
1929 nameCol = rec.indexOf("qslsdate");
1930 dataC << util->getADIFDateFromQDate( util->getDateFromSQliteString((query.value(nameCol)).toString()) );
1931 //dataC << (query.value(nameCol)).toString();
1932
1933 nameCol = rec.indexOf("call");
1934 if (aux.length()<1)
1935 {
1936 query.finish();
1937 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: ERROR-5: " << aux << QT_ENDL;
1938 return QStringList();
1939 }
1940 QString call = (query.value(nameCol)).toString();
1941 dataC << call;
1942
1943 nameCol = rec.indexOf("operator");
1944 dataC << (query.value(nameCol)).toString();
1945
1946 //nameCol = rec.indexOf("M.name"); //MODE //TODO: Fix this to get the proper column
1947 aux = (query.value(6)).toString();
1948 if (aux.length()<1)
1949 {
1950 query.finish();
1951 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: ERROR-6: " << aux<< endl;
1952 return QStringList();
1953 }
1954 dataC << aux;
1955
1956 //nameCol = rec.indexOf("B.name"); // BAND
1957 aux = (query.value(7)).toString();
1958 if (aux.length()<1)
1959 {
1960 query.finish();
1961 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: ERROR-7: " << aux << QT_ENDL;
1962 return QStringList();
1963 }
1964 dataC << aux;
1965
1966 if (haveBandRX)
1967 {
1968 dataC << (query.value(8)).toString();
1969 }
1970 else
1971 {
1972 dataC << "";
1973 }
1974 //nameCol = rec.indexOf("R.name"); //BAND_RX //TODO: Fix this to get the proper column (use an index instead of a number)
1975
1976 nameCol = rec.indexOf("freq");
1977 dataC << (query.value(nameCol)).toString();
1978 nameCol = rec.indexOf("qsl_rcvd");
1979 dataC << (query.value(nameCol)).toString();
1980 nameCol = rec.indexOf("lotw_qsl_rcvd");
1981 dataC << (query.value(nameCol)).toString();
1982 nameCol = rec.indexOf("qsl_sent");
1983 dataC << (query.value(nameCol)).toString();
1984 nameCol = rec.indexOf("dxcc");
1985 dataC << (query.value(nameCol)).toString();
1986 nameCol = rec.indexOf("prop_mode");
1987 dataC << (query.value(nameCol)).toString();
1988 nameCol = rec.indexOf("credit_granted");
1989 dataC << (query.value(nameCol)).toString();
1990 nameCol = rec.indexOf("station_callsign");
1991 QString aux2 = (query.value(nameCol)).toString();
1992
1993 if (util->isValidCall(aux2))
1994 {
1995 dataC << aux2;
1996 }
1997 else
1998 {
1999 dataC << call;
2000 }
2001
2002 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: RETURNING ... OK" << QT_ENDL;
2003 query.finish();
2004 return dataC;
2005 }
2006 else
2007 {
2008 //NO VALID
2009 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId NO VALID NOT OK" << QT_ENDL;
2010 query.finish();
2011 return QStringList();
2012 }
2013 }
2014 }
2015 else
2016 {
2017 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId NOT sqlOK" << QT_ENDL;
2018 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: 2 LastQuery: " << query.lastQuery() << QT_ENDL;
2019 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: 2 LastError-data: " << query.lastError().databaseText() << QT_ENDL;
2020 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: 2 LastError-driver: " << query.lastError().driverText() << QT_ENDL;
2021 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: 2 LastError-n: " << QString::number(query.lastError().nativeErrorCode() ) << QT_ENDL;
2022 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2023 query.finish();
2024 return QStringList();
2025 }
2026 //qDebug() << "DataProxy_SQLite::getClubLogRealTimeFromId: ERROR-10" << QT_ENDL;
2027 return QStringList();
2028 }
2029
getNameFromQRZ(const QString & _call)2030 QString DataProxy_SQLite::getNameFromQRZ(const QString &_call)
2031 {
2032 if (_call.length() <= 0)
2033 {
2034 //qDebug() << "DataProxy_SQLite::getNameFromQRZ return 0" << QT_ENDL;
2035 return QString();
2036 }
2037
2038 QSqlQuery query;
2039 QString queryString = QString("SELECT name FROM log WHERE call='%0'").arg(_call);
2040
2041 bool sqlOk = query.exec(queryString);
2042
2043 if (sqlOk)
2044 {
2045 while (query.next())
2046 {
2047 if (query.isValid())
2048 {
2049 if (((query.value(0)).toString()).length()>0)
2050 {
2051 //qDebug() << "DataProxy_SQLite::getNameFromQRZ: " << (query.value(0)).toString() << QT_ENDL;
2052 QString v = (query.value(0)).toString();
2053 query.finish();
2054 return v;
2055 }
2056 }
2057 }
2058 query.finish();
2059 //qDebug() << "DataProxy_SQLite::getNameFromQRZ: NO NAME" << QT_ENDL;
2060 return QString();
2061 }
2062 else
2063 {
2064 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2065 query.finish();
2066 return QString();
2067 }
2068 }
2069
getQTHFromQRZ(const QString & _call)2070 QString DataProxy_SQLite::getQTHFromQRZ(const QString &_call)
2071 {
2072 if (_call.length() <= 0)
2073 {
2074 return QString();
2075 }
2076 QSqlQuery query;
2077 QString queryString = QString("SELECT qth FROM log WHERE call='%0'").arg(_call);
2078
2079 bool sqlOk = query.exec(queryString);
2080
2081 if (sqlOk)
2082 {
2083 while (query.next())
2084 {
2085 if (query.isValid())
2086 {
2087 if (((query.value(0)).toString()).length()>0)
2088 {
2089 QString v = (query.value(0)).toString();
2090 query.finish();
2091 return v;
2092 }
2093 }
2094 }
2095 query.finish();
2096 return QString();
2097 }
2098 else
2099 {
2100 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2101 query.finish();
2102 return QString();
2103 }
2104 }
2105
getLocatorFromQRZ(const QString & _call)2106 QString DataProxy_SQLite::getLocatorFromQRZ(const QString &_call)
2107 {
2108 if (_call.length() <= 0)
2109 {
2110 return QString();
2111 }
2112 QSqlQuery query;
2113 QString queryString = QString("SELECT gridsquare FROM log WHERE call='%0'").arg(_call);
2114
2115 bool sqlOk = query.exec(queryString);
2116
2117 if (sqlOk)
2118 {
2119 while (query.next())
2120 {
2121 if (query.isValid())
2122 {
2123 if (((query.value(0)).toString()).length()>0)
2124 {
2125 QString v = (query.value(0)).toString();
2126 query.finish();
2127 return v;
2128 }
2129 }
2130 }
2131 query.finish();
2132 return QString();
2133 }
2134 else
2135 {
2136 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2137 query.finish();
2138 return QString();
2139 }
2140 }
2141
2142
getIOTAFromQRZ(const QString & _call)2143 QString DataProxy_SQLite::getIOTAFromQRZ(const QString &_call)
2144 {
2145 if (_call.length() <= 0)
2146 {
2147 return QString();
2148 }
2149 QSqlQuery query;
2150 QString queryString = QString("SELECT iota FROM log WHERE call='%0'").arg(_call);
2151
2152 bool sqlOk = query.exec(queryString);
2153
2154 if (sqlOk)
2155 {
2156 while (query.next())
2157 {
2158 if (query.isValid())
2159 {
2160 if (((query.value(0)).toString()).length()>0)
2161 {
2162 QString v = (query.value(0)).toString();
2163 query.finish();
2164 return v;
2165 }
2166 }
2167 }
2168 query.finish();
2169 return QString();
2170 }
2171 else
2172 {
2173 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2174 query.finish();
2175 return QString();
2176 }
2177 }
2178
2179
getQSLViaFromQRZ(const QString & _call)2180 QString DataProxy_SQLite::getQSLViaFromQRZ(const QString &_call)
2181 {
2182 if (_call.length() <= 0)
2183 {
2184 return QString();
2185 }
2186 QSqlQuery query;
2187 QString queryString = QString("SELECT DISTINCT qsl_via FROM log WHERE call='%0'").arg(_call);
2188
2189 bool sqlOk = query.exec(queryString);
2190
2191 if (sqlOk)
2192 {
2193 while (query.next())
2194 {
2195 if (query.isValid())
2196 {
2197 if (((query.value(0)).toString()).length()>0)
2198 {
2199 QString v = (query.value(0)).toString();
2200 query.finish();
2201 return v;
2202 }
2203 }
2204 }
2205 query.finish();
2206 return QString();;
2207 }
2208 else
2209 {
2210 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2211 query.finish();
2212 return QString();
2213 }
2214 }
2215
updateAwardDXCC()2216 bool DataProxy_SQLite::updateAwardDXCC()
2217 {
2218 //qDebug() << "DataProxy_SQLite::updateAwardDXCC" << QT_ENDL;
2219 fillEmptyDXCCInTheLog();
2220 return db->updateAwardDXCCTable();
2221 //qDebug() << "DataProxy_SQLite::updateAwardDXCC-END" << QT_ENDL;
2222 }
2223
updateAwardWAZ()2224 bool DataProxy_SQLite::updateAwardWAZ()
2225 {
2226 //qDebug() << "DataProxy_SQLite::updateAwardWAZ" << QT_ENDL;
2227 return db->updateAwardWAZTable();
2228 }
2229
QRZCOMModifyFullLog(const int _currentLog)2230 bool DataProxy_SQLite::QRZCOMModifyFullLog(const int _currentLog)
2231 {
2232 //qDebug() << " DataProxy_SQLite::QRZCOMModifyFullLog" << QString::number(_currentLog) << QT_ENDL;
2233
2234 if (!doesThisLogExist(_currentLog))
2235 {
2236 return false;
2237 }
2238 QString queryString;
2239 bool sqlOK;
2240 QSqlQuery query;
2241
2242 queryString = QString("UPDATE log SET qrzcom_qso_upload_status = 'M', qrzcom_qso_upload_date = '%1'").arg(util->getDateSQLiteStringFromDate(QDate::currentDate()));
2243 sqlOK = query.exec(queryString);
2244 query.finish();
2245 if (sqlOK)
2246 {
2247 //qDebug() << " DataProxy_SQLite::QRZCOMModifyFullLog: END TRUE" << QT_ENDL;
2248 return true;
2249 }
2250 else
2251 {
2252 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2253 //qDebug() << " DataProxy_SQLite::QRZCOMModifyFullLog: END FALSE: " << query.lastError().databaseText() << QT_ENDL;
2254 return false;
2255 }
2256
2257 //qDebug() << " DataProxy_SQLite::QRZCOMModifyFullLog: END TRUE" << QT_ENDL;
2258 //return false;
2259 }
2260
QRZCOMSentQSOs(const QList<int> & _qsos)2261 bool DataProxy_SQLite::QRZCOMSentQSOs(const QList<int> &_qsos)
2262 {
2263 //qDebug() << " DataProxy_SQLite::QRZCOMSentQSOs" << QString::number(_qsos.count()) << QT_ENDL;
2264 if (_qsos.count() < 1)
2265 {
2266 return true;
2267 }
2268 QString queryString;
2269 bool sqlOK;
2270 QSqlQuery query;
2271
2272 for (int i = 0; i< _qsos.count(); i++)
2273 {
2274 //qDebug() << " DataProxy_SQLite::QRZCOMLSentQSOs: updating QSO: " << QString::number(_qsos.at(i)) << QT_ENDL;
2275
2276
2277 queryString = QString("UPDATE log SET qrzcom_qso_upload_status = 'Y', qrzcom_qso_upload_date = '%1' WHERE id='%2'").arg(util->getDateSQLiteStringFromDate(QDate::currentDate())).arg(QString::number(_qsos.at(i)));
2278 sqlOK = query.exec(queryString);
2279 query.finish();
2280 if (sqlOK)
2281 {
2282 //qDebug() << " DataProxy_SQLite::QRZCOMSentQSOs: exec: " << query.lastQuery() << QT_ENDL;
2283 }
2284 else
2285 {
2286 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2287 //qDebug() << " DataProxy_SQLite::QRZCOMSentQSOs: END FALSE" << QT_ENDL;
2288 return false;
2289 }
2290 }
2291 //qDebug() << " DataProxy_SQLite::QRZCOMSentQSOs: END TRUE" << QT_ENDL;
2292 return true;
2293 }
2294
2295
clublogSentQSOs(const QList<int> & _qsos)2296 bool DataProxy_SQLite::clublogSentQSOs(const QList<int> &_qsos)
2297 {
2298 //qDebug() << " DataProxy_SQLite::clublogSentQSOs" << QString::number(_qsos.count()) << QT_ENDL;
2299 if (_qsos.count() < 1)
2300 {
2301 return true;
2302 }
2303 QString queryString;
2304 bool sqlOK;
2305 QSqlQuery query;
2306
2307 for (int i = 0; i< _qsos.count(); i++)
2308 {
2309 //qDebug() << " DataProxy_SQLite::lotwSentQSOs: updating QSO: " << QString::number(_qsos.at(i)) << QT_ENDL;
2310
2311
2312 queryString = QString("UPDATE log SET clublog_qso_upload_status = 'Y', clublog_qso_upload_date = '%1' WHERE id='%2'").arg(util->getDateSQLiteStringFromDate(QDate::currentDate())).arg(QString::number(_qsos.at(i)));
2313 sqlOK = query.exec(queryString);
2314 query.finish();
2315 if (sqlOK)
2316 {
2317 //qDebug() << " DataProxy_SQLite::clublogSentQSOs: exec: " << query.lastQuery() << QT_ENDL;
2318 }
2319 else
2320 {
2321 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2322 //qDebug() << " DataProxy_SQLite::clublogSentQSOs: END FALSE" << QT_ENDL;
2323 return false;
2324 }
2325 }
2326 //qDebug() << " DataProxy_SQLite::clublogSentQSOs: END TRUE" << QT_ENDL;
2327 return true;
2328 }
2329
clublogModifyFullLog(const int _currentLog)2330 bool DataProxy_SQLite::clublogModifyFullLog(const int _currentLog)
2331 {
2332 //qDebug() << " DataProxy_SQLite::clublogModifyFullLog" << QString::number(_currentLog) << QT_ENDL;
2333
2334 if (!doesThisLogExist(_currentLog))
2335 {
2336 return false;
2337 }
2338 QString queryString;
2339 bool sqlOK;
2340 QSqlQuery query;
2341
2342 queryString = QString("UPDATE log SET clublog_qso_upload_status = 'M', clublog_qso_upload_date = '%1'").arg(util->getDateSQLiteStringFromDate(QDate::currentDate()));
2343 sqlOK = query.exec(queryString);
2344 query.finish();
2345 if (sqlOK)
2346 {
2347 return true;
2348 }
2349 else
2350 {
2351 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2352 //qDebug() << " DataProxy_SQLite::clublogModifyFullLog: END FALSE" << QT_ENDL;
2353 return false;
2354 }
2355
2356 //qDebug() << " DataProxy_SQLite::clublogModifyFullLog: END TRUE" << QT_ENDL;
2357 //return false;
2358 }
2359
eQSLModifyFullLog(const int _currentLog)2360 bool DataProxy_SQLite::eQSLModifyFullLog(const int _currentLog)
2361 {
2362 //qDebug() << " DataProxy_SQLite::eQSLModifyFullLog" << QString::number(_currentLog) << QT_ENDL;
2363
2364 if (!doesThisLogExist(_currentLog))
2365 {
2366 return false;
2367 }
2368 QString queryString;
2369 bool sqlOK;
2370 QSqlQuery query;
2371
2372 queryString = QString("UPDATE log SET eqsl_qsl_sent = 'Q', eqsl_qslsdate = '%1'").arg(util->getDateSQLiteStringFromDate(QDate::currentDate()));
2373 sqlOK = query.exec(queryString);
2374 query.finish();
2375 if (sqlOK)
2376 {
2377 //qDebug() << " DataProxy_SQLite::eQSLModifyFullLog: END TRUE" << QT_ENDL;
2378 return true;
2379 }
2380 else
2381 {
2382 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2383 //qDebug() << " DataProxy_SQLite::eQSLModifyFullLog: END FALSE: " << query.lastError().databaseText() << QT_ENDL;
2384 return false;
2385 }
2386 //qDebug() << " DataProxy_SQLite::eQSLModifyFullLog: END TRUE" << QT_ENDL;
2387 }
2388
eQSLSentQSOs(const QList<int> & _qsos)2389 bool DataProxy_SQLite::eQSLSentQSOs(const QList<int> &_qsos)
2390 {
2391 //qDebug() << " DataProxy_SQLite::eQSLSentQSOs" << QString::number(_qsos.count()) << QT_ENDL;
2392 if (_qsos.count() < 1)
2393 {
2394 return true;
2395 }
2396 QString queryString;
2397 bool sqlOK;
2398 QSqlQuery query;
2399
2400 for (int i = 0; i< _qsos.count(); i++)
2401 {
2402 //qDebug() << " DataProxy_SQLite::eQSLSentQSOs: updating QSO: " << QString::number(_qsos.at(i)) << QT_ENDL;
2403
2404
2405 queryString = QString("UPDATE log SET eqsl_qsl_sent = 'Y', eqsl_qslsdate = '%1' WHERE id='%2'").arg(util->getDateSQLiteStringFromDate(QDate::currentDate())).arg(QString::number(_qsos.at(i)));
2406 sqlOK = query.exec(queryString);
2407 query.finish();
2408 if (sqlOK)
2409 {
2410 //qDebug() << " DataProxy_SQLite::eQSLSentQSOs: exec: " << query.lastQuery() << QT_ENDL;
2411 }
2412 else
2413 {
2414 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2415 //qDebug() << " DataProxy_SQLite::eQSLSentQSOs: END FALSE" << QT_ENDL;
2416 return false;
2417 }
2418 }
2419 //qDebug() << " DataProxy_SQLite::eQSLSentQSOs: END TRUE" << QT_ENDL;
2420 return true;
2421 }
2422
2423
addQSOFromWSJTX(const QString & _dxcall,const QString & _mode,const QString & _band,const double _freq,const QString & _mygrid,const QString & _dxgrid,const QString & _rstTX,const QString & _rstRX,const QString & _sRX,const QString & _sTX,const QString & _comment,const QString & _stationcallsign,const QString & _name,const QString & _operator,const QDateTime & _datetime,const QDateTime & _datetime_off,const double txpower,const int _dxcc,const int _logNumber,bool _sendQSL)2424 bool DataProxy_SQLite::addQSOFromWSJTX (const QString &_dxcall, const QString &_mode, const QString &_band, const double _freq,
2425 const QString &_mygrid, const QString &_dxgrid,
2426 const QString &_rstTX, const QString &_rstRX, const QString &_sRX, const QString &_sTX,
2427 const QString &_comment,
2428 const QString &_stationcallsign, const QString &_name, const QString &_operator,
2429 const QDateTime &_datetime, const QDateTime &_datetime_off, const double txpower,
2430 const int _dxcc, const int _logNumber, bool _sendQSL)
2431 {
2432 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: " << _dxcall << QT_ENDL;
2433
2434 //void MainWindow::slotWSJTXloggedQSO(const int _type, const QString &_dxcall, const quint64 _freq, const QString &_mode,
2435 // const QString &_dx_grid, const QString &_time_off, const QString &_report_sent, const QString &_report_rec,
2436 // const QString &_tx_power, const QString &_comments, const QString &_name, const QString &_time_on)
2437
2438 //_qso format: Date/TimeOn/call/bandid/modeid/freq/dxgrid/timeOff/rsttx/rstrx/txpower/comments/name
2439 /*
2440 Mandatory data:
2441 "qso_date VARCHAR(10) NOT NULL, "
2442 "call VARCHAR(40) NOT NULL, "
2443 "bandid INTEGER NOT NULL, "
2444 "modeid INTEGER NOT NULL, "
2445 */
2446
2447 QString stringFields = QString();
2448 QString stringData = QString();
2449 QString stringQuery = QString();
2450
2451 QSqlQuery query;
2452
2453 if (util->isValidCall(_dxcall))
2454 {
2455 stringFields = "call, ";
2456 stringData = "'" + _dxcall + "', ";
2457 }
2458 else
2459 {
2460 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: Error: call" << QT_ENDL;
2461 return false;
2462 }
2463
2464 if (_datetime.isValid())
2465 {
2466 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: time-on: " << _datetime << QT_ENDL;
2467 stringFields = stringFields + "qso_date, ";
2468 QDateTime _dateTime;
2469 //_dateTime.setDate(QDate::currentDate());
2470 //_dateTime.setTime(QTime::fromString(_time_on, "yyyyMMddhhmmss"));
2471 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: time-on: " << _datetime << QT_ENDL;
2472 //stringData = stringData + "'" + QDateTime::fromString(_time_on, "yyyyMMddhhmmss").toString("yyyy-MM-dd") + "', '" + QDateTime::fromString(_time_on, "yyyyMMddhhmmss").toString("hh:mm:ss") + "', ";
2473 stringData = stringData + "'" + util->getDateTimeSQLiteStringFromDateTime(_datetime) + "', ";
2474 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: time-on: " << stringData << QT_ENDL;
2475 }
2476 else
2477 {
2478 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: Error: time-on_ " << _datetime << QT_ENDL;
2479 return false;
2480 }
2481
2482 QString band = getBandNameFromFreq(_freq);
2483 if (band != _band)
2484 {
2485 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: Error: FREQ / BAND inconsistency " << _band << "/" << QString::number(_freq) << QT_ENDL;
2486 }
2487
2488 if (band.length()>0)
2489 {
2490 stringFields = stringFields + "bandid, " ;
2491 stringData = stringData + "'" + QString::number(getBandIdFromFreq(_freq)) + "', ";
2492
2493 stringFields = stringFields + "freq, " ;
2494 stringData = stringData + "'" + QString::number(_freq) + "', ";
2495 // EA5WA fix to add the freq RX into the log
2496 stringFields = stringFields + "freq_rx, " ;
2497 stringData = stringData + "'" + QString::number(_freq) + "', ";
2498 }
2499 else
2500 {
2501 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: Error: band" << QT_ENDL;
2502
2503
2504 emit queryError(Q_FUNC_INFO, "Incorrect band: " + _band, "-1000", "No query error");
2505 return false;
2506 }
2507
2508 int _modeid = getSubModeIdFromSubMode(_mode);
2509 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: mode: " << _mode << QT_ENDL;
2510 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: modeid: " << QString::number(_modeid) << QT_ENDL;
2511 if (util->isValidModeId(_modeid))
2512 {
2513 stringFields = stringFields + "modeid, ";
2514 stringData = stringData + "'" + QString::number(_modeid) + "', ";
2515 }
2516 else
2517 {
2518 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: Error: mode" << QT_ENDL;
2519 emit queryError(Q_FUNC_INFO, "Incorrect mode: " + _mode, "-1000", "No query error");
2520 return false;
2521 }
2522
2523 if (_datetime_off.isValid())
2524 {
2525 stringFields = stringFields + "qso_date_off, ";
2526 stringData = stringData + "'" + util->getDateTimeSQLiteStringFromDateTime(_datetime_off) + "', ";
2527 }
2528
2529 if (util->isValidRST(_rstTX))
2530 {
2531 stringFields = stringFields + "rst_sent, ";
2532 stringData = stringData + "'" + _rstTX + "', ";
2533 }
2534
2535 if (util->isValidRST(_rstRX))
2536 {
2537 stringFields = stringFields + "rst_rcvd, ";
2538 stringData = stringData + "'" + _rstRX + "', ";
2539 }
2540
2541 if (_sTX.length()>0)
2542 {
2543 stringFields = stringFields + "stx_string, ";
2544 stringData = stringData + "'" + _sTX + "', ";
2545 }
2546
2547 if (_sRX.length()>0)
2548 {
2549 stringFields = stringFields + "srx_string, ";
2550 stringData = stringData + "'" + _sRX + "', ";
2551 }
2552
2553 if (_comment.length()>0)
2554 {
2555 stringFields = stringFields + "comment, ";
2556 stringData = stringData + "'" + _comment + "', ";
2557 }
2558
2559 if (_name.length()>0)
2560 {
2561 stringFields = stringFields + "name, ";
2562 stringData = stringData + "'" + _name + "', ";
2563 }
2564
2565 if (util->isValidGrid(_dxgrid))
2566 {
2567 stringFields = stringFields + "gridsquare, ";
2568 stringData = stringData + "'" + _dxgrid + "', ";
2569 }
2570
2571 if (util->isValidGrid(_mygrid))
2572 {
2573 stringFields = stringFields + "my_gridsquare, ";
2574 stringData = stringData + "'" + _mygrid + "', ";
2575 }
2576
2577
2578 if (util->isValidPower(QString::number(txpower)))
2579 {
2580 stringFields = stringFields + "tx_pwr, ";
2581 stringData = stringData + "'" + QString::number(txpower) + "', ";
2582 }
2583
2584 if (util->isValidCall(_operator))
2585 {
2586 stringFields = stringFields + "operator, ";
2587 stringData = stringData + "'" + _operator + "', ";
2588 }
2589
2590 if (util->isValidCall(_stationcallsign))
2591 {
2592 stringFields = stringFields + "station_callsign, ";
2593 stringData = stringData + "'" + _stationcallsign + "', ";
2594 }
2595 if (_dxcc>0)
2596 {
2597 stringFields = stringFields + "dxcc, ";
2598 stringData = stringData + "'" + QString::number(_dxcc) + "', ";
2599
2600 int _cqz, _ituz;
2601 _cqz = getCQzFromEntity(_dxcc);
2602 _ituz = getITUzFromEntity(_dxcc);
2603 if (_cqz >0)
2604 {
2605 stringFields = stringFields + "cqz, ";
2606 stringData = stringData + "'" + QString::number(_cqz) + "', ";
2607 }
2608 if (_ituz >0)
2609 {
2610 stringFields = stringFields + "ituz, ";
2611 stringData = stringData + "'" + QString::number(_ituz) + "', ";
2612 }
2613 }
2614
2615 if (_sendQSL)
2616 {
2617 stringFields = stringFields + "qsl_via, ";
2618 stringData = stringData + "'B', ";
2619
2620 stringFields = stringFields + "lotw_qsl_sent, ";
2621 stringData = stringData + "'Q', ";
2622
2623 stringFields = stringFields + "eqsl_qsl_sent, ";
2624 stringData = stringData + "'Q', ";
2625
2626 stringFields = stringFields + "hrdlog_qso_upload_status, ";
2627 stringData = stringData + "'M', ";
2628
2629 stringFields = stringFields + "clublog_qso_upload_status, ";
2630 stringData = stringData + "'M', ";
2631
2632 stringFields = stringFields + "qrzcom_qso_upload_status, ";
2633 stringData = stringData + "'M', ";
2634 }
2635
2636 stringFields = stringFields + "lognumber";
2637 stringData = stringData + "'" + QString::number(_logNumber) + "'";
2638
2639 stringQuery = "INSERT INTO log (" + stringFields + ") values (" + stringData +")" ;
2640 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: Query: " << stringQuery << QT_ENDL;
2641
2642 bool sqlOK = query.exec(stringQuery);
2643
2644 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: LastQuery: " << query.lastQuery() << QT_ENDL;
2645
2646 if (sqlOK)
2647 {
2648 query.finish();
2649 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: SQL OK" << QT_ENDL;
2650 return true;
2651 }
2652 else
2653 {
2654 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2655 query.finish();
2656 //qDebug() << "DataProxy_SQLite::addQSOFromWSJTX: Error: SQL " << QT_ENDL;
2657 return false;
2658 }
2659 }
2660
addQSOFromLoTW(const QString & _call,const QDateTime _datetime,const QString & _mode,const QString & _band,const double _freq,const QDate _qslrdate,const QString & _stationcallsign,const int _logn)2661 int DataProxy_SQLite::addQSOFromLoTW(const QString &_call, const QDateTime _datetime, const QString &_mode, const QString &_band, const double _freq, const QDate _qslrdate, const QString &_stationcallsign, const int _logn)
2662 {
2663 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: " << _call << QT_ENDL;
2664 /*
2665 Mandatory data:
2666 "qso_date VARCHAR(10) NOT NULL, "
2667 "call VARCHAR(40) NOT NULL, "
2668 "bandid INTEGER NOT NULL, "
2669 "modeid INTEGER NOT NULL, "
2670 "lognumber"
2671 */
2672
2673 QString stringFields = QString();
2674 QString stringData = QString();
2675 QString stringQuery = QString();
2676
2677 //getITUzFromEntity()
2678
2679 QSqlQuery query;
2680
2681 if (util->isValidCall(_call))
2682 {
2683 stringFields = "call, ";
2684 stringData = "'" + _call + "', ";
2685 }
2686 else
2687 {
2688 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: Error: call" << QT_ENDL;
2689 return -1;
2690 }
2691
2692 if (_datetime.isValid())
2693 {
2694 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: time-on: " << _datetime << QT_ENDL;
2695 stringFields = stringFields + "qso_date, ";
2696 QDateTime _dateTime;
2697 stringData = stringData + "'" + util->getDateTimeSQLiteStringFromDateTime(_datetime) + "', ";
2698 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: time-on: " << stringData << QT_ENDL;
2699 }
2700 else
2701 {
2702 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: Error: time-on_ " << _datetime << QT_ENDL;
2703 return -2;
2704 }
2705
2706 QString band = getBandNameFromFreq(_freq);
2707 if (band != _band)
2708 {
2709 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: Error: FREQ / BAND inconsistency " << _band << "/" << QString::number(_freq) << QT_ENDL;
2710 }
2711
2712 if (band.length()>0)
2713 {
2714 stringFields = stringFields + "bandid, " ;
2715 stringData = stringData + "'" + QString::number(getBandIdFromFreq(_freq)) + "', ";
2716
2717 stringFields = stringFields + "freq, " ;
2718 stringData = stringData + "'" + QString::number(_freq) + "', ";
2719 }
2720 else
2721 {
2722 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: Error: band" << QT_ENDL;
2723
2724 emit queryError(Q_FUNC_INFO, "Incorrect band: " + _band, "-1000", "No query error");
2725 return -3;
2726 }
2727
2728 int _modeid = getSubModeIdFromSubMode(_mode);
2729 if (util->isValidModeId(_modeid))
2730 {
2731 stringFields = stringFields + "modeid, ";
2732 stringData = stringData + "'" + QString::number(_modeid) + "', ";
2733
2734 QString rst = util->getDefaultRST(_mode);
2735 if (rst.length()>0)
2736 {
2737 stringFields = stringFields + "rst_sent, ";
2738 stringData = stringData + "'" + rst + "', ";
2739
2740 stringFields = stringFields + "rst_rcvd, ";
2741 stringData = stringData + "'" + rst + "', ";
2742 }
2743 }
2744 else
2745 {
2746 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: Error: mode" << QT_ENDL;
2747 emit queryError(Q_FUNC_INFO, "Incorrect mode: " + _mode, "-1000", "No query error");
2748 return -4;
2749 }
2750
2751 if (_qslrdate.isValid())
2752 {
2753 stringFields = stringFields + "lotw_qslrdate, ";
2754 stringData = stringData + "'" + util->getDateSQLiteStringFromDate(_qslrdate) + "', ";
2755
2756 stringFields = stringFields + "lotw_qsl_rcvd, ";
2757 stringData = stringData + "'Y', ";
2758
2759 stringFields = stringFields + "lotw_qsl_sent, ";
2760 stringData = stringData + "'Q', ";
2761 }
2762
2763
2764 if (util->isValidCall(_stationcallsign))
2765 {
2766 stringFields = stringFields + "station_callsign, ";
2767 stringData = stringData + "'" + _stationcallsign + "', ";
2768 }
2769 int _dxcc = getDXCCFromPrefix(_call);
2770 if (_dxcc>0)
2771 {
2772 stringFields = stringFields + "dxcc, ";
2773 stringData = stringData + "'" + QString::number(_dxcc) + "', ";
2774
2775 int _cqz, _ituz;
2776 _cqz = getCQzFromEntity(_dxcc);
2777 _ituz = getITUzFromEntity(_dxcc);
2778 if (_cqz >0)
2779 {
2780 stringFields = stringFields + "cqz, ";
2781 stringData = stringData + "'" + QString::number(_cqz) + "', ";
2782 }
2783 if (_ituz >0)
2784 {
2785 stringFields = stringFields + "ituz, ";
2786 stringData = stringData + "'" + QString::number(_ituz) + "', ";
2787 }
2788 }
2789
2790 stringFields = stringFields + "lognumber";
2791 stringData = stringData + "'" + QString::number(_logn) + "'";
2792
2793 stringQuery = "INSERT INTO log (" + stringFields + ") values (" + stringData +")" ;
2794 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: Query: " << stringQuery << QT_ENDL;
2795
2796 bool sqlOK = query.exec(stringQuery);
2797
2798 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: LastQuery: " << query.lastQuery() << QT_ENDL;
2799
2800 if (sqlOK)
2801 {
2802 //query.finish();
2803 if (query.exec("SELECT MAX(id) FROM log"))
2804 {
2805 if (query.next())
2806 {
2807 if (query.isValid())
2808 {
2809 int v = (query.value(0)).toInt();
2810 query.finish();
2811 return v;
2812 }
2813 else
2814 {
2815 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: NOT VALID" << QT_ENDL;
2816 }
2817 }
2818 else
2819 {
2820 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: QUERY EXEC NOT NEXT" << QT_ENDL;
2821 }
2822 }
2823 else
2824 {
2825 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: NOT OK: " << query.lastError().databaseText() << QT_ENDL;
2826 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: NOT OK: " << QString::number(query.lastError().nativeErrorCode()) << QT_ENDL;
2827 }
2828 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: SQL OK" << QT_ENDL;
2829 return -5;
2830 }
2831 else
2832 {
2833 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2834 query.finish();
2835 //qDebug() << "DataProxy_SQLite::addQSOFromLoTW: Error: SQL " << QT_ENDL;
2836 return -100;
2837 }
2838 }
2839
deleteQSO(const int _qsoId)2840 bool DataProxy_SQLite::deleteQSO(const int _qsoId)
2841 {
2842 //qDebug() << "DataProxy_SQLite::deleteQSO" << QT_ENDL;
2843 QSqlQuery query;
2844 QString queryString = QString("DELETE FROM log WHERE id='%1'").arg(_qsoId);
2845 bool sqlOK = query.exec(queryString);
2846
2847 if (sqlOK)
2848 {
2849 query.finish();
2850 return true;
2851 }
2852 else
2853 {
2854 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2855 query.finish();
2856 return false;
2857 }
2858 }
2859
isWorkedB4(const QString & _qrz,const int _currentLog)2860 int DataProxy_SQLite::isWorkedB4(const QString &_qrz, const int _currentLog)
2861 {
2862 //qDebug() << "DataProxy_SQLite::isWorkedB4" << QT_ENDL;
2863 //Returns the QSO id
2864 QSqlQuery query;
2865 QString queryString;
2866 if (_currentLog < 0)
2867 {
2868 queryString = QString("SELECT id FROM log WHERE call='%1'").arg(_qrz);
2869 }
2870 else
2871 {
2872 queryString = QString("SELECT id FROM log WHERE call='%1' AND lognumber='%2'").arg(_qrz).arg(_currentLog);
2873 }
2874
2875 bool sqlOK = query.exec(queryString);
2876
2877 if (sqlOK)
2878 {
2879 query.next();
2880 if (query.isValid())
2881 {
2882 int v = (query.value(0)).toInt();
2883 query.finish();
2884 return v;
2885 }
2886 else
2887 {
2888 query.finish();
2889 return -1;
2890 }
2891 }
2892 else
2893 {
2894 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2895 query.finish();
2896 return -1;
2897 }
2898 }
2899
isThisQSODuplicated(const QString & _callingFunc,const QString & _qrz,const QDateTime & _dateTime,const int _band,const int _mode,const int _secs)2900 QList<int> DataProxy_SQLite::isThisQSODuplicated(const QString &_callingFunc, const QString &_qrz, const QDateTime &_dateTime, const int _band, const int _mode, const int _secs)
2901 //QList<int> DataProxy_SQLite::isThisQSODuplicated(const QString &_qrz, const QDateTime &_dateTime, const int _band, const int _mode)
2902 {
2903 //qDebug() << "DataProxy_SQLite::isThisQSODuplicated" << QT_ENDL;
2904 QSqlQuery query;
2905 QString queryString;
2906 QList<int> dupeQsos;
2907 dupeQsos.clear();
2908 int validityPeriod = 15 * 60;
2909 QString initTime = util->getDateTimeSQLiteStringFromDateTime(_dateTime.addSecs(-validityPeriod));
2910 QString endTime = util->getDateTimeSQLiteStringFromDateTime(_dateTime.addSecs(validityPeriod));
2911
2912 //yyyy-MM-dd hh:mm:ss
2913 // We will match +-15min
2914
2915
2916 queryString = QString("SELECT id, qso_date FROM log WHERE call='%1' AND bandid='%2' AND modeid='%3' AND qso_date>'%4' AND qso_date<'%5'").arg(_qrz).arg(_band).arg(_mode).arg(initTime).arg(endTime);
2917
2918 bool sqlOK = query.exec(queryString);
2919
2920 if (sqlOK)
2921 {
2922 while (query.next())
2923 {
2924 if (query.isValid())
2925 {
2926 int dupeQSO = (query.value(0)).toInt();
2927 if (dupeQSO>0)
2928 {
2929 dupeQsos.append(dupeQSO);
2930 }
2931 }
2932 else
2933 {
2934 //qDebug() << "DataProxy_SQLite::isThisQSODuplicated - not valid" << QT_ENDL;
2935 }
2936 }
2937 return dupeQsos;
2938 }
2939 else
2940 {
2941 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2942 query.finish();
2943 return dupeQsos;
2944 }
2945 }
2946
2947
getDuplicatedQSOId(const QString & _qrz,const QDateTime & _datetime,const int _band,const int _mode)2948 int DataProxy_SQLite::getDuplicatedQSOId(const QString &_qrz, const QDateTime &_datetime, const int _band, const int _mode)
2949 {
2950 //qDebug() << "DataProxy_SQLite::isThisQSODuplicated" << QT_ENDL;
2951 QSqlQuery query;
2952 QString queryString;
2953 QString datetime = util->getDateTimeSQLiteStringFromDateTime(_datetime);
2954
2955 queryString = QString("SELECT id FROM log WHERE call='%1' AND qso_date='%2' AND bandid='%4' AND modeid='%5'").arg(_qrz).arg(datetime).arg(_band).arg(_mode);
2956
2957 bool sqlOK = query.exec(queryString);
2958
2959 if (sqlOK)
2960 {
2961 query.next();
2962 if (query.isValid())
2963 {
2964 int qsoId = (query.value(0)).toInt();
2965 if (qsoId)
2966 {
2967 query.finish();
2968 return qsoId;
2969 }
2970 else
2971 {
2972 query.finish();
2973 return -1;
2974 }
2975 }
2976 else
2977 {
2978 query.finish();
2979 return -1;
2980 }
2981 }
2982 else
2983 {
2984 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2985 query.finish();
2986 return -1;
2987 }
2988
2989 //return -1;
2990 }
2991
isDXCCConfirmed(const int _dxcc,const int _currentLog)2992 bool DataProxy_SQLite::isDXCCConfirmed(const int _dxcc, const int _currentLog)
2993 {
2994 //qDebug() << "DataProxy_SQLite::isDXCCConfirmed: " << QString::number(_dxcc) << "/" << QString::number(_currentLog) << QT_ENDL;
2995 QString queryString = QString("SELECT confirmed from awarddxcc WHERE dxcc='%1' AND lognumber='%2'").arg(_dxcc).arg(_currentLog);
2996 QSqlQuery query;
2997
2998 bool sqlOK = query.exec(queryString);
2999
3000 if (sqlOK)
3001 {
3002 query.next();
3003 if (query.isValid())
3004 {
3005 if ( (query.value(0)).toInt() == 1)
3006 {
3007 //qDebug() << "DataProxy_SQLite::isDXCCConfrmed: TRUE" << QT_ENDL;
3008 query.finish();
3009 return true;
3010 }
3011 else
3012 {
3013 //qDebug() << "DataProxy_SQLite::isDXCCConfrmed: FALSE1" << QT_ENDL;
3014 query.finish();
3015 return false;
3016 }
3017 }
3018 else
3019 {
3020 //qDebug() << "DataProxy_SQLite::isDXCCConfrmed: FALSE2" << QT_ENDL;
3021 query.finish();
3022 return false;
3023 }
3024 }
3025 else
3026 {
3027 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3028 //qDebug() << "DataProxy_SQLite::isDXCCConfrmed: FALSE3" << QT_ENDL;
3029 query.finish();
3030 return false;
3031 }
3032 }
3033
isHF(const int _band)3034 bool DataProxy_SQLite::isHF(const int _band)
3035 {// 160M is considered as HF
3036 if ( (_band>=getIdFromBandName("10M")) && (_band<=getIdFromBandName("160M")) )
3037 {
3038 //qDebug() << "DataProxy_SQLite::isHF: TRUE" << QT_ENDL;
3039 return true;
3040 }
3041 else
3042 {
3043 //qDebug() << "DataProxy_SQLite::isHF: FALSE" << QT_ENDL;
3044 return false;
3045 }
3046 }
3047
isWARC(const int _band)3048 bool DataProxy_SQLite::isWARC(const int _band)
3049 {
3050 if ( (_band==getIdFromBandName("12M")) || (_band==getIdFromBandName("17M")) || ((_band==getIdFromBandName("30M")) ) )
3051 {
3052 //qDebug() << "DataProxy_SQLite::isWARC: tRUE" << QT_ENDL;
3053 return true;
3054 }
3055 else
3056 {
3057 //qDebug() << "DataProxy_SQLite::isWARC: FALSE" << QT_ENDL;
3058 return false;
3059 }
3060 }
3061
isVHF(const int _band)3062 bool DataProxy_SQLite::isVHF(const int _band)
3063 {
3064 if (_band<=getIdFromBandName("6M"))
3065 {
3066 //qDebug() << "DataProxy_SQLite::isVHF: TRUE" << QT_ENDL;
3067 return true;
3068 }
3069 else
3070 {
3071 //qDebug() << "DataProxy_SQLite::isVHF: FALSE" << QT_ENDL;
3072 return false;
3073 }
3074 }
3075
isUHF(const int _band)3076 bool DataProxy_SQLite::isUHF(const int _band)
3077 {
3078 if (_band<=getIdFromBandName("70CM"))
3079 {
3080 //qDebug() << "DataProxy_SQLite::isUHF: TRUE" << QT_ENDL;
3081 return true;
3082 }
3083 else
3084 {
3085 //qDebug() << "DataProxy_SQLite::isUHF: FALSE" << QT_ENDL;
3086 return false;
3087 }
3088 }
3089
getOperatingYears(const int _currentLog)3090 QStringList DataProxy_SQLite::getOperatingYears(const int _currentLog)
3091 {
3092 //qDebug() << "DataProxy_SQLite::getYearsOperating: " << QString::number(_currentLog) << QT_ENDL;
3093 QStringList years = QStringList();
3094 //QStringList yearsSorted = QStringList();
3095 QSqlQuery query;
3096 QString queryString;
3097 if (_currentLog<0)
3098 {
3099 queryString = QString("SELECT DISTINCT (substr (qso_date, 0, 5)) FROM log ORDER BY 'qso_date'");
3100 }
3101 else
3102 {
3103 queryString = QString("SELECT DISTINCT (substr (qso_date, 0, 5)) FROM log WHERE lognumber='%0' ORDER BY 'qso_date'").arg(_currentLog);
3104 }
3105
3106
3107 QString year = QString();
3108 //qDebug() << "DataProxy_SQLite::getYearsOperating: -1" << QT_ENDL;
3109 bool sqlOk = query.exec(queryString);
3110
3111 if (sqlOk)
3112 {
3113 //qDebug() << "DataProxy_SQLite::getYearsOperating: sqlOk = true" << QT_ENDL;
3114 while (query.next())
3115 {
3116 if (query.isValid())
3117 {
3118 year = (query.value(0)).toString();
3119 //qDebug() << "DataProxy_SQLite::getYearsOperating: year=" << year << QT_ENDL;
3120 years << year;
3121 year.clear();
3122 }
3123 else
3124 {
3125 //qDebug() << "DataProxy_SQLite::getYearsOperating: NOT VALID" << QT_ENDL;
3126 }
3127 }
3128 //qDebug() << "DataProxy_SQLite::getYearsOperating: END OK - " << QString::number(years.size())<< QT_ENDL;
3129 query.finish();
3130 //return years;
3131 if (years.length()>0)
3132 {
3133 years.sort();
3134 }
3135 }
3136 else
3137 {
3138 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3139 //qDebug() << "DataProxy_SQLite::getYearsOperating: sqlOk = false" << QT_ENDL;
3140 }
3141 return years;
3142 }
3143
compressDB()3144 void DataProxy_SQLite::compressDB()
3145 {
3146 db->compress();
3147 }
3148
unMarkAllQSO()3149 bool DataProxy_SQLite::unMarkAllQSO()
3150 {
3151 return db->unMarkAllQSO();
3152 }
3153
lotwSentQueue(const QDate & _updateDate,const int _currentLog)3154 bool DataProxy_SQLite::lotwSentQueue(const QDate &_updateDate, const int _currentLog)
3155 {// Mark LOTW QSL SENT as Q (Queued)
3156 // If currentLog <0 ALL the QSO of the log will be queued
3157
3158 //qDebug() << "DataProxy_SQLite::lotwSentQueue: Date:" << _updateDate << " /" << QString::number(_currentLog) << QT_ENDL;
3159 QString queryString;
3160
3161 if (_currentLog<1)
3162 {
3163 queryString = QString("UPDATE log SET lotw_qsl_sent = 'Q', lotw_qslsdate = '%1' WHERE lotw_qsl_sent != 'Y' AND lotw_qsl_sent != 'N' AND lotw_qsl_sent != 'R' AND lotw_qsl_sent != 'I' AND lotw_qsl_sent != 'Q'").arg(util->getDateSQLiteStringFromDate(_updateDate));
3164 }
3165 else
3166 {
3167 queryString = QString("UPDATE log SET lotw_qsl_sent = 'Q', lotw_qslsdate = '%1' WHERE lognumber = '%2' AND lotw_qsl_sent != 'Y' AND lotw_qsl_sent != 'N' AND lotw_qsl_sent != 'R' AND lotw_qsl_sent != 'I' AND lotw_qsl_sent != 'Q'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_currentLog);
3168 }
3169
3170 QSqlQuery query;
3171
3172 bool sqlOK = query.exec(queryString);
3173 query.finish();
3174 if (sqlOK)
3175 {
3176 return true;
3177 }
3178 else
3179 {
3180 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3181 }
3182
3183 return false;
3184 }
3185
lotwSentYes(const QDate & _updateDate,const int _currentLog,const QString & _station)3186 bool DataProxy_SQLite::lotwSentYes(const QDate &_updateDate, const int _currentLog, const QString &_station)
3187 {// Mark LOTW QSL SENT as Q (Queued)
3188 // If currentLog <0 ALL the QSO of the log will be queued
3189
3190 //qDebug() << "DataProxy_SQLite::lotwSentQueue: " << QString::number(_currentLog) << QT_ENDL;
3191 QString queryString;
3192
3193
3194 if (_currentLog<1)
3195 {
3196 if (_station == "ALL")
3197 {
3198 queryString = QString("UPDATE log SET lotw_qsl_sent = 'Y', lotw_qslsdate = '%1' WHERE lotw_qsl_sent == 'Q'");
3199 }
3200 else
3201 {
3202 queryString = QString("UPDATE log SET lotw_qsl_sent = 'Y', lotw_qslsdate = '%1' WHERE lotw_qsl_sent == 'Q' AND station_callsign='%2'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_station);
3203 }
3204 }
3205 else
3206 {
3207 if (_station == "ALL")
3208 {
3209 queryString = QString("UPDATE log SET lotw_qsl_sent = 'Y', lotw_qslsdate = '%1' WHERE lognumber = '%2' AND lotw_qsl_sent == 'Q'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_currentLog);
3210 }
3211 else
3212 {
3213 queryString = QString("UPDATE log SET lotw_qsl_sent = 'Y', lotw_qslsdate = '%1' WHERE lognumber = '%2' AND lotw_qsl_sent == 'Q' AND station_callsign='%3'").arg(util->getDateSQLiteStringFromDate(_updateDate)).arg(_currentLog).arg(_station);
3214 }
3215 }
3216
3217 QSqlQuery query;
3218
3219 bool sqlOK = query.exec(queryString);
3220 query.finish();
3221 if (sqlOK)
3222 {
3223 return true;
3224 }
3225 else
3226 {
3227 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3228 }
3229
3230 return false;
3231 }
3232
lotwSentQSOs(const QList<int> & _qsos)3233 bool DataProxy_SQLite::lotwSentQSOs(const QList<int> &_qsos)
3234 {
3235 //qDebug() << " DataProxy_SQLite::lotwSentQSOs" << QString::number(_qsos.count()) << QT_ENDL;
3236 if (_qsos.count() < 1)
3237 {
3238 return true;
3239 }
3240 QString queryString;
3241 bool sqlOK;
3242 QSqlQuery query;
3243
3244 for (int i = 0; i< _qsos.count(); i++)
3245 {
3246 //qDebug() << " DataProxy_SQLite::lotwSentQSOs: updating QSO: " << QString::number(_qsos.at(i)) << QT_ENDL;
3247
3248 //queryString = QString("UPDATE log SET lotw_qsl_sent = 'Y', lotw_qslsdate = '%1' WHERE id='%2'").arg((QDate::currentDate()).toString("yyyy-MM-dd")).arg(QString::number(_qsos.at(i)));
3249 queryString = QString("UPDATE log SET lotw_qsl_sent = 'Y', lotw_qslsdate = '%1' WHERE id='%2'").arg(util->getDateSQLiteStringFromDate(QDate::currentDate())).arg(QString::number(_qsos.at(i)));
3250 sqlOK = query.exec(queryString);
3251 query.finish();
3252 if (sqlOK)
3253 {
3254 //qDebug() << " DataProxy_SQLite::lotwSentQSOs: exec: " << query.lastQuery() << QT_ENDL;
3255 }
3256 else
3257 {
3258 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3259 //qDebug() << " DataProxy_SQLite::lotwSentQSOs: END FALSE" << QT_ENDL;
3260 return false;
3261 }
3262 }
3263 //qDebug() << " DataProxy_SQLite::lotwSentQSOs: END TRUE" << QT_ENDL;
3264 return true;
3265 }
3266
lotwUpdateQSLReception(const QString & _call,const QDateTime & _dateTime,const QString & _band,const QString & _mode,const QDate & _qslrdate)3267 int DataProxy_SQLite::lotwUpdateQSLReception (const QString &_call, const QDateTime &_dateTime, const QString &_band, const QString &_mode, const QDate &_qslrdate)
3268 { //Returns the QSO id updated or -1 if none was updated.
3269 //qDebug() << " DataProxy_SQLite::lotwUpdateQSLReception: " << _call << "/" << util->getDateTimeSQLiteStringFromDateTime(_dateTime) << "/" <<_band <<"/"<<_mode << "/" << util->getADIFDateFromQDate(_qslrdate) << endl ;
3270 int bandid = getIdFromBandName(_band);
3271 int modeid = getIdFromModeName(_mode);
3272
3273 QString qso_date;
3274 qso_date = util->getDateTimeSQLiteStringFromDateTime(_dateTime);
3275
3276 QString queryString;
3277 //queryString = QString("SELECT id, lotw_qsl_rcvd FROM log WHERE call='%1' AND qso_date='%2' AND bandid='%4' AND modeid='%5'").arg(_call).arg(qso_date).arg(bandid).arg(modeid);
3278 queryString = QString("SELECT id, lotw_qsl_rcvd FROM log WHERE call='%1' AND qso_date='%2' AND bandid='%4' AND modeid='%5'").arg(_call).arg(qso_date).arg(bandid).arg(modeid);
3279
3280 QSqlQuery query;
3281
3282 bool sqlOK = query.exec(queryString);
3283 if (sqlOK)
3284 {
3285 query.next();
3286 if (query.isValid())
3287 {
3288 int id = (query.value(0)).toInt();
3289 QString _lotwQSLReceived = (query.value(1).toString());
3290
3291 if (( id > 0) && (_lotwQSLReceived!="Y"))
3292 {
3293 query.finish();
3294
3295 //QString qslsdate = (QDate::fromString(_qslsdate, "yyyyMMdd")).toString("yyyy-MM-dd");
3296 //QString qslrdate = (QDate::fromString(_qslrdate, "yyyyMMdd")).toString("yyyy-MM-dd");
3297 queryString = QString("UPDATE log SET lotw_qsl_rcvd = 'Y', lotw_qslrdate = '%1' WHERE id='%2'").arg(util->getDateSQLiteStringFromDate(_qslrdate)).arg(QString::number(id));
3298
3299 sqlOK = query.exec(queryString);
3300 query.finish();
3301 if (sqlOK)
3302 {
3303 //qDebug() << "DataProxy_SQLite::lotwUpdateQSLReception: Modified Id: " << QString::number(id) << QT_ENDL;
3304 return id;
3305 }
3306 else
3307 {
3308 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3309 //qDebug() << "DataProxy_SQLite::lotwUpdateQSLReception: SQL ERROR" << QT_ENDL;
3310 return -4;
3311 }
3312 }
3313 else
3314 {
3315 //qDebug() << "DataProxy_SQLite::lotwUpdateQSLReception ID Not found" << QT_ENDL;
3316 query.finish();
3317 return -5;
3318 }
3319 }
3320 else if (query.lastError().nativeErrorCode() == -1)
3321 {
3322 //qDebug() << "DataProxy_SQLite::lotwUpdateQSLReception QSO not found " << query.lastQuery() << QT_ENDL;
3323 return -1;
3324 }
3325 else
3326 {
3327 //qDebug() << "DataProxy_SQLite::lotwUpdateQSLReception Unknown error " << query.lastQuery() << QT_ENDL;
3328 //qDebug() << "DataProxy_SQLite::lotwUpdateQSLReception Error: " << query.lastError().databaseText() << QT_ENDL;
3329 //qDebug() << "DataProxy_SQLite::lotwUpdateQSLReception Error: " << QString::number(query.lastError().nativeErrorCode()) << QT_ENDL;
3330 query.finish();
3331 return -3;
3332 }
3333 }
3334 else
3335 {
3336 //qDebug() << "DataProxy_SQLite::lotwUpdateQSLReception Query error: " << query.lastQuery() << QT_ENDL;
3337 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3338 }
3339 query.finish();
3340 return -100;
3341 }
3342
getQSOsListLoTWToSend(const QString & _stationCallsign,const QDate & _startDate,const QDate & _endDate,bool _justQueued,int _logN)3343 QList<int> DataProxy_SQLite::getQSOsListLoTWToSend(const QString &_stationCallsign, const QDate &_startDate, const QDate &_endDate, bool _justQueued, int _logN)
3344 {
3345 //qDebug() << "DataProxy_SQLite::getQSOsListLoTWToSend Call/Start/end: " << _stationCallsign << _startDate.toString("yyyyMMdd") << "/" << _endDate.toString("yyyyMMdd") << QT_ENDL;
3346
3347 QList <int> qsoList;
3348 qsoList.clear();
3349 QDate tmpDate;
3350 QString aux = QString();
3351 QStringList qs;
3352 qs.clear();
3353 QString queryString;
3354
3355 QString _queryST_string;
3356 if (util->isValidCall(_stationCallsign))
3357 {
3358 _queryST_string = QString("station_callsign='%1'").arg(_stationCallsign);
3359 }
3360 else if (_stationCallsign == "ALL")
3361 {
3362 _queryST_string = QString("station_callsign!='ALL'");
3363 }
3364 else
3365 {
3366 _queryST_string = QString("station_callsign=''");
3367 }
3368
3369 QString _query_justQueued;
3370 if (_justQueued)
3371 {
3372 //qDebug() << "DataProxy_SQLite::getQSOsListLoTWToSend justQueued TRUE" << QT_ENDL;
3373 _query_justQueued = QString("lotw_qsl_sent='Q'");
3374 }
3375 else
3376 {
3377 //qDebug() << "DataProxy_SQLite::getQSOsListLoTWToSend justQueued FALSE" << QT_ENDL;
3378 _query_justQueued = QString("lotw_qsl_sent!='1'");
3379 }
3380
3381 QString _query_logNumber;
3382 if (doesThisLogExist (_logN))
3383 {
3384 _query_logNumber = QString(" AND lognumber='%1'").arg(_logN);
3385 }
3386 else
3387 {
3388 _query_logNumber.clear ();
3389 }
3390 queryString = QString("SELECT id, qso_date FROM log WHERE %1 AND %2 %3").arg(_queryST_string).arg(_query_justQueued).arg(_query_logNumber);
3391
3392 // queryString = QString("SELECT id, qso_date FROM log WHERE ") + _queryST_string + " AND " + _query_justQueued;
3393
3394
3395 QSqlQuery query;
3396
3397 bool sqlOK = query.exec(queryString);
3398 //qDebug() << "DataProxy_SQLite::getQSOsListLoTWToSend Query: " << query.lastQuery() << QT_ENDL;
3399
3400 if (sqlOK)
3401 {
3402 // //qDebug() << "DataProxy_SQLite::getQSOsListLoTWToSend Query: " << query.lastQuery() << QT_ENDL;
3403
3404 while ( (query.next())) {
3405 if (query.isValid())
3406 {
3407 aux.clear();
3408 aux = (query.value(1)).toString() ;
3409 tmpDate = util->getDateFromSQliteString(aux);
3410 //qDebug() << "DataProxy_SQLite::getQSOsListLoTWToSend QSO Date: " << aux << "/" << tmpDate.toString("yyyy-MM-dd") << QT_ENDL;
3411 //tmpDate = QDate::fromString(aux, "yyyy-MM-dd");
3412 if ((_startDate<=tmpDate) && _endDate>=tmpDate)
3413 {
3414 qsoList.append((query.value(0)).toInt());
3415 }
3416 }
3417 }
3418 }
3419 else
3420 {
3421 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3422 query.finish();
3423 qsoList.clear();
3424 return qsoList;
3425 }
3426 query.finish();
3427 qs.sort();
3428 return qsoList;
3429 }
3430
getQSOsListClubLogToSent(const QString & _stationCallsign,const QDate & _startDate,const QDate & _endDate,bool _justModified,int _logN)3431 QList<int> DataProxy_SQLite::getQSOsListClubLogToSent(const QString &_stationCallsign, const QDate &_startDate, const QDate &_endDate, bool _justModified, int _logN)
3432 {
3433 //qDebug() << "DataProxy_SQLite::getQSOsListClubLogToSent Call/Start/end: " << _stationCallsign << _startDate.toString("yyyyMMdd") << "/" << _endDate.toString("yyyyMMdd") << QT_ENDL;
3434
3435 QList <int> qsoList;
3436 qsoList.clear();
3437 QDate tmpDate;
3438 QString aux = QString();
3439 QStringList qs;
3440 qs.clear();
3441 QString queryString;
3442
3443 QString _queryST_string;
3444 if (util->isValidCall(_stationCallsign))
3445 {
3446 _queryST_string = QString("station_callsign='%1'").arg(_stationCallsign);
3447 }
3448 else if (_stationCallsign == "ALL")
3449 {
3450 _queryST_string = QString("station_callsign!='ALL'");
3451 }
3452 else
3453 {
3454 _queryST_string = QString("station_callsign=''");
3455 }
3456
3457 QString _query_justModified;
3458 if (_justModified)
3459 {
3460 //qDebug() << "DataProxy_SQLite::getQSOsListClubLogToSent justQueued TRUE" << QT_ENDL;
3461 _query_justModified = QString("clublog_qso_upload_status='M'");
3462 }
3463 else
3464 {
3465 //qDebug() << "DataProxy_SQLite::getQSOsListClubLogToSent justQueued FALSE" << QT_ENDL;
3466 _query_justModified = QString("clublog_qso_upload_status!='M'");
3467 }
3468 //qDebug() << "DataProxy_SQLite::getQSOsListClubLogToSent logN: " << QString::number(_logN) << QT_ENDL;
3469 QString _query_logNumber;
3470 if (doesThisLogExist (_logN))
3471 {
3472 //qDebug() << "DataProxy_SQLite::getQSOsListClubLogToSent log DOES exist" << QT_ENDL;
3473 _query_logNumber = QString(" AND lognumber='%1'").arg(_logN);
3474 }
3475 else
3476 {
3477 //qDebug() << "DataProxy_SQLite::getQSOsListClubLogToSent log DOES NOT exist" << QT_ENDL;
3478 _query_logNumber.clear ();
3479 }
3480 queryString = QString("SELECT id, qso_date FROM log WHERE %1 AND %2 %3").arg(_queryST_string).arg(_query_justModified).arg(_query_logNumber);
3481
3482
3483 //queryString = QString("SELECT id, qso_date FROM log WHERE ") + _queryST_string + " AND " + _query_justModified;
3484
3485 QSqlQuery query;
3486
3487 bool sqlOK = query.exec(queryString);
3488 //qDebug() << "DataProxy_SQLite::getQSOsListClubLogToSent Query: " << query.lastQuery() << QT_ENDL;
3489
3490 if (sqlOK)
3491 {
3492 // //qDebug() << "DataProxy_SQLite::getQSOsListClubLogToSent Query: " << query.lastQuery() << QT_ENDL;
3493
3494 while ( (query.next())) {
3495 if (query.isValid())
3496 {
3497 aux.clear();
3498 aux = (query.value(1)).toString() ;
3499 tmpDate = util->getDateFromSQliteString(aux);
3500 //qDebug() << "DataProxy_SQLite::getQSOsListClubLogToSent QSO Date: " << aux << "/" << tmpDate.toString("yyyy-MM-dd") << QT_ENDL;
3501 //tmpDate = QDate::fromString(aux, "yyyy-MM-dd");
3502 if ((_startDate<=tmpDate) && _endDate>=tmpDate)
3503 {
3504 //qDebug() << "DataProxy_SQLite::getQSOsListClubLogToSent Adding: " << QString::number((query.value(0)).toInt()) << QT_ENDL;
3505 qsoList.append((query.value(0)).toInt());
3506 }
3507 }
3508 }
3509 }
3510 else
3511 {
3512 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3513 query.finish();
3514 qsoList.clear();
3515 return qsoList;
3516 }
3517 query.finish();
3518 qs.sort();
3519 //qDebug() << "DataProxy_SQLite::getQSOsListClubLogToSent Returning: #" << QString::number(qsoList.length()) << QT_ENDL;
3520 return qsoList;
3521 }
3522
getQSOsListEQSLToSent(const QString & _stationCallsign,const QDate & _startDate,const QDate & _endDate,bool _justModified)3523 QList<int> DataProxy_SQLite::getQSOsListEQSLToSent(const QString &_stationCallsign, const QDate &_startDate, const QDate &_endDate, bool _justModified)
3524 {
3525 //qDebug() << "DataProxy_SQLite::getQSOsListEQSLToSent Call/Start/end: " << _stationCallsign << _startDate.toString("yyyyMMdd") << "/" << _endDate.toString("yyyyMMdd") << QT_ENDL;
3526
3527 QList <int> qsoList;
3528 qsoList.clear();
3529 QDate tmpDate;
3530 QString aux = QString();
3531 QStringList qs;
3532 qs.clear();
3533 QString queryString;
3534
3535 QString _queryST_string;
3536 if (util->isValidCall(_stationCallsign))
3537 {
3538 _queryST_string = QString("station_callsign='%1'").arg(_stationCallsign);
3539 }
3540 else if (_stationCallsign == "ALL")
3541 {
3542 _queryST_string = QString("station_callsign!='ALL'");
3543 }
3544 else
3545 {
3546 _queryST_string = QString("station_callsign=''");
3547 }
3548
3549 QString _query_justModified;
3550 if (_justModified)
3551 {
3552 //qDebug() << "DataProxy_SQLite::getQSOsListEQSLToSent justQueued TRUE" << QT_ENDL;
3553 _query_justModified = QString("eqsl_qsl_sent='Q'");
3554 }
3555 else
3556 {
3557 //qDebug() << "DataProxy_SQLite::getQSOsListEQSLToSent justQueued FALSE" << QT_ENDL;
3558 _query_justModified = QString("eqsl_qsl_sent!='M'");
3559 }
3560 /* Modify accordingly to add log number support
3561 QString _query_logNumber;
3562 if (doesThisLogExist (_logN))
3563 {
3564 _query_logNumber = QString(" AND lognumber='%1'").arg(_logN);
3565 }
3566 else
3567 {
3568 _query_logNumber.clear ();
3569 }
3570 queryString = QString("SELECT id, qso_date FROM log WHERE %1 AND %2 '%3'").arg(_queryST_string).arg(_query_justQueued).arg(_query_logNumber);
3571
3572 */
3573 queryString = QString("SELECT id, qso_date FROM log WHERE ") + _queryST_string + " AND " + _query_justModified;
3574
3575
3576 QSqlQuery query;
3577
3578 bool sqlOK = query.exec(queryString);
3579 //qDebug() << "DataProxy_SQLite::getQSOsListEQSLToSent Query: " << query.lastQuery() << QT_ENDL;
3580
3581 if (sqlOK)
3582 {
3583 // //qDebug() << "DataProxy_SQLite::getQSOsListEQSLToSent Query: " << query.lastQuery() << QT_ENDL;
3584
3585 while ( (query.next())) {
3586 if (query.isValid())
3587 {
3588 aux.clear();
3589 aux = (query.value(1)).toString() ;
3590 tmpDate = util->getDateFromSQliteString(aux);
3591 //qDebug() << "DataProxy_SQLite::getQSOsListEQSLToSent QSO Date: " << aux << "/" << tmpDate.toString("yyyy-MM-dd") << QT_ENDL;
3592 //tmpDate = QDate::fromString(aux, "yyyy-MM-dd");
3593 if ((_startDate<=tmpDate) && _endDate>=tmpDate)
3594 {
3595 qsoList.append((query.value(0)).toInt());
3596 }
3597 }
3598 }
3599 }
3600 else
3601 {
3602 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3603 query.finish();
3604 qsoList.clear();
3605 return qsoList;
3606 }
3607 query.finish();
3608 qs.sort();
3609 return qsoList;
3610 }
3611
getQSOsListQRZCOMToSent(const QString & _stationCallsign,const QDate & _startDate,const QDate & _endDate,bool _justModified)3612 QList<int> DataProxy_SQLite::getQSOsListQRZCOMToSent(const QString &_stationCallsign, const QDate &_startDate, const QDate &_endDate, bool _justModified)
3613 {
3614 //qDebug() << "DataProxy_SQLite::QList<int> getQSOsListQRZCOMToSent(const QString &_stationCallsign, const QDate &_startDate, const QDate &_endDate, bool _justModified=true); Call/Start/end: " << _stationCallsign << _startDate.toString("yyyyMMdd") << "/" << _endDate.toString("yyyyMMdd") << QT_ENDL;
3615
3616 QList <int> qsoList;
3617 qsoList.clear();
3618 QDate tmpDate;
3619 QString aux = QString();
3620 QStringList qs;
3621 qs.clear();
3622 QString queryString;
3623
3624 QString _queryST_string;
3625 if (util->isValidCall(_stationCallsign))
3626 {
3627 _queryST_string = QString("station_callsign='%1'").arg(_stationCallsign);
3628 }
3629 else if (_stationCallsign == "ALL")
3630 {
3631 _queryST_string = QString("station_callsign!='ALL'");
3632 }
3633 else
3634 {
3635 _queryST_string = QString("station_callsign=''");
3636 }
3637
3638 QString _query_justModified;
3639 if (_justModified)
3640 {
3641 //qDebug() << "DataProxy_SQLite::getQSOsListQRZCOMToSent justQueued TRUE" << QT_ENDL;
3642 _query_justModified = QString("qrzcom_qso_upload_status='M'");
3643 }
3644 else
3645 {
3646 //qDebug() << "DataProxy_SQLite::getQSOsListQRZCOMToSent justQueued FALSE" << QT_ENDL;
3647 _query_justModified = QString("qrzcom_qso_upload_status!='-'");
3648 }
3649 /*
3650 QString _query_logNumber;
3651 if (doesThisLogExist (_logN))
3652 {
3653 _query_logNumber = QString(" AND lognumber='%1'").arg(_logN);
3654 }
3655 else
3656 {
3657 _query_logNumber.clear ();
3658 }
3659 queryString = QString("SELECT id, qso_date FROM log WHERE %1 AND %2 %3").arg(_queryST_string).arg(_query_justModified).arg(_query_logNumber);
3660
3661 */
3662 queryString = QString("SELECT id, qso_date FROM log WHERE ") + _queryST_string + " AND " + _query_justModified;
3663
3664
3665 QSqlQuery query;
3666
3667 bool sqlOK = query.exec(queryString);
3668 //qDebug() << "DataProxy_SQLite::getQSOsListQRZCOMToSent Query: " << query.lastQuery() << QT_ENDL;
3669
3670 if (sqlOK)
3671 {
3672 // //qDebug() << "DataProxy_SQLite::getQSOsListQRZCOMToSent Query: " << query.lastQuery() << QT_ENDL;
3673
3674 while ( (query.next())) {
3675 if (query.isValid())
3676 {
3677 aux.clear();
3678 aux = (query.value(1)).toString() ;
3679 tmpDate = util->getDateFromSQliteString(aux);
3680 //qDebug() << "DataProxy_SQLite::getQSOsListQRZCOMToSent QSO Date: " << aux << "/" << tmpDate.toString("yyyy-MM-dd") << QT_ENDL;
3681 //tmpDate = QDate::fromString(aux, "yyyy-MM-dd");
3682 if ((_startDate<=tmpDate) && _endDate>=tmpDate)
3683 {
3684 qsoList.append((query.value(0)).toInt());
3685 }
3686 }
3687 }
3688 }
3689 else
3690 {
3691 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3692 query.finish();
3693 qsoList.clear();
3694 return qsoList;
3695 }
3696 query.finish();
3697 qs.sort();
3698 return qsoList;
3699 }
3700
3701
getQSOsListToBeExported(const QString & _stationCallsign,const QDate & _startDate,const QDate & _endDate)3702 QList<int> DataProxy_SQLite::getQSOsListToBeExported(const QString &_stationCallsign, const QDate &_startDate, const QDate &_endDate)
3703 {
3704 //qDebug() << Q_FUNC_INFO << ": Call/Start/end: " << _stationCallsign << _startDate.toString("yyyyMMdd") << "/" << _endDate.toString("yyyyMMdd") << QT_ENDL;
3705 QList <int> qsoList;
3706 qsoList.clear();
3707 QDate tmpDate;
3708 QString aux = QString();
3709 QStringList qs;
3710 qs.clear();
3711 QString queryString;
3712
3713 QString _queryST_string;
3714 if (util->isValidCall(_stationCallsign))
3715 {
3716 _queryST_string = QString("station_callsign='%1'").arg(_stationCallsign);
3717 }
3718 else if (_stationCallsign == "ALL")
3719 {
3720 _queryST_string = QString("station_callsign!='ALL'");
3721 }
3722 else
3723 {
3724 _queryST_string = QString("station_callsign=''");
3725 }
3726 /* Modify accordingly to add log number support
3727 QString _query_logNumber;
3728 if (doesThisLogExist (_logN))
3729 {
3730 _query_logNumber = QString(" AND lognumber='%1'").arg(_logN);
3731 }
3732 else
3733 {
3734 _query_logNumber.clear ();
3735 }
3736 queryString = QString("SELECT id, qso_date FROM log WHERE %1 AND %2 '%3'").arg(_queryST_string).arg(_query_justQueued).arg(_logN);
3737
3738 */
3739
3740 queryString = QString("SELECT id, qso_date FROM log WHERE ") + _queryST_string ;
3741
3742 QSqlQuery query;
3743
3744 bool sqlOK = query.exec(queryString);
3745 //qDebug() << Q_FUNC_INFO << ": Query: " << query.lastQuery() << QT_ENDL;
3746
3747 if (sqlOK)
3748 {
3749 // //qDebug() << Q_FUNC_INFO << ": Query: " << query.lastQuery() << QT_ENDL;
3750
3751 while ( (query.next())) {
3752 if (query.isValid())
3753 {
3754 aux.clear();
3755 aux = (query.value(1)).toString() ;
3756 tmpDate = util->getDateFromSQliteString(aux);
3757 //qDebug() << Q_FUNC_INFO << ": QSO Date: " << aux << "/" << tmpDate.toString("yyyy-MM-dd") << QT_ENDL;
3758 //tmpDate = QDate::fromString(aux, "yyyy-MM-dd");
3759 if ((_startDate<=tmpDate) && _endDate>=tmpDate)
3760 {
3761 qsoList.append((query.value(0)).toInt());
3762 }
3763 }
3764 }
3765 }
3766 else
3767 {
3768 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3769 query.finish();
3770 qsoList.clear();
3771 return qsoList;
3772 }
3773 query.finish();
3774 qs.sort();
3775 return qsoList;
3776 }
3777
getQSOsListeQSLNotSent(const QString & _stationCallsign,const QDate & _startDate,const QDate & _endDate,bool _justQueued)3778 QList<int> DataProxy_SQLite::getQSOsListeQSLNotSent(const QString &_stationCallsign, const QDate &_startDate, const QDate &_endDate, bool _justQueued)
3779 {
3780 //qDebug() << "DataProxy_SQLite::getQSOsListeQSLNotSent Call/Start/end: " << _stationCallsign << _startDate.toString("yyyyMMdd") << "/" << _endDate.toString("yyyyMMdd") << QT_ENDL;
3781
3782 QList <int> qsoList;
3783 qsoList.clear();
3784 QDate tmpDate;
3785 QString aux = QString();
3786 QStringList qs;
3787 qs.clear();
3788 QString queryString;
3789
3790 QString _queryST_string;
3791 if (util->isValidCall(_stationCallsign))
3792 {
3793 _queryST_string = QString("station_callsign='%1'").arg(_stationCallsign);
3794 }
3795 else if (_stationCallsign == "ALL")
3796 {
3797 _queryST_string = QString("station_callsign!='ALL'");
3798 }
3799 else
3800 {
3801 _queryST_string = QString("station_callsign=''");
3802 }
3803
3804 QString _query_justQueued;
3805 if (_justQueued)
3806 {
3807 //qDebug() << "DataProxy_SQLite::getQSOsListeQSLNotSent justQueued TRUE" << QT_ENDL;
3808 _query_justQueued = QString("eqsl_qsl_sent='Q'");
3809 }
3810 else
3811 {
3812 //qDebug() << "DataProxy_SQLite::getQSOsListeQSLNotSent justQueued FALSE" << QT_ENDL;
3813 _query_justQueued = QString("eqsl_qsl_sent!='1'");
3814 }
3815 /* Modify accordingly to add log number support
3816 QString _query_logNumber;
3817 if (doesThisLogExist (_logN))
3818 {
3819 _query_logNumber = QString(" AND lognumber='%1'").arg(_logN);
3820 }
3821 else
3822 {
3823 _query_logNumber.clear ();
3824 }
3825 queryString = QString("SELECT id, qso_date FROM log WHERE %1 AND %2 '%3'").arg(_queryST_string).arg(_query_justQueued).arg(_logN);
3826
3827 */
3828 queryString = QString("SELECT id, qso_date FROM log WHERE ") + _queryST_string + " AND " + _query_justQueued;
3829
3830 QSqlQuery query;
3831
3832 bool sqlOK = query.exec(queryString);
3833 //qDebug() << "DataProxy_SQLite::getQSOsListeQSLNotSent Query: " << query.lastQuery() << QT_ENDL;
3834
3835 if (sqlOK)
3836 {
3837 // //qDebug() << "DataProxy_SQLite::getQSOsListeQSLNotSent Query: " << query.lastQuery() << QT_ENDL;
3838
3839 while ( (query.next())) {
3840 if (query.isValid())
3841 {
3842 aux.clear();
3843 aux = (query.value(1)).toString() ;
3844 tmpDate = util->getDateFromSQliteString(aux);
3845 //qDebug() << "DataProxy_SQLite::getQSOsListLoTWToSend QSO Date: " << aux << "/" << tmpDate.toString("yyyy-MM-dd") << QT_ENDL;
3846 //tmpDate = QDate::fromString(aux, "yyyy-MM-dd");
3847 if ((_startDate<=tmpDate) && _endDate>=tmpDate)
3848 {
3849 qsoList.append((query.value(0)).toInt());
3850 }
3851 }
3852 else
3853 {
3854 }
3855 }
3856 }
3857 else
3858 {
3859 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3860 query.finish();
3861 qsoList.clear();
3862 return qsoList;
3863 }
3864 query.finish();
3865 qs.sort();
3866 return qsoList;
3867 }
3868
3869
3870
getQSODetailsForLoTWDownload(const int _id)3871 QStringList DataProxy_SQLite::getQSODetailsForLoTWDownload(const int _id)
3872 { //Returns QRZ << date+time << Band (txt) << mode (txt)
3873 //qDebug() << "DataProxy_SQLite::getQSODetailsForLoTWDownload" << QString::number(_id) << QT_ENDL;
3874 QStringList result;
3875 result.clear();
3876 //getNameFromBandId
3877 QSqlQuery query;
3878 QString queryString = QString("SELECT call, qso_date, bandid, modeid FROM log WHERE id='%0'").arg(_id);
3879
3880 bool sqlOk = query.exec(queryString);
3881
3882 if (sqlOk)
3883 {
3884 if (query.next())
3885 {
3886 if (query.isValid())
3887 {
3888 QString call = query.value(0).toString();
3889 QString date = query.value(1).toString();
3890 //QString date = util->getDateTimeFromSQLiteString(query.value(1).toString());
3891
3892 //QString time = query.value(2).toString();
3893 QString bandid = query.value(2).toString();
3894 QString modeid = query.value(3).toString();
3895 query.finish();
3896 //qDebug() << "DataProxy_SQLite::getQSODetailsForLoTWDownload - date: " << date << QT_ENDL;
3897 //qDebug() << "DataProxy_SQLite::getQSODetailsForLoTWDownload - time: " << time << QT_ENDL;
3898
3899 //getDateTimeSQLiteStringFromDateTime
3900 //QString dateTime = (QDateTime::fromString(date, "yyyy-MM-dd hh:mm:ss")).toString("yyyy-MM-dd hh:mm");
3901 QString dateTime = (util->getDateTimeFromSQLiteString(date)).toString("yyyy-MM-dd hh:mm");
3902
3903 bandid = getNameFromBandId(bandid.toInt());
3904 modeid = getNameFromModeId(modeid.toInt());
3905
3906 result.append(call);
3907 result.append(dateTime);
3908 result.append(bandid);
3909 result.append(modeid);
3910 //qDebug() << "DataProxy_SQLite::getQSODetailsForLoTWDownload - END: call: " << call << QT_ENDL;
3911 return result;
3912 }
3913 //qDebug() << "DataProxy_SQLite::getQSODetailsForLoTWDownload - END: no valid " << QT_ENDL;
3914 }
3915 query.finish();
3916 //qDebug() << "DataProxy_SQLite::getQSODetailsForLoTWDownload - END: no next " << QT_ENDL;
3917 return result;
3918 }
3919 else
3920 {
3921 //qDebug() << "DataProxy_SQLite::getQSODetailsForLoTWDownload - END: SQL NOK " << QT_ENDL;
3922 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3923 query.finish();
3924 return result;
3925 }
3926 }
3927
getQSOonYear(const int _year,const int _logNumber)3928 int DataProxy_SQLite::getQSOonYear(const int _year, const int _logNumber)
3929 {
3930 //qDebug() << "DataProxy_SQLite::getQSOonYear: " << QString::number(_year) << "/" << QString::number(_logNumber) << QT_ENDL;
3931
3932 QSqlQuery query;
3933 QString queryString;
3934 bool sqlOK;
3935 if (_logNumber < 0)
3936 {
3937 queryString = QString("SELECT COUNT (DISTINCT id) FROM log WHERE qso_date LIKE '%1%'").arg(_year);
3938 }
3939 else
3940 {
3941 queryString = QString("SELECT COUNT (DISTINCT id) FROM log where lognumber='%1' AND qso_date LIKE '%2%'").arg(_logNumber).arg(_year);
3942 }
3943
3944 sqlOK = query.exec(queryString);
3945
3946 //qDebug() << "DataProxy_SQLite::getQSOonYear: queryString: " << queryString << QT_ENDL;
3947 if (sqlOK)
3948 {
3949 query.next();
3950 if (query.isValid())
3951 {
3952 //qDebug() << "DataProxy_SQLite::getQSOonYear: " << QString::number((query.value(0)).toInt()) << QT_ENDL;
3953 int v = (query.value(0)).toInt();
3954 query.finish();
3955 return v;
3956 }
3957 else
3958 {
3959 //qDebug() << "DataProxy_SQLite::getQSOonYear: 0" << QT_ENDL;
3960 query.finish();
3961 return 0;
3962 }
3963 }
3964 else
3965 {
3966 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3967 //qDebug() << "DataProxy_SQLite::getDXCConYear: Query error" << QT_ENDL;
3968 query.finish();
3969 return 0;
3970 }
3971 }
3972
getDXCConYear(const int _year,const int _logNumber)3973 int DataProxy_SQLite::getDXCConYear(const int _year, const int _logNumber)
3974 {
3975 //qDebug() << "DataProxy_SQLite::getDXCConYear: " << QString::number(_year) << "/" << QString::number(_logNumber) << QT_ENDL;
3976
3977 QSqlQuery query;
3978 QString queryString;
3979 bool sqlOK;
3980 if (_logNumber < 0)
3981 {
3982 queryString = QString("SELECT COUNT (DISTINCT dxcc) FROM log WHERE dxcc>'0' AND qso_date LIKE '%1%'").arg(_year);
3983 }
3984 else
3985 {
3986 queryString = QString("SELECT COUNT (DISTINCT dxcc) FROM log WHERE dxcc>'0' AND lognumber='%1' AND qso_date LIKE '%2%'").arg(_logNumber).arg(_year);
3987 }
3988
3989 sqlOK = query.exec(queryString);
3990
3991 //qDebug() << "DataProxy_SQLite::getDXCConYear: queryString: " << queryString << QT_ENDL;
3992 if (sqlOK)
3993 {
3994 query.next();
3995 if (query.isValid())
3996 {
3997 //qDebug() << "DataProxy_SQLite::getDXCConYear: " << QString::number((query.value(0)).toInt()) << QT_ENDL;
3998 int v = (query.value(0)).toInt();
3999 query.finish();
4000 return v;
4001 }
4002 else
4003 {
4004 //qDebug() << "DataProxy_SQLite::getDXCConYear: 0" << QT_ENDL;
4005 query.finish();
4006 return 0;
4007 }
4008 }
4009 else
4010 {
4011 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4012 //qDebug() << "DataProxy_SQLite::getDXCConYear: Query error" << QT_ENDL;
4013 query.finish();
4014 return 0;
4015 }
4016 }
4017
getCQzonYear(const int _year,const int _logNumber)4018 int DataProxy_SQLite::getCQzonYear(const int _year, const int _logNumber)
4019 {
4020 //qDebug() << "DataProxy_SQLite::getCQzonYear: " << QString::number(_year) << QT_ENDL;
4021 QSqlQuery query;
4022 QString queryString;
4023 bool sqlOK;
4024 if (_logNumber < 0)
4025 {
4026 queryString = QString("SELECT COUNT (DISTINCT cqz) FROM log where qso_date LIKE '%1%' AND cqz>'0' AND cqz < '41'").arg(_year);
4027 }
4028 else
4029 {
4030 queryString = QString("SELECT COUNT (DISTINCT cqz) FROM log where lognumber='%1' AND cqz>'0' AND cqz<'41' AND qso_date LIKE '%2%'").arg(_logNumber).arg(_year);
4031 }
4032
4033 sqlOK = query.exec(queryString);
4034
4035 //qDebug() << "DataProxy_SQLite::getCQzonYear: queryString: " << queryString << QT_ENDL;
4036 if (sqlOK)
4037 {
4038 query.next();
4039 if (query.isValid())
4040 {
4041 //qDebug() << "DataProxy_SQLite::getCQzonYear: " << QString::number((query.value(0)).toInt()) << QT_ENDL;
4042 int v = (query.value(0)).toInt();
4043 query.finish();
4044 return v;
4045 }
4046 else
4047 {
4048 //qDebug() << "DataProxy_SQLite::getCQzonYear: 0" << QT_ENDL;
4049 query.finish();
4050 return 0;
4051 }
4052 }
4053 else
4054 {
4055 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4056 //qDebug() << "DataProxy_SQLite::getCQzonYear: Query error" << QT_ENDL;
4057 query.finish();
4058 return 0;
4059 }
4060 }
4061
getQSOsWithDXCC(const int _dxcc,const int _logNumber)4062 int DataProxy_SQLite::getQSOsWithDXCC(const int _dxcc, const int _logNumber)
4063 {
4064 //qDebug() << "DataProxy_SQLite::getQSOsWithDXCC: " << QString::number(_dxcc) << QT_ENDL;
4065 QSqlQuery query;
4066 QString queryString;
4067 bool sqlOK;
4068 if (_logNumber < 0)
4069 {
4070 queryString = QString("SELECT COUNT (DISTINCT id) FROM log where dxcc LIKE '%1'").arg(_dxcc);
4071 }
4072 else
4073 {
4074 queryString = QString("SELECT COUNT (DISTINCT id) FROM log where lognumber='%1' AND dxcc LIKE '%2'").arg(_logNumber).arg(_dxcc);
4075 }
4076
4077 sqlOK = query.exec(queryString);
4078
4079 //qDebug() << "DataProxy_SQLite::getQSOsWithDXCC: queryString: " << queryString << QT_ENDL;
4080 if (sqlOK)
4081 {
4082 query.next();
4083 if (query.isValid())
4084 {
4085 //qDebug() << "DataProxy_SQLite::getQSOsWithDXCC: " << QString::number((query.value(0)).toInt()) << QT_ENDL;
4086 int v = (query.value(0)).toInt();
4087 query.finish();
4088 return v;
4089 }
4090 else
4091 {
4092 //qDebug() << "DataProxy_SQLite::getQSOsWithDXCC: 0" << QT_ENDL;
4093 query.finish();
4094 return 0;
4095 }
4096 }
4097 else
4098 {
4099 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4100 //qDebug() << "DataProxy_SQLite::getQSOsWithDXCC: Query error" << QT_ENDL;
4101 query.finish();
4102 return 0;
4103 }
4104 }
4105
getQSOsAtHour(const int _hour,const int _log)4106 int DataProxy_SQLite::getQSOsAtHour(const int _hour, const int _log)
4107 {
4108 //qDebug() << "DataProxy_SQLite::getQSOsAtHour: " << QString::number(_hour) << QT_ENDL;
4109 QSqlQuery query;
4110 QString queryString;
4111 bool sqlOK;
4112 QString aux = QString();
4113 if (_hour < 10)
4114 {
4115 aux = "0" + QString::number(_hour);
4116 }
4117 else
4118 {
4119 aux = QString::number(_hour);
4120 }
4121
4122 if (_log < 0)
4123 {
4124 queryString = QString("SELECT COUNT(DISTINCT id) FROM log WHERE qso_date LIKE '% %1:%'").arg(aux);
4125 }
4126 else
4127 {
4128 queryString = QString("SELECT COUNT(DISTINCT id) FROM log WHERE lognumber='%1' AND qso_date LIKE '% %2:%'").arg(_log).arg(aux);
4129 }
4130
4131 sqlOK = query.exec(queryString);
4132
4133 //qDebug() << "DataProxy_SQLite::getQSOsAtHour: queryString: " << queryString << QT_ENDL;
4134 if (sqlOK)
4135 {
4136 query.next();
4137 if (query.isValid())
4138 {
4139 //qDebug() << "DataProxy_SQLite::getQSOsAtHour: " << QString::number((query.value(0)).toInt()) << QT_ENDL;
4140 int v = (query.value(0)).toInt();
4141 query.finish();
4142 return v;
4143 }
4144 else
4145 {
4146 //qDebug() << "DataProxy_SQLite::getQSOsAtHour: 0" << QT_ENDL;
4147 query.finish();
4148 return 0;
4149 }
4150 }
4151 else
4152 {
4153 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4154 //qDebug() << "DataProxy_SQLite::getQSOsAtHour: Query error" << QT_ENDL;
4155 query.finish();
4156 return 0;
4157 }
4158 }
4159
4160
getQSOsAtHourOnBand(const int _hour,const int _band,const int _log)4161 int DataProxy_SQLite::getQSOsAtHourOnBand(const int _hour, const int _band, const int _log)
4162 {
4163 //qDebug() << "DataProxy_SQLite::getQSOsAtHourOnBand: " << QString::number(_hour) << QT_ENDL;
4164 QSqlQuery query;
4165 QString queryString;
4166 bool sqlOK;
4167 QString aux = QString();
4168
4169 if (_hour < 10)
4170 {
4171 aux = "0" + QString::number(_hour);
4172 }
4173 else
4174 {
4175 aux = QString::number(_hour);
4176 }
4177
4178 if (_log < 0)
4179 {
4180 queryString = QString("SELECT COUNT(DISTINCT id) FROM log WHERE qso_date LIKE '% %1:%' AND bandid='%2'").arg(aux).arg(_band);
4181 }
4182 else
4183 {
4184 queryString = QString("SELECT COUNT(DISTINCT id) FROM log WHERE lognumber='%1' AND qso_date LIKE '% %2:%' AND bandid='%3'").arg(_log).arg(aux).arg(_band);
4185 }
4186
4187 sqlOK = query.exec(queryString);
4188
4189 //qDebug() << "DataProxy_SQLite::getQSOsAtHourOnBand: queryString: " << queryString << QT_ENDL;
4190 if (sqlOK)
4191 {
4192 query.next();
4193 if (query.isValid())
4194 {
4195 //qDebug() << "DataProxy_SQLite::getQSOsAtHourOnBand: " << QString::number((query.value(0)).toInt()) << QT_ENDL;
4196 int v = (query.value(0)).toInt();
4197 query.finish();
4198 return v;
4199 }
4200 else
4201 {
4202 //qDebug() << "DataProxy_SQLite::getQSOsAtHourOnBand: 0" << QT_ENDL;
4203 query.finish();
4204 return 0;
4205 }
4206 }
4207 else
4208 {
4209 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4210 //qDebug() << "DataProxy_SQLite::getQSOsAtHourOnBandç: Query error" << QT_ENDL;
4211 query.finish();
4212 return 0;
4213 }
4214 }
4215
getQSOsOnMonth(const int _month,const int _log)4216 int DataProxy_SQLite::getQSOsOnMonth(const int _month, const int _log)
4217 {
4218 //qDebug() << "DataProxy_SQLite::getgetQSOsOnMonth: " << QString::number(_month) << QT_ENDL;
4219 QSqlQuery query;
4220 QString queryString;
4221 bool sqlOK;
4222 QString aux = QString();
4223 if (_month < 10)
4224 {
4225 aux = "0" + QString::number(_month);
4226 }
4227 else
4228 {
4229 aux = QString::number(_month);
4230 }
4231
4232 if (_log < 0)
4233 {
4234 queryString = QString("SELECT COUNT(DISTINCT id) FROM log WHERE qso_date LIKE '%-%1-%'").arg(aux);
4235 }
4236 else
4237 {
4238 queryString = QString("SELECT COUNT(DISTINCT id) FROM log WHERE lognumber='%1' AND qso_date LIKE '%-%2-%'").arg(_log).arg(aux);
4239 }
4240
4241 sqlOK = query.exec(queryString);
4242
4243 //qDebug() << "DataProxy_SQLite::getQSOsAtHour: queryString: " << queryString << QT_ENDL;
4244 if (sqlOK)
4245 {
4246 query.next();
4247 if (query.isValid())
4248 {
4249 //qDebug() << "DataProxy_SQLite::getQSOsAtHour: " << QString::number((query.value(0)).toInt()) << QT_ENDL;
4250 int v = (query.value(0)).toInt();
4251 query.finish();
4252 return v;
4253 }
4254 else
4255 {
4256 //qDebug() << "DataProxy_SQLite::getQSOsAtHour: 0" << QT_ENDL;
4257 query.finish();
4258 return 0;
4259 }
4260 }
4261 else
4262 {
4263 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4264 //qDebug() << "DataProxy_SQLite::getQSOsAtHour: Query error" << QT_ENDL;
4265 query.finish();
4266 return 0;
4267 }
4268 }
4269
updateQSONumberPerLog()4270 bool DataProxy_SQLite::updateQSONumberPerLog()
4271 {
4272 //qDebug() << Q_FUNC_INFO << QT_ENDL;
4273 QSqlQuery query;
4274 QString queryString;
4275 bool sqlOK;
4276 QList<int> _logsInLogs;
4277 _logsInLogs.clear();
4278
4279 queryString = QString("SELECT id FROM logs");
4280
4281 sqlOK = query.exec(queryString);
4282
4283 if (sqlOK)
4284 {
4285 while(query.next())
4286 {
4287 if (query.isValid())
4288 {
4289 if ( (query.value(0)).toInt() >= 1)
4290 {
4291 _logsInLogs.append((query.value(0)).toInt());
4292 }
4293 }
4294 }
4295 }
4296 else
4297 {
4298 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4299 //qDebug() << Q_FUNC_INFO << " - TRUE2" << QT_ENDL;
4300 query.finish();
4301 return false;
4302 }
4303 query.finish();
4304 foreach(int i, _logsInLogs)
4305 {
4306 int _qsos = getHowManyQSOInLog(i);
4307 if (_qsos>0)
4308 {
4309 queryString = QString("UPDATE logs set logtypen = '%1' WHERE id = '%2'").arg(_qsos).arg(i);
4310 sqlOK = query.exec(queryString);
4311 if (!sqlOK)
4312 {
4313 query.finish();
4314 return false;
4315 }
4316 query.finish();
4317 }
4318 }
4319 return true;
4320 }
4321
newDXMarathon(const int _dxcc,const int _cq,const int _year,const int _logNumber)4322 bool DataProxy_SQLite::newDXMarathon(const int _dxcc, const int _cq, const int _year, const int _logNumber)
4323 {
4324 //qDebug() << "DataProxy_SQLite::newDXMarathon" << QT_ENDL;
4325 QSqlQuery query;
4326 QString queryString;
4327 bool sqlOK;
4328 bool existingDXCC = false;
4329 bool existingCQz = false;
4330
4331 queryString = QString("SELECT dxcc, cqz FROM log WHERE (lognumber='%1' AND qso_date LIKE'%%2%') AND (dxcc ='%3' OR cqz ='%4')").arg(_logNumber).arg(_year).arg(_dxcc).arg(_cq);
4332
4333 sqlOK = query.exec(queryString);
4334
4335 if (sqlOK)
4336 {
4337 while(query.next())
4338 {
4339 if (query.isValid())
4340 {
4341 if ( (query.value(0)).toInt() == _dxcc)
4342 {
4343 //qDebug() << "DataProxy_SQLite::newDXMarathon - Existing DXCC" << QT_ENDL;
4344 existingDXCC = true;
4345 }
4346 if ( (query.value(1)).toInt() == _cq)
4347 {
4348 //qDebug() << "DataProxy_SQLite::newDXMarathon - Existing CQz" << QT_ENDL;
4349 existingCQz = true;
4350 }
4351 }
4352 }
4353 if (existingDXCC && existingCQz)
4354 {
4355 //qDebug() << "DataProxy_SQLite::newDXMarathon - FALSE" << QT_ENDL;
4356 query.finish();
4357 return false;
4358 }
4359 else
4360 {
4361 //qDebug() << "DataProxy_SQLite::newDXMarathon - TRUE1" << QT_ENDL;
4362 query.finish();
4363 return true;
4364 }
4365 }
4366 else
4367 {
4368 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4369 //qDebug() << "DataProxy_SQLite::newDXMarathon - TRUE2" << QT_ENDL;
4370 query.finish();
4371 return true; // It is an error inthe query but Work First Worry Later, let us work that QSO.
4372 }
4373 }
4374
getContestNames()4375 QStringList DataProxy_SQLite::getContestNames()
4376 {
4377 //qDebug() << "DataProxy_SQLite::getContestNames() " << QT_ENDL;
4378 QStringList contests = QStringList();
4379 QSqlQuery query;
4380 QString queryString;
4381 bool sqlOK;
4382 queryString = QString("SELECT DISTINCT name from supportedcontests ORDER BY id ASC");
4383
4384 sqlOK = query.exec(queryString);
4385
4386
4387 if (sqlOK)
4388 {
4389 while(query.next())
4390 {
4391 if (query.isValid())
4392 {
4393 queryString = (query.value(0)).toString();
4394 //qDebug() << "DataProxy_SQLite::getContestNames: " << queryString << QT_ENDL;
4395 contests.append(queryString);
4396 }
4397 else
4398 {
4399 query.finish();
4400 return QStringList();
4401 }
4402 }
4403 query.finish();
4404 contests.sort();
4405 return contests;
4406 }
4407 else
4408 {
4409 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4410 query.finish();
4411 return QStringList();
4412 }
4413
4414 //return QStringList();
4415 }
4416
getContestCat(const int _catn)4417 QStringList DataProxy_SQLite::getContestCat(const int _catn)
4418 {
4419 QStringList contests = QStringList();
4420 QSqlQuery query;
4421 QString queryString;
4422 bool sqlOK;
4423
4424 switch (_catn) {
4425 case 1:
4426 queryString = QString("SELECT DISTINCT name from contestcatoperator ORDER BY id ASC");
4427 break;
4428 case 2:
4429 queryString = QString("SELECT DISTINCT name from contestcatassisted ORDER BY id ASC");
4430 break;
4431 case 3:
4432 queryString = QString("SELECT DISTINCT name from contestcatpower ORDER BY id ASC");
4433 break;
4434 case 4:
4435 queryString = QString("SELECT DISTINCT name from contestcatband ORDER BY id ASC");
4436 break;
4437 case 5:
4438 queryString = QString("SELECT DISTINCT name from contestcatoverlay ORDER BY id ASC");
4439 break;
4440 case 6:
4441 queryString = QString("SELECT DISTINCT name from contestcatmode ORDER BY id ASC");
4442 break;
4443 default:
4444 return QStringList();
4445 //break;
4446 }
4447
4448 sqlOK = query.exec(queryString);
4449
4450
4451 if (sqlOK)
4452 {
4453 while(query.next())
4454 {
4455 if (query.isValid())
4456 {
4457 queryString = (query.value(0)).toString();
4458 contests.append(queryString);
4459 }
4460 else
4461 {
4462 query.finish();
4463 return QStringList();
4464 }
4465 }
4466 query.finish();
4467 return contests;
4468 }
4469 else
4470 {
4471 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4472 query.finish();
4473 return QStringList();
4474 }
4475 }
4476
4477
getContestOverlays()4478 QStringList DataProxy_SQLite::getContestOverlays()
4479 {
4480 //qDebug() << "DataProxy_SQLite::getContestOverlays: "<< QT_ENDL;
4481
4482 QStringList contests = QStringList();
4483 QSqlQuery query;
4484 QString queryString;
4485 bool sqlOK;
4486 queryString = QString("SELECT DISTINCT name from contestcatoverlay ORDER BY id ASC");
4487
4488 sqlOK = query.exec(queryString);
4489
4490 if (sqlOK)
4491 {
4492 while(query.next())
4493 {
4494 if (query.isValid())
4495 {
4496 queryString = (query.value(0)).toString();
4497 //qDebug() << "DataProxy_SQLite::getContestOverlays: " << queryString << QT_ENDL;
4498 contests.append(queryString);
4499 }
4500 else
4501 {
4502 query.finish();
4503 return QStringList();
4504 }
4505 }
4506 query.finish();
4507 return contests;
4508 }
4509 else
4510 {
4511 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4512 query.finish();
4513 return QStringList();
4514 }
4515 }
4516
getPropModeList()4517 QStringList DataProxy_SQLite::getPropModeList()
4518 {
4519 //qDebug() << "DataProxy_SQLite::getPropModeLists" << QT_ENDL;
4520 QString aux = QString();
4521 QStringList qs;
4522 qs.clear();
4523
4524 QString queryString = QString("SELECT id, shortname, name FROM prop_mode_enumeration ORDER BY name");
4525 QSqlQuery query;
4526
4527 bool sqlOK = query.exec(queryString);
4528 QString num;
4529
4530 if (sqlOK)
4531 {
4532 QString translatedValue = QString();
4533 QString valueToTranslate = QString();
4534 while ( (query.next())) {
4535 if (query.isValid())
4536 {
4537 valueToTranslate = (query.value(2)).toString();
4538 if (valueToTranslate == "Aircraft Scatter")
4539 {
4540 translatedValue = tr("Aircraft Scatter", "Common term in hamradio, do not translate if not sure");
4541 }
4542 else if(valueToTranslate == "Aurora")
4543 {
4544 translatedValue = tr("Aurora");
4545 }
4546 else if(valueToTranslate == "Aurora-E")
4547 {
4548 translatedValue = tr("Aurora-E");
4549 }
4550 else if(valueToTranslate == "Back scatter")
4551 {
4552 translatedValue = tr("Back scatter", "Common term in hamradio, do not translate if not sure");
4553 }
4554 else if(valueToTranslate == "Earth-Moon-Earth")
4555 {
4556 translatedValue = tr("Earth-Moon-Earth");
4557 }
4558 else if(valueToTranslate == "Sporadic E")
4559 {
4560 translatedValue = tr("Sporadic E");
4561 }
4562 else if(valueToTranslate == "Field Aligned Irregularities")
4563 {
4564 translatedValue = tr("Field Aligned Irregularities", "Common term in hamradio, do not translate if not sure");
4565 }
4566 else if(valueToTranslate == "F2 Reflection")
4567 {
4568 translatedValue = tr("F2 Reflection", "Common term in hamradio, do not translate if not sure");
4569 }
4570 else if(valueToTranslate == "Internet-assisted")
4571 {
4572 translatedValue = tr("Internet-assisted");
4573 }
4574 else if(valueToTranslate == "Ionoscatter")
4575 {
4576 translatedValue = tr("Ionoscatter", "Common term in hamradio, do not translate if not sure");
4577 }
4578 else if(valueToTranslate == "Meteor scatter")
4579 {
4580 translatedValue = tr("Meteor scatter", "Common term in hamradio, do not translate if not sure");
4581 }
4582 else if(valueToTranslate == "Terrestrial or atmospheric repeater or transponder")
4583 {
4584 translatedValue = tr("Terrestrial or atmospheric repeater or transponder");
4585 }
4586 else if(valueToTranslate == "Rain scatter")
4587 {
4588 translatedValue = tr("Rain scatter", "Common term in hamradio, do not translate if not sure");
4589 }
4590 else if(valueToTranslate == "Satellite")
4591 {
4592 translatedValue = tr("Satellite");
4593 }
4594 else if(valueToTranslate == "Trans-equatorial")
4595 {
4596 translatedValue = tr("Trans-equatorial", "Common term in hamradio, do not translate if not sure");
4597 }
4598 else if(valueToTranslate == "Tropospheric ducting")
4599 {
4600 translatedValue = tr("Tropospheric ducting", "Common term in hamradio, do not translate if not sure");
4601 }
4602 else if(valueToTranslate == "")
4603 {
4604 translatedValue = tr("");
4605 }
4606 else
4607 {
4608 translatedValue = valueToTranslate;
4609 }
4610
4611 aux.clear();
4612 num = (query.value(0)).toString();
4613 if (num.toInt() <= 9)
4614 {
4615 num = "0" + num;
4616 }
4617 aux = num + " - " + (query.value(1)).toString() + " - " + translatedValue;
4618 qs << aux;
4619 }
4620 }
4621 }
4622 else
4623 {
4624 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4625 query.finish();
4626 return QStringList();
4627 }
4628 query.finish();
4629 qs.sort();
4630 return qs;
4631 }
4632
clearSatList()4633 bool DataProxy_SQLite::clearSatList()
4634 {
4635 QSqlQuery query;
4636 bool sqlOK = query.exec("DELETE FROM satellites");
4637
4638 if (sqlOK)
4639 {
4640 query.finish();
4641 return true;
4642 }
4643 else
4644 {
4645 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4646 query.finish();
4647 return false;
4648 }
4649 }
4650
addSatellite(const QString & _arrlId,const QString & _name,const QString & _downLink,const QString & _upLink,const QString & _mode,int id)4651 bool DataProxy_SQLite::addSatellite(const QString &_arrlId, const QString &_name, const QString &_downLink, const QString &_upLink, const QString &_mode, int id)
4652 {
4653 //qDebug() << "DataProxy_SQLite::addSatellite: " << QString::number(id) << QT_ENDL;
4654 QSqlQuery query;
4655 QString queryString;
4656
4657 if (id>0)
4658 {
4659 queryString = QString("UPDATE satellites set satarrlid = '%1', satname = '%2', uplink = '%3', downlink = '%4', satmode = '%5' WHERE id = '%6'").arg(_arrlId).arg(_name).arg(_upLink).arg(_downLink).arg(_mode).arg(id);
4660 }
4661 else
4662 {
4663 queryString = QString("INSERT INTO satellites (satarrlid, satname, uplink, downlink, satmode) VALUES ('%1', '%2', '%3', '%4', '%5')").arg(_arrlId).arg(_name).arg(_upLink).arg(_downLink).arg(_mode);
4664 }
4665
4666 bool sqlOK = query.exec(queryString);
4667 //qDebug() << "DataProxy_SQLite::addSatellite - query: " << query.lastQuery() << QT_ENDL;
4668
4669 if (sqlOK)
4670 {
4671 //qDebug() << "DataProxy_SQLite::addSatellite - TRUE" << QT_ENDL;
4672 //qDebug() << "DataProxy_SQLite::addSatellite - TRUE - ERROR: " << QString::number(query.lastError().nativeErrorCode()) << QT_ENDL;
4673 query.finish();
4674 return true;
4675 }
4676 else
4677 {
4678 //qDebug() << "DataProxy_SQLite::addSatellite - FALSE" << QT_ENDL;
4679 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4680 query.finish();
4681 return false;
4682 }
4683 }
4684
getDBSatId(const QString & _arrlId)4685 int DataProxy_SQLite::getDBSatId(const QString &_arrlId)
4686 {
4687 //qDebug() << "DataProxy_SQLite::getDBSatId: " << _arrlId << QT_ENDL;
4688 int aux = -1;
4689 QString queryString = QString("SELECT id FROM satellites WHERE satarrlid='%1'").arg(_arrlId);
4690 QSqlQuery query;
4691
4692 bool sqlOK = query.exec(queryString);
4693
4694 if (sqlOK)
4695 {
4696 query.next();
4697 if (query.isValid())
4698 {
4699 aux = query.value(0).toInt();
4700 }
4701 else
4702 {
4703 //qDebug() << "DataProxy_SQLite::getDBSatId: query not valid" << QT_ENDL;
4704 query.finish();
4705 }
4706 }
4707 else
4708 {
4709 //qDebug() << "DataProxy_SQLite::getSatelliteUplink: query failed: " << query.lastQuery() << QT_ENDL;
4710 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4711 query.finish();
4712 }
4713
4714 //qDebug() << "DataProxy_SQLite::getSatelliteUplink: final: " << aux << QT_ENDL;
4715 query.finish();
4716 return aux;
4717 }
4718
getSatellitesList()4719 QStringList DataProxy_SQLite::getSatellitesList()
4720 {
4721 //qDebug() << "DataProxy_SQLite::getSatellitesList" << QT_ENDL;
4722 QString aux = QString();
4723 QStringList qs;
4724 qs.clear();
4725 QString queryString = QString("SELECT satarrlid, satname FROM satellites");
4726 QSqlQuery query;
4727
4728 bool sqlOK = query.exec(queryString);
4729
4730
4731 if (sqlOK)
4732 {
4733 while ( (query.next())) {
4734 if (query.isValid())
4735 {
4736 aux.clear();
4737 aux = (query.value(0)).toString() + " - " + (query.value(1)).toString();
4738 qs << aux;
4739 }
4740 else
4741 {
4742 }
4743 }
4744 }
4745 else
4746 {
4747 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4748 query.finish();
4749 return QStringList();
4750 }
4751 query.finish();
4752 qs.sort();
4753 return qs;
4754 }
4755
4756
getSatelliteUplink(const QString & _sat)4757 QString DataProxy_SQLite::getSatelliteUplink(const QString &_sat)
4758 {
4759 //qDebug() << "DataProxy_SQLite::getSatelliteUplink: " << _sat << QT_ENDL;
4760 QString aux = QString();
4761 //QString aux2 = QString();
4762 //double fr1, fr2, fr;
4763 QString queryString = QString("SELECT uplink FROM satellites WHERE satarrlid='%1'").arg(_sat);
4764 QSqlQuery query;
4765
4766 bool sqlOK = query.exec(queryString);
4767
4768 if (sqlOK)
4769 {
4770 query.next();
4771 if (query.isValid())
4772 {
4773 aux = query.value(0).toString();
4774 aux = QString::number(getFreqFromRange(aux));
4775 }
4776 else
4777 {
4778 //qDebug() << "DataProxy_SQLite::getSatelliteUplink: query not valid" << QT_ENDL;
4779 query.finish();
4780 return QString();
4781 }
4782 }
4783 else
4784 {
4785 //qDebug() << "DataProxy_SQLite::getSatelliteUplink: query failed: " << query.lastQuery() << QT_ENDL;
4786 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4787 query.finish();
4788 return QString();
4789 }
4790
4791 //qDebug() << "DataProxy_SQLite::getSatelliteUplink: final: " << aux << QT_ENDL;
4792 query.finish();
4793 return aux;
4794 }
4795
4796
getSatelliteDownlink(const QString & _sat)4797 QString DataProxy_SQLite::getSatelliteDownlink(const QString &_sat)
4798 {
4799 //qDebug() << "DataProxy_SQLite::getSatelliteDownlink: " << _sat << QT_ENDL;
4800 QString aux = QString();
4801 //QString aux2 = QString();
4802 //double fr1, fr2, fr;
4803 QString queryString = QString("SELECT downlink FROM satellites WHERE satarrlid='%1'").arg(_sat);
4804 QSqlQuery query;
4805
4806 bool sqlOK = query.exec(queryString);
4807
4808
4809 if (sqlOK)
4810 {
4811 query.next();
4812 if (query.isValid())
4813 {
4814 aux = query.value(0).toString();
4815 aux = QString::number(getFreqFromRange(aux));
4816 }
4817 else
4818 {
4819 //qDebug() << "DataProxy_SQLite::getSatelliteDownlink: query not valid" << QT_ENDL;
4820 query.finish();
4821 return QString();
4822 }
4823 }
4824 else
4825 {
4826 //qDebug() << "DataProxy_SQLite::getSatelliteDownlink: query failed: " << query.lastQuery() << QT_ENDL;
4827 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4828 query.finish();
4829 return QString();
4830 }
4831
4832 //qDebug() << "DataProxy_SQLite::getSatelliteDownlink: final: " << aux << QT_ENDL;
4833 query.finish();
4834 return aux;
4835 }
4836
getSatelliteMode(const QString & _sat)4837 QString DataProxy_SQLite::getSatelliteMode(const QString &_sat)
4838 {
4839 QString aux = QString();
4840 QString queryString = QString("SELECT satmode FROM satellites WHERE satarrlid='%1'").arg(_sat);
4841 QSqlQuery query;
4842
4843 bool sqlOK = query.exec(queryString);
4844
4845 if (sqlOK)
4846 {
4847 query.next();
4848 if (query.isValid())
4849 {
4850 aux = query.value(0).toString();
4851 query.finish();
4852 if (aux.contains(','))
4853 { // Potentially somethink like: SSB,CW
4854 // We select the first one
4855 aux = aux.section(',', 0, 0); // We select the first package
4856 }
4857 }
4858 else
4859 {
4860 //qDebug() << "DataProxy_SQLite::getSatelliteMode: query not valid" << QT_ENDL;
4861 query.finish();
4862 return QString();
4863 }
4864 }
4865 else
4866 {
4867 //qDebug() << "DataProxy_SQLite::getSatelliteMode: query failed: " << query.lastQuery() << QT_ENDL;
4868 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4869 query.finish();
4870 return QString();
4871 }
4872
4873 //qDebug() << "DataProxy_SQLite::getSatelliteMode: final: " << aux << QT_ENDL;
4874 return aux;
4875 }
4876
getSatelliteFullUplink(const QString & _sat)4877 QString DataProxy_SQLite::getSatelliteFullUplink(const QString &_sat)
4878 {
4879 //qDebug() << "DataProxy_SQLite::getSatelliteFullUplink: " << _sat << QT_ENDL;
4880 QString aux = QString();
4881 QString queryString = QString("SELECT uplink FROM satellites WHERE satarrlid='%1'").arg(_sat);
4882 QSqlQuery query;
4883
4884 bool sqlOK = query.exec(queryString);
4885
4886 if (sqlOK)
4887 {
4888 query.next();
4889 if (query.isValid())
4890 {
4891 aux = query.value(0).toString();
4892 }
4893 else
4894 {
4895 //qDebug() << "DataProxy_SQLite::getSatelliteFullUplink: query not valid" << QT_ENDL;
4896 query.finish();
4897 return QString();
4898 }
4899 }
4900 else
4901 {
4902 //qDebug() << "DataProxy_SQLite::getSatelliteFullUplink: query failed: " << query.lastQuery() << QT_ENDL;
4903 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4904 query.finish();
4905 return QString();
4906 }
4907 //qDebug() << "DataProxy_SQLite::getSatelliteFullUplink: final: " << aux << QT_ENDL;
4908 query.finish();
4909 return aux;
4910 }
4911
getSatelliteFullDownlink(const QString & _sat)4912 QString DataProxy_SQLite::getSatelliteFullDownlink(const QString &_sat)
4913 {
4914 //qDebug() << "DataProxy_SQLite::getSatelliteFullDownlink: " << _sat << QT_ENDL;
4915 QString aux = QString();
4916 //QString aux2 = QString();
4917 //double fr1, fr2, fr;
4918 QString queryString = QString("SELECT downlink FROM satellites WHERE satarrlid='%1'").arg(_sat);
4919 QSqlQuery query;
4920
4921 bool sqlOK = query.exec(queryString);
4922
4923 if (sqlOK)
4924 {
4925 query.next();
4926 if (query.isValid())
4927 {
4928 aux = query.value(0).toString();
4929 }
4930 else
4931 {
4932 //qDebug() << "DataProxy_SQLite::getSatelliteFullDownlink: query not valid" << QT_ENDL;
4933 query.finish();
4934 return QString();
4935 }
4936 }
4937 else
4938 {
4939 //qDebug() << "DataProxy_SQLite::getSatelliteFullDownlink: query failed: " << query.lastQuery() << QT_ENDL;
4940 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4941 query.finish();
4942 return QString();
4943 }
4944 //qDebug() << "DataProxy_SQLite::getSatelliteFullDownlink: final: " << aux << QT_ENDL;
4945 query.finish();
4946 return aux;
4947 }
4948
getSatelliteFullMode(const QString & _sat)4949 QString DataProxy_SQLite::getSatelliteFullMode(const QString &_sat)
4950 {
4951 QString aux = QString();
4952 QString queryString = QString("SELECT satmode FROM satellites WHERE satarrlid='%1'").arg(_sat);
4953 QSqlQuery query;
4954
4955 bool sqlOK = query.exec(queryString);
4956
4957 if (sqlOK)
4958 {
4959 query.next();
4960 if (query.isValid())
4961 {
4962 aux = query.value(0).toString();
4963 query.finish();
4964 }
4965 else
4966 {
4967 //qDebug() << "DataProxy_SQLite::getSatelliteMode: query not valid" << QT_ENDL;
4968 query.finish();
4969 return QString();
4970 }
4971 }
4972 else
4973 {
4974 //qDebug() << "DataProxy_SQLite::getSatelliteMode: query failed: " << query.lastQuery() << QT_ENDL;
4975 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4976 query.finish();
4977 return QString();
4978 }
4979 //qDebug() << "DataProxy_SQLite::getSatelliteMode: final: " << aux << QT_ENDL;
4980 return aux;
4981 }
4982
getSatelliteName(const QString & _sat)4983 QString DataProxy_SQLite::getSatelliteName(const QString &_sat)
4984 {
4985 //qDebug() << "DataProxy_SQLite::getSatelliteName: " << _sat << QT_ENDL;
4986 QString aux = QString();
4987
4988 QString queryString = QString("SELECT satname FROM satellites WHERE satarrlid='%1'").arg(_sat);
4989 QSqlQuery query;
4990
4991 bool sqlOK = query.exec(queryString);
4992
4993
4994 if (sqlOK)
4995 {
4996 query.next();
4997 if (query.isValid())
4998 {
4999 aux = query.value(0).toString();
5000 }
5001 else
5002 {
5003 //qDebug() << "DataProxy_SQLite::getSatelliteName: query not valid" << QT_ENDL;
5004 query.finish();
5005 return QString();
5006 }
5007 }
5008 else
5009 {
5010 //qDebug() << "DataProxy_SQLite::getSatelliteName: query failed: " << query.lastQuery() << QT_ENDL;
5011 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5012 query.finish();
5013 return QString();
5014 }
5015
5016 //qDebug() << "DataProxy_SQLite::getSatelliteName: final: " << aux << QT_ENDL;
5017 query.finish();
5018 return aux;
5019 }
5020
getSateliteArrlIdFromId(const int _id)5021 QString DataProxy_SQLite::getSateliteArrlIdFromId(const int _id)
5022 {
5023 QString aux = QString();
5024 QString queryString = QString("SELECT satarrlid FROM satellites WHERE id='%1'").arg(_id);
5025 QSqlQuery query;
5026
5027 bool sqlOK = query.exec(queryString);
5028
5029
5030 if (sqlOK)
5031 {
5032 query.next();
5033 if (query.isValid())
5034 {
5035 aux = query.value(0).toString();
5036 query.finish();
5037 }
5038 else
5039 {
5040 //qDebug() << "DataProxy_SQLite::getSateliteArrlIdFromId: query not valid" << QT_ENDL;
5041 query.finish();
5042 return QString();
5043 }
5044 }
5045 else
5046 {
5047 //qDebug() << "DataProxy_SQLite::getSateliteArrlIdFromId: query failed: " << query.lastQuery() << QT_ENDL;
5048 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5049 query.finish();
5050 return QString();
5051 }
5052 //qDebug() << "DataProxy_SQLite::getSateliteArrlIdFromId: final: " << aux << QT_ENDL;
5053 return aux;
5054 }
5055
getFreqFromRange(QString _fr)5056 double DataProxy_SQLite::getFreqFromRange(QString _fr)
5057 { //May even receive: 145.900-146.00 and should return the mid in the range (145.950)
5058 //qDebug() << "DataProxy_SQLite::getFreqFromRange: " << _fr << QT_ENDL;
5059 QString fr1, fr2, aux;
5060 double f1, f2;
5061 fr1.clear();
5062 fr2.clear();
5063 f1 = 0.0;
5064 f2 = 0.0;
5065
5066 aux.clear();
5067 aux = _fr;
5068
5069 if (aux.contains(','))
5070 { // Potentially somethink like: 435.030-435.456,146.180
5071 // We select the first range
5072
5073 //qDebug() << "DataProxy_SQLite::getFreqFromRange: has several freqs: " << aux << QT_ENDL;
5074 aux = aux.section(',', 0, 0); // We select the first package
5075 }
5076 if (aux.contains('-')) // Potentially somethink like: 435.030-435.456
5077 {
5078 //qDebug() << "DataProxy_SQLite::getFreqFromRange: has several freqs: " << aux << QT_ENDL;
5079 fr2 = aux.section('-', 1, 1); // We select the second freq
5080 fr1 = aux.section('-', 0, 0); // We select the first freq
5081
5082 //qDebug() << "DataProxy_SQLite::getFreqFromRange: fr1: " << fr1 << QT_ENDL;
5083 //qDebug() << "DataProxy_SQLite::getFreqFromRange: fr2: " << fr2 << QT_ENDL;
5084 f1 = fr1.toDouble();
5085 f2 = fr2.toDouble();
5086 //qDebug() << "DataProxy_SQLite::getFreqFromRange: f1: " << QString::number(f1) << QT_ENDL;
5087 //qDebug() << "DataProxy_SQLite::getFreqFromRange: f2: " << QString::number(f2) << QT_ENDL;
5088
5089 f1 = (f2 + f1)/2;
5090
5091 //qDebug() << "DataProxy_SQLite::getFreqFromRange: f1 after calc: " << QString::number(f1) << QT_ENDL;
5092 }
5093 else
5094 { // It is only one freq 145.950 so this is what must be returned
5095 f1 = aux.toDouble();
5096 }
5097
5098 //qDebug() << "DataProxy_SQLite::getFreqFromRange: Return: " << QString::number(f1) << QT_ENDL;
5099 return f1;
5100 }
5101
getQSLRcvdList()5102 QStringList DataProxy_SQLite::getQSLRcvdList()
5103 {
5104 //qDebug() << "DataProxy_SQLite::getQSLRcvdList" << QT_ENDL;
5105 QString aux = QString();
5106 QStringList qs;
5107 qs.clear();
5108 QString queryString = QString("SELECT shortname, name FROM qsl_rec_status");
5109 QSqlQuery query;
5110
5111 bool sqlOK = query.exec(queryString);
5112
5113 if (sqlOK)
5114 {
5115 QString translatedValue = QString();
5116 QString valueToTranslate = QString();
5117
5118 while ( (query.next())) {
5119 if (query.isValid())
5120 {
5121 valueToTranslate = (query.value(1)).toString();
5122 if (valueToTranslate == "Yes")
5123 {
5124 translatedValue = tr("Yes");
5125 }
5126 else if(valueToTranslate == "No")
5127 {
5128 translatedValue = tr("No");
5129 }
5130 else if(valueToTranslate == "Requested")
5131 {
5132 translatedValue = tr("Requested");
5133 }
5134 else if(valueToTranslate == "Ignore/Invalid")
5135 {
5136 translatedValue = tr("Ignore/Invalid");
5137 }
5138 else if(valueToTranslate == "Validated")
5139 {
5140 translatedValue = tr("Validated");
5141 }
5142 else
5143 {
5144 translatedValue = valueToTranslate;
5145 }
5146 aux.clear();
5147 aux = (query.value(0)).toString() + " - " + translatedValue;
5148 qs << aux;
5149 }
5150 }
5151 }
5152 else
5153 {
5154 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5155 query.finish();
5156 return QStringList();
5157 }
5158 query.finish();
5159 return qs;
5160 }
5161
getQSLSentList()5162 QStringList DataProxy_SQLite::getQSLSentList()
5163 {
5164 //qDebug() << "DataProxy_SQLite::getQSLSentList" << QT_ENDL;
5165 QString aux = QString();
5166 QStringList qs;
5167 qs.clear();
5168 QString queryString = QString("SELECT shortname, name FROM qsl_sent_status");
5169 QSqlQuery query;
5170 bool sqlOK = query.exec(queryString);
5171
5172 if (sqlOK)
5173 {
5174 QString translatedValue = QString();
5175 QString valueToTranslate = QString();
5176
5177 while ( (query.next()))
5178 {
5179 if (query.isValid())
5180 {
5181 valueToTranslate = (query.value(1)).toString();
5182 if (valueToTranslate == "Yes")
5183 {
5184 translatedValue = tr("Yes");
5185 }
5186 else if(valueToTranslate == "No")
5187 {
5188 translatedValue = tr("No");
5189 }
5190 else if(valueToTranslate == "Requested")
5191 {
5192 translatedValue = tr("Requested");
5193 }
5194 else if(valueToTranslate == "Queued")
5195 {
5196 translatedValue = tr("Queued");
5197 }
5198 else if(valueToTranslate == "Ignore/Invalid")
5199 {
5200 translatedValue = tr("Ignore/Invalid");
5201 }
5202 else
5203 {
5204 translatedValue = valueToTranslate;
5205 }
5206 aux.clear();
5207 aux = (query.value(0)).toString() + " - " + translatedValue;
5208 qs << aux;
5209 }
5210 }
5211 }
5212 else
5213 {
5214 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5215 query.finish();
5216 return QStringList();
5217 }
5218 query.finish();
5219 return qs;
5220 }
5221
5222
getClubLogStatusList()5223 QStringList DataProxy_SQLite::getClubLogStatusList()
5224 {
5225 //qDebug() << "DataProxy_SQLite::getClubLogStatusList" << QT_ENDL;
5226 QString aux = QString();
5227 QStringList qs;
5228 qs.clear();
5229 QString queryString = QString("SELECT shortname, name FROM clublog_status");
5230 QSqlQuery query;
5231 bool sqlOK = query.exec(queryString);
5232
5233 QString translatedValue = QString();
5234 QString valueToTranslate = QString();
5235
5236 if (sqlOK)
5237 {
5238 while ( (query.next())) {
5239 if (query.isValid())
5240 {
5241 valueToTranslate = (query.value(1)).toString();
5242 if (valueToTranslate == "Uploaded")
5243 {
5244 translatedValue = tr("Uploaded");
5245 }
5246 else if(valueToTranslate == "Do not upload")
5247 {
5248 translatedValue = tr("Do not upload");
5249 }
5250 else if(valueToTranslate == "Modified")
5251 {
5252 translatedValue = tr("Modified");
5253 }
5254 else
5255 {
5256 translatedValue = valueToTranslate;
5257 }
5258 aux.clear();
5259 aux = (query.value(0)).toString() + " - " + translatedValue;
5260 qs << aux;
5261 }
5262 }
5263 }
5264 else
5265 {
5266 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5267 query.finish();
5268 return QStringList();
5269 }
5270 query.finish();
5271 return qs;
5272 }
5273
getQSLViaList()5274 QStringList DataProxy_SQLite::getQSLViaList()
5275 {
5276 //qDebug() << "DataProxy_SQLite::getQSLViaList" << QT_ENDL;
5277 QString aux = QString();
5278 QStringList qs;
5279 qs.clear();
5280 QString queryString = QString("SELECT shortname, name FROM qsl_via_enumeration");
5281 QSqlQuery query;
5282
5283 bool sqlOK = query.exec(queryString);
5284
5285 if (sqlOK)
5286 {
5287 QString translatedValue = QString();
5288 QString valueToTranslate = QString();
5289
5290 while ( (query.next())) {
5291 if (query.isValid())
5292 {
5293 valueToTranslate = (query.value(1)).toString();
5294
5295 if (valueToTranslate == "Bureau")
5296 {
5297 translatedValue = tr("Bureau", "Common term in hamradio, do not translate if not sure");
5298 }
5299 else if(valueToTranslate == "Direct")
5300 {
5301 translatedValue = tr("Direct");
5302 }
5303 else if(valueToTranslate == "Electronic")
5304 {
5305 translatedValue = tr("Electronic");
5306 }
5307 else if(valueToTranslate == "Manager")
5308 {
5309 translatedValue = tr("Manager", "Common term in hamradio, do not translate if not sure");
5310 }
5311 else
5312 {
5313 translatedValue = valueToTranslate;
5314 }
5315
5316 aux.clear();
5317 aux = (query.value(0)).toString() + " - " + translatedValue;
5318 qs << aux;
5319 }
5320 }
5321 }
5322 else
5323 {
5324 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5325 query.finish();
5326 return QStringList();
5327 }
5328 query.finish();
5329 return qs;
5330 }
5331
haveAtLeastOneLog()5332 bool DataProxy_SQLite::haveAtLeastOneLog()
5333 {
5334 //qDebug() << "DataProxy_SQLite::haveAtLeastOneLog()" << QT_ENDL;
5335 QSqlQuery query;
5336
5337 bool sqlOK = query.exec("SELECT COUNT(id) from logs");
5338
5339 if (sqlOK)
5340 {
5341 query.next();
5342 if (query.isValid())
5343 {
5344 if((query.value(0)).toInt()>0)
5345 {
5346 query.finish();
5347 return true;
5348 }
5349 else
5350 {
5351 query.finish();
5352 return false;
5353 }
5354 }
5355 else
5356 {
5357 query.finish();
5358 return false;
5359 }
5360 }
5361 else
5362 {
5363 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5364 query.finish();
5365 return false;
5366 }
5367 //return false;
5368 }
5369
getColumnNamesFromTableLog()5370 QStringList DataProxy_SQLite::getColumnNamesFromTableLog()
5371 {
5372 //qDebug() << "DataProxy_SQLite::getColumnNamesFromTableLog" << QT_ENDL;
5373 return getColumnNamesFromTable("log");
5374 }
5375
getColumnNamesFromTable(const QString & _tableName)5376 QStringList DataProxy_SQLite::getColumnNamesFromTable(const QString &_tableName)
5377 {
5378 //qDebug() << "DataProxy_SQLite::getColumnNamesFromTable" << QT_ENDL;
5379 return db->getColumnNamesFromTable(_tableName);
5380 }
5381
setDXCCAwardStatus(const int _qsoId)5382 bool DataProxy_SQLite::setDXCCAwardStatus(const int _qsoId)
5383 {
5384 // If the band/mode/log is already confirmed: Return true
5385 // If the band/mode/log is already worked and status worked: Return true
5386 // If the band/mode/log is already worked and status confirmed: Update and Return true
5387 // If not worked: Add and Return true
5388
5389 //qDebug() << "DataProxy_SQLite::setDXCCAwardStatus: " << QString::number(_qsoId) << QT_ENDL;
5390 if (_qsoId <= 0)
5391 {
5392 //qDebug() << "DataProxy_SQLite::setDXCCAwardStatus: QSOid <=0 " << QString::number(_qsoId) << QT_ENDL;
5393 return false;
5394 }
5395 QList<int> values;
5396 values.clear();
5397 values << getBandModeDXCCCQZlogIDFromId(_qsoId);
5398 if (values.length ()!=5)
5399 {
5400 return false;
5401 }
5402 // bandid, modeid, dxcc, cqz, lognumber
5403
5404 int _dxcc = values.at(2);
5405 //int _dxcc = getDXCCFromId(_qsoId);
5406 if (_dxcc <= 0)
5407 {
5408 //qDebug() << "DataProxy_SQLite::setDXCCAwardStatus: DXCC <= 0: DXCC: " << QString::number(_dxcc) << " - " << QString::number(_qsoId) << QT_ENDL;
5409 return false;
5410 }
5411
5412 int _band = values.at(0);
5413 //int _band = getBandFromId(_qsoId);
5414 if (_band <= 0)
5415 {
5416 //qDebug() << "DataProxy_SQLite::setDXCCAwardStatus: Band <= 0: BAND: " << QString::number(_band) << " - " << QString::number(_qsoId) << QT_ENDL;
5417 return false;
5418 }
5419
5420 int _mode = values.at(1); //int _mode = getModeFromId(_qsoId);
5421 if (_mode <= 0)
5422 {
5423 //qDebug() << "DataProxy_SQLite::setDXCCAwardStatus: Mode <= 0: Mode: " << QString::number(_mode) << " - " << QString::number(_qsoId) << QT_ENDL;
5424 return false;
5425 }
5426 int _log = values.at(4);
5427 //int _log = getLogNumberFromQSOId(_qsoId);
5428 if (_log <= 0)
5429 {
5430 //qDebug() << "DataProxy_SQLite::setDXCCAwardStatus: Log <= 0: Log: " << QString::number(_log) << " - " << QString::number(_qsoId) << QT_ENDL;
5431 return false;
5432 }
5433
5434 // If the band/mode/log is already confirmed: Return true
5435 QSqlQuery query;
5436
5437 // awarddxcc id dxcc band mode confirmed qsoid lognumber
5438 // If the band/mode/log is already confirmed: Return true
5439 // If the band/mode/log is already worked and status worked: Return true
5440 // If the band/mode/log is already worked and status confirmed: Update and Return true
5441 // If not worked: Add and Return true
5442
5443 QString queryString = QString("SELECT id, confirmed, qsoid FROM awarddxcc WHERE band='%1' AND mode='%2' AND dxcc='%3'").arg(_band).arg(_mode).arg(_dxcc);
5444
5445 bool sqlOK = query.exec(queryString);
5446 //qDebug() << "DataProxy_SQLite::setDXCCAwardStatus: Queryexec-1: " << queryString << QT_ENDL;
5447 queryString.clear();
5448
5449 if (sqlOK)
5450 {
5451 QSqlRecord rec = query.record();
5452 query.next();
5453 //int nameCol = -1;
5454 if (query.isValid())
5455 {
5456 int nameCol = rec.indexOf("id");
5457 int __id = (query.value(nameCol)).toInt();
5458
5459 nameCol = rec.indexOf("confirmed");
5460 QString __confirmed = (query.value(nameCol)).toString();
5461 if (__confirmed == "1")
5462 { // #1 - If the band/mode/log is already confirmed: Return true
5463 query.finish();
5464 return true;
5465 }
5466 else if (__confirmed == "0")
5467 {
5468 if (!isQSOConfirmed(_qsoId, true, true))
5469 //if (!isQSLReceived((_qsoId)))
5470 {// #2 - If the band/mode/log is already worked and status worked: Return true
5471 query.finish();
5472 return true;
5473 }
5474 else
5475 { // #3 - If the band/mode/log is already worked and status confirmed: Update and Return true
5476 nameCol = rec.indexOf("qsoid");
5477 //int __qsoid = (query.value(nameCol)).toInt();
5478 queryString = QString("UPDATE awarddxcc SET confirmed = '1', qsoid = '%1' WHERE id = '%2'").arg(_qsoId).arg(__id);
5479 }
5480 }
5481 else
5482 { // This case should not happen?
5483 query.finish();
5484 return true;
5485 }
5486
5487 query.finish();
5488
5489 // #1 - If the band/mode/log is already confirmed: Return true
5490 // #2 - If the band/mode/log is already worked and status worked: Return true
5491 // #3 - If the band/mode/log is already worked and status confirmed: Update and Return true
5492 // #4 - If not worked: Add and Return true
5493 }
5494 else
5495 {
5496 //#4 - If not worked: Add and Return true
5497 query.finish();
5498 // awarddxcc id dxcc band mode confirmed qsoid lognumber
5499 queryString = QString("INSERT INTO awarddxcc (dxcc, band, mode, confirmed, qsoid, lognumber) values('%1','%2','%3','0', '%4', '%5')").arg(_dxcc).arg(_band).arg(_mode).arg(_qsoId).arg(_log);
5500 }
5501
5502 if (queryString.length()>5)
5503 {
5504 if (query.exec(queryString))
5505 {
5506 //qDebug() << "DataProxy_SQLite::setDXCCAwardStatus: Queryexec-2: " << queryString << QT_ENDL;
5507 query.finish();
5508 return true;
5509 }
5510 else
5511 {
5512 if(query.lastError().nativeErrorCode()!=QString::number(19))
5513 {
5514 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5515 query.finish();
5516 return false;
5517 }
5518 }
5519 }
5520 }
5521 else
5522 {
5523 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5524 query.finish();
5525 return false;
5526 }
5527 query.finish();
5528 return true;
5529 }
5530
5531
setWAZAwardStatus(const int _qsoId)5532 bool DataProxy_SQLite::setWAZAwardStatus(const int _qsoId)
5533 {
5534 // If the band/mode/log is already confirmed: Return true
5535 // If the band/mode/log is already worked and status worked: Return true
5536 // If the band/mode/log is already worked and status confirmed: Update and Return true
5537 // If not worked: Add and Return true
5538
5539 //qDebug() << "DataProxy_SQLite::setDXCCAwardStatus: " << QString::number(_qsoId) << QT_ENDL;
5540 if (_qsoId <= 0)
5541 {
5542 return false;
5543 }
5544
5545 QList<int> values;
5546 values.clear();
5547 values << getBandModeDXCCCQZlogIDFromId(_qsoId);
5548 if (values.length ()!=5)
5549 {
5550 return false;
5551 }
5552 // bandid, modeid, dxcc, cqz, lognumber
5553 int _cqz = values.at(3);
5554
5555 //int _cqz = getCQZFromId(_qsoId);
5556 if (_cqz <= 0)
5557 {
5558 return false;
5559 }
5560
5561 //int _band = getBandFromId(_qsoId);
5562 int _band = values.at(0);
5563 if (_band <= 0)
5564 {
5565 return false;
5566 }
5567
5568 //int _mode = getModeFromId(_qsoId);
5569 int _mode = values.at(1);
5570 if (_mode <= 0)
5571 {
5572 return false;
5573 }
5574
5575 //int _log = getLogNumberFromQSOId(_qsoId);
5576 int _log = values.at(4);
5577 if (_log <= 0)
5578 {
5579 return false;
5580 }
5581
5582 // If the band/mode/log is already confirmed: Return true
5583 QSqlQuery query;
5584
5585 // awarddxcc id dxcc band mode confirmed qsoid lognumber
5586 // If the band/mode/log is already confirmed: Return true
5587 // If the band/mode/log is already worked and status worked: Return true
5588 // If the band/mode/log is already worked and status confirmed: Update and Return true
5589 // If not worked: Add and Return true
5590
5591 QString queryString = QString("SELECT id, confirmed, qsoid FROM awardwaz WHERE band='%1' AND mode='%2' AND cqz='%3'").arg(_band).arg(_mode).arg(_cqz);
5592
5593 bool sqlOK = query.exec(queryString);
5594 queryString.clear();
5595
5596 if (sqlOK)
5597 {
5598 QSqlRecord rec = query.record();
5599 query.next();
5600 int nameCol = -1;
5601 if (query.isValid())
5602 {
5603 nameCol = rec.indexOf("id");
5604 int __id = (query.value(nameCol)).toInt();
5605
5606 nameCol = rec.indexOf("confirmed");
5607 QString __confirmed = (query.value(nameCol)).toString();
5608 if (__confirmed == "1")
5609 { // #1 - If the band/mode/log is already confirmed: Return true
5610 query.finish();
5611 return true;
5612 }
5613 else if (__confirmed == "0")
5614 {
5615 if (!isQSOConfirmed(_qsoId, true, true))
5616 //if (!isQSLReceived((_qsoId)))
5617 {// #2 - If the band/mode/log is already worked and status worked: Return true
5618 query.finish();
5619 return true;
5620 }
5621 else
5622 { // #3 - If the band/mode/log is already worked and status confirmed: Update and Return true
5623 nameCol = rec.indexOf("qsoid");
5624 //int __qsoid = (query.value(nameCol)).toInt();
5625 queryString = QString("UPDATE awardwaz SET confirmed = '1', qsoid = '%1' WHERE id = '%2'").arg(_qsoId).arg(__id);
5626 }
5627 }
5628 else
5629 { // This case should not happen?
5630 query.finish();
5631 return true;
5632 }
5633
5634 query.finish();
5635
5636 // #1 - If the band/mode/log is already confirmed: Return true
5637 // #2 - If the band/mode/log is already worked and status worked: Return true
5638 // #3 - If the band/mode/log is already worked and status confirmed: Update and Return true
5639 // #4 - If not worked: Add and Return true
5640 }
5641 else
5642 {
5643 //#4 - If not worked: Add and Return true
5644 query.finish();
5645 // awarddxcc id dxcc band mode confirmed qsoid lognumber
5646 queryString = QString("INSERT INTO awardwaz (cqz, band, mode, confirmed, qsoid, lognumber) values('%1','%2','%3','0', '%4', '%5')").arg(_cqz).arg(_band).arg(_mode).arg(_qsoId).arg(_log);
5647 }
5648
5649 if (queryString.length()>5)
5650 {
5651 if (query.exec(queryString))
5652 {
5653 query.finish();
5654 return true;
5655 }
5656 else
5657 {
5658 if(query.lastError().nativeErrorCode()!=QString::number(19))
5659 {
5660 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5661 query.finish();
5662 return false;
5663 }
5664 }
5665 }
5666 }
5667 else
5668 {
5669 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5670 query.finish();
5671 return false;
5672 }
5673 query.finish();
5674 return true;
5675 }
addDXCCEntitySubdivision(const QString & _name,const QString & _short,const QString & _pref,const QString & _group,const int _regId,const int _dxcc,const int _cq,const int _itu,const QDate & _startDate,const QDate & _endDate,const bool _deleted)5676 bool DataProxy_SQLite::addDXCCEntitySubdivision(const QString &_name, const QString &_short, const QString &_pref,
5677 const QString &_group, const int _regId,
5678 const int _dxcc, const int _cq, const int _itu,
5679 const QDate &_startDate, const QDate &_endDate,
5680 const bool _deleted)
5681 {
5682 //qDebug() << "DataProxy_SQLite::addDXCCEntitySubdivision: length: " << _name << QT_ENDL;
5683 // id / name / shortname / prefix / regionalgroup / regionalid / dxcc / cqz / ituz / start_date / end_date / deleted
5684 QString queryString;
5685 QSqlQuery query;
5686 bool sqlOK = false;
5687
5688 //qDebug() << "DataProxy_SQLite::addRegionalAward: Importing: " << _regionalAward.getRegionalAwardRefName(i) << QT_ENDL;
5689 queryString = QString("INSERT INTO primary_subdivisions (name, shortname, prefix, regionalgroup, "
5690 "regionalid, dxcc, cqz, ituz, start_date, end_date, deleted) "
5691 "values ('%1','%2','%3', '%4','%5','%6', '%7','%8', '%9', '%10','%11')")
5692 .arg(_name).arg(_short).arg(_pref).arg(_group).arg(_regId).arg(_dxcc)
5693 .arg(_cq).arg(_itu).arg(util->getDateSQLiteStringFromDate(_startDate))
5694 .arg(util->getDateSQLiteStringFromDate(_endDate)).arg(util->boolToCharToSQLite(_deleted));
5695
5696 sqlOK = query.exec(queryString);
5697
5698 if (sqlOK)
5699 {
5700 //qDebug() << "DataProxy_SQLite::addRegionalAward: " << query.lastQuery() << QT_ENDL;
5701 query.finish();
5702 }
5703 else
5704 {
5705 //qDebug() << "DataProxy_SQLite::addRegionalAward: ERROR " << QT_ENDL;
5706 //qDebug() << "DataProxy_SQLite::addRegionalAward: - query error: " << QString::number(query.lastError().nativeErrorCode()) << QT_ENDL;
5707 //qDebug() << "DataProxy_SQLite::addRegionalAward: LastQuery: " << query.lastQuery() << QT_ENDL;
5708 //qDebug() << "DataProxy_SQLite::addRegionalAward: LastError-data: " << query.lastError().databaseText() << QT_ENDL;
5709 //qDebug() << "DataProxy_SQLite::addRegionalAward: LastError-driver: " << query.lastError().driverText() << QT_ENDL;
5710 //qDebug() << "DataProxy_SQLite::addRegionalAward: LastError-n: " << QString::number(query.lastError().nativeErrorCode() ) << QT_ENDL;
5711
5712 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5713 query.finish();
5714 return false;
5715 }
5716 //qDebug() << "DataProxy_SQLite::addDXCCEntitySubdivision: END" << QT_ENDL;
5717 return true;
5718 }
5719
5720
5721
getNumberOfManagedLogs()5722 int DataProxy_SQLite::getNumberOfManagedLogs()
5723 {
5724 //qDebug() << "DataProxy_SQLite::getNumberOfManagedLogs" << QT_ENDL;
5725 QSqlQuery query;
5726
5727 bool sqlOK = query.exec("SELECT COUNT (*) from logs");
5728
5729 if (sqlOK)
5730 {
5731 query.next();
5732 if (query.isValid())
5733 {
5734 int v = (query.value(0)).toInt();
5735 query.finish();
5736 return v;
5737 }
5738 else
5739 {
5740 query.finish();
5741 return -1;
5742 }
5743 }
5744 else
5745 {
5746 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5747 query.finish();
5748 return -1;
5749 }
5750 //return -1;
5751 }
5752
getMaxLogNumber()5753 int DataProxy_SQLite::getMaxLogNumber()
5754 {
5755 QSqlQuery query;
5756 QString queryString = QString("SELECT MAX(id) FROM logs");
5757 bool sqlOK = query.exec(queryString);
5758
5759 if (sqlOK)
5760 {
5761 query.next();
5762 if (query.isValid())
5763 {
5764 int v = (query.value(0)).toInt();
5765 query.finish();
5766 return v;
5767 }
5768 else
5769 {
5770 query.finish();
5771 return -1;
5772 }
5773 }
5774 else
5775 {
5776 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5777 query.finish();
5778 return -1;
5779 }
5780 //return -1;
5781 }
5782
5783
getListOfManagedLogs()5784 QStringList DataProxy_SQLite::getListOfManagedLogs()
5785 {
5786 //This function returns the list of log IDs that are being managed
5787 //qDebug() << "DataProxy_SQLite::getListOfManagedLogs" << QT_ENDL;
5788 QSqlQuery query;
5789 QStringList qs;
5790 qs.clear();
5791 QString queryString = QString("SELECT id FROM logs");
5792 bool sqlOK = query.exec(queryString);
5793
5794 if (sqlOK)
5795 {
5796 while (query.next())
5797 {
5798 if (query.isValid())
5799 {
5800 qs << (query.value(0)).toString();
5801 //qDebug() << "DataProxy_SQLite::getListOfManagedLogs: " << (query.value(0)).toString() << QT_ENDL;
5802 }
5803 }
5804 }
5805 else
5806 {
5807 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5808 qs.clear();
5809 }
5810 query.finish();
5811 return qs;
5812 }
5813
getStationCallSignFromLog(const int _log)5814 QString DataProxy_SQLite::getStationCallSignFromLog(const int _log)
5815 {
5816 //qDebug() << "DataProxy_SQLite::getStationCallSignFromLog: " << QString::number(_log)<< QT_ENDL;
5817 QSqlQuery query;
5818 QString queryString = QString("SELECT stationcall FROM logs WHERE id='%1'").arg(_log);
5819 bool sqlOK = query.exec(queryString);
5820
5821 if (sqlOK)
5822 {
5823 query.next();
5824 if (query.isValid())
5825 {
5826 //qDebug() << "DataProxy_SQLite::getStationCallSignFromLog: " << (query.value(0)).toString() << QT_ENDL;
5827 QString v = (query.value(0)).toString();
5828 query.finish();
5829 return v;
5830 }
5831 else
5832 {
5833 //qDebug() << "DataProxy_SQLite::getStationCallSignFromLog: Not valid" << QT_ENDL;
5834 query.finish();
5835 return QString();
5836 }
5837 }
5838 else
5839 {
5840 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5841 //qDebug() << "DataProxy_SQLite::getStationCallSignFromLog: query failed" << QT_ENDL;
5842 query.finish();
5843 return QString();
5844 }
5845 //qDebug() << "DataProxy_SQLite::getStationCallSignFromLog: END" << QT_ENDL;
5846 //return QString();
5847 }
5848
getStationCallSignsFromLog(const int _log)5849 QStringList DataProxy_SQLite::getStationCallSignsFromLog(const int _log)
5850 {
5851 //qDebug() << "DataProxy_SQLite::getStationCallSignsFromLog" << QT_ENDL;
5852 QStringList calls = QStringList();
5853 QSqlQuery query;
5854 QString queryString;
5855 bool sqlOK;
5856 if (doesThisLogExist(_log))
5857 {
5858 queryString = QString("SELECT DISTINCT station_callsign FROM log WHERE lognumber='%1'").arg(_log);
5859 }
5860 else
5861 {
5862 queryString = QString("SELECT DISTINCT station_callsign FROM log");
5863 }
5864
5865 sqlOK = query.exec(queryString);
5866
5867 if (sqlOK)
5868 {
5869 while(query.next())
5870 {
5871 if (query.isValid())
5872 {
5873 queryString = (query.value(0)).toString();
5874 if (queryString.length()>2)
5875 {
5876 calls.append(queryString);
5877 }
5878 //qDebug() << "DataProxy_SQLite::getStationCallSignsFromLog: " << queryString << QT_ENDL;
5879 }
5880 else
5881 {
5882 query.finish();
5883 //qDebug() << "DataProxy_SQLite::getStationCallSignsFromLog-END-1 - fail" << QT_ENDL;
5884 return QStringList();
5885 }
5886 }
5887 query.finish();
5888 calls.removeDuplicates();
5889 }
5890 else
5891 {
5892 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5893 query.finish();
5894 //qDebug() << "DataProxy_SQLite::getStationCallSignsFromLog-END-2 - fail" << QT_ENDL;
5895 return QStringList();
5896 }
5897 calls.sort();
5898 //qDebug() << "DataProxy_SQLite::getStationCallSignsFromLog-END" << QT_ENDL;
5899 return calls;
5900 }
5901
5902
5903
getOperatorsFromLog(const int _log)5904 QString DataProxy_SQLite::getOperatorsFromLog(const int _log)
5905 {
5906 //qDebug() << "DataProxy_SQLite::getOperatorsFromLog: " << QString::number(_log)<< QT_ENDL;
5907 QSqlQuery query;
5908 QString queryString = QString("SELECT operators FROM logs WHERE id='%1'").arg(_log);
5909 bool sqlOK = query.exec(queryString);
5910
5911 if (sqlOK)
5912 {
5913 query.next();
5914 if (query.isValid())
5915 {
5916 //qDebug() << "DataProxy_SQLite::getOperatorsFromLog: " << (query.value(0)).toString() << QT_ENDL;
5917 QString v = (query.value(0)).toString();
5918 query.finish();
5919 return v;
5920 }
5921 else
5922 {
5923 //qDebug() << "DataProxy_SQLite::getOperatorsFromLog: Not valid" << QT_ENDL;
5924 query.finish();
5925 return QString();
5926 }
5927 }
5928 else
5929 {
5930 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5931 //qDebug() << "DataProxy_SQLite::getOperatorsFromLog: query failed" << QT_ENDL;
5932 query.finish();
5933 return QString();
5934 }
5935
5936 //qDebug() << "DataProxy_SQLite::getOperatorsFromLog: END" << QT_ENDL;
5937 //return QString();
5938 }
5939
getCommentsFromLog(const int _log)5940 QString DataProxy_SQLite::getCommentsFromLog(const int _log)
5941 {
5942 //qDebug() << "DataProxy_SQLite::getLogDateFromLog: " << QString::number(_log)<< QT_ENDL;
5943 QSqlQuery query;
5944 QString queryString = QString("SELECT comment FROM logs WHERE id='%1'").arg(_log);
5945 bool sqlOK = query.exec(queryString);
5946
5947 if (sqlOK)
5948 {
5949 query.next();
5950 if (query.isValid())
5951 {
5952 //qDebug() << "DataProxy_SQLite::getCommentsFromLog: " << (query.value(0)).toString() << QT_ENDL;
5953 QString v = (query.value(0)).toString();
5954 query.finish();
5955 return v;
5956 }
5957 else
5958 {
5959 //qDebug() << "DataProxy_SQLite::getCommentsFromLog: Not valid" << QT_ENDL;
5960 query.finish();
5961 return QString();
5962 }
5963 }
5964 else
5965 {
5966 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5967 //qDebug() << "DataProxy_SQLite::getLogDateFromLog: query failed" << QT_ENDL;
5968 query.finish();
5969 return QString();
5970 }
5971 //qDebug() << "DataProxy_SQLite::getCommentsFromLog: END" << QT_ENDL;
5972 //return QString();
5973 }
5974
getLogDateFromLog(const int _log)5975 QString DataProxy_SQLite::getLogDateFromLog(const int _log)
5976 {
5977 //qDebug() << "DataProxy_SQLite::getLogDateFromLog: " << QString::number(_log)<< QT_ENDL;
5978 QSqlQuery query;
5979 QString queryString = QString("SELECT logdate FROM logs WHERE id='%1'").arg(_log);
5980 bool sqlOK = query.exec(queryString);
5981
5982 if (sqlOK)
5983 {
5984 query.next();
5985 if (query.isValid())
5986 {
5987 //qDebug() << "DataProxy_SQLite::getLogDateFromLog: " << (query.value(0)).toString() << QT_ENDL;
5988 QString v = (query.value(0)).toString();
5989 query.finish();
5990 return v;
5991 }
5992 else
5993 {
5994 //qDebug() << "DataProxy_SQLite::getLogDateFromLog: Not valid" << QT_ENDL;
5995 query.finish();
5996 return QString();
5997 }
5998 }
5999 else
6000 {
6001 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6002 //qDebug() << "DataProxy_SQLite::getLogDateFromLog: query failed" << QT_ENDL;
6003 query.finish();
6004 return QString();
6005 }
6006 //qDebug() << "DataProxy_SQLite::getLogDateFromLog: END" << QT_ENDL;
6007 //return QString();
6008 }
6009
getLogNumberFromQSOId(const int _qsoId)6010 int DataProxy_SQLite::getLogNumberFromQSOId(const int _qsoId)
6011 {
6012 QSqlQuery query;
6013 QString queryString = QString("SELECT lognumber FROM log WHERE id='%1'").arg(_qsoId);
6014 bool sqlOK = query.exec(queryString);
6015
6016 if (sqlOK)
6017 {
6018 query.next();
6019 if (query.isValid())
6020 {
6021 int v = (query.value(0)).toInt();
6022 query.finish();
6023 return v;
6024 }
6025 else
6026 {
6027 query.finish();
6028 return -1;
6029 }
6030 }
6031 else
6032 {
6033 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6034 query.finish();
6035 return -1;
6036 }
6037 }
6038
fillEmptyDXCCInTheLog()6039 bool DataProxy_SQLite::fillEmptyDXCCInTheLog()
6040 {
6041 //qDebug() << "DataProxy_SQLite::fillEmptyDXCCInTheLog" << QT_ENDL;
6042
6043 QSqlQuery query;
6044 QSqlQuery query2;
6045
6046 QString queryString = QString("SELECT COUNT (id) FROM log WHERE dxcc IS NULL OR dxcc<'1' OR cont IS NULL");
6047
6048 bool sqlOK = query.exec(queryString);
6049 int qsos = -1;
6050
6051 if (sqlOK)
6052 {
6053 //QSqlDatabase::database().commit();
6054 query.next();
6055 qsos = (query.value(0)).toInt();
6056 query.finish();
6057 }
6058 else
6059 {
6060 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6061 query.finish();
6062 return false;
6063 }
6064 if (qsos < 1)
6065 {
6066 return true;
6067 }
6068 int step = util->getProgresStepForDialog(qsos);
6069
6070 QProgressDialog progress(QObject::tr("Updating information..."), QObject::tr("Abort updating"), 0, qsos);
6071 progress.setMaximum(qsos);
6072 progress.setWindowModality(Qt::WindowModal);
6073
6074 queryString = QString("SELECT id, call FROM log WHERE dxcc IS NULL OR dxcc<1 OR cont IS NULL");
6075 sqlOK = query.exec(queryString);
6076
6077 if (sqlOK)
6078 {
6079 int nameCol = -1;
6080
6081 QSqlRecord rec = query.record();
6082 QString _call = QString();
6083 QString _id = QString();
6084 QString _dxcc = QString();
6085 QString _aux = QString();
6086 QString _continent = QString();
6087 int j = 0;
6088
6089 while (query.next())
6090 {
6091 if (query.isValid())
6092 {
6093 nameCol = rec.indexOf("id");
6094 _id = (query.value(nameCol)).toString();
6095 nameCol = rec.indexOf("call");
6096 _call = (query.value(nameCol)).toString();
6097
6098 _dxcc = QString::number(getPrefixId(_call));
6099 _continent = getContinentShortNameFromEntity(_dxcc.toInt());
6100 //qDebug() << "DataBase::fillEmptyDXCCInTheLog: DXCC: " << _dxcc << QT_ENDL;
6101 //qDebug() << "DataBase::fillEmptyDXCCInTheLog: Cont: " << _continent << QT_ENDL;
6102 // UPDATE THE ID WITH THE DXCC
6103 queryString = QString("UPDATE log SET dxcc = '%1', cont = '%2' WHERE id = '%3'").arg(_dxcc).arg(_continent).arg(_id);
6104 sqlOK = query2.exec(queryString);
6105 if (!sqlOK)
6106 {
6107 emit queryError(Q_FUNC_INFO, query2.lastError().databaseText(), query2.lastError().nativeErrorCode(), query2.lastQuery());
6108 query2.finish();
6109 return false;
6110 }
6111 query2.finish();
6112
6113 if (( (j % step )== 0) )
6114 { // To update the speed I will only show the progress once each X QSOs
6115 _aux = QObject::tr("Updating DXCC and Continent information...") + "\n" + QObject::tr("QSO: ") + QString::number(j) + "/" + QString::number(qsos);
6116 //_aux = "Updating ...";
6117 progress.setLabelText(_aux);
6118 progress.setValue(j);
6119 }
6120 if ( progress.wasCanceled() )
6121 {
6122 //qDebug() << "DataBase::fillEmptyDXCCInTheLog: progress canceled" << QT_ENDL;
6123 query.finish();
6124 return true;
6125 }
6126 j++;
6127 }
6128 }
6129 progress.setValue(qsos);
6130 QMessageBox msgBox;
6131 msgBox.setIcon(QMessageBox::Information);
6132 msgBox.setWindowTitle(tr("KLog DXCC"));
6133 msgBox.setText(tr("All QSOs have been updated with a DXCC and the Continent.") );
6134 msgBox.exec();
6135 }
6136 else
6137 {
6138 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6139 query.finish();
6140 return false;
6141 }
6142
6143 query.finish();
6144 return true;
6145 }
6146
6147
getHowManyQSOInLog(const int _log)6148 int DataProxy_SQLite::getHowManyQSOInLog(const int _log)
6149 {
6150 QString queryString = QString();
6151 QSqlQuery query = QSqlQuery();
6152 if (_log < 0)
6153 {
6154 queryString = QString("SELECT count(id) FROM log");
6155 }
6156 else
6157 {
6158 queryString = QString("SELECT count(id) FROM log WHERE lognumber='%1'").arg(_log);
6159 }
6160
6161 bool sqlOK = query.exec(queryString);
6162
6163 if (sqlOK)
6164 {
6165 query.next();
6166 if (query.isValid())
6167 {
6168 int v = (query.value(0)).toInt();
6169 query.finish();
6170 return v;
6171 }
6172 else
6173 {
6174 query.finish();
6175 return 0;
6176 }
6177 }
6178 else
6179 {
6180 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6181 query.finish();
6182 return 0;
6183 }
6184 }
6185
getHowManyConfirmedQSLInLog(const int _log)6186 int DataProxy_SQLite::getHowManyConfirmedQSLInLog(const int _log)
6187 {
6188 if (!doesThisLogExist(_log) && (_log>0))
6189 {
6190 return 0;
6191 }
6192 QString queryString = QString();
6193 QSqlQuery query;
6194 if (_log < 0)
6195 {
6196 queryString = QString("SELECT count(id) FROM log WHERE (qsl_rcvd='Y' OR lotw_qsl_rcvd='Y')");
6197 }
6198 else
6199 {
6200 queryString = QString("SELECT count(id) FROM log WHERE (qsl_rcvd='Y' OR lotw_qsl_rcvd='Y') AND lognumber='%1'").arg(_log);
6201 }
6202
6203 bool sqlOK = query.exec(queryString);
6204
6205 if (sqlOK)
6206 {
6207 query.next();
6208 if (query.isValid())
6209 {
6210 int v = (query.value(0)).toInt();
6211 query.finish();
6212 return v;
6213 }
6214 else
6215 {
6216 query.finish();
6217 return 0;
6218 }
6219 }
6220 else
6221 {
6222 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6223 query.finish();
6224 return 0;
6225 }
6226 }
6227
getHowManyQSLSentInLog(const int _log)6228 int DataProxy_SQLite::getHowManyQSLSentInLog(const int _log)
6229 {
6230 if (!doesThisLogExist(_log) && (_log>0))
6231 {
6232 return 0;
6233 }
6234 QString queryString = QString();
6235 QSqlQuery query;
6236 if (_log < 0)
6237 {
6238 queryString = QString("SELECT count(id) FROM log WHERE qsl_sent='Y'");
6239 }
6240 else
6241 {
6242 queryString = QString("SELECT count(id) FROM log WHERE qsl_sent='Y' AND lognumber='%1'").arg(_log);
6243 }
6244
6245 bool sqlOK = query.exec(queryString);
6246
6247 if (sqlOK)
6248 {
6249 query.next();
6250 if (query.isValid())
6251 {
6252 int v = (query.value(0)).toInt();
6253 query.finish();
6254 return v;
6255 }
6256 else
6257 {
6258 query.finish();
6259 return 0;
6260 }
6261 }
6262 else
6263 {
6264 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6265 query.finish();
6266 return 0;
6267 }
6268 }
6269
getQSOsWithContinent(const QString & _cont,const int _logNumber)6270 int DataProxy_SQLite::getQSOsWithContinent(const QString &_cont, const int _logNumber)
6271 {
6272 //qDebug() << "DataProxy_SQLite::getQSOsWithContinent: " << _cont << QT_ENDL;
6273 QSqlQuery query;
6274 QString queryString;
6275 bool sqlOK;
6276 if (_logNumber < 0)
6277 {
6278 queryString = QString("SELECT COUNT (DISTINCT id) FROM log where cont LIKE '%1'").arg(_cont);
6279 }
6280 else
6281 {
6282 queryString = QString("SELECT COUNT (DISTINCT id) FROM log where lognumber='%1' AND cont LIKE '%2'").arg(_logNumber).arg(_cont);
6283 }
6284
6285 sqlOK = query.exec(queryString);
6286
6287 //qDebug() << "DataProxy_SQLite::getQSOsWithContinent: queryString: " << queryString << QT_ENDL;
6288 if (sqlOK)
6289 {
6290 query.next();
6291 if (query.isValid())
6292 {
6293 //qDebug() << "DataProxy_SQLite::getQSOsWithContinent: " << QString::number((query.value(0)).toInt()) << QT_ENDL;
6294 int v = (query.value(0)).toInt();
6295 query.finish();
6296 return v;
6297 }
6298 else
6299 {
6300 //qDebug() << "DataProxy_SQLite::getQSOsWithContinent: 0" << QT_ENDL;
6301 query.finish();
6302 return 0;
6303 }
6304 }
6305 else
6306 {
6307 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6308 //qDebug() << "DataProxy_SQLite::getQSOsWithContinent: Query error" << QT_ENDL;
6309 query.finish();
6310 return 0;
6311 }
6312 }
6313
getQSOsInBand(const QString & _band,const int _log)6314 int DataProxy_SQLite::getQSOsInBand(const QString &_band, const int _log)
6315 {
6316 if (!doesThisLogExist(_log) && (_log>0))
6317 {
6318 return 0;
6319 }
6320 int bandId = getIdFromBandName(_band);
6321 if ( bandId < 0)
6322 {
6323 return 0;
6324 }
6325
6326 QString queryString = QString();
6327 QSqlQuery query;
6328 if (_log < 0)
6329 {
6330 queryString = QString("SELECT count(id) FROM log WHERE bandid='%1'").arg(bandId);
6331 }
6332 else
6333 {
6334 queryString = QString("SELECT count(id) FROM log WHERE bandid='%1' AND lognumber='%2'").arg(bandId).arg(_log);
6335 }
6336
6337 bool sqlOK = query.exec(queryString);
6338
6339 if (sqlOK)
6340 {
6341 query.next();
6342 if (query.isValid())
6343 {
6344 int v = (query.value(0)).toInt();
6345 query.finish();
6346 return v;
6347 }
6348 else
6349 {
6350 query.finish();
6351 return 0;
6352 }
6353 }
6354 else
6355 {
6356 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6357 query.finish();
6358 return 0;
6359 }
6360 }
6361
getQSOsInMode(const QString & _mode,const int _log)6362 int DataProxy_SQLite::getQSOsInMode(const QString &_mode, const int _log)
6363 {
6364 if (!doesThisLogExist(_log) && (_log>0))
6365 {
6366 return 0;
6367 }
6368 int modeId = getIdFromModeName(_mode);
6369 if ( modeId < 0)
6370 {
6371 return 0;
6372 }
6373
6374 QString queryString = QString();
6375 QSqlQuery query;
6376 if (_log < 0)
6377 {
6378 queryString = QString("SELECT count(id) FROM log WHERE modeid='%1'").arg(modeId);
6379 }
6380 else
6381 {
6382 queryString = QString("SELECT count(id) FROM log WHERE modeid='%1' AND lognumber='%2'").arg(modeId).arg(_log);
6383 }
6384
6385 bool sqlOK = query.exec(queryString);
6386
6387 if (sqlOK)
6388 {
6389 query.next();
6390 if (query.isValid())
6391 {
6392 int v = (query.value(0)).toInt();
6393 query.finish();
6394 return v;
6395 }
6396 else
6397 {
6398 query.finish();
6399 return 0;
6400 }
6401 }
6402 else
6403 {
6404 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6405 query.finish();
6406 return 0;
6407 }
6408 }
6409
getTop10QSOPerDXCC(const int _log)6410 QList<QList<int>> DataProxy_SQLite::getTop10QSOPerDXCC(const int _log)
6411 {
6412 //qDebug() << Q_FUNC_INFO << " : " << QString::number(_log) << QT_ENDL;
6413 QList<QList<int>> result;
6414 result.clear();
6415 QSqlQuery query;
6416 QString queryString;
6417 if (_log <0)
6418 {
6419 queryString = "SELECT log.dxcc, COUNT(log.dxcc) FROM log GROUP BY log.dxcc ORDER BY COUNT(log.dxcc) DESC LIMIT 10";
6420 }
6421 else
6422 {
6423 queryString = QString("select log.dxcc, count(log.dxcc) from log WHERE log.lognumber = '%1' group by log.dxcc ORDER BY count(log.dxcc) DESC limit 10").arg(_log);
6424 }
6425 bool sqlOK = query.exec(queryString);
6426 if (sqlOK)
6427 {
6428 QList<int> temp;
6429 while (query.next())
6430 {
6431 if (query.isValid())
6432 {
6433 temp.clear();
6434 temp.append(query.value(0).toInt());
6435 temp.append(query.value(1).toInt());
6436 result.append(temp);
6437 //_id = (query.value(nameCol)).toString();
6438 }
6439 }
6440 return result;
6441 }
6442 else
6443 {
6444 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6445 query.finish();
6446 return result;
6447 }
6448 //qDebug() << Q_FUNC_INFO << " - END" << QT_ENDL;
6449 //return result;
6450 }
6451
addNewLog(const QStringList _qs)6452 bool DataProxy_SQLite::addNewLog (const QStringList _qs)
6453 {
6454 //qDebug() << "DataProxy_SQLite::addNewLog: " << _qs.at(2) << "/" << _qs.at(5) << "/" << _qs.at(6) << QT_ENDL;
6455 //qDebug() << "DataProxy_SQLite::addNewLog: Size: " << QString::number(_qs.size()) << QT_ENDL;
6456 // newLogq << dateString << stationCallsign << operators << comment << QString::number(selectedLog) << _qs.at(4) ; (last field is 1 or 0 editing)
6457
6458 if (_qs.size()!=6)
6459 {
6460 //qDebug() << "DataProxy_SQLite::addNewLog: != 6" << QT_ENDL;
6461 return false;
6462 }
6463 //qDebug() << "DataProxy_SQLite::addNewLog: Has the appropriate length" << QT_ENDL;
6464
6465 QString aux = QString();
6466
6467 QString _dateString = _qs.at(0);
6468 QString _stationCallsign = _qs.at(1);
6469 QString _operators = _qs.at(2);
6470 QString _comment = _qs.at(3);
6471
6472 QString id = _qs.at(4);
6473 QString editing = _qs.at(5);
6474
6475 QString queryString;
6476 QSqlQuery query;
6477 bool sqlOK;
6478
6479 if (editing == "1")
6480 { // We are editing
6481 //qDebug() << "DataProxy_SQLite::addNewLog: We are editing!" << QT_ENDL;
6482 //queryString = QString("UPDATE logs SET logdate = '%1', stationcall = '%2', operators = '%3', comment = '%4', logtype = '%5', logtypen = '%6' WHERE id = '%7'").arg(_dateString).arg(_stationCallsign).arg(_operators).arg(_comment).arg(_typeContest).arg(_typeContestN).arg(id);
6483 queryString = QString("UPDATE logs SET logdate = '%1', stationcall = '%2', operators = '%3', comment = '%4' WHERE id = '%5'").arg(_dateString).arg(_stationCallsign).arg(_operators).arg(_comment).arg(id);
6484 sqlOK = query.exec(queryString);
6485
6486 if (sqlOK)
6487 {
6488 //qDebug() << "DataProxy_SQLite::addNewLog: Editing OK!" << QT_ENDL;
6489 query.finish();
6490 return true;
6491 }
6492 else
6493 {
6494 //qDebug() << "DataProxy_SQLite::addNewLog: Editing NOK!" << QT_ENDL;
6495 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6496 query.finish();
6497 return false;
6498 }
6499 //return false;
6500 }
6501
6502 //qDebug() << "DataProxy_SQLite::addNewLog: We are adding a new log" << QT_ENDL;
6503
6504 // First we check if the log is already there
6505
6506 queryString = QString("SELECT id FROM logs WHERE logdate='%1' AND stationcall='%2' AND operators = '%3' AND comment = '%4'").arg(_dateString).arg(_stationCallsign).arg(_operators).arg(_comment);
6507 //"logs"
6508 //"id, logdate, stationcall, comment, logtype"
6509 //qDebug() << "DataProxy_SQLite::addNewLog query1: " << queryString << QT_ENDL;
6510
6511 sqlOK = query.exec(queryString);
6512 if (sqlOK)
6513 {
6514 query.next();
6515 if (query.isValid())
6516 {
6517 //qDebug() << "DataProxy_SQLite::addNewLog query error: " << queryString << QT_ENDL;
6518 // It seems that the log is already existing!
6519 return false;
6520 }
6521 }
6522 else
6523 {
6524 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6525 query.finish();
6526 return false;
6527 }
6528
6529 //Now we add the new log
6530 queryString = QString("INSERT INTO logs (logdate, stationcall, operators, comment) values('%1','%2','%3','%4')").arg(_dateString).arg(_stationCallsign).arg(_operators).arg(_comment);
6531 //qDebug() << "DataProxy_SQLite::addNewLog query1: " << queryString << QT_ENDL;
6532 sqlOK = query.exec(queryString);
6533
6534 if (sqlOK)
6535 {
6536 query.finish();
6537 return true;
6538 }
6539 else
6540 {
6541 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6542 query.finish();
6543 return false;
6544 }
6545 //return false;
6546 }
6547
6548
6549
doesThisLogExist(const int _log)6550 bool DataProxy_SQLite::doesThisLogExist(const int _log)
6551 {
6552 //qDebug() << "DataProxy_SQLite::doesThisLogExist: " << QString::number(_log) << QT_ENDL;
6553 //qDebug() << "DataProxy_SQLite::doesThisLogExist - Name:" << db->getDBName() << QT_ENDL;
6554 QSqlQuery query;
6555
6556 QString queryString = QString("SELECT id FROM logs WHERE id='%1'").arg(_log);
6557 bool sqlOK = query.exec(queryString);
6558
6559 //qDebug() << "DataProxy_SQLite::doesThisLogExist: query: " << query.lastQuery() << QT_ENDL;
6560
6561 if (sqlOK)
6562 {
6563 if (query.next())
6564 {
6565 if (query.isValid())
6566 {
6567 query.finish();
6568 //qDebug() << "DataProxy_SQLite::doesThisLogExist: END TRUE" << QT_ENDL;
6569 return true;
6570 }
6571 else
6572 {
6573 query.finish();
6574 //qDebug() << "DataProxy_SQLite::doesThisLogExist: END FALSE 1" << QT_ENDL;
6575 return false;
6576 }
6577 }
6578 else
6579 {
6580 query.finish();
6581 //qDebug() << "DataProxy_SQLite::doesThisLogExist: END FALSE 2" << QT_ENDL;
6582 return false;
6583 }
6584 }
6585 else
6586 {
6587 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6588 query.finish();
6589 //qDebug() << "DataProxy_SQLite::doesThisLogExist: END FALSE 3" << QT_ENDL;
6590 return false;
6591 }
6592 //qDebug() << "DataProxy_SQLite::doesThisLogExist: END FALSE 4" << QT_ENDL;
6593 //return false;
6594 }
6595
6596
getContinentIdFromContinentShortName(const QString & _n)6597 int DataProxy_SQLite::getContinentIdFromContinentShortName(const QString &_n)
6598 {
6599 if (_n.length()!=2)
6600 {
6601 return -3;
6602 }
6603 QSqlQuery query;
6604 QString queryString = QString("SELECT id FROM continent WHERE shortname=='%1'").arg(_n);
6605 bool sqlOK = query.exec(queryString);
6606
6607 if (sqlOK)
6608 {
6609 query.next();
6610 if (query.isValid())
6611 {
6612 int v = (query.value(0)).toInt();
6613 query.finish();
6614 return v;
6615 }
6616 else
6617 {
6618 query.finish();
6619 return -1;
6620 }
6621 }
6622 else
6623 {
6624 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6625 query.finish();
6626 return -2;
6627 }
6628 }
6629
getContinentShortNameFromEntity(const int _n)6630 QString DataProxy_SQLite::getContinentShortNameFromEntity(const int _n)
6631 {
6632 QSqlQuery query;
6633
6634 QString queryString= QString("SELECT continent FROM entity WHERE dxcc='%1'").arg(_n);
6635 //QString queryString= QString("SELECT continent.shortname FROM entity JOIN continent ON entity.continent=continent.shortname WHERE dxcc='%1'").arg(_n);
6636 bool sqlOK = query.exec(queryString);
6637
6638 if (sqlOK)
6639 {
6640 query.next();
6641 if (query.isValid())
6642 {
6643 queryString = (query.value(0)).toString();
6644 query.finish();
6645 return queryString;
6646 }
6647 else
6648 {
6649 query.finish();
6650 return QString();
6651 }
6652 }
6653 else
6654 {
6655 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6656 query.finish();
6657 return QString();
6658 }
6659 }
6660
getContinentIdFromEntity(const int _n)6661 int DataProxy_SQLite::getContinentIdFromEntity(const int _n)
6662 {
6663 QSqlQuery query;
6664 QString queryString = QString("SELECT continent.id FROM entity JOIN continent ON entity.continent=continent.shortname WHERE dxcc='%1'").arg(_n);
6665 bool sqlOK = query.exec(queryString);
6666
6667 //aux = QString("SELECT continent.id FROM entity JOIN continent ON entity.continent=continent.shortname WHERE (mainprefix NOT LIKE '*%') AND dxcc='%1'").arg(_n);
6668 if (sqlOK)
6669 {
6670 query.next();
6671 if (query.isValid())
6672 {
6673 int v = (query.value(0)).toInt();
6674 query.finish();
6675 return v;
6676 }
6677 else
6678 {
6679 query.finish();
6680 return -1;
6681 }
6682 }
6683 else
6684 {
6685 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6686 query.finish();
6687 return -2;
6688 }
6689 }
6690
getContinentShortNames()6691 QStringList DataProxy_SQLite::getContinentShortNames()
6692 {
6693 QSqlQuery query;
6694 QStringList continents;
6695 continents.clear();
6696 QString queryString = QString("SELECT shortname FROM continent");
6697 bool sqlOK = query.exec(queryString);
6698
6699 if (sqlOK)
6700 {
6701 while (query.next())
6702 {
6703 if (query.isValid())
6704 {
6705 continents << query.value(0).toString();
6706 }
6707 }
6708 query.finish();
6709 continents.sort();
6710 return continents;
6711 }
6712 else
6713 {
6714 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6715 query.finish();
6716 return QStringList();
6717 }
6718 //return QStringList();
6719 }
6720
isValidContinentShortName(const QString & _n)6721 bool DataProxy_SQLite::isValidContinentShortName(const QString &_n)
6722 {
6723 QString queryString = QString("SELECT id FROM continent WHERE shortname ='%1'").arg(_n);
6724 QSqlQuery query;
6725 bool sqlOK = query.exec(queryString);
6726
6727 if (sqlOK)
6728 {
6729 if (query.next())
6730 {
6731 if (query.isValid())
6732 {
6733 query.finish();
6734 return true;
6735 }
6736 else
6737 {
6738 query.finish();
6739 return false;
6740 }
6741 }
6742 else
6743 {
6744 query.finish();
6745 return false;
6746 }
6747 }
6748 else
6749 {
6750 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6751 query.finish();
6752 return false;
6753 }
6754 }
6755
isValidDXCC(const int _e)6756 bool DataProxy_SQLite::isValidDXCC(const int _e)
6757 {
6758 QString queryString = QString("SELECT id FROM entity WHERE dxcc ='%1'").arg(_e);
6759 QSqlQuery query;
6760 bool sqlOK = query.exec(queryString);
6761
6762 if (sqlOK)
6763 {
6764 if (query.next())
6765 {
6766 if (query.isValid())
6767 {
6768 if (query.value(0).toInt()==1)
6769 query.finish();
6770 return true;
6771 }
6772 else
6773 {
6774 query.finish();
6775 return false;
6776 }
6777 }
6778 else
6779 {
6780 query.finish();
6781 return false;
6782 }
6783 }
6784 else
6785 {
6786 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6787 query.finish();
6788 return false;
6789 }
6790 }
6791
filterValidFields(const QStringList & _fields)6792 QStringList DataProxy_SQLite::filterValidFields(const QStringList &_fields)
6793 {
6794 //qDebug() << Q_FUNC_INFO << ": Length: " << QString::number(_fields.length());
6795
6796 QStringList validFields;
6797 validFields.clear();
6798 validFields << getFields();
6799 QString aux;
6800 //foreach(aux, validFields)
6801 //{
6802 // //qDebug() << Q_FUNC_INFO << ": validFields: " << aux;
6803 //}
6804
6805 foreach(aux, _fields)
6806 {
6807 //qDebug() << Q_FUNC_INFO << ": _fields: " << aux;
6808 }
6809
6810 QStringList returningFields;
6811 returningFields.clear();
6812
6813 QString field;
6814 foreach (field, _fields)
6815 {
6816 //qDebug() << Q_FUNC_INFO << ": Field:-1: " << field;
6817 field = field.trimmed();
6818 if (field.endsWith(';'))
6819 {
6820 field.chop(1);
6821 }
6822 //qDebug() << Q_FUNC_INFO << ": Field:-2: " << field;
6823 if (validFields.contains(field))
6824 {
6825 returningFields << field;
6826 }
6827 }
6828 if (returningFields.isEmpty())
6829 {
6830 returningFields << util->getDefaultLogFields();
6831 }
6832
6833 return returningFields;
6834 }
6835
6836
getITUzFromPrefix(const QString & _p)6837 int DataProxy_SQLite::getITUzFromPrefix(const QString &_p)
6838 {
6839 QSqlQuery query;
6840 QString queryString = QString("SELECT ituz FROM prefixesofentity WHERE prefix LIKE '%1'").arg(_p);
6841 bool sqlOK = query.exec(queryString);
6842
6843 if (sqlOK)
6844 {
6845 query.next();
6846 if (query.isValid())
6847 {
6848 int v = (query.value(0)).toInt();
6849 query.finish();
6850 return v;
6851 }
6852 else
6853 {
6854 query.finish();
6855 return -1;
6856 }
6857 }
6858 else
6859 {
6860 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6861 query.finish();
6862 return -2;
6863 }
6864 }
6865
getCQzFromPrefix(const QString & _p)6866 int DataProxy_SQLite::getCQzFromPrefix(const QString &_p)
6867 {
6868 QSqlQuery query;
6869 QString queryString = QString("SELECT cqz FROM prefixesofentity WHERE prefix LIKE '%1'").arg(_p);
6870 bool sqlOK = query.exec(queryString);
6871
6872 if (sqlOK)
6873 {
6874 query.next();
6875 if (query.isValid())
6876 {
6877 int v = (query.value(0)).toInt();
6878 query.finish();
6879 return v;
6880 }
6881 else
6882 {
6883 query.finish();
6884 return -1;
6885 }
6886 }
6887 else
6888 {
6889 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6890 query.finish();
6891 return -2;
6892 }
6893 }
6894
getCQzFromEntity(const int _n)6895 int DataProxy_SQLite::getCQzFromEntity(const int _n)
6896 {
6897 QSqlQuery query;
6898 QString queryString = QString("SELECT cqz FROM entity WHERE dxcc='%1'").arg(_n);
6899 bool sqlOK = query.exec(queryString);
6900
6901 if (sqlOK)
6902 {
6903 query.next();
6904 if (query.isValid())
6905 {
6906 int v = (query.value(0)).toInt();
6907 query.finish();
6908 return v;
6909 }
6910 else
6911 {
6912 query.finish();
6913 return -1;
6914 }
6915 }
6916 else
6917 {
6918 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6919 query.finish();
6920 return -2;
6921 }
6922 }
6923
getITUzFromEntity(const int _n)6924 int DataProxy_SQLite::getITUzFromEntity(const int _n)
6925 {
6926 QSqlQuery query;
6927 QString queryString = QString("SELECT ituz FROM entity WHERE dxcc='%1'").arg(_n);
6928 bool sqlOK = query.exec(queryString);
6929
6930 if (sqlOK)
6931 {
6932 query.next();
6933 if (query.isValid())
6934 {
6935 int v = (query.value(0)).toInt();
6936 query.finish();
6937 return v;
6938 }
6939 else
6940 {
6941 query.finish();
6942 return -1;
6943 }
6944 }
6945 else
6946 {
6947 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6948 query.finish();
6949 return -2;
6950 }
6951 }
6952
getEntityNameFromId(const int _n)6953 QString DataProxy_SQLite::getEntityNameFromId(const int _n)
6954 {
6955 //qDebug() << "DataProxy_SQLite::getEntityNameFromId: " << QString::number(_n) << QT_ENDL;
6956
6957 QSqlQuery query;
6958 QString queryString = QString("SELECT name FROM entity WHERE dxcc='%1'").arg(_n);
6959 QString motherEntName = QString();
6960 bool sqlOK;
6961
6962 if (_n > 1000)
6963 {
6964 QString aux = (QString::number(_n)).right(3);
6965 QString queryString2 = QString("SELECT name FROM entity WHERE dxcc='%1'").arg(aux);
6966 sqlOK = query.exec(queryString2);
6967
6968 if (sqlOK)
6969 {
6970 if (query.next())
6971 {
6972 if (query.isValid())
6973 {
6974 motherEntName = (query.value(0)).toString();
6975 }
6976 }
6977 }
6978 else
6979 {
6980 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6981 }
6982 }
6983 query.finish();
6984 sqlOK = query.exec(queryString);
6985
6986 if (sqlOK)
6987 {
6988 if (query.next())
6989 {
6990 if (query.isValid())
6991 {
6992 if (_n>1000)
6993 {
6994 motherEntName = (query.value(0)).toString() + " (" + motherEntName + ")";
6995 }
6996 else
6997 {
6998 motherEntName = (query.value(0)).toString();
6999 }
7000 query.finish();
7001 return motherEntName;
7002 }
7003 else
7004 {
7005 query.finish();
7006 return QString();
7007 }
7008 }
7009 else
7010 {
7011 query.finish();
7012 return QString();
7013 }
7014 }
7015 else
7016 {
7017 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7018 query.finish();
7019 return QString();
7020 }
7021 //return QString();
7022 }
7023
getEntityIdFromName(const QString & _e)7024 int DataProxy_SQLite::getEntityIdFromName(const QString &_e)
7025 {
7026 //qDebug() << "DataProxy_SQLite::getEntityIdFromName:" << _e << QT_ENDL;
7027
7028 int id = -1;
7029 QString queryString;
7030 QSqlQuery query;
7031
7032 //queryString = QString("SELECT mainprefix FROM entity WHERE (mainprefix NOT LIKE '*%') AND dxcc='%1'").arg(_entityN);
7033 queryString = QString("SELECT dxcc FROM entity WHERE name='%1'").arg(_e);
7034 //queryString = "SELECT prefix FROM prefixesofentity WHERE dxcc=='" + QString::number(i) +"'";
7035 bool sqlOK = query.exec(queryString);
7036
7037 if (!sqlOK)
7038 {
7039 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7040 query.finish();
7041 return id;
7042 }
7043 else
7044 {
7045 query.next();
7046 if (query.isValid())
7047 {
7048 id = (query.value(0)).toInt();
7049 query.finish();
7050 return id;
7051 }
7052 else
7053 {
7054 query.finish();
7055 return -1;
7056 }
7057 }
7058 }
getEntiNameISOAndPrefixFromId(const int _dxcc)7059 QStringList DataProxy_SQLite::getEntiNameISOAndPrefixFromId(const int _dxcc)
7060 {
7061 //qDebug() << Q_FUNC_INFO << ": " << QString::number(_dxcc);
7062
7063 if (_dxcc <= 0 )
7064 {
7065 return QStringList();
7066 }
7067 bool sqlOK;
7068 QString queryString;
7069 QSqlQuery query;
7070 QString motherEntName = QString();
7071 if (_dxcc > 1000)
7072 {
7073 QString aux = (QString::number(_dxcc)).right(3);
7074 QString queryString2 = QString("SELECT name FROM entity WHERE dxcc='%1'").arg(aux);
7075 sqlOK = query.exec(queryString2);
7076
7077 if (sqlOK)
7078 {
7079 if (query.next())
7080 {
7081 if (query.isValid())
7082 {
7083 motherEntName = (query.value(0)).toString();
7084 if (motherEntName.length ()<1)
7085 {
7086 return QStringList();
7087 }
7088 }
7089 }
7090 }
7091 else
7092 {
7093 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7094 query.finish ();
7095 return QStringList();
7096 }
7097 }
7098 query.finish ();
7099
7100 QStringList result;
7101 result.clear();
7102 queryString = QString("SELECT mainprefix, name, isoname FROM entity WHERE dxcc='%1'").arg(_dxcc);
7103
7104 sqlOK = query.exec(queryString);
7105
7106 if (!sqlOK)
7107 {
7108 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7109 query.finish();
7110 return QStringList();
7111 }
7112 else
7113 {
7114 query.next();
7115
7116 if (query.isValid())
7117 {
7118 //queryString = (query.value(0)).toString();
7119 QString prefix = (query.value(0)).toString();
7120 QString name = (query.value(1)).toString();
7121 QString isoName = (query.value(2)).toString();
7122 query.finish();
7123 if (prefix.length ()<1)
7124 {
7125 return QStringList();
7126 }
7127 if (name.length ()<1)
7128 {
7129 return QStringList();
7130 }
7131 if ((_dxcc>1000) && (motherEntName.length ()>2))
7132 {
7133 name = name + "(" + motherEntName + ")";
7134 }
7135 if (isoName.length ()<2)
7136 {
7137 return QStringList();
7138 }
7139
7140 result << prefix << name << isoName;
7141 return result;
7142 }
7143 else
7144 {
7145 query.finish();
7146 return QStringList();
7147 }
7148 }
7149 }
7150
getEntityMainPrefix(const int _entityN)7151 QString DataProxy_SQLite::getEntityMainPrefix(const int _entityN)
7152 {
7153 //qDebug() << "DataProxy_SQLite::getEntityMainPrefix:" << QString::number(_entityN) << QT_ENDL;
7154
7155 if (_entityN <= 0 )
7156 {
7157 return QString();
7158 }
7159
7160 QString queryString;
7161 QSqlQuery query;
7162
7163 queryString = QString("SELECT mainprefix FROM entity WHERE dxcc='%1'").arg(_entityN);
7164
7165 bool sqlOK = query.exec(queryString);
7166
7167 if (!sqlOK)
7168 {
7169 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7170 query.finish();
7171 return QString();
7172 }
7173 else
7174 {
7175 query.next();
7176
7177 if (query.isValid())
7178 {
7179 queryString = (query.value(0)).toString();
7180 query.finish();
7181 return queryString;
7182 }
7183 else
7184 {
7185 query.finish();
7186 return QString();
7187 }
7188 }
7189 //return QString();
7190 }
7191
getEntityIdFromMainPrefix(const QString & _e)7192 int DataProxy_SQLite::getEntityIdFromMainPrefix(const QString &_e)
7193 {
7194 //qDebug() << "DataProxy_SQLite::getEntityIdFromMainPrefix:" << _e << QT_ENDL;
7195 int id = -1;
7196 QString queryString;
7197 QSqlQuery query;
7198 queryString = QString("SELECT dxcc FROM entity WHERE mainprefix='%1'").arg(_e);
7199 bool sqlOK = query.exec(queryString);
7200
7201 if (!sqlOK)
7202 {
7203 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7204 query.finish();
7205 return id;
7206 }
7207 else
7208 {
7209 query.next();
7210 if (query.isValid())
7211 {
7212 id = (query.value(0)).toInt();
7213 query.finish();
7214 return id;
7215 }
7216 else
7217 {
7218 query.finish();
7219 return -1;
7220 }
7221 }
7222 }
7223
getDXCCFromPrefix(const QString & _p)7224 int DataProxy_SQLite::getDXCCFromPrefix(const QString &_p)
7225 {
7226 //qDebug() << "DataProxy_SQLite::getDXCCFromPrefix - " << Q_FUNC_INFO << "-" << _p << "-" << QT_ENDL;
7227
7228 QSqlQuery query;
7229 QString queryString = QString("SELECT dxcc FROM prefixesofentity WHERE prefix='%1'").arg(_p);
7230 bool sqlOK = query.exec(queryString);
7231
7232 if (sqlOK)
7233 {
7234 //qDebug() << "DataProxy_SQLite::getDXCCFromPrefix: query OK: query: " << queryString << QT_ENDL;
7235 if (query.next())
7236 {
7237 if (query.isValid())
7238 {
7239 int v = (query.value(0)).toInt();
7240 query.finish();
7241 //qDebug() << "DataProxy_SQLite::getDXCCFromPrefix: return 0: " << QString::number(v) << QT_ENDL;
7242 return v;
7243 }
7244 else
7245 {
7246 query.finish();
7247 //qDebug() << "DataProxy_SQLite::getDXCCFromPrefix: return -1: " << QT_ENDL;
7248 return -1;
7249 }
7250 }
7251 else
7252 {
7253 query.finish();
7254 //qDebug() << "DataProxy_SQLite::getDXCCFromPrefix: return -2: " << QT_ENDL;
7255 return -2;
7256 }
7257 }
7258 else
7259 {
7260 //qDebug() << "DataProxy_SQLite::getDXCCFromPrefix: query NOK: query: " << queryString << QT_ENDL;
7261 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7262 query.finish();
7263 //qDebug() << "DataProxy_SQLite::getDXCCFromPrefix: return -3: " << QT_ENDL;
7264 return -3;
7265 }
7266 //return -4;
7267 }
7268
7269
isNewCQz(int _c)7270 bool DataProxy_SQLite::isNewCQz(int _c)
7271 {
7272 QSqlQuery query;
7273 QString queryString = QString("SELECT id FROM log WHERE cqz='%1'").arg(_c);
7274 //queryString = "SELECT id FROM log WHERE cqz=='" + QString::number(_cqz) +"'";
7275 bool sqlOK = query.exec(queryString);
7276
7277 if (!sqlOK)
7278 {
7279 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7280 query.finish();
7281 return false;
7282 }
7283 else
7284 {
7285 query.next();
7286 return query.isValid();
7287 }
7288 }
7289
isNewEntity(int _e)7290 bool DataProxy_SQLite::isNewEntity(int _e)
7291 {
7292 if (_e <= 0)
7293 {
7294 return false;
7295 }
7296
7297 //QString queryString;
7298 QSqlQuery query;
7299 QString queryString = QString("SELECT id FROM log WHERE dxcc='%1'").arg(_e);
7300 //queryString = "SELECT id FROM log WHERE dxcc=='" + QString::number(_entityN) +"'";
7301
7302 bool sqlOK = query.exec(queryString);
7303
7304 if (!sqlOK)
7305 {
7306 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7307 query.finish();
7308 return false;
7309 }
7310 else
7311 {
7312 query.next();
7313
7314 if (query.isValid())
7315 {
7316 query.finish();
7317 return true;
7318 }
7319 else
7320 {
7321 query.finish();
7322 return false;
7323 }
7324 }
7325 //return false;
7326 }
7327
getLongitudeFromEntity(const int _e)7328 double DataProxy_SQLite::getLongitudeFromEntity(const int _e)
7329 {
7330 QString queryString = QString("SELECT longitude FROM entity WHERE dxcc='%1'").arg(_e);
7331 QSqlQuery query;
7332 bool sqlOK = query.exec(queryString);
7333
7334 if (!sqlOK)
7335 {
7336 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7337 query.finish();
7338 return 0.0;
7339 }
7340 else
7341 {
7342 query.next();
7343
7344 if ( !(query.isValid()) )
7345 {
7346 query.finish();
7347 return 0.0;
7348 }
7349 else
7350 { double v = (query.value(0)).toDouble();
7351 query.finish();
7352 return v;
7353 }
7354 }
7355 }
7356
getLatitudeFromEntity(const int _e)7357 double DataProxy_SQLite::getLatitudeFromEntity(const int _e)
7358 {
7359 QString queryString = QString("SELECT latitude FROM entity WHERE dxcc='%1'").arg(_e);
7360 QSqlQuery query;
7361 bool sqlOK = query.exec(queryString);
7362
7363 if (!sqlOK)
7364 {
7365 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7366 query.finish();
7367 return 0.0;
7368 }
7369 else
7370 {
7371 query.next();
7372
7373 if ( !(query.isValid()) )
7374 {
7375 query.finish();
7376 return 0.0;
7377 }
7378 else
7379 {
7380 double v = (query.value(0)).toDouble();
7381 query.finish();
7382 return v;
7383 }
7384 }
7385 }
7386
getEntityPrefixes(const int _enti)7387 QString DataProxy_SQLite::getEntityPrefixes(const int _enti)
7388 {
7389 if (_enti<=0)
7390 {
7391 return QString();
7392 }
7393 QString result;
7394 result = QString();
7395 QString queryString;
7396 QSqlQuery query;
7397 int i = _enti;
7398 queryString = "SELECT prefix FROM prefixesofentity WHERE dxcc=='" + QString::number(i) +"'";
7399 bool sqlOK = query.exec(queryString);
7400
7401 if (!sqlOK)
7402 {
7403 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7404 query.finish();
7405 return QString();
7406 }
7407 else
7408 {
7409 while ( (query.next())) {
7410 if (query.isValid())
7411 {
7412 result = result + ", " + (query.value(0)).toString();
7413 }
7414 }
7415 if (result.length() < 1)
7416 {
7417 return result;
7418 }
7419 else
7420 {
7421 result = result.remove(0,2);
7422 query.finish();
7423 return result;
7424 }
7425 }
7426 }
7427
getEntitiesNames()7428 QStringList DataProxy_SQLite::getEntitiesNames()
7429 {
7430 //qDebug() << "DataProxy_SQLite::getEntitiesNames" << QT_ENDL;
7431 QString aux = QString();
7432 QStringList qs;
7433 qs.clear();
7434 QString queryString = QString("SELECT mainprefix, name, dxcc FROM entity");
7435 QSqlQuery query;
7436
7437 bool sqlOK = query.exec(queryString);
7438
7439 if (sqlOK)
7440 {
7441 while ( (query.next())) {
7442 if (query.isValid())
7443 {
7444 if (query.value(2).toInt()<1000)
7445 {
7446 aux.clear();
7447 aux = (query.value(0)).toString() + "-" + (query.value(1)).toString()+" ("+(query.value(2)).toString()+")";
7448 //result = result + ", " + (query.value(0)).toString();
7449 qs << aux;
7450 }
7451 }
7452 }
7453 }
7454 else
7455 {
7456 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7457 }
7458 query.finish();
7459 qs.sort();
7460 return qs;
7461 }
7462
getEntitiesIds()7463 QStringList DataProxy_SQLite::getEntitiesIds()
7464 {
7465 QString aux = QString();
7466 QStringList qs;
7467 qs.clear();
7468 QString queryString = QString("SELECT dxcc FROM entity");
7469 QSqlQuery query;
7470
7471 bool sqlOK = query.exec(queryString);
7472
7473 if (sqlOK)
7474 {
7475 while ( (query.next())) {
7476 if (query.isValid())
7477 {
7478 if (query.value(0).toInt()>0)
7479 {
7480 aux.clear();
7481 aux = (query.value(0)).toString();
7482 qs << aux;
7483 }
7484 }
7485 }
7486 }
7487 else
7488 {
7489 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7490 }
7491 query.finish();
7492 qs.sort();
7493 return qs;
7494 }
7495
getHowManyEntities()7496 int DataProxy_SQLite::getHowManyEntities()
7497 {
7498 QSqlQuery query;
7499 QString queryString = QString("SELECT count(id) FROM entity");
7500 bool sqlOK = query.exec(queryString);
7501
7502 if (sqlOK)
7503 {
7504 query.next();
7505 if (query.isValid())
7506 {
7507 int v = (query.value(0)).toInt();
7508 query.finish();
7509 query.finish();
7510 return v;
7511 }
7512 else
7513 {
7514 query.finish();
7515 return 0;
7516 }
7517 }
7518 else
7519 {
7520 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7521 query.finish();
7522 return 0;
7523 }
7524 }
7525
7526
getMaxEntityID(bool limit)7527 int DataProxy_SQLite::getMaxEntityID(bool limit)
7528 {
7529 //SELECT MAX (dxcc) FROM entity WHERE dxcc<1000
7530 QSqlQuery query;
7531 QString queryString;
7532 if (limit)
7533 {
7534 queryString = QString("SELECT MAX (dxcc) FROM entity WHERE dxcc<1000");
7535 }
7536 else
7537 {
7538 queryString = QString("SELECT MAX (dxcc) FROM entity");
7539 }
7540
7541 bool sqlOK = query.exec(queryString);
7542
7543 if (sqlOK)
7544 {
7545 query.next();
7546 if (query.isValid())
7547 {
7548 int v = (query.value(0)).toInt();
7549 query.finish();
7550 return v;
7551 }
7552 else
7553 {
7554 query.finish();
7555 return -1;
7556 }
7557 }
7558 else
7559 {
7560 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7561 query.finish();
7562 return -1;
7563 }
7564 }
7565
updateISONames()7566 bool DataProxy_SQLite::updateISONames()
7567 {
7568 //qDebug() << "DataProxy_SQLite::updateISONames" << QT_ENDL;
7569 return db->updateTheEntityTableISONames();
7570 }
7571
getISOName(const int _n)7572 QString DataProxy_SQLite::getISOName(const int _n)
7573 {
7574 //qDebug() << "DataProxy_SQLite::getISONames: " << QString::number(_n) << QT_ENDL;
7575 if (_n <= 0 )
7576 {
7577 //qDebug() << "DataProxy_SQLite::getISONames: NOT KNOWN - UN" << QT_ENDL;
7578 return "un"; // When no flag is known, we return the UN flag
7579 }
7580 int n = _n;
7581 if (_n<1000)
7582 {
7583 n = _n;
7584 }
7585 else if (_n>=2000)
7586 {
7587 n = _n - 2000;
7588 }
7589 else
7590 {
7591 n = _n - 1000;
7592 }
7593 QString queryString, aux;
7594 QSqlQuery query;
7595 aux.clear();
7596 queryString = QString("SELECT isoname FROM entity WHERE dxcc='%1'").arg(n);
7597 bool sqlOK = query.exec(queryString);
7598
7599 if (!sqlOK)
7600 {
7601 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
7602 //qDebug() << "DataProxy_SQLite::getISOName: Query error - UN" << QT_ENDL;
7603 query.finish();
7604 return "un"; // When no flag is known, we return the UN flag
7605 }
7606 else
7607 {
7608 query.next();
7609
7610 if (query.isValid()){
7611 //qDebug() << "DataProxy_SQLite::getISOName: " << "N: " << QString::number(_n) << "- ISO Name: " << (query.value(0)).toString() << QT_ENDL;
7612 aux = (query.value(0)).toString();
7613 query.finish();
7614 if (aux.length()>1)
7615 {
7616 return aux;
7617 }
7618 else
7619 {
7620 return "un"; // When no flag is known, we return the UN flag
7621 }
7622 }
7623 else
7624 {
7625 //qDebug() << "DataProxy_SQLite::getISOName: NO ISO Name: " << QT_ENDL;
7626 query.finish();
7627 return "un"; // When no flag is known, we return the UN flag
7628 }
7629 }
7630 }
7631
getPrefixId(const QString & _qrz)7632 int DataProxy_SQLite::getPrefixId(const QString &_qrz)
7633 {
7634 //qDebug() << "DataProxy_SQLite::getPrefixId: -" << _qrz <<"-" << QT_ENDL;
7635 //TODO: Instead of going from long to short, identify prefixes from the begining:
7636 // character(may be number) + number
7637 if (_qrz.length() < 1)
7638 {
7639 return -1;
7640 }
7641 int entityID = 0;
7642
7643 QString aux = changeSlashAndFindPrefix((_qrz).toUpper());
7644
7645 while ((entityID <= 0) && (aux.length()>=1) )
7646 {
7647 entityID = getDXCCFromPrefix(aux);
7648
7649 //qDebug() << "DataProxy_SQLite::getPrefixId: in the while" << aux << " = " << QString::number(entityID) << QT_ENDL;
7650 if (entityID<=0)
7651 {
7652 aux.chop(1);
7653 }
7654 }
7655 //qDebug() << "DataProxy_SQLite::getPrefixId: " << _qrz << QString::number(entityID) << QT_ENDL;
7656 return entityID;
7657 }
7658
changeSlashAndFindPrefix(const QString & _qrz)7659 QString DataProxy_SQLite::changeSlashAndFindPrefix(const QString &_qrz)
7660 {
7661 //qDebug() << "DataProxy_SQLite::changeSlashAndFindPrefix: -" << _qrz <<"-" << QT_ENDL;
7662 int iaux1, iaux2;
7663
7664 QString aux = _qrz.toUpper();
7665
7666 if ((aux).count('\\')) // Replaces \ by / to ease operation.
7667 {
7668 aux.replace(QChar('\\'), QChar('/'));
7669 }
7670 else
7671 {
7672 return aux;
7673 }
7674
7675 if (aux.count('/')) // / found! Checking different options
7676 {
7677 if (aux.endsWith("/") )
7678 { // We look for calls ending in slash "/" or "\"
7679 aux.remove(aux.length()-1,1);
7680 }
7681 iaux1 = aux.indexOf('/');
7682 //qDebug() << "DataProxy_SQLite::changeSlashAndFindPrefix: Slash found at: " << QString::number(iaux1) << QT_ENDL;
7683
7684 iaux2 = (aux.length())- iaux1; // iaux2 is the length of the second part
7685 if (iaux2 < 0){
7686 iaux2 = -iaux2;
7687 }
7688
7689 if ( iaux1 < iaux2 ) { //Like in F/EA0K, we can simply take the first part as the prefix
7690 aux = aux.left(iaux1);
7691 }
7692 else
7693 {
7694 aux = aux.right(iaux2 -1);
7695 }
7696 }
7697 return aux;
7698 }
7699
slotCaptureDebugLogs(const QString & _func,const QString & _msg,const DebugLogLevel _level)7700 void DataProxy_SQLite::slotCaptureDebugLogs(const QString &_func, const QString &_msg, const DebugLogLevel _level)
7701 {
7702 emit debugLog(_func, _msg, _level);
7703 }
7704
getADIFQSO(const int _qsoId)7705 QString DataProxy_SQLite::getADIFQSO(const int _qsoId)
7706 {
7707 QString ADIFqso;
7708 ADIFqso.clear();
7709
7710 //qDebug() << "DataProxy_SQLite::getADIFQSO: " << QString::number(_qsoId) << QT_ENDL;
7711 int nameCol;
7712 QString aux;
7713 bool propsat = false; // Reset the QSO in case it is a Satellite QSO
7714
7715 QSqlQuery query;
7716 QString queryString = QString("SELECT * FROM log WHERE id='%1'").arg(_qsoId);
7717 bool sqlOk = query.exec(queryString);
7718
7719 if (sqlOk)
7720 {
7721 if (query.next())
7722 {
7723 if (query.isValid())
7724 {
7725 //qDebug() << "DataProxy_SQLite::getADIFQSO: Query OK: " << query.lastQuery() << QT_ENDL;
7726 }
7727 else
7728 {
7729 //qDebug() << "DataProxy_SQLite::getADIFQSO: Query isValid FAILED: " << query.lastQuery() << QT_ENDL;
7730 query.finish();
7731 return QString();
7732 }
7733 }
7734 else
7735 {
7736 //qDebug() << "DataProxy_SQLite::getADIFQSO: Query NEXT FAILED: " << query.lastQuery() << QT_ENDL;
7737 query.finish();
7738 return QString();
7739 }
7740 }
7741 else
7742 {
7743 //qDebug() << "DataProxy_SQLite::getADIFQSO: Query FAILED: " << query.lastQuery() << QT_ENDL;
7744 query.finish();
7745 return QString();
7746 }
7747 QSqlRecord rec = query.record();
7748
7749 nameCol = rec.indexOf("call");
7750 if (nameCol>=0)
7751 {
7752 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
7753 //qDebug() << "DataProxy_SQLite::getADIFQSO: " << QString::number(nameCol) << "/" << aux1 << QT_ENDL;
7754 if (util->isValidCall(aux))
7755 {
7756 ADIFqso.append("<CALL:" + QString::number(aux.length()) + ">" + aux + " ");
7757 }
7758 else
7759 {
7760 if (showInvalidCallMessage(aux))
7761 {
7762 ADIFqso.append("<CALL:" + QString::number(aux.length()) + ">" + aux + " ");
7763 }
7764 }
7765 }
7766 nameCol = rec.indexOf("qso_date");
7767 QDateTime tDateTime;
7768 if (nameCol>=0)
7769 {
7770 aux = (query.value(nameCol)).toString();
7771 tDateTime = util->getDateTimeFromSQLiteString(aux);
7772 if (tDateTime.isValid())
7773 {
7774 aux = util->getADIFDateFromQDateTime(tDateTime);
7775 ADIFqso.append("<QSO_DATE:" + QString::number(aux.length()) + ">" + aux + " ");
7776 aux = util->getADIFTimeFromQDateTime(tDateTime);
7777 //aux.chop(2);
7778 ADIFqso.append("<TIME_ON:" + QString::number(aux.length()) + ">" + aux + " ");
7779 }
7780 }
7781 nameCol = rec.indexOf("bandid");
7782 QString bandst = QString();
7783 if (nameCol>=0)
7784 {
7785 aux = (query.value(nameCol)).toString();
7786 aux = util->checkAndFixASCIIinADIF(aux);
7787 aux = getNameFromBandId(aux.toInt());
7788
7789 if (getIdFromBandName(aux)>=0)
7790 {
7791 bandst = aux;
7792 }
7793 }
7794 nameCol = rec.indexOf("freq");
7795 if (nameCol>=0)
7796 {
7797 aux = (query.value(nameCol)).toString();
7798 aux = util->checkAndFixASCIIinADIF(aux);
7799
7800 double freqTX = aux.toDouble();
7801 if (freqTX > 0.0)
7802 {
7803 //TODO: Check if the Band is correctly defined. BAND Wins and freq is lost if not correct
7804 if (getBandIdFromFreq(freqTX) != getIdFromBandName(bandst))
7805 {
7806 bandst = getBandNameFromFreq(freqTX);
7807 }
7808 ADIFqso.append("<FREQ:" + QString::number(aux.length()) + ">" + aux + " ");
7809 }
7810 if (getIdFromBandName(bandst)>0)
7811 {
7812 ADIFqso.append("<BAND:" + QString::number(bandst.length()) + ">" + bandst + " ");
7813 }
7814 }
7815 // Now the BAND RX
7816 nameCol = rec.indexOf("band_rx");
7817 QString bandrxst = QString();
7818 if (nameCol>=0)
7819 {
7820 aux = (query.value(nameCol)).toString();
7821 aux = util->checkAndFixASCIIinADIF(aux);
7822 aux = getNameFromBandId(aux.toInt());
7823
7824 if (getIdFromBandName(aux)>=0)
7825 {
7826 bandrxst = aux;
7827 }
7828 }
7829 nameCol = rec.indexOf("freq_rx");
7830 if (nameCol>=0)
7831 {
7832 aux = (query.value(nameCol)).toString();
7833 aux = util->checkAndFixASCIIinADIF(aux);
7834 double freqRX = aux.toDouble();
7835 if (freqRX > 0.0)
7836 {
7837 //TODO: Check if the Band is correctly defined. BAND Wins and freq is lost if not correct
7838 if (getBandIdFromFreq(freqRX) != getIdFromBandName(bandrxst))
7839 {
7840 bandrxst = getBandNameFromFreq(freqRX);
7841 }
7842 ADIFqso.append("<FREQ_RX:" + QString::number(aux.length()) + ">" + aux + " ");
7843 }
7844 if (getIdFromBandName(bandrxst)>0)
7845 {
7846 ADIFqso.append("<BAND_RX:" + QString::number(bandrxst.length()) + ">" + bandrxst + " ");
7847 }
7848 // END of Band RX
7849 }
7850 nameCol = rec.indexOf("modeid");
7851 if (nameCol>=0)
7852 {
7853 aux = (query.value(nameCol)).toString();
7854 aux = util->checkAndFixASCIIinADIF(aux);
7855 // get SubModeId to check if it is the same or not from modeid
7856 QString aux2 = getSubModeFromId(aux.toInt());
7857 //aux = db->getModeNameFromID2(aux.toInt());
7858 aux = getNameFromSubMode(aux2);
7859 if ((aux.length()>1) && (getIdFromModeName(aux)>=0))
7860 {
7861 ADIFqso.append("<MODE:" + QString::number(aux.length()) + ">" + aux + " ");
7862 }
7863 if ((aux != aux2) && (aux.length()>1) && (getSubModeIdFromSubMode(aux2)>=0) )
7864 {
7865 ADIFqso.append("<SUBMODE:" + QString::number(aux2.length()) + ">" + aux2 + " ");
7866 }
7867 }
7868 nameCol = rec.indexOf("prop_mode");
7869 if (nameCol>=0)
7870 {
7871 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
7872 if ((aux.length())>1)
7873 {
7874 ADIFqso.append("<PROP_MODE:" + QString::number(aux.length()) + ">" + aux + " ");
7875 if (aux == "SAT")
7876 {
7877 propsat = true;
7878 }
7879 }
7880 //qDebug() << "DataProxy_SQLite::getADIFQSO: PROP_MODE" << QT_ENDL;
7881 }
7882 nameCol = rec.indexOf("sat_name");
7883 if (nameCol>=0)
7884 {
7885 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
7886 if ((aux.length())>0)
7887 {
7888 ADIFqso.append("<SAT_NAME:" + QString::number(aux.length()) + ">" + aux + " ");
7889 if (!propsat)
7890 {
7891 ADIFqso.append("<PROP_MODE:3>SAT ");
7892 propsat = false;
7893 }
7894 }
7895 //qDebug() << "DataProxy_SQLite::getADIFQSO: SAT_NAME" << QT_ENDL;
7896 }
7897 nameCol = rec.indexOf("gridsquare");
7898 if (nameCol>=0)
7899 {
7900 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
7901 if ((aux.length())>0)
7902 {
7903 ADIFqso.append("<GRIDSQUARE:" + QString::number(aux.length()) + ">" + aux + " ");
7904 }
7905 }
7906 nameCol = rec.indexOf("my_gridsquare");
7907 if (nameCol>=0)
7908 {
7909 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
7910 if ((aux.length())>0)
7911 {
7912 ADIFqso.append("<MY_GRIDSQUARE:" + QString::number(aux.length()) + ">" + aux + " ");
7913 }
7914 }
7915 nameCol = rec.indexOf("station_callsign");
7916 if ((nameCol>=0) )
7917 {
7918 aux = (query.value(nameCol)).toString();
7919 //qDebug() << "DataProxy_SQLite::getADIFQSO: StationCallSign: " << aux << QT_ENDL;
7920 if ((util->isValidCall(aux)))
7921 { // User selected one station callsign from the log
7922 ADIFqso.append("<STATION_CALLSIGN:" + QString::number(aux.length()) + ">" + aux + " ");
7923 }
7924 }
7925 nameCol = rec.indexOf("qso_date_off");
7926 if (nameCol>=0)
7927 {
7928 aux = (query.value(nameCol)).toString();
7929 aux = util->checkAndFixASCIIinADIF(aux);
7930 tDateTime = util->getDateTimeFromSQLiteString(aux);
7931
7932 if (tDateTime.isValid())
7933 {
7934 aux = util->getADIFDateFromQDateTime(tDateTime);
7935 ADIFqso.append("<QSO_DATE_OFF:" + QString::number(aux.length()) + ">" + aux + " ");
7936 aux = util->getADIFTimeFromQDateTime(tDateTime);
7937 ADIFqso.append("<TIME_OFF:" + QString::number(aux.length()) + ">" + aux + " ");
7938 }
7939 }
7940 nameCol = rec.indexOf("srx");
7941 if (nameCol>=0)
7942 {
7943 aux = (query.value(nameCol)).toString();
7944 aux = util->checkAndFixASCIIinADIF(aux);
7945 if ((aux.length())>0)
7946 {
7947 ADIFqso.append("<SRX:" + QString::number(aux.length()) + ">" + aux + " ");
7948 }
7949 }
7950 nameCol = rec.indexOf("srx_string");
7951 if (nameCol>=0)
7952 {
7953 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
7954 if ((aux.length())>0)
7955 {
7956 ADIFqso.append("<SRX_STRING:" + QString::number(aux.length()) + ">" + aux + " ");
7957 }
7958 }
7959 nameCol = rec.indexOf("stx");
7960 if (nameCol>=0)
7961 {
7962 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
7963 if ((aux.length())>0)
7964 {
7965 ADIFqso.append("<STX:" + QString::number(aux.length()) + ">" + aux + " ");
7966 }
7967 }
7968 nameCol = rec.indexOf("stx_string");
7969 if (nameCol>=0)
7970 {
7971 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
7972 if ((aux.length())>0)
7973 {
7974 ADIFqso.append("<STX_STRING:" + QString::number(aux.length()) + ">" + aux + " ");
7975 }
7976 }
7977 //qDebug() << "DataProxy_SQLite::getADIFQSO - 100" << QT_ENDL;
7978 nameCol = rec.indexOf("cqz");
7979 if (nameCol>=0)
7980 {
7981 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
7982 if ( ((aux.length())>0) && (0 < aux.toInt()) && (aux.toInt() < CQZones+1) )
7983 {
7984 ADIFqso.append("<CQZ:" + QString::number(aux.length()) + ">" + aux + " ");
7985 }
7986 }
7987 nameCol = rec.indexOf("ituz");
7988 if (nameCol>=0)
7989 {
7990 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
7991 if ( ((aux.length())>0) && (0 < aux.toInt()) && (aux.toInt() < ITUZones+1) )
7992 {
7993 ADIFqso.append("<ITUZ:" + QString::number(aux.length()) + ">" + aux + " ");
7994 }
7995 //qDebug() << "DataProxy_SQLite::getADIFQSO: DXCC - Now..." << QT_ENDL;
7996 }
7997 nameCol = rec.indexOf("dxcc");
7998 if (nameCol>=0)
7999 {
8000 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8001 if ((aux.length())>0)
8002 {
8003 ADIFqso.append("<DXCC:" + QString::number(aux.length()) + ">" + aux + " ");
8004 //qDebug() << "DataProxy_SQLite::getADIFQSO: DXCC " << aux << QT_ENDL;
8005 }
8006 //qDebug() << "DataProxy_SQLite::getADIFQSO: DXCC - Exported!" << QT_ENDL;
8007 }
8008 nameCol = rec.indexOf("address");
8009 if (nameCol>=0)
8010 {
8011 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8012 if ((aux.length())>0)
8013 {
8014 ADIFqso.append("<ADDRESS:" + QString::number(aux.length()) + ">" + aux + " ");
8015 }
8016 }
8017 nameCol = rec.indexOf("age");
8018 if (nameCol>=0)
8019 {
8020 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8021 if ((aux.length())>0)
8022 {
8023 ADIFqso.append("<AGE:" + QString::number(aux.length()) + ">" + aux + " ");
8024 }
8025 }
8026 nameCol = rec.indexOf("cnty");
8027 if (nameCol>=0)
8028 {
8029 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8030 if ((aux.length())>0)
8031 {
8032 ADIFqso.append("<CNTY:" + QString::number(aux.length()) + ">" + aux + " ");
8033 }
8034 }
8035 nameCol = rec.indexOf("comment");
8036 if (nameCol>=0)
8037 {
8038 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8039 if ((aux.length())>0)
8040 {
8041 ADIFqso.append("<COMMENT:" + QString::number(aux.length()) + ">" + aux + " ");
8042 }
8043 //qDebug() << "DataProxy_SQLite::getADIFQSO - 200" << QT_ENDL;
8044 }
8045 nameCol = rec.indexOf("a_index");
8046 if (nameCol>=0)
8047 {
8048 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8049 if ((aux.length())>0)
8050 {
8051 ADIFqso.append("<A_INDEX:" + QString::number(aux.length()) + ">" + aux + " ");
8052 }
8053 }
8054 nameCol = rec.indexOf("ant_az");
8055 if (nameCol>=0)
8056 {
8057 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8058 if ((aux.length())>0)
8059 {
8060 ADIFqso.append("<ANT_AZ:" + QString::number(aux.length()) + ">" + aux + " ");
8061 }
8062 }
8063 nameCol = rec.indexOf("ant_el");
8064 if (nameCol>=0)
8065 {
8066 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8067 if ((aux.length())>0)
8068 {
8069 ADIFqso.append("<ANT_EL:" + QString::number(aux.length()) + ">" + aux + " ");
8070 }
8071 }
8072 nameCol = rec.indexOf("ant_path");
8073 if (nameCol>=0)
8074 {
8075 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8076 if ((aux.length())>0)
8077 {
8078 ADIFqso.append("<ANT_PATH:" + QString::number(aux.length()) + ">" + aux + " ");
8079 }
8080 }
8081 nameCol = rec.indexOf("arrl_sect");
8082 if (nameCol>=0)
8083 {
8084 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8085 if ((aux.length())>0)
8086 {
8087 ADIFqso.append("<ARRL_SECT:" + QString::number(aux.length()) + ">" + aux + " ");
8088 }
8089 }
8090 nameCol = rec.indexOf("checkcontest");
8091 if (nameCol>=0)
8092 {
8093 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8094 if ((aux.length())>0)
8095 {
8096 ADIFqso.append("<CHECKCONTEST:" + QString::number(aux.length()) + ">" + aux + " ");
8097 }
8098 }
8099 //qDebug() << "DataProxy_SQLite::getADIFQSO - 30" << QT_ENDL;
8100 nameCol = rec.indexOf("class");
8101 if (nameCol>=0)
8102 {
8103 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8104 if ((aux.length())>0)
8105 {
8106 ADIFqso.append("<CLASS:" + QString::number(aux.length()) + ">" + aux + " ");
8107 }
8108 }
8109 nameCol = rec.indexOf("cont");
8110 if (nameCol>=0)
8111 {
8112 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8113 if ((aux.length())>0)
8114 {
8115 ADIFqso.append("<CONT:" + QString::number(aux.length()) + ">" + aux + " ");
8116 }
8117 }
8118 nameCol = rec.indexOf("contacted_op");
8119 if (nameCol>=0)
8120 {
8121 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8122 if (util->isValidCall(aux))
8123 {
8124 ADIFqso.append("<CONTACTED_OP:" + QString::number(aux.length()) + ">" + aux + " ");
8125 }
8126 }
8127 nameCol = rec.indexOf("contest_id");
8128 if (nameCol>=0)
8129 {
8130 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8131 if ((aux.length())>0)
8132 {
8133 ADIFqso.append("<CONTEST_ID:" + QString::number(aux.length()) + ">" + aux + " ");
8134 }
8135 }
8136 nameCol = rec.indexOf("points");
8137 if (nameCol>=0)
8138 {
8139 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8140 if ((aux.length())>0)
8141 {
8142 ADIFqso.append("<APP_KLOG_POINTS:" + QString::number(aux.length()) + ">" + aux + " ");
8143 }
8144 }
8145 nameCol = rec.indexOf("multiplier");
8146 if (nameCol>=0)
8147 {
8148 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8149 if ((aux.length())>0)
8150 {
8151 ADIFqso.append("<APP_KLOG_MULTIPLIER:" + QString::number(aux.length()) + ">" + aux + " ");
8152 }
8153 //qDebug() << "DataProxy_SQLite::getADIFQSO - 40" << QT_ENDL;
8154 }
8155 nameCol = rec.indexOf("transmiterid");
8156 if (nameCol>=0)
8157 {
8158 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8159 if ((aux.length())>0)
8160 {
8161 ADIFqso.append("<APP_KLOG_TRX:" + QString::number(aux.length()) + ">" + aux + " ");
8162 }
8163 }
8164 nameCol = rec.indexOf("country");
8165 if (nameCol>=0)
8166 {
8167 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8168 if ((aux.length())>0)
8169 {
8170 ADIFqso.append("<COUNTRY:" + QString::number(aux.length()) + ">" + aux + " ");
8171 }
8172 }
8173 nameCol = rec.indexOf("credit_submitted");
8174 if (nameCol>=0)
8175 {
8176 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8177 if ((aux.length())>0)
8178 {
8179 ADIFqso.append("<CREDIT_SUBMITTED:" + QString::number(aux.length()) + ">" + aux + " ");
8180 }
8181 }
8182 nameCol = rec.indexOf("credit_granted");
8183 if (nameCol>=0)
8184 {
8185 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8186 if ((aux.length())>0)
8187 {
8188 ADIFqso.append("<CREDIT_GRANTED:" + QString::number(aux.length()) + ">" + aux + " ");
8189 }
8190 }
8191 nameCol = rec.indexOf("distance");
8192 if (nameCol>=0)
8193 {
8194 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8195 if ((aux.length())>0)
8196 {
8197 ADIFqso.append("<DISTANCE:" + QString::number(aux.length()) + ">" + aux + " ");
8198 }
8199 }
8200 nameCol = rec.indexOf("darc_dok");
8201 if (nameCol>=0)
8202 {
8203 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8204 if ((aux.length())>0)
8205 {
8206 ADIFqso.append("<DARC_DOK:" + QString::number(aux.length()) + ">" + aux + " ");
8207 }
8208 }
8209 nameCol = rec.indexOf("eq_call");
8210 if (nameCol>=0)
8211 {
8212 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8213 if (util->isValidCall(aux))
8214 {
8215 ADIFqso.append("<EQ_CALL:" + QString::number(aux.length()) + ">" + aux + " ");
8216 }
8217 }
8218 nameCol = rec.indexOf("email");
8219 if (nameCol>=0)
8220 {
8221 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8222 if ((aux.length())>0)
8223 {
8224 if (aux.contains("@") && (aux.contains(".")))
8225 {
8226 ADIFqso.append("<EMAIL:" + QString::number(aux.length()) + ">" + aux + " ");
8227 }
8228 }
8229 }
8230 nameCol = rec.indexOf("eqsl_qslrdate");
8231 QDate date;
8232 if (nameCol>=0)
8233 {
8234 aux = (query.value(nameCol)).toString();
8235 date = util->getDateFromSQliteString(aux);
8236 if (date.isValid())
8237 {
8238 aux = util->getADIFDateFromQDate(date);
8239 ADIFqso.append("<EQSL_QSLRDATE:" + QString::number(aux.length()) + ">" + aux + " ");
8240 }
8241 }
8242 nameCol = rec.indexOf("eqsl_qslsdate");
8243 if (nameCol>=0)
8244 {
8245 aux = (query.value(nameCol)).toString();
8246 date = util->getDateFromSQliteString(aux);
8247 if (date.isValid())
8248 {
8249 aux = util->getADIFDateFromQDate(date);
8250 ADIFqso.append("<EQSL_QSLSDATE:" + QString::number(aux.length()) + ">" + aux + " ");
8251 }
8252 }
8253 nameCol = rec.indexOf("eqsl_qsl_rcvd");
8254 if (nameCol>=0)
8255 {
8256 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8257 if ( ((aux.length())==1) && (aux!="N") )
8258 {
8259 ADIFqso.append("<EQSL_QSL_RCVD:" + QString::number(aux.length()) + ">" + aux + " ");
8260 }
8261 }
8262 nameCol = rec.indexOf("eqsl_qsl_sent");
8263 if (nameCol>=0)
8264 {
8265 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8266 if ( ((aux.length())==1) && (aux!="N") )
8267 {
8268 ADIFqso.append("<EQSL_QSL_SENT:" + QString::number(aux.length()) + ">" + aux + " ");
8269 }
8270 }
8271 nameCol = rec.indexOf("fists");
8272 if (nameCol>=0)
8273 {
8274 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8275 if ((aux.length())>0)
8276 {
8277 ADIFqso.append("<FISTS:" + QString::number(aux.length()) + ">" + aux + " ");
8278 }
8279 }
8280 nameCol = rec.indexOf("fists_cc");
8281 if (nameCol>=0)
8282 {
8283 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8284 if ((aux.length())>0)
8285 {
8286 ADIFqso.append("<FISTS_CC:" + QString::number(aux.length()) + ">" + aux + " ");
8287 }
8288 }
8289 nameCol = rec.indexOf("force_init");
8290 if (nameCol>=0)
8291 {
8292 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8293 if ((aux.length())>0)
8294 {
8295 ADIFqso.append("<FORCE_INIT:" + QString::number(aux.length()) + ">" + aux + " ");
8296 }
8297 }
8298 nameCol = rec.indexOf("guest_op");
8299 if (nameCol>=0)
8300 {
8301 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8302 if ((aux.length())>0)
8303 {
8304 ADIFqso.append("<GUEST_OP:" + QString::number(aux.length()) + ">" + aux + " ");
8305 }
8306 }
8307 nameCol = rec.indexOf("hrdlog_qso_upload_date");
8308 if (nameCol>=0)
8309 {
8310 aux = (query.value(nameCol)).toString();
8311 date = util->getDateFromSQliteString(aux);
8312 if (date.isValid())
8313 {
8314 aux = util->getADIFDateFromQDate(date);
8315 ADIFqso.append("<HRDLOG_QSO_UPLOAD_DATE:" + QString::number(aux.length()) + ">" + aux + " ");
8316 }
8317 }
8318 nameCol = rec.indexOf("hrdlog_qso_upload_status");
8319 if (nameCol>=0)
8320 {
8321 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8322 if ( ((aux.length())==1) && ((aux!="Y") || (aux!="N") || (aux!="M")) )
8323 {
8324 ADIFqso.append("<HRDLOG_QSO_UPLOAD_STATUS:" + QString::number(aux.length()) + ">" + aux + " ");
8325 }
8326 }
8327 nameCol = rec.indexOf("my_antenna");
8328 if (nameCol>=0)
8329 {
8330 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8331 if ((aux.length())>0)
8332 {
8333 ADIFqso.append("<MY_ANTENNA:" + QString::number(aux.length()) + ">" + aux + " ");
8334 }
8335 }
8336 nameCol = rec.indexOf("my_dxcc");
8337 if (nameCol>=0)
8338 {
8339 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8340 if ((aux.length())>0)
8341 {
8342 ADIFqso.append("<MY_DXCC:" + QString::number(aux.length()) + ">" + aux + " ");
8343 }
8344 }
8345 nameCol = rec.indexOf("my_fists");
8346 if (nameCol>=0)
8347 {
8348 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8349 if ((aux.length())>0)
8350 {
8351 ADIFqso.append("<MY_FISTS:" + QString::number(aux.length()) + ">" + aux + " ");
8352 }
8353 }
8354 nameCol = rec.indexOf("iota");
8355 if (nameCol>=0)
8356 {
8357 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8358 //qDebug() << "DataProxy_SQLite::getADIFQSO (IOTA): " << aux << QT_ENDL;
8359 if (((aux.length())>=4) && ((aux.length())<=6))
8360 {
8361 ADIFqso.append("<IOTA:" + QString::number(aux.length()) + ">" + aux + " ");
8362 }
8363 }
8364 nameCol = rec.indexOf("iota_island_id");
8365 if (nameCol>=0)
8366 {
8367 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8368 //qDebug() << "DataProxy_SQLite::getADIFQSO (IOTA_ID): " << aux << QT_ENDL;
8369 if ((aux.length())>0)
8370 {
8371 ADIFqso.append("<IOTA_ISLAND_ID:" + QString::number(aux.length()) + ">" + aux + " ");
8372 }
8373 }
8374 nameCol = rec.indexOf("my_iota");
8375 if (nameCol>=0)
8376 {
8377 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8378 if (((aux.length())>=4) && ((aux.length())<=6))
8379 {
8380 ADIFqso.append("<MY_IOTA:" + QString::number(aux.length()) + ">" + aux + " ");
8381 }
8382 }
8383 nameCol = rec.indexOf("my_iota_island_id");
8384 if (nameCol>=0)
8385 {
8386 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8387 if ((aux.length())>0)
8388 {
8389 ADIFqso.append("<MY_IOTA_ISLAND_ID:" + QString::number(aux.length()) + ">" + aux + " ");
8390 }
8391 }
8392 nameCol = rec.indexOf("k_index");
8393 if (nameCol>=0)
8394 {
8395 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8396 if ((aux.length())>0)
8397 {
8398 ADIFqso.append("<K_INDEX:" + QString::number(aux.length()) + ">" + aux + " ");
8399 }
8400 }
8401 nameCol = rec.indexOf("my_itu_zone");
8402 if (nameCol>=0)
8403 {
8404 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8405 if ((aux.length())>0)
8406 {
8407 ADIFqso.append("<MY_ITU_ZONE:" + QString::number(aux.length()) + ">" + aux + " ");
8408 }
8409 }
8410 nameCol = rec.indexOf("lat");
8411 if (nameCol>=0)
8412 {
8413 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8414 if ((aux.length())>0)
8415 {
8416 ADIFqso.append("<LAT:" + QString::number(aux.length()) + ">" + aux + " ");
8417 }
8418 }
8419 nameCol = rec.indexOf("lon");
8420 if (nameCol>=0)
8421 {
8422 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8423 if ((aux.length())>0)
8424 {
8425 ADIFqso.append("<LON:" + QString::number(aux.length()) + ">" + aux + " ");
8426 }
8427 }
8428 nameCol = rec.indexOf("my_lat");
8429 if (nameCol>=0)
8430 {
8431 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8432 if ((aux.length())>0)
8433 {
8434 ADIFqso.append("<MY_LAT:" + QString::number(aux.length()) + ">" + aux + " ");
8435 }
8436 }
8437 nameCol = rec.indexOf("my_lon");
8438 if (nameCol>=0)
8439 {
8440 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8441 if ((aux.length())>0)
8442 {
8443 ADIFqso.append("<MY_LON:" + QString::number(aux.length()) + ">" + aux + " ");
8444 }
8445 }
8446 nameCol = rec.indexOf("lotw_qslrdate");
8447 if (nameCol>=0)
8448 {
8449 aux = (query.value(nameCol)).toString();
8450 date = util->getDateFromSQliteString(aux);
8451 if (date.isValid())
8452 {
8453 aux = util->getADIFDateFromQDate(date);
8454 ADIFqso.append("<LOTW_QSLRDATE:" + QString::number(aux.length()) + ">" + aux + " ");
8455 }
8456 }
8457 nameCol = rec.indexOf("lotw_qslsdate");
8458 if (nameCol>=0)
8459 {
8460 aux = (query.value(nameCol)).toString();
8461 date = util->getDateFromSQliteString(aux);
8462 if (date.isValid())
8463 {
8464 aux = util->getADIFDateFromQDate(date);
8465 ADIFqso.append("<LOTW_QSLSDATE:" + QString::number(aux.length()) + ">" + aux + " ");
8466 }
8467 }
8468 nameCol = rec.indexOf("lotw_qsl_rcvd");
8469 if (nameCol>=0)
8470 {
8471 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8472 if ( ((aux.length())==1) && (aux!="N") )
8473 {
8474 ADIFqso.append("<LOTW_QSL_RCVD:" + QString::number(aux.length()) + ">" + aux + " ");
8475 }
8476 }
8477 nameCol = rec.indexOf("lotw_qsl_sent");
8478 if (nameCol>=0)
8479 {
8480 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8481 if ( ((aux.length())==1) && (aux!="N") )
8482 {
8483 ADIFqso.append("<LOTW_QSL_SENT:" + QString::number(aux.length()) + ">" + aux + " ");
8484 }
8485 }
8486 nameCol = rec.indexOf("clublog_qso_upload_date");
8487 if (nameCol>=0)
8488 {
8489 aux = (query.value(nameCol)).toString();
8490 date = util->getDateFromSQliteString(aux);
8491 if (date.isValid())
8492 {
8493 aux = util->getADIFDateFromQDate(date);
8494 ADIFqso.append("<CLUBLOG_QSO_UPLOAD_DATE:" + QString::number(aux.length()) + ">" + aux + " ");
8495 }
8496 }
8497 nameCol = rec.indexOf("clublog_qso_upload_status");
8498 if (nameCol>=0)
8499 {
8500 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8501 if ( ((aux.length())==1) && ((aux!="Y") || (aux!="N") || (aux!="M")) )
8502 {
8503 ADIFqso.append("<CLUBLOG_QSO_UPLOAD_STATUS:" + QString::number(aux.length()) + ">" + aux + " ");
8504 }
8505 }
8506 nameCol = rec.indexOf("qrzcom_qso_upload_date");
8507 if (nameCol>=0)
8508 {
8509 aux = (query.value(nameCol)).toString();
8510 date = util->getDateFromSQliteString(aux);
8511 if (date.isValid())
8512 {
8513 aux = util->getADIFDateFromQDate(date);
8514 ADIFqso.append("<QRZCOM_QSO_UPLOAD_DATE:" + QString::number(aux.length()) + ">" + aux + " ");
8515 }
8516 }
8517 nameCol = rec.indexOf("qrzcom_qso_upload_status");
8518 if (nameCol>=0)
8519 {
8520 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8521 if ( ((aux.length())==1) && ((aux!="Y") || (aux!="N") || (aux!="M")) )
8522 {
8523 ADIFqso.append("<QRZCOM_QSO_UPLOAD_STATUS:" + QString::number(aux.length()) + ">" + aux + " ");
8524 }
8525 }
8526 nameCol = rec.indexOf("max_bursts");
8527 if (nameCol>=0)
8528 {
8529 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8530 if ((aux.length())>0)
8531 {
8532 ADIFqso.append("<MAX_BURSTS:" + QString::number(aux.length()) + ">" + aux + " ");
8533 }
8534 }
8535 nameCol = rec.indexOf("ms_shower");
8536 if (nameCol>=0)
8537 {
8538 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8539 if ((aux.length())>0)
8540 {
8541 ADIFqso.append("<MS_SHOWER:" + QString::number(aux.length()) + ">" + aux + " ");
8542 }
8543 }
8544 nameCol = rec.indexOf("my_city");
8545 if (nameCol>=0)
8546 {
8547 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8548 if ((aux.length())>0)
8549 {
8550 ADIFqso.append("<MY_CITY:" + QString::number(aux.length()) + ">" + aux + " ");
8551 }
8552 }
8553 nameCol = rec.indexOf("my_cnty");
8554 if (nameCol>=0)
8555 {
8556 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8557 if ((aux.length())>0)
8558 {
8559 ADIFqso.append("<MY_CNTY:" + QString::number(aux.length()) + ">" + aux + " ");
8560 }
8561 }
8562 nameCol = rec.indexOf("my_country");
8563 if (nameCol>=0)
8564 {
8565 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8566 if ((aux.length())>0)
8567 {
8568 ADIFqso.append("<MY_COUNTRY:" + QString::number(aux.length()) + ">" + aux + " ");
8569 }
8570 }
8571 nameCol = rec.indexOf("my_cq_zone");
8572 if (nameCol>=0)
8573 {
8574 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8575 if ((aux.toInt()>0) && (aux.toInt()<41))
8576 {
8577 ADIFqso.append("<MY_CQ_ZONE:" + QString::number(aux.length()) + ">" + aux + " ");
8578 }
8579 }
8580 nameCol = rec.indexOf("my_name");
8581 if (nameCol>=0)
8582 {
8583 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8584 if ((aux.length())>0)
8585 {
8586 ADIFqso.append("<MY_NAME:" + QString::number(aux.length()) + ">" + aux + " ");
8587 }
8588 }
8589 nameCol = rec.indexOf("name");
8590 if (nameCol>=0)
8591 {
8592 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8593 if ((aux.length())>0)
8594 {
8595 ADIFqso.append("<NAME:" + QString::number(aux.length()) + ">" + aux + " ");
8596 }
8597 }
8598 nameCol = rec.indexOf("operator");
8599 if (nameCol>=0)
8600 {
8601 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8602 if (util->isValidCall(aux))
8603 {
8604 ADIFqso.append("<OPERATOR:" + QString::number(aux.length()) + ">" + aux + " ");
8605 }
8606 }
8607 nameCol = rec.indexOf("owner_callsign");
8608 if (nameCol>=0)
8609 {
8610 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8611 if (util->isValidCall(aux))
8612 {
8613 ADIFqso.append("<OWNER_CALLSIGN:" + QString::number(aux.length()) + ">" + aux + " ");
8614 }
8615 }
8616 nameCol = rec.indexOf("my_postal_code");
8617 if (nameCol>=0)
8618 {
8619 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8620 if ((aux.length())>0)
8621 {
8622 ADIFqso.append("<MY_POSTAL_CODE:" + QString::number(aux.length()) + ">" + aux + " ");
8623 }
8624 }
8625 nameCol = rec.indexOf("my_rig");
8626 if (nameCol>=0)
8627 {
8628 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8629 if ((aux.length())>0)
8630 {
8631 ADIFqso.append("<MY_RIG:" + QString::number(aux.length()) + ">" + aux + " ");
8632 }
8633 }
8634 nameCol = rec.indexOf("my_sig");
8635 if (nameCol>=0)
8636 {
8637 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8638 if ((aux.length())>0)
8639 {
8640 ADIFqso.append("<MY_SIG:" + QString::number(aux.length()) + ">" + aux + " ");
8641 }
8642 }
8643 nameCol = rec.indexOf("my_sota_ref");
8644 if (nameCol>=0)
8645 {
8646 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8647 if ((aux.length())>0)
8648 {
8649 ADIFqso.append("<MY_SOTA_REF:" + QString::number(aux.length()) + ">" + aux + " ");
8650 }
8651 }
8652 nameCol = rec.indexOf("my_postal_code");
8653 if (nameCol>=0)
8654 {
8655 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8656 if ((aux.length())>0)
8657 {
8658 ADIFqso.append("<MY_POSTAL_CODE:" + QString::number(aux.length()) + ">" + aux + " ");
8659 }
8660 }
8661 nameCol = rec.indexOf("my_state");
8662 if (nameCol>=0)
8663 {
8664 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8665 if ((aux.length())>0)
8666 {
8667 ADIFqso.append("<MY_STATE:" + QString::number(aux.length()) + ">" + aux + " ");
8668 }
8669 }
8670 nameCol = rec.indexOf("my_street");
8671 if (nameCol>=0)
8672 {
8673 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8674 if ((aux.length())>0)
8675 {
8676 ADIFqso.append("<MY_STREET:" + QString::number(aux.length()) + ">" + aux + " ");
8677 }
8678 }
8679 nameCol = rec.indexOf("notes");
8680 if (nameCol>=0)
8681 {
8682 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8683 if ((aux.length())>0)
8684 {
8685 aux.replace("\n", "---");
8686 ADIFqso.append("<NOTES:" + QString::number(aux.length()) + ">" + aux + " ");
8687 }
8688 }
8689 nameCol = rec.indexOf("nr_bursts");
8690 if (nameCol>=0)
8691 {
8692 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8693 if ((aux.length())>0)
8694 {
8695 ADIFqso.append("<NR_BURSTS:" + QString::number(aux.length()) + ">" + aux + " ");
8696 }
8697 }
8698 nameCol = rec.indexOf("nr_pings");
8699 if (nameCol>=0)
8700 {
8701 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8702 if ((aux.length())>0)
8703 {
8704 ADIFqso.append("<NR_PINGS:" + QString::number(aux.length()) + ">" + aux + " ");
8705 }
8706 }
8707 nameCol = rec.indexOf("pfx");
8708 if (nameCol>=0)
8709 {
8710 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8711 if ((aux.length())>0)
8712 {
8713 ADIFqso.append("<PFX:" + QString::number(aux.length()) + ">" + aux + " ");
8714 }
8715 }
8716 nameCol = rec.indexOf("precedence");
8717 if (nameCol>=0)
8718 {
8719 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8720 if ((aux.length())>0)
8721 {
8722 ADIFqso.append("<PRECEDENCE:" + QString::number(aux.length()) + ">" + aux + " ");
8723 }
8724 }
8725 nameCol = rec.indexOf("public_key");
8726 if (nameCol>=0)
8727 {
8728 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8729 if ((aux.length())>0){
8730 ADIFqso.append("<PUBLIC_KEY:" + QString::number(aux.length()) + ">" + aux + " ");
8731 }
8732 }
8733 nameCol = rec.indexOf("qslmsg");
8734 if (nameCol>=0)
8735 {
8736 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8737 if ((aux.length())>0){
8738 ADIFqso.append("<QSLMSG:" + QString::number(aux.length()) + ">" + aux + " ");
8739 }
8740 }
8741 nameCol = rec.indexOf("qslrdate");
8742 if (nameCol>=0)
8743 {
8744 aux = (query.value(nameCol)).toString();
8745 date = util->getDateFromSQliteString(aux);
8746 if (date.isValid())
8747 {
8748 aux = util->getADIFDateFromQDate(date);
8749 ADIFqso.append("<QSLRDATE:" + QString::number(aux.length()) + ">" + aux + " ");
8750 }
8751 }
8752 nameCol = rec.indexOf("qslsdate");
8753 if (nameCol>=0)
8754 {
8755 aux = (query.value(nameCol)).toString();
8756 date = util->getDateFromSQliteString(aux);
8757 if (date.isValid())
8758 {
8759 aux = util->getADIFDateFromQDate(date);
8760 ADIFqso.append("<QSLSDATE:" + QString::number(aux.length()) + ">" + aux + " ");
8761 }
8762 }
8763 nameCol = rec.indexOf("qsl_rcvd");
8764 if (nameCol>=0)
8765 {
8766 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8767 if (((aux.length())==1) && (aux!="N") )
8768 {
8769 ADIFqso.append("<QSL_RCVD:" + QString::number(aux.length()) + ">" + aux + " ");
8770
8771 nameCol = rec.indexOf("qsl_rcvd_via");
8772 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8773 if ((aux.length())==1)
8774 {
8775 ADIFqso.append("<QSL_RCVD_VIA:" + QString::number(aux.length()) + ">" + aux + " ");
8776 }
8777 }
8778 }
8779 nameCol = rec.indexOf("qsl_sent");
8780 if (nameCol>=0)
8781 {
8782 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8783 if (((aux.length())==1) && (aux!="N") )
8784 {
8785 ADIFqso.append("<QSL_SENT:" + QString::number(aux.length()) + ">" + aux + " ");
8786 nameCol = rec.indexOf("qsl_sent_via");
8787 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8788 if ((aux.length())==1)
8789 {
8790 ADIFqso.append("<QSL_SENT_VIA:" + QString::number(aux.length()) + ">" + aux + " ");
8791 }
8792 }
8793 }
8794 nameCol = rec.indexOf("qsl_via");
8795 if (nameCol>=0)
8796 {
8797 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8798 if ((aux.length())>0){
8799 ADIFqso.append("<QSL_VIA:" + QString::number(aux.length()) + ">" + aux + " ");
8800 }
8801 }
8802 nameCol = rec.indexOf("qso_complete");
8803 if (nameCol>=0)
8804 {
8805 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8806 if ((aux.length())>0)
8807 {
8808 ADIFqso.append("<QSO_COMPLETE:" + QString::number(aux.length()) + ">" + aux + " ");
8809 }
8810 }
8811 nameCol = rec.indexOf("qso_random");
8812 if (nameCol>=0)
8813 {
8814 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8815 if ((aux.length())>0)
8816 {
8817 ADIFqso.append("<QSO_RANDOM:" + QString::number(aux.length()) + ">" + aux + " ");
8818 }
8819 }
8820 nameCol = rec.indexOf("qth");
8821 if (nameCol>=0)
8822 {
8823 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8824 if ((aux.length())>0){
8825 ADIFqso.append("<QTH:" + QString::number(aux.length()) + ">" + aux + " ");
8826 }
8827 }
8828 nameCol = rec.indexOf("rst_sent");
8829 if (nameCol>=0)
8830 {
8831 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8832 if ((aux.length())>0){
8833 ADIFqso.append("<RST_SENT:" + QString::number(aux.length()) + ">" + aux + " ");
8834 }
8835 }
8836 nameCol = rec.indexOf("rst_rcvd");
8837 if (nameCol>=0)
8838 {
8839 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8840 if ((aux.length())>0){
8841 ADIFqso.append("<RST_RCVD:" + QString::number(aux.length()) + ">" + aux + " ");
8842 }
8843 }
8844 nameCol = rec.indexOf("region");
8845 if (nameCol>=0)
8846 {
8847 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8848 if ((aux.length())>0){
8849 ADIFqso.append("<REGION:" + QString::number(aux.length()) + ">" + aux + " ");
8850 }
8851 }
8852 nameCol = rec.indexOf("rig");
8853 if (nameCol>=0)
8854 {
8855 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8856 if ((aux.length())>0){
8857 ADIFqso.append("<RIG:" + QString::number(aux.length()) + ">" + aux + " ");
8858 }
8859 }
8860 nameCol = rec.indexOf("rx_pwr");
8861 if (nameCol>=0)
8862 {
8863 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8864 if (((aux.length())>0) && (aux.toDouble()>0) )
8865 {
8866 ADIFqso.append("<RX_PWR:" + QString::number(aux.length()) + ">" + aux + " ");
8867 }
8868 }
8869 nameCol = rec.indexOf("tx_pwr");
8870 if (nameCol>=0)
8871 {
8872 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8873 if ( ((aux.length())>0) && (aux.toDouble()>0))
8874 {
8875 ADIFqso.append("<TX_PWR:" + QString::number(aux.length()) + ">" + aux + " ");
8876 }
8877 }
8878 nameCol = rec.indexOf("sat_mode");
8879 if (nameCol>=0)
8880 {
8881 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8882 if ((aux.length())>0)
8883 {
8884 ADIFqso.append("<SAT_MODE:" + QString::number(aux.length()) + ">" + aux + " ");
8885 }
8886 }
8887 nameCol = rec.indexOf("sfi");
8888 if (nameCol>=0)
8889 {
8890 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8891 if ((aux.length())>0){
8892 ADIFqso.append("<SFI:" + QString::number(aux.length()) + ">" + aux + " ");
8893 }
8894 }
8895 nameCol = rec.indexOf("sig");
8896 if (nameCol>=0)
8897 {
8898 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8899 if ((aux.length())>0){
8900 ADIFqso.append("<SIG:" + QString::number(aux.length()) + ">" + aux + " ");
8901 }
8902 }
8903 nameCol = rec.indexOf("sig_info");
8904 if (nameCol>=0)
8905 {
8906 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8907 if ((aux.length())>0){
8908 ADIFqso.append("<SIG_INFO:" + QString::number(aux.length()) + ">" + aux + " ");
8909 }
8910 }
8911 nameCol = rec.indexOf("silent_key");
8912 if (nameCol>=0)
8913 {
8914 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8915 if ((aux.length())>0){
8916 ADIFqso.append("<SILENT_KEY:" + QString::number(aux.length()) + ">" + aux + " ");
8917 }
8918 }
8919 nameCol = rec.indexOf("skcc");
8920 if (nameCol>=0)
8921 {
8922 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8923 if ((aux.length())>0){
8924 ADIFqso.append("<SKCC:" + QString::number(aux.length()) + ">" + aux + " ");
8925 }
8926 }
8927 nameCol = rec.indexOf("sota_ref");
8928 if (nameCol>=0)
8929 {
8930 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8931 if ((aux.length())>0){
8932 ADIFqso.append("<SOTA_REF:" + QString::number(aux.length()) + ">" + aux + " ");
8933 }
8934 }
8935 nameCol = rec.indexOf("state");
8936 if (nameCol>=0)
8937 {
8938 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8939 if ((aux.length())>0){
8940 ADIFqso.append("<STATE:" + QString::number(aux.length()) + ">" + aux + " ");
8941 }
8942 }
8943 nameCol = rec.indexOf("swl");
8944 if (nameCol>=0)
8945 {
8946 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8947 if ((aux.length())>0){
8948 ADIFqso.append("<SWL:" + QString::number(aux.length()) + ">" + aux + " ");
8949 }
8950 }
8951 nameCol = rec.indexOf("ten_ten");
8952 if (nameCol>=0)
8953 {
8954 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8955 if ((aux.length())>0){
8956 ADIFqso.append("<TEN_TEN:" + QString::number(aux.length()) + ">" + aux + " ");
8957 }
8958 }
8959 nameCol = rec.indexOf("ten_ten");
8960 if (nameCol>=0)
8961 {
8962 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8963 if ((aux.length())>0){
8964 ADIFqso.append("<TEN_TEN:" + QString::number(aux.length()) + ">" + aux + " ");
8965 }
8966 }
8967 nameCol = rec.indexOf("uksmg");
8968 if (nameCol>=0)
8969 {
8970 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8971 if ((aux.length())>0){
8972 ADIFqso.append("<UKSMG:" + QString::number(aux.length()) + ">" + aux + " ");
8973 }
8974 }
8975 nameCol = rec.indexOf("ve_prov");
8976 if (nameCol>=0)
8977 {
8978 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8979 if ((aux.length())>0){
8980 ADIFqso.append("<VE_PROV:" + QString::number(aux.length()) + ">" + aux + " ");
8981 }
8982 }
8983 nameCol = rec.indexOf("my_usaca_counties");
8984 if (nameCol>=0)
8985 {
8986 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8987 if ((aux.length())>0){
8988 ADIFqso.append("<MY_USACA_COUNTIES:" + QString::number(aux.length()) + ">" + aux + " ");
8989 }
8990 }
8991 nameCol = rec.indexOf("usaca_counties");
8992 if (nameCol>=0)
8993 {
8994 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
8995 if ((aux.length())>0){
8996 ADIFqso.append("<USACA_COUNTIES:" + QString::number(aux.length()) + ">" + aux + " ");
8997 }
8998 }
8999 nameCol = rec.indexOf("vucc_grids");
9000 if (nameCol>=0)
9001 {
9002 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
9003 if ((aux.length())>0){
9004 ADIFqso.append("<VUCC_GRIDS:" + QString::number(aux.length()) + ">" + aux + " ");
9005 }
9006 }
9007 nameCol = rec.indexOf("my_vucc_grids");
9008 if (nameCol>=0)
9009 {
9010 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
9011 if ((aux.length())>0){
9012 ADIFqso.append("<MY_VUCC_GRIDS:" + QString::number(aux.length()) + ">" + aux + " ");
9013 }
9014 }
9015 nameCol = rec.indexOf("web");
9016 if (nameCol>=0)
9017 {
9018 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
9019 if ((aux.length())>0){
9020 ADIFqso.append("<WEB:" + QString::number(aux.length()) + ">" + aux + " ");
9021 }
9022 }
9023
9024 nameCol = rec.indexOf("lognumber");
9025 if (nameCol>=0)
9026 {
9027 aux = (query.value(nameCol)).toString(); aux = util->checkAndFixASCIIinADIF(aux);
9028 if ((aux.length())>0)
9029 {
9030 ADIFqso.append("<APP_KLOG_LOGN:" + QString::number(aux.length()) + ">" + aux + " ");
9031 }
9032 }
9033 ADIFqso.append("<EOR>");
9034 return ADIFqso;
9035 }
9036
showInvalidCallMessage(const QString & _call)9037 bool DataProxy_SQLite::showInvalidCallMessage(const QString &_call){
9038 QMessageBox msgBox;
9039 msgBox.setIcon(QMessageBox::Warning);
9040 msgBox.setWindowTitle(tr("KLog - Invalid call detected"));
9041
9042 QString aux = _call;
9043
9044 if (aux.length()<1)
9045 {
9046 aux = QString(tr("An empty callsign has been detected. Do you want to export this QSO anyway (click on Yes) or remove the field from the exported ADIF record?"));
9047 }
9048 else
9049 {
9050 aux = QString(tr("An invalid callsign has been detected %1. Do you want to export this callsign anyway (click on Yes) or remove the call from the exported log?").arg(aux));
9051 }
9052
9053 msgBox.setText(aux);
9054 msgBox.setInformativeText(tr("Exporting wrong calls may create problems in the applications you are potentially importing this logfile to. It may, however, be a good callsign that is wrongly identified by KLog as not valid."));
9055 msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
9056 msgBox.setDefaultButton(QMessageBox::No);
9057 int ret = msgBox.exec();
9058 switch (ret) {
9059 case QMessageBox::Yes:
9060 // Yes was clicked
9061 return true;
9062 case QMessageBox::No:
9063 // No Save was clicked
9064 return false;
9065 default:
9066 // should never be reached
9067 return false;
9068 }
9069 }
9070
getSatDXCCStats(int _log)9071 QList<QSO*> DataProxy_SQLite::getSatDXCCStats(int _log)
9072 {
9073 //qDebug() << Q_FUNC_INFO << ": log = " << QString::number(_log) << QT_ENDL;
9074
9075 QList<QSO*> _qsos;
9076 QString stringQuery;
9077 if (doesThisLogExist(_log))
9078 {
9079 //qDebug() << Q_FUNC_INFO << ": log exists " << QT_ENDL;
9080
9081 stringQuery = QString("SELECT call, qso_date, band.name, mode.name, entity.name, log.dxcc, lotw_qsl_rcvd, qsl_rcvd, sat_name from log, entity, band, mode where log.dxcc <>'' AND sat_name <>'' AND log.dxcc=entity.dxcc AND log.bandid=band.id AND log.modeid=mode.id AND lognumber='%1' ORDER BY entity.name").arg(_log);
9082 }
9083 else
9084 {
9085 //qDebug() << Q_FUNC_INFO << ": log does not exist " << QT_ENDL;
9086 stringQuery = QString("SELECT call, qso_date, band.name, mode.name, entity.name, log.dxcc, lotw_qsl_rcvd, qsl_rcvd, sat_name from log, entity, band, mode where log.dxcc <>'' AND sat_name <>'' AND log.dxcc=entity.dxcc AND log.bandid=band.id AND log.modeid=mode.id ORDER BY entity.name");
9087 }
9088
9089 QSqlQuery query;
9090 bool sqlOK = query.exec(stringQuery);
9091 if (!sqlOK)
9092 {
9093 //qDebug() << Q_FUNC_INFO << ": Query NOK" << QT_ENDL;
9094 //qDebug() << Q_FUNC_INFO << ": " << query.lastError().databaseText() << QT_ENDL;
9095 //qDebug() << Q_FUNC_INFO << ": " << query.lastQuery() << QT_ENDL;
9096 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
9097 query.finish();
9098 return _qsos;
9099 }
9100 else
9101 {
9102 while(query.next())
9103 {
9104 if (query.isValid())
9105 {
9106 int nameCol;
9107 QSO *_qso = new QSO;
9108 _qso->clear();
9109
9110 QSqlRecord rec = query.record();
9111 nameCol = rec.indexOf("call");
9112 _qso->setCall((query.value(nameCol)).toString());
9113
9114 nameCol = rec.indexOf("qso_date");
9115
9116 _qso->setDateTimeOn (util->getDateTimeFromSQLiteString((query.value(nameCol)).toString()));
9117
9118 nameCol = rec.indexOf("bandid");
9119 //qDebug() << "DataProxy_SQLite::getGridStats: bandid" << QString::number((query.value(nameCol)).toInt()) << QT_ENDL;
9120 _qso->setBand(query.value(2).toString());
9121
9122 //nameCol = rec.indexOf("modeid");
9123 //qDebug() << Q_FUNC_INFO << ": modeid" << QString::number((query.value(nameCol)).toInt()) << QT_ENDL;
9124 _qso->setMode(query.value(3).toString());
9125
9126 nameCol = rec.indexOf("sat_name");
9127 _qso->setSatName((query.value(nameCol)).toString());
9128
9129 nameCol = rec.indexOf("log.dxcc");
9130 _qso->setDXCC((query.value(nameCol)).toInt());
9131
9132 nameCol = rec.indexOf("lotw_qsl_rcvd");
9133 _qso->setLoTWQSL_RCVD((query.value(nameCol)).toString());
9134
9135 nameCol = rec.indexOf("qsl_rcvd");
9136 _qso->setQSL_RCVD((query.value(nameCol)).toString());
9137
9138 _qsos.append(_qso);
9139 }
9140 else
9141 {
9142 _qsos.clear();
9143 query.finish();
9144 return _qsos;
9145 }
9146 }
9147 }
9148 //qDebug() << Q_FUNC_INFO << "- END" << QT_ENDL;
9149 return _qsos;
9150 }
9151
getGridStats(int _log)9152 QList<QSO *> DataProxy_SQLite::getGridStats(int _log)
9153 {
9154 //qDebug() << Q_FUNC_INFO << ": log = " << QString::number(_log) << QT_ENDL;
9155 QList<QSO*> _qsos;
9156 QString stringQuery;
9157 if (doesThisLogExist(_log))
9158 {
9159 //qDebug() << Q_FUNC_INFO << ":: log exists " << QT_ENDL;
9160 stringQuery = QString("SELECT call, substr(gridsquare, 1, 4), bandid, modeid, lotw_qsl_rcvd, qsl_rcvd from log where gridsquare <>'' AND lognumber='%1'").arg(_log);
9161 }
9162 else
9163 {
9164 //qDebug() << Q_FUNC_INFO << ": log does not exist " << QT_ENDL;
9165 stringQuery = QString("SELECT call, substr(gridsquare, 1, 4), bandid, modeid, lotw_qsl_rcvd, qsl_rcvd from log where gridsquare <>''");
9166 }
9167
9168 QSqlQuery query;
9169 bool sqlOK = query.exec(stringQuery);
9170 if (!sqlOK)
9171 {
9172 //qDebug() << Q_FUNC_INFO << ": Query NOK" << QT_ENDL;
9173 //qDebug() << Q_FUNC_INFO << ": " << query.lastError().databaseText() << QT_ENDL;
9174 //qDebug() << Q_FUNC_INFO << ": " << query.lastQuery() << QT_ENDL;
9175 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
9176 query.finish();
9177 return _qsos;
9178 }
9179 else
9180 {
9181 while(query.next())
9182 {
9183 if (query.isValid())
9184 {// call, substr(gridsquare, 1, 4), bandid, modeid, lotw_qsl_rcvd, qsl_rcvd
9185 int nameCol;
9186 QSO *_qso = new QSO;
9187 _qso->clear();
9188
9189 QSqlRecord rec = query.record();
9190 nameCol = rec.indexOf("call");
9191 _qso->setCall((query.value(nameCol)).toString());
9192
9193 nameCol = rec.indexOf("substr(gridsquare, 1, 4)");
9194 _qso->setGridSquare((query.value(nameCol)).toString());
9195
9196 nameCol = rec.indexOf("bandid");
9197 //qDebug() << Q_FUNC_INFO << ": bandid" << QString::number((query.value(nameCol)).toInt()) << QT_ENDL;
9198 _qso->setBand(getNameFromBandId((query.value(nameCol)).toInt()));
9199
9200 nameCol = rec.indexOf("modeid");
9201 //qDebug() << Q_FUNC_INFO << ": modeid" << QString::number((query.value(nameCol)).toInt()) << QT_ENDL;
9202 _qso->setMode(getNameFromModeId((query.value(nameCol)).toInt()));
9203
9204 nameCol = rec.indexOf("lotw_qsl_rcvd");
9205 _qso->setLoTWQSL_RCVD((query.value(nameCol)).toString());
9206
9207 nameCol = rec.indexOf("qsl_rcvd");
9208 _qso->setQSL_RCVD((query.value(nameCol)).toString());
9209
9210 _qsos.append(_qso);
9211 //qDebug() << Q_FUNC_INFO << ": call: " << _call << QT_ENDL;
9212 //qDebug() << Q_FUNC_INFO << ": band: " << _band << QT_ENDL;
9213 //qDebug() << Q_FUNC_INFO << ": mode: " << _mode << QT_ENDL;
9214 }
9215 else
9216 {
9217 _qsos.clear();
9218 query.finish();
9219 return _qsos;
9220 }
9221 }
9222 //qDebug() << "DataProxy_SQLite::addQSO: Query OK" << QT_ENDL;
9223 }
9224 //qDebug() << "DataProxy_SQLite::getGridStats - END" << QT_ENDL;
9225 return _qsos;
9226 }
9227
getSatGridStats(int _log)9228 QList<QSO *> DataProxy_SQLite::getSatGridStats(int _log)
9229 {
9230 //qDebug() << "DataProxy_SQLite::getGridStats: log = " << QString::number(_log) << QT_ENDL;
9231
9232 QList<QSO*> _qsos;
9233 QString stringQuery;
9234 if (doesThisLogExist(_log))
9235 {
9236 //qDebug() << "DataProxy_SQLite::getGridStats: log exists " << QT_ENDL;
9237 stringQuery = QString("SELECT call, qso_date, bandid, modeid, substr(gridsquare, 1, 4), lotw_qsl_rcvd, qsl_rcvd, sat_name from log where gridsquare <>'' AND sat_name <>'' AND lognumber='%1'").arg(_log);
9238 }
9239 else
9240 {
9241 //qDebug() << "DataProxy_SQLite::getGridStats: log does not exist " << QT_ENDL;
9242 stringQuery = QString("SELECT call, qso_date, bandid, modeid, substr(gridsquare, 1, 4), lotw_qsl_rcvd, qsl_rcvd, sat_name from log where gridsquare <>'' AND sat_name <>''");
9243 }
9244
9245
9246 QSqlQuery query;
9247 bool sqlOK = query.exec(stringQuery);
9248 if (!sqlOK)
9249 {
9250 //qDebug() << "DataProxy_SQLite::getGridStats: Query NOK" << QT_ENDL;
9251 //qDebug() << "DataProxy_SQLite::getGridStats: " << query.lastError().databaseText() << QT_ENDL;
9252 //qDebug() << "DataProxy_SQLite::getGridStats: " << query.lastQuery() << QT_ENDL;
9253 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
9254 query.finish();
9255 return _qsos;
9256 }
9257 else
9258 {
9259 while(query.next())
9260 {
9261 if (query.isValid())
9262 {
9263 int nameCol;
9264 QSO *_qso = new QSO;
9265 _qso->clear();
9266
9267 QSqlRecord rec = query.record();
9268 nameCol = rec.indexOf("call");
9269 _qso->setCall((query.value(nameCol)).toString());
9270
9271 nameCol = rec.indexOf("qso_date");
9272 _qso->setDateTimeOn (util->getDateTimeFromSQLiteString((query.value(nameCol)).toString()));
9273
9274 nameCol = rec.indexOf("bandid");
9275 //qDebug() << "DataProxy_SQLite::getGridStats: bandid" << QString::number((query.value(nameCol)).toInt()) << QT_ENDL;
9276 _qso->setBand(getNameFromBandId((query.value(nameCol)).toInt()));
9277
9278 nameCol = rec.indexOf("modeid");
9279 //qDebug() << "DataProxy_SQLite::getGridStats: modeid" << QString::number((query.value(nameCol)).toInt()) << QT_ENDL;
9280 _qso->setMode(getNameFromModeId((query.value(nameCol)).toInt()));
9281
9282 nameCol = rec.indexOf("sat_name");
9283 _qso->setSatName((query.value(nameCol)).toString());
9284
9285 nameCol = rec.indexOf("substr(gridsquare, 1, 4)");
9286 _qso->setGridSquare((query.value(nameCol)).toString());
9287
9288 nameCol = rec.indexOf("lotw_qsl_rcvd");
9289 _qso->setLoTWQSL_RCVD((query.value(nameCol)).toString());
9290
9291 nameCol = rec.indexOf("qsl_rcvd");
9292 _qso->setQSL_RCVD((query.value(nameCol)).toString());
9293
9294 _qsos.append(_qso);
9295 //qDebug() << "DataProxy_SQLite::getGridStats: call: " << _call << QT_ENDL;
9296 //qDebug() << "DataProxy_SQLite::getGridStats: band: " << _band << QT_ENDL;
9297 //qDebug() << "DataProxy_SQLite::getGridStats: mode: " << _mode << QT_ENDL;
9298 }
9299 else
9300 {
9301 _qsos.clear();
9302 query.finish();
9303 return _qsos;
9304 }
9305 }
9306 //qDebug() << "DataProxy_SQLite::addQSO: Query OK" << QT_ENDL;
9307 }
9308 //qDebug() << "DataProxy_SQLite::getGridStats - END" << QT_ENDL;
9309 return _qsos;
9310 }
9311
getFieldInBand(ValidFieldsForStats _field,const QString & _band,bool confirmedOnly,QString _mode,int _log)9312 int DataProxy_SQLite::getFieldInBand(ValidFieldsForStats _field, const QString &_band, bool confirmedOnly, QString _mode, int _log)
9313 {
9314 //qDebug() << Q_FUNC_INFO << ": " << _band << "/" << _mode << "/" << QString::number(_log) ;
9315
9316 if ((!doesThisLogExist(_log)) && !(_log == -1))
9317 {
9318 //qDebug() << Q_FUNC_INFO << ": Exit no log";
9319 return 0;
9320 }
9321 int bandId = getIdFromBandName (_band);
9322 QString bandString = QString();
9323
9324 if (!(_band.toUpper () == "ALL"))
9325 {
9326 if (bandId<1)
9327 {
9328 //qDebug() << Q_FUNC_INFO << ": Exit band";
9329 return 0;
9330 }
9331 bandString = QString(" AND bandid='%1'").arg(bandId);
9332 }
9333
9334 QString field = QString();
9335 QString specialField = QString();
9336
9337 switch (_field)
9338 {
9339 case DXCC:
9340 field = "dxcc";
9341 specialField = field + " <>'' AND dxcc<1000 AND dxcc>0";
9342
9343 break;
9344 case GridSquare:
9345 field = "gridsquare";
9346 specialField = field + " <>''";
9347
9348 break;
9349 }
9350
9351 QString stringQuery;
9352 QSqlQuery query;
9353 QString modeString = QString();
9354
9355
9356 int modeId = getIdFromModeName(_mode);
9357 if (_mode.toUpper() == "ALL")
9358 {
9359 //qDebug() << Q_FUNC_INFO << ": ALL Modes" ;
9360 }
9361 else if (util->isValidModeId(modeId))
9362 {
9363 //qDebug() << Q_FUNC_INFO << ": Valid Mode" ;
9364 modeString = QString(" AND modeid='%1' ").arg(modeId);
9365 }
9366 else
9367 {
9368 //qDebug() << Q_FUNC_INFO << ": Mode not valid!" ;
9369 return 0;
9370 }
9371
9372 QString logString = QString();
9373 if (!(_log == -1))
9374 {
9375 logString = QString(" AND lognumber='%1'").arg(_log);
9376 }
9377 QString confirmedString = QString();
9378 if (confirmedOnly)
9379 {
9380 confirmedString = QString(" AND (lotw_qsl_rcvd='Y' OR qsl_rcvd='Y')");
9381 }
9382
9383 stringQuery = QString("SELECT COUNT (DISTINCT %1) from log WHERE %2 %3 %4 %5 %6").arg(field).arg(specialField).arg(modeString).arg(bandString).arg(confirmedString).arg(logString);
9384
9385 //qDebug() << Q_FUNC_INFO << " : Query: " << stringQuery << QT_ENDL;
9386
9387 bool sqlOK = query.exec(stringQuery);
9388
9389 if (!sqlOK)
9390 {
9391 //qDebug() << Q_FUNC_INFO << " : Query NOK" << QT_ENDL;
9392 //qDebug() << Q_FUNC_INFO << " : " << query.lastError().databaseText() << QT_ENDL;
9393 //qDebug() << Q_FUNC_INFO << " : " << query.lastQuery() << QT_ENDL;
9394 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
9395 query.finish();
9396 return 0;
9397 }
9398 else
9399 {
9400 query.next();
9401 if (query.isValid())
9402 {
9403 //qDebug() << Q_FUNC_INFO << " : " << QString::number((query.value(0)).toInt()) << QT_ENDL;
9404 int v = (query.value(0)).toInt();
9405 query.finish();
9406 return v;
9407 }
9408 }
9409 query.finish();
9410 return 0;
9411 }
9412
addQSO(QSO & _qso)9413 int DataProxy_SQLite::addQSO(QSO &_qso)
9414 {
9415 //qDebug() << "DataProxy_SQLite::addQSO: " << _qso.getCall() << QT_ENDL;
9416 qso = &_qso;
9417 //qDebug() << "DataProxy_SQLite::addQSO: " << qso->getCall() << QT_ENDL;
9418 //qso = _qso;
9419
9420 bool havePropMode = false;
9421 bool haveRSTRX = false;
9422 bool haveRSTTX = false;
9423 QString stringQuery;
9424 QString stringFields, stringData;
9425 stringFields.clear();
9426 stringData.clear();
9427
9428
9429 //qDebug() << "DataProxy_SQLite::addQSO: QDateTime: " << util->getDateTimeSQLiteStringFromDateTime(qso->getDateTimeOn()) << QT_ENDL;
9430 if (qso->getDateTimeOn().isValid())
9431 {
9432 stringFields.append("qso_date, ");
9433 stringData = stringData + "'" + util->getDateTimeSQLiteStringFromDateTime(qso->getDateTimeOn()) + "', ";
9434 }
9435 else
9436 {
9437 //qDebug() << "DataProxy_SQLite::addQSO: END-1" << QT_ENDL;
9438 return -1;
9439 }
9440
9441 if (util->isValidCall(qso->getCall()))
9442 {
9443 stringFields.append("call, ");
9444 stringData = stringData + "'" + qso->getCall() + "', ";
9445 }
9446 else
9447 {
9448 //qDebug() << "DataProxy_SQLite::addQSO: END-2" << QT_ENDL;
9449 return -2;
9450 }
9451 //qDebug() << "DataProxy_SQLite::addQSO: Band: " << qso->getBand() << QT_ENDL;
9452 if (util->isValidBandId(getIdFromBandName(qso->getBand())))
9453 {
9454 stringFields.append("bandid, ");
9455 stringData = stringData + "'" + QString::number(getIdFromBandName(qso->getBand())) + "', ";
9456 }
9457 else
9458 {
9459 //qDebug() << "DataProxy_SQLite::addQSO: END-3" << QT_ENDL;
9460 return -3;
9461 }
9462 if (util->isValidModeId(getIdFromModeName(qso->getMode())))
9463 {
9464 stringFields.append("modeid, ");
9465 stringData = stringData + "'" + QString::number(getIdFromModeName(qso->getMode())) + "', ";
9466 }
9467 else
9468 {
9469 //qDebug() << "DataProxy_SQLite::addQSO: END-4" << QT_ENDL;
9470 return -4;
9471 }
9472 if (util->isValidBandId(getIdFromBandName(qso->getBandRX())))
9473 {
9474 stringFields.append("band_rx, ");
9475 stringData = stringData + "'" + QString::number(getIdFromBandName(qso->getBandRX())) + "', ";
9476 }
9477 if (qso->getFreqTX () > 0)
9478 {
9479 stringFields.append("freq, ");
9480 stringData = stringData + "'" + QString::number(qso->getFreqTX()) + "', ";
9481 }
9482 if (qso->getFreqRX() > 0)
9483 {
9484 stringFields.append("freq_rx, ");
9485 stringData = stringData + "'" + QString::number(qso->getFreqRX()) + "', ";
9486 }
9487 if (util->isValidCall(qso->getStationCallsign()))
9488 {
9489 stringFields.append("station_callsign, ");
9490 stringData = stringData + "'" + qso->getStationCallsign() + "', ";
9491 }
9492 if (qso->getQSLRDate().isValid())
9493 {
9494 stringFields.append("qslrdate, ");
9495 stringData = stringData + "'" + util->getDateSQLiteStringFromDate(qso->getQSLRDate()) + "', ";
9496 }
9497 //qDebug() << "DataProxy_SQLite::addQSO: getQSL_RCVD: " << qso->getQSL_RCVD() << QT_ENDL;
9498 if (util->isValidQSL_Rcvd(qso->getQSL_RCVD()))
9499 {
9500 //qDebug() << "DataProxy_SQLite::addQSO: getQSL_RCVD: VALID " << QT_ENDL;
9501 stringFields.append("qsl_rcvd, ");
9502 stringData = stringData + "'" + qso->getQSL_RCVD() + "', ";
9503 }
9504 else
9505 {
9506 //qDebug() << "DataProxy_SQLite::addQSO: getQSL_RCVD: NOT valid" << QT_ENDL;
9507 }
9508 //qDebug() << "DataProxy_SQLite::addQSO: LOTW_QSL_RCVD: " << qso->getLoTWQSL_RCVD() << QT_ENDL;
9509 if (util->isValidQSL_Rcvd(qso->getLoTWQSL_RCVD()))
9510 {
9511 //qDebug() << "DataProxy_SQLite::addQSO: LOTW_QSL_RCVD - VALID" << QT_ENDL;
9512 stringFields.append("lotw_qsl_rcvd, ");
9513 stringData = stringData + "'" + qso->getLoTWQSL_RCVD() + "', ";
9514 }
9515 else
9516 {
9517 //qDebug() << "DataProxy_SQLite::addQSO: LOTW_QSL_RCVD - NOT valid" << QT_ENDL;
9518 }
9519 //qDebug() << "DataProxy_SQLite::addQSO: LOTW_QSL_RCVD - END" << QT_ENDL;
9520
9521 if (qso->getLoTWQSLRDate().isValid())
9522 {
9523 stringFields.append("lotw_qslrdate, ");
9524 stringData = stringData + "'" + util->getDateSQLiteStringFromDate(qso->getLoTWQSLRDate()) + "', ";
9525 }
9526
9527 if (util->isValidQSL_Sent (qso->getLoTWQSL_SENT ()))
9528 {
9529 stringFields.append("lotw_qsl_sent, ");
9530 stringData = stringData + "'" + qso->getLoTWQSL_SENT ()+ "', ";
9531 }
9532 if (qso->getLoTWQSLSDate().isValid())
9533 {
9534 stringFields.append("lotw_qslsdate, ");
9535 stringData = stringData + "'" + util->getDateSQLiteStringFromDate(qso->getLoTWQSLSDate()) + "', ";
9536 }
9537
9538 if ( getSatelliteName(qso->getSatName()).length()>0 )
9539 {
9540 stringFields.append("sat_name, ");
9541 stringData = stringData + "'" + qso->getSatName() + "', ";
9542 if (!havePropMode)
9543 {
9544 havePropMode = true;
9545 stringFields.append("prop_mode, ");
9546 stringData = stringData + "'SAT', ";
9547 }
9548 }
9549 if ( !havePropMode && (qso->getPropMode().length()>0) )
9550 {
9551 stringFields.append("prop_mode, ");
9552 stringData = stringData + "'" + qso->getPropMode() + "', ";
9553 havePropMode = true;
9554 }
9555 if (!haveRSTRX)
9556 {
9557 stringFields.append("rst_rcvd, ");
9558 stringData = stringData + "'" + util->getDefaultRST(qso->getMode())+ "', ";
9559 }
9560 if (!haveRSTTX)
9561 {
9562 stringFields.append("rst_sent, ");
9563 stringData = stringData + "'" + util->getDefaultRST(qso->getMode())+ "', ";
9564 }
9565
9566 if (qso->getLogId()>0)
9567 {
9568 stringFields.append("lognumber");
9569 stringData = stringData + QString::number(qso->getLogId());
9570 }
9571 else
9572 {
9573 //qDebug() << "DataProxy_SQLite::addQSO: No LogNumber" << QT_ENDL;
9574 return -2;
9575 }
9576
9577 stringQuery = "INSERT INTO log (" + stringFields + ") values (" + stringData +")" ;
9578 QSqlQuery query;
9579 bool sqlOK = query.exec(stringQuery);
9580 if (!sqlOK)
9581 {
9582 //qDebug() << "DataProxy_SQLite::addQSO: Query NOK" << QT_ENDL;
9583 //qDebug() << "DataProxy_SQLite::addQSO: " << query.lastError().databaseText() << QT_ENDL;
9584 //qDebug() << "DataProxy_SQLite::addQSO: " << query.lastQuery() << QT_ENDL;
9585 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
9586 return -1;
9587 }
9588 else
9589 {
9590 //qDebug() << "DataProxy_SQLite::addQSO: Query OK" << QT_ENDL;
9591 }
9592 //qDebug() << "DataProxy_SQLite::addQSO: " << stringQuery << QT_ENDL;
9593 return getLastQSOid();
9594 //return 1;
9595 }
9596
9597