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