1 #include "awards.h"
2 /***************************************************************************
3                           awards.cpp  -  description
4                              -------------------
5     begin                : nov 2011
6     copyright            : (C) 2011 by Jaime Robles
7     email                : jaime@robles.es
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 <QDebug>
28 
Awards(DataProxy_SQLite * dp,const QString & _parentFunction)29 Awards::Awards(DataProxy_SQLite *dp, const QString &_parentFunction)
30 {
31       //qDebug() << "Awards::Awards- from: " << _parentFunction << QT_ENDL;
32     dataProxy = dp;
33     //QSqlDatabase db = QSqlDatabase::database("QSQLITE");
34     world = new World(dataProxy, Q_FUNC_INFO);
35 
36        //qDebug() << "Awards::Awards - Before DXMarathon"  << QT_ENDL;
37     dxMarathon = new DXMarathon(dataProxy);
38        //qDebug() << "Awards::Awards - After DXMarathon"  << QT_ENDL;
39     util = new Utilities();
40     //world->create();
41 /*
42     newOneColor.setNamedColor("#ff0000");
43     neededColor.setNamedColor("#ff8c00");
44     workedColor.setNamedColor("#ffd700");
45     confirmedColor.setNamedColor("#32cd32");
46     defaultColor.setNamedColor("#00bfff");
47 */
48     //"Awards::setColors: " << _newOne << "/" << _needed << "/" << _worked << "/" << _confirmed << "/" << _default << QT_ENDL;
49     //Awards::setColors:  "#ff0000" / "#ff8c00" / "#ffd700" / "#32cd32" / "#00bfff"
50 
51     newOneColor = Qt::black;
52     neededColor = Qt::black;
53     workedColor = Qt::black;
54     confirmedColor = Qt::black;
55     defaultColor = Qt::black;
56 
57     dxccWorked.clear();
58     dxccConfirmed.clear();
59     wazWorked.clear();
60     wazConfirmed.clear();
61     manageModes = false;
62        //qDebug() << "Awards::Awards - END"  << QT_ENDL;
63 }
64 
~Awards()65 Awards::~Awards() {}
66 
setAwardDXCC(const int _qsoId)67 void Awards::setAwardDXCC(const int _qsoId)
68 {
69        //qDebug() << "Awards::setAwardDXCC: _qsoId: " << QString::number(_qsoId) << QT_ENDL;
70     dataProxy->setDXCCAwardStatus(_qsoId);
71 }
72 
setAwardWAZ(const int _qsoId)73 void Awards::setAwardWAZ(const int _qsoId)
74 {
75        //qDebug() << "Awards::setAwardWAZ: _qsoId: " << QString::number(_qsoId) << QT_ENDL;
76     dataProxy->setWAZAwardStatus(_qsoId);
77 }
78 
getQSOofAward(const int _enti,const int _bandid,const int _log,const bool _confirmed)79 QString Awards::getQSOofAward (const int _enti, const int _bandid, const int _log, const bool _confirmed)
80 {// Returns the QRZ that granted that status in the DXCC
81        //qDebug() << "Awards::getQSOofAward: " << QString::number(_enti) << "/" << QString::number(_bandid) << QT_ENDL;
82     QSqlQuery query;
83     QString stringQuery = QString();
84     bool sqlOK = false;
85     QString answer = QString();
86 
87     if (_confirmed)
88     {
89         stringQuery = QString("SELECT call, qso_date from log where dxcc='%1' AND bandid='%2' AND lognumber='%3' AND (qsl_rcvd='Y' OR lotw_qsl_rcvd='Y')").arg(_enti).arg(_bandid).arg(_log);
90     }
91     else
92     {
93        stringQuery = QString("SELECT call, qso_date from log where dxcc='%1' AND bandid='%2' AND lognumber='%3'").arg(_enti).arg(_bandid).arg(_log);
94     }
95 
96 
97     sqlOK = query.exec(stringQuery);
98        //qDebug() << "Awards::getQSOofAward: stringQuery: " << stringQuery << QT_ENDL;
99     if (sqlOK)
100     {
101         query.next();
102         if (query.isValid())
103         {
104             answer = query.value(0).toString() + " / " + query.value(1).toString() ;
105 
106             query.finish();
107                //qDebug() << "Awards::getQSOofAward: answer: " << answer << QT_ENDL;
108             return answer;
109         }
110         else
111         {
112             query.finish();
113                //qDebug() << "Awards::getQSOofAward: 0" << QT_ENDL;
114             return QString();
115         }
116     }
117     else
118     {
119         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
120         query.finish();
121            //qDebug() << "Awards::getQSOofAward: Query error" << QT_ENDL;
122         return QString();
123     }
124 
125 }
126 
getQSOIdofAward(const int _enti,const int _bandid,const int _log,const bool _confirmed)127 int Awards::getQSOIdofAward (const int _enti, const int _bandid, const int _log, const bool _confirmed)
128 {// Returns the QSOid that granted that status in the DXCC
129        //qDebug() << "Awards::getQSOIdofAward: " << QString::number(_enti) << "/" << QString::number(_bandid) << QT_ENDL;
130     QSqlQuery query;
131     QString stringQuery = QString();
132     bool sqlOK = false;
133     int answer = -1;
134 
135     //stringQuery = QString("SELECT qsoid from awarddxcc where dxcc='%1' and band='%2'").arg(_enti).arg(_bandid);
136 
137 
138     if (_confirmed)
139     {
140         stringQuery = QString("SELECT id from log where dxcc='%1' AND bandid='%2' AND lognumber='%3' AND (qsl_rcvd='Y' OR lotw_qsl_rcvd='Y')").arg(_enti).arg(_bandid).arg(_log);
141     }
142     else
143     {
144        stringQuery = QString("SELECT id from log where dxcc='%1' AND bandid='%2' AND lognumber='%3'").arg(_enti).arg(_bandid).arg(_log);
145     }
146 
147     sqlOK = query.exec(stringQuery);
148        //qDebug() << "Awards::getQSOIdofAward: stringQuery: " << stringQuery << QT_ENDL;
149     if (sqlOK)
150     {
151         query.next();
152         if (query.isValid())
153         {
154             answer = query.value(0).toInt();
155                //qDebug() << "Awards::getQSOIdofAward: answer: " << QString::number(answer) << QT_ENDL;
156             query.finish();
157             if (answer>=1)
158             {
159                 return answer;
160             }
161             else
162             {
163                 return -1;
164             }
165 
166         }
167         else
168         {
169             query.finish();
170                //qDebug() << "Awards::getQSOIdofAward: 0" << QT_ENDL;
171             return -2;
172         }
173     }
174     else
175     {
176         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
177         query.finish();
178            //qDebug() << "Awards::getQSOIdofAward: Query error" << QT_ENDL;
179         return -3;
180     }
181 
182 }
183 
getDXCCWorked(const int _logNumber)184 int Awards::getDXCCWorked(const int _logNumber)
185 {
186     //qDebug() << "Awards::getDXCCWorked (logNumber): " << QString::number(_logNumber) << QT_ENDL;
187     QSqlQuery query;
188     QString stringQuery;
189     bool sqlOK;
190 
191     if (dataProxy->doesThisLogExist(_logNumber))
192     {
193         stringQuery = QString("SELECT COUNT (DISTINCT dxcc) FROM log WHERE dxcc>'0' AND dxcc < '1000' AND lognumber='%1'").arg(_logNumber);
194     }
195     else
196     {
197         stringQuery = QString("SELECT COUNT (DISTINCT dxcc) FROM log WHERE dxcc>'0' AND dxcc < '1000' ");
198     }
199 
200 
201     sqlOK = query.exec(stringQuery);
202        //qDebug() << "Awards::getDXCCWorked: stringQuery: " << stringQuery << QT_ENDL;
203     if (sqlOK)
204     {
205         query.next();
206         if (query.isValid())
207         {
208             int v = (query.value(0)).toInt();
209             query.finish();
210                //qDebug() << "Awards::getDXCCWorked: " << QString::number((query.value(0)).toInt()) << QT_ENDL;
211             return v;
212         }
213         else
214         {
215                //qDebug() << "Awards::getDXCCWorked: 0" << QT_ENDL;
216             return 0;
217         }
218     }
219     else
220     {
221         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
222         query.finish();
223            //qDebug() << "Awards::getDXCCWorked: Query error" << QT_ENDL;
224         return 0;
225     }
226 }
227 
getDXCCConfirmed(const int _logNumber)228 int Awards::getDXCCConfirmed(const int _logNumber)
229 {
230      //qDebug() << "Awards::getDXCCConfirmed (logNumber): " << QString::number(_logNumber) << QT_ENDL;
231 
232     return dataProxy->getFieldInBand (DXCC, "ALL", true, "ALL", _logNumber);
233     /*
234     QSqlQuery query;
235     QString stringQuery;
236     bool sqlOK;
237     if (dataProxy->doesThisLogExist(_logNumber))
238     {
239         stringQuery = QString("SELECT COUNT (DISTINCT dxcc) FROM log where (qsl_rcvd='Y' OR lotw_qsl_rcvd='Y') AND dxcc!='' AND dxcc >'0' AND dxcc < '1000' AND lognumber='%1'").arg(_logNumber);
240     }
241     else
242     {
243         stringQuery = QString("SELECT COUNT (DISTINCT dxcc) FROM log where (qsl_rcvd='Y' OR lotw_qsl_rcvd='Y') AND dxcc!='' AND dxcc >'0' AND dxcc < '1000' ");
244     }
245 
246     sqlOK = query.exec(stringQuery);
247      //qDebug() << "Awards::getDXCCWorked: stringQuery: " << stringQuery << QT_ENDL;
248 
249     if (sqlOK)
250     {
251         query.next();
252         if (query.isValid())
253         {
254              //qDebug() << "Awards::getDXCCConfirmed: " << QString::number((query.value(0)).toInt()) << QT_ENDL;
255             int v = (query.value(0)).toInt();
256             query.finish();
257             return v;
258         }
259         else
260         {
261              //qDebug() << "Awards::getDXCCConfirmed: 0" << QT_ENDL;
262             return 0;
263         }
264 
265     }
266     else
267     {
268         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
269         query.finish();
270          //qDebug() << "Awards::getDXCCConfirmed: query error" << QT_ENDL;
271       return 0;
272     }
273 
274     */
275 }
276 
getWAZWorked(const int _logNumber)277 int Awards::getWAZWorked(const int _logNumber)
278 {
279        //qDebug() << "Awards::getWAZWorked (logNumber): " << QString::number(_logNumber) << QT_ENDL;
280     QSqlQuery query;
281     QString stringQuery;
282     if (dataProxy->doesThisLogExist(_logNumber))
283     {
284         stringQuery = QString("SELECT COUNT (cqz) FROM (SELECT DISTINCT cqz FROM log WHERE cqz!='' AND cqz>'0' AND cqz<'41' AND lognumber='%1')").arg(_logNumber);
285     }
286     else
287     {
288         stringQuery = QString("SELECT COUNT (cqz) FROM (SELECT DISTINCT cqz FROM log WHERE cqz!='' AND cqz>'0' AND cqz<'41')");
289     }
290 
291     bool sqlOK = query.exec(stringQuery);
292     if (sqlOK)
293     {
294         query.next();
295         if (query.isValid())
296         {
297             int v = (query.value(0)).toInt();
298             query.finish();
299             return v;
300         }
301         else
302         {
303             return 0;
304         }
305     }
306     else
307     {
308         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
309         query.finish();
310         return 0;
311     }
312 
313 
314 }
315 
getWAZConfirmed(const int _logNumber)316 int Awards::getWAZConfirmed(const int _logNumber)
317 {
318        //qDebug() << "Awards::getWAZConfirmed (logNumber): " << QString::number(_logNumber) << QT_ENDL;
319 
320     QSqlQuery query;
321     QString stringQuery;
322     //Usar la siguiente para el confirmed
323     if (dataProxy->doesThisLogExist(_logNumber))
324     {
325         stringQuery = QString("SELECT COUNT (cqz) FROM (SELECT DISTINCT cqz FROM log WHERE cqz!='' AND cqz>'0' AND cqz<'41' AND (qsl_rcvd='Y' OR lotw_qsl_rcvd='Y') AND lognumber='%1')").arg(_logNumber);
326     }
327     else
328     {
329         stringQuery = QString("SELECT COUNT (cqz) FROM (SELECT DISTINCT cqz FROM log WHERE cqz!='' AND cqz>'0' AND cqz<'41' AND (qsl_rcvd='Y' OR lotw_qsl_rcvd='Y'))");
330     }
331 
332 
333 
334     bool sqlOK = query.exec(stringQuery);
335     if (sqlOK)
336     {
337         query.next();
338         if (query.isValid())
339         {
340             int v =(query.value(0)).toInt();
341             query.finish();
342             return v;
343         }
344         else
345         {
346             return 0;
347         }
348 
349     }
350     else
351     {
352         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
353         query.finish();
354         return 0;
355     }
356 
357 }
358 
isThisSpotConfirmed(const QStringList & _qs)359 bool Awards::isThisSpotConfirmed(const QStringList &_qs)
360 {
361 
362     if (getDXStatus(_qs) == 13)
363     {
364         return true;
365     }
366     else
367     {
368         return false;
369     }
370 
371 }
372 
getDXStatus(const QStringList & _qs)373 int Awards::getDXStatus (const QStringList &_qs)
374 {
375 
376     //qDebug() << "Awards::getDXStatus: Entity: " << _qs.at(0) << "/ Band: " << _qs.at(1) << "/ Mode: " << _qs.at(2)  << "/ Log: " << _qs.at(3)  <<  QT_ENDL;
377     // Receives:  QStringList _qs;
378     //_qs << Entity << BandId << << ModeId << lognumber;
379 
380 /*                                                                                                                  Not mode
381     -1 - Error.                                                                                     - ERROR     - ERROR
382  0  -   New one                                                                                 - New One       - New One       -   0
383  1  -   Worked but not in this band nor this mode                                               - Needed One    - Needed One    -   1
384  2  -   Worked in this band, not this mode                                                      - Needed One    - Worked One    -   3
385  3  -   Worked in this band and in this mode                                                    - Worked One    - Worked One    -   3
386  4  -   Worked in this mode, not this band                                                      - Needed One    - Needed One    -   1
387 
388  5  -   Confirmed in another band/mode but not worked in this band nor this mode                - Needed One    - Needed One    -   1
389  6  -   Confirmed in another band/mode but just worked in this band and not in this mode        - Needed One    - Worked One    -   3
390  7  -   Confirmed in another band/mode but just worked in this mode and not in this band        - Needed One    - Needed One    -   1
391  8  -   Confirmed in another band/mode but just worked in this band and mode                    - Worked One    - Worked One    -   3
392  9  -   Confirmed in this mode, but not worked this band                                        - Needed One    - Needed One    -   1
393 10  -   Confirmed in this mode, but worked this band                                            - Worked One    - Worked One    -   3
394 11  -   Confirmed in this band but not worked in this mode                                      - Needed One    - Confirmed One -   13
395 12  -   Confirmed in this band but worked in this mode                                          - Worked One    - Confirmed One -   13
396 13  -   Confirmed in this band and mode                                                         - Confirmed One - Confirmed One -   13
397 
398 
399 14  -   New CQ Zone
400 15  -   New CQ Zone on band
401 16  -   New ITU Zone
402 17  -   New ITU Zone on band
403 18  -   New Grid
404 19  -   New Grid on band
405 
406 */
407 
408 /*
409 0   -   New One     -   Never worked before                         -   RED
410 1   -   Needed      -   New one in this band                        -   ORANGE
411 2   -   Worked      -   Worked in this band but not confirmed       -   YELLOW
412 3   -   Confirmed   -   Confirmed in this band                      -   GREEN
413 */
414 
415 
416     if (_qs.length() != 4  )
417     {
418         //qDebug() << "Awards::getDXStatus: Length != 4, return -1" << QT_ENDL;
419         return -1;
420     }
421 
422     //int errorCode = 0;
423 
424     int _band = _qs.at(1).toInt();
425     int _mode = _qs.at(2).toInt();
426     int _logNumber = _qs.at(3).toInt();
427     int dxccEntity = (_qs.at(0)).toInt();
428 
429     //qDebug() << "Awards::getDXStatus: dxccEntity: " << QString::number(dxccEntity) << QT_ENDL;
430     if (dxccEntity<=0)
431     {
432         //qDebug() << "Awards::getDXStatus: dxccEntity <= 0, return -1" << QT_ENDL;
433         return -1;
434     }
435 
436     bool checkingMode = true;
437     if ( (_mode==-1) || (manageModes==false))
438     {
439         checkingMode = false;
440         //qDebug() << "Awards::getDXStatus: checkingMode = FALSE" << QT_ENDL;
441     }
442 
443     int wb = dxccStatusBand(dxccEntity, _band, _logNumber); //-1 error / 0 Not worked / 1 worked / 2 confirmed
444     int wm = -1;
445     if (checkingMode)
446     {
447         wm = dxccStatusMode(dxccEntity, _mode, _logNumber); //-1 error / 0 Not worked / 1 worked / 2 confirmed
448     }
449    // int wm = dxccStatusMode(dxccEntity, _mode, _logNumber); //-1 error / 0 Not worked / 1 worked / 2 confirmed
450 
451     if (wm==-1)
452     {
453         checkingMode = false;
454     }
455 
456     //qDebug() << "Awards::getDXStatus: wb=" << QString::number(wb) << " - wm=" << QString::number(wm) << QT_ENDL;
457     //qDebug() << "Awards::getDXStatus: dxccStatus: " << QString::number(dxccStatus(dxccEntity, _logNumber)) << QT_ENDL;
458 
459     switch(dxccStatus(dxccEntity, _logNumber))
460     {
461     case 0:
462         //qDebug() << "Awards::getDXStatus: return 0" << QT_ENDL;
463         return 0;                   // ATNO
464         //break;
465     case 1:                         // Worked, not confirmed
466         switch (wb)
467         {
468         case 0:                     //  Not worked in this band but in another band
469             if (checkingMode)
470             {
471                 if (wm==1)
472                 {
473                     //qDebug() << "Awards::getDXStatus: return 4" << QT_ENDL;
474                     return 4;
475                 }
476                 else
477                 {
478                     //qDebug() << "Awards::getDXStatus: return 1" << QT_ENDL;
479                     return 1;
480                 }
481             }
482             else
483             {
484                 //qDebug() << "Awards::getDXStatus: return 4 nc" << QT_ENDL;
485                 return 4;
486             }
487         case 1:                     // Worked in this band
488             if (checkingMode)
489             {
490                 if (wm==1)
491                 {
492                     //qDebug() << "Awards::getDXStatus: return 3" << QT_ENDL;
493                     return 3;
494                 }
495                 else
496                 {
497                     //qDebug() << "Awards::getDXStatus: return 2" << QT_ENDL;
498                     return 2;
499                 }
500             }
501             else
502             {
503                 //qDebug() << "Awards::getDXStatus: return 3 nc" << QT_ENDL;
504                 return 3;
505             }
506 
507         default:                    // ERROR
508                //qDebug() << "Awards::getDXStatus: default return -1 - 1" << QT_ENDL;
509             return -1;
510         }
511     case 2:         // Confirmed
512         if (wb==2)
513         {
514             if (checkingMode)
515             {
516                 if (wm==2)
517                 {
518                     //qDebug() << "Awards::getDXStatus: return 13" << QT_ENDL;
519                     return 13;
520                 }
521                 else if (wm==1)
522                 {
523                     //qDebug() << "Awards::getDXStatus: return 12" << QT_ENDL;
524                     return 12;
525                 }
526                 else
527                 {
528                     //qDebug() << "Awards::getDXStatus: return 11" << QT_ENDL;
529                     return 11;
530                 }
531             }
532             else
533             {
534                 //qDebug() << "Awards::getDXStatus: return 13 nc" << QT_ENDL;
535                 return 13;
536             }
537 
538         }
539         else if ((wb ==1) || (wb == 0))
540         {
541             if (checkingMode)
542             {
543                 if (wb==1)
544                 {
545                     if (wm==1)
546                     {
547                         //qDebug() << "Awards::getDXStatus: return 8" << QT_ENDL;
548                         return 8;
549                     }
550                     else
551                     {
552                         //qDebug() << "Awards::getDXStatus: return 6" << QT_ENDL;
553                         return 6;
554                     }
555                 }
556                 else
557                 {
558                     if (wm==1)
559                     {
560                         //qDebug() << "Awards::getDXStatus: return 7" << QT_ENDL;
561                         return 7;
562                     }
563                     else
564                     {
565                         //qDebug() << "Awards::getDXStatus: return 5" << QT_ENDL;
566                         return 5;
567                     }
568                 }
569 
570             }
571             else
572             {
573                 if (wb==0)
574                 {
575                     //qDebug() << "Awards::getDXStatus: return 7 nc" << QT_ENDL;
576                     return 7;
577                 }
578                 else
579                 {
580                     //qDebug() << "Awards::getDXStatus: return 8 nc" << QT_ENDL;
581                     return 8;
582                 }
583             }
584         }
585         else
586         {
587             //qDebug() << "Awards::getDXStatus: return -1 - 2" << QT_ENDL;
588             return -1;
589         }
590     default:
591         //qDebug() << "Awards::getDXStatus: return -1 default2" << QT_ENDL;
592         return -1;
593     }   // END OF SWITCH
594     //qDebug() << "Awards::getDXStatus: END, return -1" << QT_ENDL;
595     //return -1;
596 }
597 
598 
dxccStatusBandMode(const int _ent,const int _band,const int _mode,const int _logNumber,bool _checkingMode)599 int Awards::dxccStatusBandMode(const int _ent, const int _band, const int _mode, const int _logNumber, bool _checkingMode)
600 {//-1 error / 0 Not worked / 1 worked / 2 confirmed
601     //qDebug() << "Awards::dxccStatusBandMode: " << QString::number(_ent) << "/" << QString::number(_band) << "/" << QString::number(_mode) << QT_ENDL;
602     QSqlQuery query = QSqlQuery();
603     QString queryString = QString();
604 
605     if (_checkingMode)
606     {
607            //qDebug() << "Awards::dxccStatusBandMode: Checking Mode TRUE" << QT_ENDL;
608         queryString = QString("SELECT DISTINCT qsl_rcvd, lotw_qsl_rcvd FROM log WHERE dxcc='%1' AND bandid='%2' AND modeid='%3' AND lognumber='%4' ").arg(QString::number(_ent)).arg(QString::number(_band)).arg(QString::number(_mode)).arg(QString::number(_logNumber));
609     }
610     else
611     {
612            //qDebug() << "Awards::dxccStatusBandMode: Checking Mode FALSE" << QT_ENDL;
613         queryString = QString("SELECT DISTINCT qsl_rcvd, lotw_qsl_rcvd FROM log WHERE dxcc='%1' AND bandid='%2' AND lognumber='%3' ").arg(QString::number(_ent)).arg(QString::number(_band)).arg(QString::number(_logNumber));
614     }
615 
616     int status = 0;
617 
618     if (query.exec(queryString))
619     {
620         while (query.next())
621         {
622             if ( query.isValid() )
623             {
624                 if((query.value(0).toString() == "Y") || (query.value(1).toString() == "Y"))
625                 {
626                        //qDebug() << "Awards::dxccStatusBandMode: return - 2" << QT_ENDL;
627                     query.finish();
628                     return 2;
629                 }
630                 status = 1;
631             }
632         }
633         query.finish();
634 
635     }
636     else
637     { // The query fails...
638            //qDebug() << "Awards::dxccStatusBandMode: return - -1" << QT_ENDL;
639         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
640         query.finish();
641         return -1;
642     }
643            //qDebug() << "Awards::dxccStatusBandMode: return - 0-4" << QT_ENDL;
644     return status;
645 }
646 
647 
648 /*
649 int Awards::dxccStatusBandMode(const int _ent, const int _band, const int _mode, const int _logNumber, bool _checkingMode)
650 {//-1 error / 0 Not worked / 1 worked / 2 confirmed
651     //qDebug() << "Awards::dxccStatusBandMode: " << QString::number(_ent) << "/" << QString::number(_band) << "/" << QString::number(_mode) << QT_ENDL;
652     QSqlQuery query = QSqlQuery();
653     QString queryString = QString();
654 
655     if (_checkingMode)
656     {
657            //qDebug() << "Awards::dxccStatusBandMode: Checking Mode TRUE" << QT_ENDL;
658         queryString = QString("SELECT confirmed FROM awarddxcc WHERE dxcc='%1' AND band='%2' AND mode='%3' AND lognumber='%4' ").arg(QString::number(_ent)).arg(QString::number(_band)).arg(QString::number(_mode)).arg(QString::number(_logNumber));
659     }
660     else
661     {
662            //qDebug() << "Awards::dxccStatusBandMode: Checking Mode FALSE" << QT_ENDL;
663         queryString = QString("SELECT confirmed FROM awarddxcc WHERE dxcc='%1' AND band='%2' AND lognumber='%3' ").arg(QString::number(_ent)).arg(QString::number(_band)).arg(QString::number(_logNumber));
664     }
665 
666     int status = 0;
667 
668     if (query.exec(queryString))
669     {
670         while (query.next())
671         {
672             if ( query.isValid() )
673             {
674                 if(query.value(0).toString() == "1")
675                 {
676                        //qDebug() << "Awards::dxccStatusBandMode: return - 2" << QT_ENDL;
677                     query.finish();
678                     return 2;
679                 }
680                 else if(query.value(0).toString() == "0")
681                 {
682                        //qDebug() << "Awards::dxccStatusBandMode: return - 1" << QT_ENDL;
683                    if (status < 1)
684                    {
685                        status = 1;
686                    }
687                 }
688             }
689         }
690         query.finish();
691 
692     }
693     else
694     { // The query fails...
695            //qDebug() << "Awards::dxccStatusBandMode: return - -1" << QT_ENDL;
696         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
697         query.finish();
698         return -1;
699     }
700            //qDebug() << "Awards::dxccStatusBandMode: return - 0-4" << QT_ENDL;
701     return status;
702 }
703 
704 */
dxccStatus(const int _ent,const int _logNumber)705 int Awards::dxccStatus(const int _ent, const int _logNumber)
706 {//-1 error / 0 Not worked / 1 worked / 2 confirmed
707     //qDebug() << "Awards::dxccStatus: " << QString::number(_ent) << QT_ENDL;
708     QSqlQuery query = QSqlQuery();
709     QString queryString = QString();
710     int worked = 0;
711 
712     queryString = QString("SELECT DISTINCT qsl_rcvd, lotw_qsl_rcvd FROM log WHERE dxcc='%1' AND lognumber='%2' ").arg(QString::number(_ent)).arg(QString::number(_logNumber));
713 
714     if (query.exec(queryString))
715     {
716            //qDebug() << "Awards::dxccStatus: query exec OK: " << query.lastQuery() << QT_ENDL;
717         while (query.next())
718         {
719                //qDebug() << "Awards::dxccStatus: query VALUE: " << (query.value(0)).toString() << QT_ENDL;
720             if ( query.isValid() )
721             {
722                    //qDebug() << "Awards::dxccStatus: query valid OK" << QT_ENDL;
723                 if(((query.value(0)).toString() == "Y") || ((query.value(1)).toString() == "Y"))
724                 {
725 
726                        //qDebug() << "Awards::dxccStatus: value = 1 - return 2" << QT_ENDL;
727                     query.finish();
728                     return 2;
729                 }
730                 worked = 1;
731             }
732         }
733            //qDebug() << "Awards::dxccStatus: return "<< QString::number(worked)  << QT_ENDL;
734         query.finish();
735            //qDebug() << "Awards::dxccStatus: END: " << QString::number(worked) << QT_ENDL;
736         return worked;
737 
738     }
739     else
740     { // The query fails...
741            //qDebug() << "Awards::dxccStatus: return -1"  << QT_ENDL;
742         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
743         query.finish();
744         return -1;
745     }
746        //qDebug() << "Awards::dxccStatus: return 0"  << QT_ENDL;
747     //return worked;
748 }
749 
750 
751 
752 /*
753 int Awards::dxccStatus(const int _ent, const int _logNumber)
754 {//-1 error / 0 Not worked / 1 worked / 2 confirmed
755     //qDebug() << "Awards::dxccStatus: " << QString::number(_ent) << QT_ENDL;
756     QSqlQuery query = QSqlQuery();
757     QString queryString = QString();
758     int worked = 0;
759 
760     queryString = QString("SELECT confirmed FROM awarddxcc WHERE dxcc='%1' AND lognumber='%2' ").arg(QString::number(_ent)).arg(QString::number(_logNumber));
761 
762     if (query.exec(queryString))
763     {
764            //qDebug() << "Awards::dxccStatus: query exec OK: " << query.lastQuery() << QT_ENDL;
765         while (query.next())
766         {
767                //qDebug() << "Awards::dxccStatus: query VALUE: " << (query.value(0)).toString() << QT_ENDL;
768             if ( query.isValid() )
769             {
770                    //qDebug() << "Awards::dxccStatus: query valid OK" << QT_ENDL;
771                 if((query.value(0)).toString() == "1")
772                 {
773 
774                        //qDebug() << "Awards::dxccStatus: value = 1 - return 2" << QT_ENDL;
775                     query.finish();
776                     return 2;
777                 }
778                 else if((query.value(0)).toString() == "0")
779                 {
780 
781                        //qDebug() << "Awards::dxccStatus: value = 0 - worked 1" << QT_ENDL;
782                     if (worked <1)
783                     {
784                         worked = 1;
785                     }
786                 }
787             }
788         }
789            //qDebug() << "Awards::dxccStatus: return "<< QString::number(worked)  << QT_ENDL;
790         query.finish();
791            //qDebug() << "Awards::dxccStatus: END: " << QString::number(worked) << QT_ENDL;
792         return worked;
793 
794     }
795     else
796     { // The query fails...
797            //qDebug() << "Awards::dxccStatus: return -1"  << QT_ENDL;
798         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
799         query.finish();
800         return -1;
801     }
802        //qDebug() << "Awards::dxccStatus: return 0"  << QT_ENDL;
803     //return worked;
804 }
805 */
806 
807 
getQRZDXStatusColor(const QStringList & _qs)808 QColor Awards::getQRZDXStatusColor(const QStringList &_qs)
809 {
810     //qs << Entity << spotBand << "-1" << QString::number(currentLog) ;
811     //qDebug() << "Awards::getQRZDXStatusColor qs.length: " << QString::number(_qs.length()) << QT_ENDL;
812 
813     //From Search QSO to QSL: q << _call << bandid << _mode << QString::number(currentLog);
814     //qDebug() << "Awards::getQRZDXStatusColor: " << _qs.at(0) << "/" << _qs.at(1) << "/" << _qs.at(2) << _qs.at(3) << QT_ENDL;
815     // Receives:  QStringList _qs;
816     //_qs << Entity << BandID << ModeId << lognumber;
817 
818     /*
819     0 - New One
820     1 - Needed
821     2 - Worked
822     3 - Confirmed
823     */
824 
825     QColor returnedColor;
826 
827     int status = getDXStatus(_qs);
828 
829     //qDebug() << "Awards::getQRZDXStatusColor: status: " << QString::number(status) << "/" << getDXStatusString(status) << QT_ENDL;
830     //qDebug() << "Awards::getQRZDXStatusColor: status: " << QString::number(status) << QT_ENDL;
831 
832     switch (status) {
833         case 0:
834             returnedColor = newOneColor;
835         break;
836         case 1:
837             returnedColor =  neededColor;
838         break;
839         case 2:
840             returnedColor =  neededColor;
841         break;
842         case 3:
843             returnedColor =  workedColor;
844         break;
845         case 4:
846             returnedColor =  neededColor;
847         break;
848         case 5:
849             returnedColor =  neededColor;
850         break;
851         case 6:
852             returnedColor =  neededColor;
853         break;
854         case 7:
855             returnedColor =  neededColor;
856         break;
857         case 8:
858             returnedColor =  workedColor;
859         break;
860         case 9:
861             returnedColor =  neededColor;
862         break;
863         case 10:
864             returnedColor =  workedColor;
865         break;
866         case 11:
867             returnedColor =  neededColor;
868         break;
869         case 12:
870             returnedColor =  workedColor;
871         break;
872         case 13:
873             returnedColor =  confirmedColor;
874         break;
875         //break;
876         default:
877             returnedColor =  defaultColor;
878         break;
879 
880     }
881     return returnedColor;
882 }
883 
getDXStatusString(const int & _status)884 QString Awards::getDXStatusString (const int &_status)
885 {
886 
887        //qDebug() << "Awards::getDXStatusString: " << QString::number(_status) << QT_ENDL;
888 
889     QString message = QString();
890 
891     switch (_status) {
892 
893     case 0:
894         message = QObject::tr("New One, work it!");
895         //message = QObject::tr("0-new One");
896     break;
897     case 1:
898         message = QObject::tr("Needed, work it!");
899         //message = QObject::tr("1-Needed, work it!");
900     break;
901     case 2:
902         message = QObject::tr("Needed, work it!");
903     break;
904     case 3:
905         message = QObject::tr("Worked but not confirmed");
906     break;
907     case 4:
908         message = QObject::tr("Needed, work it!");
909    break;
910     case 5:
911         message = QObject::tr("Needed, work it!");
912    break;
913     case 6:
914         message = QObject::tr("Needed, work it!");
915    break;
916     case 7:
917         message = QObject::tr("Needed, work it!");
918    break;
919     case 8:
920         message = QObject::tr("Worked but not confirmed");
921    break;
922     case 9:
923     message = QObject::tr("Needed, work it!");
924    break;
925     case 10:
926         message = QObject::tr("Worked but not confirmed");
927    break;
928     case 11:
929     message = QObject::tr("Needed, work it!");
930    break;
931     case 12:
932         message = QObject::tr("Worked but not confirmed");
933    break;
934     case 13:
935     message = QObject::tr("Confirmed");
936    break;
937     //break;
938     default:
939         message = QObject::tr("Not identified");
940     break;
941 
942 }
943 return message;
944 }
945 
getDXCCStatusBand(const int _dxcc,const int _band)946 QString Awards::getDXCCStatusBand(const int _dxcc, const int _band)
947 {
948     // Returns -, W or C (Not worked, worked, Confirmed)
949     //qDebug() << Q_FUNC_INFO << "DXCC/Band: " << QString::number(_dxcc) << "/" << QString::number(_band);
950     //qDebug() << Q_FUNC_INFO << "dxccStatusList: " << QString::number(dxccStatusList.length ());
951 
952     EntityBandStatus aux;
953 
954     foreach (aux, dxccStatusList)
955     {
956          //qDebug() << Q_FUNC_INFO << " DXCC: " << QString::number(aux.dxcc);
957          //qDebug() << Q_FUNC_INFO << " Band: " << QString::number(aux.bandid);
958          if (aux.confirmed)
959          {
960              //qDebug() << Q_FUNC_INFO << "Confirmed";
961          }
962          else
963          {
964           //qDebug() << Q_FUNC_INFO << "Not confirmed";
965          }
966         if (aux.dxcc == _dxcc)
967         {
968             //qDebug() << Q_FUNC_INFO << " DXCC found: " << QString::number(_dxcc);
969             if (aux.bandid == _band)
970             {
971                 //qDebug() << Q_FUNC_INFO << " Band found: " << QString::number(_band);
972                 if (aux.confirmed)
973                 {
974                     //qDebug() << Q_FUNC_INFO << " Confirmed " ;
975                     return "C";
976                 }
977                 else
978                 {
979                     //qDebug() << Q_FUNC_INFO << " Worked " ;
980                     return "W";
981                 }
982             }
983         }
984     }
985     //qDebug() << Q_FUNC_INFO << " Returnin -" ;
986     return "-";
987 }
988 
getDXCCStatusBand2(const int _dxcc,const int _band,const int _logNumber)989 QString Awards::getDXCCStatusBand2(const int _dxcc, const int _band, const int _logNumber)
990 {
991     // Returns -, W or C (Not worked, worked, Confirmed)
992        //qDebug() << "Awards::getDXCCStatusBand: log received: " << QString::number(_logNumber) << QT_ENDL;
993     QString stringQuery;
994     if (_logNumber<0)
995     {
996         stringQuery = QString("SELECT DISTINCT qsl_rcvd, lotw_qsl_rcvd FROM log WHERE dxcc='%1' AND bandid='%2'").arg(_dxcc).arg(_band);
997     }
998     else
999     {
1000         stringQuery = QString("SELECT DISTINCT qsl_rcvd, lotw_qsl_rcvd FROM log WHERE dxcc='%1' AND bandid='%2' AND lognumber='%3'").arg(_dxcc).arg(_band).arg(_logNumber);
1001     }
1002     QString status = "-";
1003 
1004     QSqlQuery query;
1005     bool sqlOk = query.exec(stringQuery);
1006     if (sqlOk)
1007     {
1008         while (query.next()) {
1009             if (query.isValid())
1010             {
1011                 if (((query.value(0)).toString() == "Y") || ((query.value(1)).toString() == "Y"))
1012                 {
1013                     query.finish();
1014                     return "C";
1015                 }
1016                 status = "W";
1017             }
1018         }
1019     }
1020     else
1021     {
1022         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1023         query.finish();
1024         return "-";
1025     }
1026     query.finish();
1027     return status;
1028 }
1029 
1030 
1031 /*
1032   QString Awards::getDXCCStatusBand(const int _dxcc, const int _band, const int _logNumber)
1033 {
1034     // Returns -, W or C (Not worked, worked, Confirmed)
1035        //qDebug() << "Awards::getDXCCStatusBand: log received: " << QString::number(_logNumber) << QT_ENDL;
1036     QString stringQuery;
1037     if (_logNumber<0)
1038     {
1039         stringQuery = QString("SELECT confirmed from awarddxcc WHERE dxcc='%1' AND band='%2'").arg(_dxcc).arg(_band);
1040     }
1041     else
1042     {
1043         stringQuery = QString("SELECT confirmed from awarddxcc WHERE dxcc='%1' AND band='%2' AND lognumber='%3'").arg(_dxcc).arg(_band).arg(_logNumber);
1044     }
1045     QString status = "-";
1046 
1047     QSqlQuery query;
1048     bool sqlOk = query.exec(stringQuery);
1049     if (sqlOk)
1050     {
1051         while (query.next()) {
1052             if (query.isValid())
1053             {
1054                 if ((query.value(0)).toString() == "1")
1055                 {
1056                     query.finish();
1057                     return "C";
1058                 }
1059                 else if ((query.value(0)).toString() == "0")
1060                 {
1061                     if (status == "-")
1062                     {
1063                         status = "W";
1064                     }
1065                 }
1066             }
1067         }
1068     }
1069     else
1070     {
1071         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1072         query.finish();
1073         return "-";
1074     }
1075     query.finish();
1076     return status;
1077 }
1078 
1079 */
1080 
checkIfValidIOTA(const QString & _tiota)1081 QString Awards::checkIfValidIOTA(const QString &_tiota)
1082 {
1083 /**********************************
1084   IOTA should be always with this format: CC-NNN
1085   being:
1086      - CC the shortname of the continent
1087      - NNN Number of the reference.
1088        NNN has ALWAYS to include THREE(3) characters.
1089        ADIF Specs says:
1090             CC is the continent designator {NA, SA, EU , AF, OC, AS, AN}
1091             XXX is the island designator, where 0 <= XXX ,<= 999 [use leading zeroes]
1092 
1093 Returns a valid format IOTA if possible and "" in other cases.
1094 
1095 ************************************/
1096        //qDebug() << "Awards::checkIfValidIOTA: " << _tiota << QT_ENDL;
1097     //bool _valid = false;
1098     QString _continent;
1099     QString _number;
1100 
1101     if (_tiota.count("-") == 1)
1102     {
1103         QStringList _values = _tiota.split("-", QT_SKIP);
1104         if (_values.size() != 2)
1105         {
1106             return "";
1107         }
1108 
1109         if (dataProxy->isValidContinentShortName(_values.at(0)))
1110         {
1111             _continent = _values.at(0);
1112         }
1113         else
1114         {
1115             return "";
1116         }
1117         if ((_values.at(1)).toInt() > 0)
1118         {
1119             _number = _values.at(1);
1120         }
1121         else
1122         {
1123             return "";
1124         }
1125 
1126 
1127     }
1128     else
1129     {
1130         return "";
1131     }
1132 
1133        //qDebug() << "Awards::checkIfValidIOTA (cont) " << _continent << QT_ENDL;
1134        //qDebug() << "Awards::checkIfValidIOTA (numb): " << _number << QT_ENDL;
1135 
1136     // Check if continent is valid
1137 
1138     if (dataProxy->isValidContinentShortName(_continent))
1139     {
1140         if ( (_number.toInt() >0 ) && ((_number.toInt()) < 1000 ))
1141         {
1142             if ((_number.length()) == 3)
1143             {
1144                 return _continent + "-" + _number ;
1145             }
1146             else if ((_number.length()) == 2)
1147             {
1148                 return _continent + "-0" + QString::number((_number).toInt());
1149             }
1150             else if ((_number.length()) == 1)
1151             {
1152                 return _continent + "-00" + QString::number((_number).toInt());
1153             }
1154             else
1155             {
1156                 return "";
1157             }
1158         }
1159         else
1160         {
1161             return "";
1162         }
1163     }
1164     else
1165     {
1166         return QString();
1167     }
1168     //return QString();
1169 
1170  /*
1171     QString stringQuery = QString("SELECT id FROM continent WHERE shortname ='%1'").arg(_continent);
1172 
1173     QSqlQuery query;
1174     query.exec(stringQuery);
1175     while (query.next()) {
1176         if (query.isValid())
1177         {
1178             _valid = true;
1179 
1180             if ( (_number.toInt() >0 ) && ((_number.toInt()) < 1000 ))
1181             {
1182                 if ((_number.length()) == 3)
1183                 {
1184                     return _continent + "-" + _number ;
1185                 }
1186                 else if ((_number.length()) == 2)
1187                 {
1188                     return _continent + "-0" + QString::number((_number).toInt());
1189                 }
1190                 else if ((_number.length()) == 1)
1191                 {
1192                     return _continent + "-00" + QString::number((_number).toInt());
1193                 }
1194                 else
1195                 {
1196                     return "";
1197                 }
1198             }
1199             else
1200             {
1201                 return "";
1202             }
1203         }
1204     }
1205     return "";
1206 */
1207 }
1208 
1209 
setColors(const QString & _newOne,const QString & _needed,const QString & _worked,const QString & _confirmed,const QString & _default)1210 void Awards::setColors (const QString &_newOne, const QString &_needed, const QString &_worked, const QString &_confirmed, const QString &_default)
1211 //void Awards::setColors (const QString &_newOne, const QString &_needed, const QString &_worked, const QString &_confirmed, const QString &_default)
1212 {
1213        //qDebug() << "Awards::setColors: " << _newOne << "/" << _needed << "/" << _worked << "/" << _confirmed << "/" << _default << QT_ENDL;
1214 
1215     defaultColor = QColor(_default.toUpper());
1216     neededColor = QColor(_needed.toUpper());
1217     workedColor = QColor(_worked.toUpper());
1218     confirmedColor = QColor(_confirmed.toUpper());
1219     newOneColor = QColor(_newOne.toUpper());
1220 
1221     if (defaultColor.isValid())
1222     {
1223         defaultColor.setNamedColor(_default.toUpper());
1224     }
1225     else
1226     {
1227     }
1228 
1229     if (neededColor.isValid())
1230     {
1231         neededColor.setNamedColor(_needed.toUpper());
1232     }
1233     else
1234     {
1235     }
1236 
1237 
1238     if (confirmedColor.isValid())
1239     {
1240         confirmedColor.setNamedColor(_confirmed.toUpper());
1241     }
1242     else
1243     {
1244     }
1245 
1246     if (newOneColor.isValid())
1247     {
1248         newOneColor.setNamedColor(_newOne.toUpper());
1249     }
1250     else
1251     {
1252     }
1253 
1254     if (workedColor.isValid())
1255     {
1256         workedColor.setNamedColor(_worked.toUpper());
1257     }
1258     else
1259     {
1260            //qDebug() << "Awards::setColors: Worked NOT VALID" << QT_ENDL;
1261     }
1262 }
1263 
getDefaultColor()1264 QColor Awards::getDefaultColor()
1265 {
1266     return defaultColor;
1267 }
1268 
recalculateAwards()1269 void Awards::recalculateAwards()
1270 {
1271 /*
1272   TODO: I need to optimize this function.
1273     The select & insert of setAwardDXCC are too slow)
1274     Should go in a transaction
1275 */
1276 
1277     //qDebug() << "Awards::recalculateAwards" << QT_ENDL;
1278     dataProxy->updateAwardDXCC();
1279     emit awardDXCCUpdated();
1280     dataProxy->updateAwardWAZ();
1281        //qDebug() << "Awards::recalculateAwards - END" << QT_ENDL;
1282 }
1283 
1284 
getQSOsInLog(const int _logNumber)1285 int Awards::getQSOsInLog(const int _logNumber)
1286 {
1287        //qDebug() << "Awards::getQSOsInLog: " << QString::number(_logNumber) << QT_ENDL;
1288     QSqlQuery query;
1289     QString queryString;
1290     int v;
1291 
1292     queryString = QString("SELECT COUNT (id) FROM log WHERE lognumber='%1'").arg(_logNumber) ;
1293 
1294     if( !query.exec(queryString) )
1295     {
1296         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1297         query.finish();
1298         return -1;
1299     }
1300     else
1301     {
1302         query.next();
1303         if (query.isValid())
1304         {
1305             v = query.value(0).toInt();
1306             query.finish();
1307             return v;
1308         }
1309         else
1310         {
1311             query.finish();
1312             return -2;
1313         }
1314     }
1315 }
1316 
1317 /*
1318 void Awards::setAwards(const int _dxcc, const int _waz, const int _band, const int _mode, const int _workedOrConfirmed, const int _logNumber, const int _qsoId)
1319 {
1320        //qDebug() << "Awards::setAwards: " << QString::number(_dxcc) << QT_ENDL;
1321 
1322     //_workedOrConfirmed = -1     Remove this pair
1323     //_workedOrConfirmed = 0     Set as Worked
1324     //_workedOrConfirmed = 1     Set as Confirmed
1325 
1326     int d = _dxcc;
1327     int b = _band;
1328     int m = _mode;
1329     int w = _workedOrConfirmed;
1330     int l = _logNumber;
1331     int i = _qsoId;
1332     int z = _waz;
1333 
1334     setAwardDXCC(d, b, m, w, l, i);
1335     setAwardWAZ(z, b, m, w, l, i);
1336     //setAwardWAZ(_waz,  _band,  _mode,  _workedOrConfirmed, _logNumber);
1337 
1338 }
1339 
1340 */
1341 
setAwards(const int _qsoId)1342 void Awards::setAwards(const int _qsoId)
1343 {
1344        //qDebug() << "Awards::setAwards: _qsoId: " << QString::number(_qsoId) << QT_ENDL;
1345     dataProxy->setDXCCAwardStatus(_qsoId);
1346     dataProxy->setWAZAwardStatus(_qsoId);
1347 }
1348 /*
1349 int Awards::setAwardDXCCst(const int _dxcc, const int _band, const int _mode, const bool _confirmed, const int _logNumber, const int _qsoId)
1350 {
1351        //qDebug() << "Awards::setAwardDXCCst-0: " << QString::number(_dxcc) << "/" << QString::number(_band) << "/" << QString::number(_mode) << "/" << QString::number(_logNumber) << "/" << QString::number(_qsoId) << QT_ENDL;
1352     int nameCol=-1;
1353     QString _refid = QString();
1354 
1355     // _confirmedQSO == false QSO is just worked
1356     // _confirmedQSO == true QSO is confirmed
1357 
1358     //TODO: Fix the way we check for data validity for this function
1359     if (!( (_dxcc>=0) && (_band >=0) && (_mode>=0) && (_logNumber>=0) && (_qsoId >=0) ))
1360     {
1361             //qDebug() << "Awards::setAwardDXCCst: Not valid data received!" << QT_ENDL;
1362         return -1;
1363     }
1364     int _iconfirmed;
1365 
1366     if (_confirmed)
1367     {
1368         _iconfirmed = 1;
1369     }
1370     else
1371     {
1372         _iconfirmed = 0;
1373     }
1374 
1375        //qDebug() << "Awards::setAwardDXCCst: _qsoId: " << QString::number(_qsoId) << "/" << QString::number(_iconfirmed) << QT_ENDL;
1376     QString stringQuery = QString();
1377     QSqlQuery query;
1378     bool sqlOK = false;
1379     int errorCode = -1;
1380 
1381     stringQuery = QString("SELECT id, confirmed FROM awarddxcc where dxcc='%1' AND band='%2' AND mode='%3' AND lognumber='%4'").arg(_dxcc).arg(_band).arg(_mode).arg(_logNumber);
1382 
1383 
1384     sqlOK = query.exec(stringQuery);
1385     if (sqlOK)
1386     {
1387            //qDebug() << "Awards::setAwardDXCCst-1:" << QT_ENDL;
1388 
1389         query.next();
1390         QSqlRecord rec = query.record();
1391 
1392         if (query.isValid())
1393         {// We have some data, we need to UPDATE - We are only confirming!
1394                //qDebug() << "Awards::setAwardDXCCst: We have some data, we neer to update" << QT_ENDL;
1395             nameCol = rec.indexOf("id");
1396             _refid = query.value(nameCol).toString();
1397             stringQuery = QString("UPDATE awarddxcc SET confirmed='1', qsoid='%1' WHERE id='%2'").arg(_qsoId).arg(_refid);
1398                //qDebug() << "Awards::setAwardDXCCst: (UPDATE): " << stringQuery << QT_ENDL;
1399             if (sqlOK)
1400             { // Set of data updated
1401                    //qDebug() << "Awards::setAwardDXCCst: Data updated!" << QT_ENDL;
1402                 query.finish();
1403                 return 1;
1404             }
1405             else
1406             { // Something failed. Trace it!
1407                 errorCode = query.lastError().nativeErrorCode();
1408                 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1409                 query.finish();
1410                 return -1;
1411 
1412             }
1413 
1414         }
1415         else
1416         { // We don't have this set, we need to INSERT
1417             stringQuery = QString("INSERT INTO awarddxcc (dxcc, band, mode, confirmed, lognumber, qsoid) values('%1','%2','%3','%4','%5','%6')").arg(_dxcc).arg(_band).arg(_mode).arg(_iconfirmed).arg(_logNumber).arg(_qsoId);
1418             sqlOK = query.exec(stringQuery);
1419                //qDebug() << "Awards::setAwardDXCCst: We don't have data... so we INSERT" << QT_ENDL;
1420                //qDebug() << "Awards::setAwardDXCCst: (INSERT): " << stringQuery << QT_ENDL;
1421             if (sqlOK)
1422             { // Set of data included
1423                 query.finish();
1424                    //qDebug() << "Awards::setAwardDXCCst: Data inserted!" << QT_ENDL;
1425             }
1426             else
1427             { // Something failed. Trace it!
1428                 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1429                 errorCode = query.lastError().nativeErrorCode();
1430                 query.finish();
1431                 return -1;
1432 
1433             }
1434 
1435         }
1436 
1437     }
1438     else
1439     { // Trace the error... what may be happening???
1440         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1441         errorCode = query.lastError().nativeErrorCode();
1442         query.finish();
1443         return -1;
1444 
1445     }
1446 
1447     return -1;
1448 
1449 }
1450 
1451 */
1452 
1453 /*
1454 int Awards::setAwardWAZst(const int _cqz, const int _band, const int _mode, const bool _confirmed, const int _logNumber, const int _qsoId)
1455 {
1456       //qDebug() << "Awards::setAwardWAZst(CQZ/BAND/MODE/WORKED/log/qsoid): " << QString::number(_cqz) << "/" << QString::number(_band) << "/" << QString::number(_mode) << "/" << QString::number(_logNumber) << "/" << QString::number(_qsoId) << QT_ENDL;
1457 
1458 
1459     // _confirmed == false QSO is just worked
1460     // _confirmed == true QSO is confirmed
1461 
1462 
1463 
1464    //TODO: Fix the way we check for data validity for this function
1465     if (!( (_cqz>=0) && (_band >=0) && (_mode>=0) && (_logNumber>=0) && (_qsoId >=0) ))
1466     {
1467            //qDebug() << "Awards::setAwardWAZst: some data was NOK" << QT_ENDL;
1468         return -1;
1469     }
1470         int _iconfirmed;
1471 
1472         if (_confirmed)
1473         {
1474             _iconfirmed = 1;
1475 
1476         }
1477         else
1478         {
1479             _iconfirmed = 0;
1480         }
1481 
1482 
1483         QString stringQuery;
1484         QSqlQuery query;
1485         bool sqlOK;
1486         //int errorCode = -1;
1487 
1488         stringQuery = QString("INSERT INTO awardwaz (cqz, band, mode, confirmed, lognumber, qsoid) values('%1','%2','%3','%4','%5','%6')").arg(_cqz).arg(_band).arg(_mode).arg(_iconfirmed).arg(_logNumber).arg(_qsoId);
1489 
1490         sqlOK = query.exec(stringQuery);
1491 
1492         if ((sqlOK) && (!_confirmed)) // First time a DXCC/Band/mode is worked
1493         {
1494                //qDebug() << "Awards::setAwardWAZst: _qsoId: " << QString::number(_qsoId) << "- 1"  << QT_ENDL;
1495             query.finish();
1496             return 1;
1497         }
1498         else if ((sqlOK) && (_confirmed)) // First time a CQZ/Band/Mode is confirmed
1499         {
1500                //qDebug() << "Awards::setAwardWAZst: _qsoId: " << QString::number(_qsoId) << "- 2"  << QT_ENDL;
1501             query.finish();
1502             return 2;
1503         }
1504         else
1505         {
1506             emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1507                //qDebug() << "Awards::setAwardWAZst: _qsoId: " << QString::number(_qsoId) << "- sqlOK ERROR: "  << QT_ENDL;
1508             //errorCode = query.lastError().nativeErrorCode();
1509             query.finish();
1510                //qDebug() << "Awards::setAwardWAZst: LastQuery: " << query.lastQuery()  << QT_ENDL;
1511                //qDebug() << "Awards::setAwardWAZst: LastError-data: " << query.lastError().databaseText()  << QT_ENDL;
1512                //qDebug() << "Awards::setAwardWAZst: LastError-driver: " << query.lastError().driverText()  << QT_ENDL;
1513                //qDebug() << "Awards::setAwardWAZst: LastError-n: " << QString::number(query.lastError().nativeErrorCode() ) << QT_ENDL;
1514 
1515 
1516         }
1517         return -1;
1518 }
1519 
1520 */
1521 
1522 /*
1523 int Awards::setAwardDXCCConfirmed(const int _band, const int _mode, const int _dxcc, const int _newQSOid) // Changes the status of a DXCC from worked to confirmed
1524 {
1525        //qDebug() << "Awards::setAwardDXCCConfirmed: " << QString::number(_band) << "/" << QString::number(_mode) << "/" << QString::number(_dxcc)<< "/" << QString::number(_newQSOid)<< QT_ENDL;
1526 
1527 
1528     QString stringQuery;
1529     QSqlQuery query = QSqlQuery();
1530     bool sqlOK = false;
1531     int errorCode = -1;
1532     int nameCol = -1;
1533     QString aux = QString();
1534 
1535     stringQuery = QString("SELECT qsoid FROM awarddxcc WHERE band='%1' AND mode='%2' AND dxcc='%3'").arg(_band).arg(_mode).arg(_dxcc);
1536     sqlOK = query.exec(stringQuery);
1537     if (sqlOK)
1538     {
1539         QSqlRecord rec = query.record();
1540         if (query.next())
1541         {
1542             if (query.isValid())
1543             {
1544                 nameCol = rec.indexOf("qsoid");
1545                 aux = (query.value(nameCol)).toString();
1546                 query.finish();
1547                 stringQuery = QString("UPDATE awarddxcc SET confirmed='1', qsoid='%1' WHERE qsoid='%2'").arg(_newQSOid).arg(aux);
1548                 sqlOK = query.exec(stringQuery);
1549                 if (sqlOK)
1550                 {
1551                     query.finish();
1552                     return _newQSOid;
1553                 }
1554                 else
1555                 { // UPDATE failed
1556                     emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1557                     errorCode = query.lastError().nativeErrorCode();
1558                     query.finish();
1559                        //qDebug() << "Awards::setAwardDXCCConfirmed-Update: LastQuery: " << query.lastQuery()  << QT_ENDL;
1560                        //qDebug() << "Awards::setAwardDXCCConfirmed-Update: LastError-data: " << query.lastError().databaseText()  << QT_ENDL;
1561                        //qDebug() << "Awards::setAwardDXCCConfirmed-Update: LastError-driver: " << query.lastError().driverText()  << QT_ENDL;
1562                        //qDebug() << "Awards::setAwardDXCCConfirmed-Update: LastError-n: " << QString::number(query.lastError().nativeErrorCode() ) << QT_ENDL;
1563                     return errorCode;
1564                 }
1565 
1566             }
1567             else
1568             {
1569                 // Not valid record
1570                    //qDebug() << "Awards::setAwardDXCCConfirmed: Not valid record" << QT_ENDL;
1571                 return -3;
1572             }
1573         }
1574         else
1575         {
1576             // Not next record
1577                //qDebug() << "Awards::setAwardDXCCConfirmed: Not next record" << QT_ENDL;
1578             return -2;
1579         }
1580     }
1581     else
1582     { //
1583         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1584         errorCode = query.lastError().nativeErrorCode();
1585         query.finish();
1586            //qDebug() << "Awards::setAwardDXCCConfirmed: LastQuery: " << query.lastQuery()  << QT_ENDL;
1587            //qDebug() << "Awards::setAwardDXCCConfirmed: LastError-data: " << query.lastError().databaseText()  << QT_ENDL;
1588            //qDebug() << "Awards::setAwardDXCCConfirmed: LastError-driver: " << query.lastError().driverText()  << QT_ENDL;
1589            //qDebug() << "Awards::setAwardDXCCConfirmed: LastError-n: " << QString::number(query.lastError().nativeErrorCode() ) << QT_ENDL;
1590         return errorCode;
1591     }
1592 
1593     return 1;
1594 }
1595 
1596 */
1597 
setDXCCToQSO(const int _dxcc,const int _qsoid)1598 int Awards::setDXCCToQSO(const int _dxcc, const int _qsoid) // Defines the DXCC in a QSO
1599 {
1600        //qDebug() << "Awards::setDXCCToQSO: " << QString::number(_dxcc) << "/" << QString::number(_qsoid) << QT_ENDL;
1601     int errorCode = -1;
1602     QString queryString = QString("UPDATE log SET dxcc='%1' WHERE id='%2'").arg(_dxcc).arg(_qsoid);
1603     QSqlQuery query = QSqlQuery();
1604     bool sqlOK = query.exec(queryString);
1605     if (sqlOK)
1606     {
1607         query.finish();
1608         return 1;
1609     }
1610     else
1611     {
1612         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1613            //qDebug() << "Awards::setDXCCToQSO: DXCC Updated in Log but failed...." << QT_ENDL;
1614         errorCode = query.lastError().nativeErrorCode().toInt();
1615         query.finish();
1616            //qDebug() << "Awards::setDXCCToQSO: LastQuery: " << query.lastQuery()  << QT_ENDL;
1617            //qDebug() << "Awards::setDXCCToQSO: LastError-data: " << query.lastError().databaseText()  << QT_ENDL;
1618            //qDebug() << "Awards::setDXCCToQSO: LastError-driver: " << query.lastError().driverText()  << QT_ENDL;
1619            //qDebug() << "Awards::setDXCCToQSO: LastError-n: " << QString::number(query.lastError().nativeErrorCode() ) << QT_ENDL;
1620         return errorCode;
1621     }
1622 }
1623 
setCQToQSO(const int _cqz,const int _qsoid)1624 int Awards::setCQToQSO(const int _cqz, const int _qsoid) // Defines the CQ in a QSO
1625 {
1626        //qDebug() << "Awards::setCQToQSO: " << QString::number(_cqz) << "/" << QString::number(_qsoid) << QT_ENDL;
1627     int errorCode = -1;
1628     QString queryString = QString("UPDATE log SET cqz='%1' WHERE id='%2'").arg(_cqz).arg(_qsoid);
1629     QSqlQuery query = QSqlQuery();
1630     bool sqlOK = query.exec(queryString);
1631     if (sqlOK)
1632     {
1633         query.finish();
1634         return 1;
1635     }
1636     else
1637     {
1638         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1639            //qDebug() << "Awards::setCQToQSO: DXCC Updated in Log but failed...." << QT_ENDL;
1640         errorCode = query.lastError().nativeErrorCode().toInt();
1641         query.finish();
1642            //qDebug() << "Awards::setCQToQSO: LastQuery: " << query.lastQuery()  << QT_ENDL;
1643            //qDebug() << "Awards::setCQToQSO: LastError-data: " << query.lastError().databaseText()  << QT_ENDL;
1644            //qDebug() << "Awards::setCQToQSO: LastError-driver: " << query.lastError().driverText()  << QT_ENDL;
1645            //qDebug() << "Awards::setCQToQSO: LastError-n: " << QString::number(query.lastError().nativeErrorCode() ) << QT_ENDL;
1646         return errorCode;
1647     }
1648 }
1649 
getIsDXCCConfirmed(const int _dxcc,const int _logNumber)1650 bool Awards::getIsDXCCConfirmed(const int _dxcc, const int _logNumber)
1651 {
1652   //  isDXCCConfirmed(const int _dxcc, const int _currentLog);
1653     return dataProxy->isDXCCConfirmed(_dxcc, _logNumber);
1654 
1655 }
1656 
getDXMarathonQSO(const int _year,const int _logNumber)1657 int Awards::getDXMarathonQSO(const int _year, const int _logNumber)
1658 {
1659        //qDebug() << "Awards::getDXMarathonQSO: " << QString::number(_year) << QT_ENDL;
1660 
1661     return dxMarathon->getDXMarathonQSO(_year, _logNumber);
1662 }
1663 
getDXMarathonDXCC(const int _year,const int _logNumber)1664 int Awards::getDXMarathonDXCC(const int _year, const int _logNumber)
1665 {
1666        //qDebug() << "Awards::getDXMarathonDXCC: " << QString::number(_year) << QT_ENDL;
1667 
1668     return dxMarathon->getDXMarathonDXCC(_year, _logNumber);
1669 }
1670 
getDXMarathonCQ(const int _year,const int _logNumber)1671 int Awards::getDXMarathonCQ(const int _year, const int _logNumber)
1672 {
1673        //qDebug() << "Awards::getDXMarathonCQ: " << QString::number(_year) << QT_ENDL;
1674     return dxMarathon->getDXMarathonCQ(_year, _logNumber);
1675 }
1676 
getDXMarathonScore(const int _year,const int _logNumber)1677 int Awards::getDXMarathonScore(const int _year, const int _logNumber)
1678 {
1679        //qDebug() << "Awards::getDXMarathonScore: " << QString::number(_year) << QT_ENDL;
1680 
1681     return dxMarathon->getDXMarathonScore(_year, _logNumber);
1682 
1683 }
1684 
isDXMarathonNeed(const int _dxcc,const int _cq,const int _year,const int _logNumber)1685 bool Awards::isDXMarathonNeed(const int _dxcc, const int _cq, const int _year, const int _logNumber)
1686 {
1687     return dxMarathon->neededForDXMarathon(_dxcc, _cq, _year, _logNumber);
1688 }
1689 
dxccStatusBand(const int _ent,const int _band,const int _logNumber)1690 int Awards::dxccStatusBand(const int _ent, const int _band, const int _logNumber) //-1 error / 0 Not worked / 1 worked / 2 confirmed
1691 {
1692     //-1 error / 0 Not worked / 1 worked / 2 confirmed
1693     //qDebug() << "Awards::dxccStatusBand: " << QString::number(_ent) << "/" << QString::number(_band) << QT_ENDL;
1694 
1695         QSqlQuery query = QSqlQuery();
1696         QString queryString = QString("SELECT DISTINCT qsl_rcvd, lotw_qsl_rcvd FROM log WHERE dxcc='%1' AND qsl_rcvd='Y' AND bandid='%2' AND lognumber='%4' ").arg(QString::number(_ent)).arg(QString::number(_band)).arg(QString::number(_logNumber));
1697 
1698         int status = 0;
1699  //qDebug() << "Awards::dxccStatusBand: " << queryString << QT_ENDL;
1700         if (query.exec(queryString))
1701         {
1702             while (query.next())
1703             {
1704                 if ( query.isValid() )
1705                 {
1706                     if((query.value(0).toString() == "Y") || (query.value(1).toString() == "Y"))         // Confirmed
1707                     {
1708                         query.finish();
1709                         return 2;
1710                     }
1711                     status = 1;
1712                 }                                           // Not present => Not worked
1713             }
1714             query.finish();
1715         }
1716         else
1717         {
1718             //TODO: Manage the query error
1719               emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1720               query.finish();
1721               return -1;
1722         }
1723 
1724        //qDebug() << "Awards::dxccStatusBand: return - 0.3" << QT_ENDL;
1725         return status;                                       // if arrives to here decision => not worked
1726 }
1727 
1728 
1729 
1730 /*
1731 int Awards::dxccStatusBand(const int _ent, const int _band, const int _logNumber) //-1 error / 0 Not worked / 1 worked / 2 confirmed
1732 {
1733     //-1 error / 0 Not worked / 1 worked / 2 confirmed
1734     //qDebug() << "Awards::dxccStatusBand: " << QString::number(_ent) << "/" << QString::number(_band) << QT_ENDL;
1735 
1736         QSqlQuery query = QSqlQuery();
1737         QString queryString = QString();
1738 
1739         queryString = QString("SELECT confirmed FROM awarddxcc WHERE dxcc='%1' AND band='%2' AND lognumber='%4' ").arg(QString::number(_ent)).arg(QString::number(_band)).arg(QString::number(_logNumber));
1740         int status = 0;
1741 
1742         if (query.exec(queryString))
1743         {
1744             while (query.next())
1745             {
1746                 if ( query.isValid() )
1747                 {
1748                     if(query.value(0).toString() == "1")         // Confirmed
1749                     {
1750                         query.finish();
1751                         return 2;
1752                     }
1753                     else if(query.value(0).toString() == "0")    // Worked
1754                     {
1755                         if (status < 1)
1756                         {
1757                             status = 1;
1758                         }
1759                     }
1760                 }                                           // Not present => Not worked
1761             }
1762             query.finish();
1763         }
1764         else
1765         {
1766             //TODO: Manage the query error
1767               emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1768               query.finish();
1769               return -1;
1770         }
1771 
1772        //qDebug() << "Awards::dxccStatusBand: return - 0.3" << QT_ENDL;
1773         return status;                                       // if arrives to here decision => not worked
1774 }
1775 
1776 */
1777 
dxccStatusMode(const int _ent,const int _mode,const int _logNumber)1778 int Awards::dxccStatusMode(const int _ent, const int _mode, const int _logNumber) //-1 error / 0 Not worked / 1 worked / 2 confirmed
1779 {
1780     //-1 error / 0 Not worked / 1 worked / 2 confirmed
1781          //qDebug() << "Awards::dxccStatusMode: " << QString::number(_ent) << "/" << QString::number(_mode) << QT_ENDL;
1782 
1783         QSqlQuery query = QSqlQuery();
1784         QString queryString = QString();
1785         if (_mode == -1)
1786         {
1787             return -1;
1788         }
1789         int status = 0;
1790         queryString = QString("SELECT DISTINCT qsl_rcvd, lotw_qsl_rcvd FROM log WHERE dxcc='%1' AND modeid='%2' AND lognumber='%4' ").arg(QString::number(_ent)).arg(QString::number(_mode)).arg(QString::number(_logNumber));
1791 
1792 
1793         if (query.exec(queryString))
1794         {
1795             while (query.next())
1796             {
1797                 if ( query.isValid() )
1798                 {
1799                     if((query.value(0).toString() == "Y") || (query.value(1).toString() == "Y"))         // Confirmed
1800                     {
1801                         query.finish();
1802                         return 2;
1803                     }
1804                     status = 1;
1805                 }                                           // Not present => Not worked
1806             }
1807             query.finish();
1808         }
1809         else
1810         { // The query fails...
1811             emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1812             query.finish();
1813           //TODO: Manage the query error
1814             return -1;
1815         }
1816         return status;                                       // if arrives to here decision => not worked
1817 }
1818 
1819 /*
1820 int Awards::dxccStatusMode(const int _ent, const int _mode, const int _logNumber) //-1 error / 0 Not worked / 1 worked / 2 confirmed
1821 {
1822     //-1 error / 0 Not worked / 1 worked / 2 confirmed
1823          //qDebug() << "Awards::dxccStatusMode: " << QString::number(_ent) << "/" << QString::number(_mode) << QT_ENDL;
1824 
1825         QSqlQuery query = QSqlQuery();
1826         QString queryString = QString();
1827         if (_mode == -1)
1828         {
1829             return -1;
1830         }
1831         int status = 0;
1832         queryString = QString("SELECT confirmed FROM awarddxcc WHERE dxcc='%1' AND mode='%2' AND lognumber='%4' ").arg(QString::number(_ent)).arg(QString::number(_mode)).arg(QString::number(_logNumber));
1833 
1834 
1835         if (query.exec(queryString))
1836         {
1837             while (query.next())
1838             {
1839                 if ( query.isValid() )
1840                 {
1841                     if(query.value(0).toString() == "1")         // Confirmed
1842                     {
1843                         query.finish();
1844                         return 2;
1845                     }
1846                     else if(query.value(0).toString() == "0")    // Worked
1847                     {
1848                         if (status < 1)
1849                         {
1850                             status = 1;
1851                         }
1852                     }
1853                 }                                           // Not present => Not worked
1854             }
1855             query.finish();
1856         }
1857         else
1858         { // The query fails...
1859             emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1860             query.finish();
1861           //TODO: Manage the query error
1862             return -1;
1863         }
1864         return status;                                       // if arrives to here decision => not worked
1865 }
1866 */
setManageModes(const bool _manageModes)1867 void Awards::setManageModes(const bool _manageModes)
1868 {
1869     manageModes = _manageModes;
1870 }
1871 
updateDXCCBandsStatus(const int _logNumber)1872 bool Awards::updateDXCCBandsStatus(const int _logNumber)
1873 {
1874     //qDebug() << Q_FUNC_INFO << ": " << QString::number(_logNumber);
1875     //QList<EntityBandStatus> dxccStatus;
1876     QSqlQuery query;
1877     QString stringQuery = QString();
1878     bool sqlOK = false;
1879     //QString answer;
1880     if (_logNumber>0)
1881     {
1882         //stringQuery = QString("SELECT DISTINCT dxcc, bandid, qsl_rcvd, lotw_qsl_rcvd FROM log WHERE dxcc>0 AND lognumber='%1'ORDER BY dxcc").arg(_logNumber);
1883         stringQuery = QString("SELECT DISTINCT dxcc, bandid, qsl_rcvd, lotw_qsl_rcvd, id FROM log lognumber='%1'ORDER BY dxcc").arg(_logNumber);
1884     }
1885     else
1886     {
1887         stringQuery = QString("SELECT DISTINCT dxcc, bandid, qsl_rcvd, lotw_qsl_rcvd, id FROM log ORDER BY dxcc");
1888     }
1889 
1890     int qsos = 0;
1891     sqlOK = query.exec(stringQuery);
1892     if (sqlOK)
1893     {
1894         //qDebug() << Q_FUNC_INFO << " - exec query: " << query.lastQuery ();
1895 
1896         dxccStatusList.clear();
1897         while(query.next())
1898         {
1899             if (query.isValid())
1900             {
1901                 qsos++;
1902                 EntityBandStatus ent;
1903                 if (query.value(0).toInt()==0)
1904                 {
1905                     //qDebug() << Q_FUNC_INFO << " - Returning false for: QSOid" << QString::number(query.value(4).toInt());
1906                     return false;
1907                 }
1908                 ent.dxcc = query.value(0).toInt();
1909 
1910                 ent.bandid = query.value(1).toInt();
1911                 if ((query.value(2).toString () == "Y") || (query.value(3).toString () == "Y"))
1912                 {
1913                     ent.confirmed = true;
1914                 }
1915                 else
1916                 {
1917                     ent.confirmed = false;
1918                 }
1919                 dxccStatusList.append (ent);
1920             }
1921             else
1922             {
1923                 //qDebug() << Q_FUNC_INFO << ": query NOK: " << query.lastQuery ();
1924                 query.finish();
1925                 return false;
1926             }
1927         }
1928     }
1929     else
1930     {
1931         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1932         query.finish();
1933         return false;
1934     }
1935     query.finish();
1936 
1937     if ((dxccStatusList.length ()<1) && (qsos>0))
1938     {
1939         //qDebug() << Q_FUNC_INFO << " RETURN FALSE" ;
1940         // It may be the case that there are not dxcc
1941         return false;
1942     }
1943     else if (dxccStatusList.length ()<1)
1944     {
1945         //qDebug() << Q_FUNC_INFO << ": dxccStatusList length <1 ";
1946     }
1947     else if(qsos>0)
1948     {
1949                     //qDebug() << Q_FUNC_INFO << ": qsos>0 ";
1950     }
1951     else
1952     {
1953                     //qDebug() << Q_FUNC_INFO << ": ELSE";
1954     }
1955 
1956     //qDebug() << Q_FUNC_INFO << ": dxccStatusList length: " << QString::number(dxccStatusList.length ()) ;
1957     //qDebug() << Q_FUNC_INFO << ": QSOs: " << QString::number(qsos) ;
1958     return true;
1959 }
1960