mirror of
https://github.com/ea4k/klog.git
synced 2024-09-22 02:48:29 +00:00
1646 lines
57 KiB
C++
1646 lines
57 KiB
C++
#include "awards.h"
|
|
|
|
|
|
/***************************************************************************
|
|
awards.cpp - description
|
|
-------------------
|
|
begin : nov 2011
|
|
copyright : (C) 2011 by Jaime Robles
|
|
email : jaime@robles.es
|
|
***************************************************************************/
|
|
/*****************************************************************************
|
|
* This file is part of KLog. *
|
|
* *
|
|
* KLog is free software: you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation, either version 3 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* KLog is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with KLog. If not, see <http://www.gnu.org/licenses/>. *
|
|
* *
|
|
*****************************************************************************/
|
|
|
|
//#include <QDebug>
|
|
|
|
Awards::Awards()
|
|
{
|
|
//qDebug() << "Awards::Awards" << endl;
|
|
world = new World();
|
|
dataProxy = new DataProxy_SQLite();
|
|
dxMarathon = new DXMarathon();
|
|
//world->create();
|
|
|
|
//newOneColor = Qt::green;
|
|
//neededColor = Qt::darkGreen;
|
|
//workedColor = Qt::magenta;
|
|
//confirmedColor = Qt::red;
|
|
//defaultColor = Qt::gray;
|
|
|
|
newOneColor = Qt::black;
|
|
neededColor = Qt::black;
|
|
workedColor = Qt::black;
|
|
confirmedColor = Qt::black;
|
|
defaultColor = Qt::black;
|
|
|
|
dxccWorked.clear();
|
|
dxccConfirmed.clear();
|
|
wazWorked.clear();
|
|
wazConfirmed.clear();
|
|
}
|
|
|
|
Awards::~Awards()
|
|
{
|
|
|
|
}
|
|
|
|
void Awards::setAwardDXCC(const int _qsoId)
|
|
{
|
|
//qDebug() << "Awards::setAwardDXCC: _qsoId: " << QString::number(_qsoId) << endl;
|
|
QString stringQuery;
|
|
QSqlQuery query;
|
|
int nameCol;
|
|
QString _ln;
|
|
bool sqlOK;
|
|
//bool __confirmed = dataProxy->isQSLReceived(_qsoId);
|
|
|
|
|
|
QString _band, _mode, _confirmed, _qsoid, _refid, _refcon, _dxcc;
|
|
_qsoid = QString::number(_qsoId);
|
|
|
|
stringQuery = QString("SELECT dxcc, bandid, modeid, qsl_rcvd, lognumber FROM log WHERE id='%1'").arg(_qsoid);
|
|
//qDebug() << "Awards::setAwardDXCC: stringQuery: " << stringQuery << endl;
|
|
|
|
sqlOK = query.exec(stringQuery);
|
|
if (!sqlOK)
|
|
{
|
|
//qDebug() << "Awards::setAwardDXCC: 1 exec NOK: " << stringQuery << endl;
|
|
}
|
|
|
|
query.next();
|
|
QSqlRecord rec = query.record();
|
|
|
|
}
|
|
|
|
void Awards::setAwardWAZ(const int _qsoId)
|
|
{
|
|
//qDebug() << "Awards::setAwardWAZ: _qsoId: " << QString::number(_qsoId) << endl;
|
|
QString stringQuery;
|
|
QSqlQuery query;
|
|
int nameCol;
|
|
QString _ln;
|
|
|
|
QString _cqz, _band, _mode, _confirmed, _qsoid, _refid, _refcon;
|
|
_qsoid = QString::number(_qsoId);
|
|
|
|
stringQuery = QString("SELECT cqz, bandid, modeid, qsl_rcvd, lognumber FROM log WHERE id='%1'").arg(_qsoid);
|
|
//qDebug() << "Awards::setAwardWAZ: stringQuery-0: " << stringQuery << endl;
|
|
|
|
query.exec(stringQuery);
|
|
query.next();
|
|
QSqlRecord rec = query.record();
|
|
|
|
|
|
if ( query.isValid() )
|
|
{
|
|
nameCol = rec.indexOf("cqz");
|
|
_cqz = (query.value(nameCol)).toString();
|
|
nameCol = rec.indexOf("bandid");
|
|
_band = (query.value(nameCol)).toString();
|
|
nameCol = rec.indexOf("modeid");
|
|
_mode = (query.value(nameCol)).toString();
|
|
nameCol = rec.indexOf("qsl_rcvd");
|
|
_confirmed = (query.value(nameCol)).toString();
|
|
nameCol = rec.indexOf("lognumber");
|
|
_ln = (query.value(nameCol)).toString();
|
|
|
|
if (_confirmed == "Y")
|
|
{
|
|
_confirmed = "1" ;
|
|
}
|
|
else
|
|
{
|
|
_confirmed = "0";
|
|
}
|
|
}
|
|
//qDebug() << "Awards::setAwardWAZ: " << _cqz << "/" << _band << "/" << _mode << "/" << _confirmed << endl;
|
|
|
|
stringQuery = QString("SELECT id, confirmed FROM awardwaz WHERE cqz='%1' AND band='%2' AND mode='%3' AND lognumber='%4'").arg(_cqz).arg(_band).arg(_mode).arg(_ln);
|
|
//qDebug() << "Awards::setAwardWAZ: stringQuery:-1 " << stringQuery << endl;
|
|
query.exec(stringQuery);
|
|
query.next();
|
|
rec = query.record();
|
|
|
|
if (query.isValid())
|
|
{
|
|
nameCol = rec.indexOf("id");
|
|
_refid = query.value(nameCol).toString();
|
|
nameCol = rec.indexOf("confirmed");
|
|
_refcon = (query.value(nameCol)).toString();
|
|
|
|
if ( _refcon == "1")
|
|
{
|
|
// NOP -> Everything is already saved
|
|
}
|
|
else
|
|
{ // TODO: We need to modify the registry to save the confirmed status of the pair.
|
|
if (_confirmed=="1")
|
|
{
|
|
stringQuery = QString("UPDATE awardwaz SET cqz='%1', band='%2', mode='%3', confirmed='%4', qsoid='%5' WHERE id='%6'").arg(_cqz).arg(_band).arg(_mode).arg(_confirmed).arg(_qsoid).arg(_refid );
|
|
//qDebug() << "Awards::setAwardWAZ: stringQuery:-2 " << stringQuery << endl;
|
|
query.exec(stringQuery);
|
|
}
|
|
else
|
|
{
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
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(_confirmed).arg(_ln).arg(_qsoid);
|
|
//qDebug() << "Awards::setAwardWAZ: stringQuery:-3 " << stringQuery << endl;
|
|
query.exec(stringQuery);
|
|
}
|
|
}
|
|
|
|
int Awards::getDXCCWorked(const int _logNumber)
|
|
{
|
|
//qDebug() << "Awards::getDXCCWorked (logNumber): " << QString::number(_logNumber) << endl;
|
|
QSqlQuery query;
|
|
QString stringQuery;
|
|
bool sqlOK;
|
|
stringQuery = QString("SELECT count (dxcc) from (SELECT DISTINCT dxcc FROM awarddxcc WHERE lognumber='%1' AND dxcc <>'')").arg(_logNumber);
|
|
|
|
sqlOK = query.exec(stringQuery);
|
|
//qDebug() << "Awards::getDXCCWorked: stringQuery: " << stringQuery << endl;
|
|
if (sqlOK)
|
|
{
|
|
query.next();
|
|
if (query.isValid())
|
|
{
|
|
//qDebug() << "Awards::getDXCCWorked: " << QString::number((query.value(0)).toInt()) << endl;
|
|
return (query.value(0)).toInt();
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "Awards::getDXCCWorked: 0" << endl;
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "Awards::getDXCCWorked: Query error" << endl;
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
|
|
int Awards::getDXCCConfirmed(const int _logNumber)
|
|
{
|
|
//qDebug() << "Awards::getDXCCConfirmed (logNumber): " << QString::number(_logNumber) << endl;
|
|
QSqlQuery query;
|
|
QString stringQuery;
|
|
bool sqlOK;
|
|
stringQuery = QString("SELECT COUNT (dxcc) FROM (SELECT DISTINCT dxcc FROM awarddxcc WHERE confirmed='1' AND lognumber='%1' AND dxcc <>'')").arg(_logNumber);
|
|
sqlOK = query.exec(stringQuery);
|
|
//qDebug() << "Awards::getDXCCWorked: stringQuery: " << stringQuery << endl;
|
|
|
|
if (sqlOK)
|
|
{
|
|
query.next();
|
|
if (query.isValid())
|
|
{
|
|
//qDebug() << "Awards::getDXCCConfirmed: " << QString::number((query.value(0)).toInt()) << endl;
|
|
return (query.value(0)).toInt();
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "Awards::getDXCCConfirmed: 0" << endl;
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "Awards::getDXCCConfirmed: query error" << endl;
|
|
return 0;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
int Awards::getWAZWorked(const int _logNumber)
|
|
{
|
|
//qDebug() << "Awards::getWAZWorked (logNumber): " << QString::number(_logNumber) << endl;
|
|
QSqlQuery query;
|
|
QString stringQuery;
|
|
//stringQuery = QString("SELECT count (cqz) FROM (SELECT DISTINCT cqz FROM log WHERE cqz!='' AND qsl_rcvd='Y' AND lognumber='%1')").arg(_logNumber);
|
|
stringQuery = QString("SELECT count (cqz) FROM (SELECT DISTINCT cqz FROM log WHERE cqz!='' AND lognumber='%1')").arg(_logNumber);
|
|
//stringQuery = QString("SELECT count (cqz) from (SELECT DISTINCT cqz FROM awardwaz WHERE lognumber='%1' AND cqz <> '')").arg(_logNumber);
|
|
query.exec(stringQuery);
|
|
|
|
query.next();
|
|
if (query.isValid())
|
|
{
|
|
return (query.value(0)).toInt();
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
int Awards::getWAZConfirmed(const int _logNumber)
|
|
{
|
|
//qDebug() << "Awards::getWAZConfirmed (logNumber): " << QString::number(_logNumber) << endl;
|
|
|
|
QSqlQuery query;
|
|
QString stringQuery;
|
|
//Usar la siguiente para el confirmed
|
|
stringQuery = QString("SELECT count (cqz) FROM (SELECT DISTINCT cqz FROM log WHERE cqz!='' AND qsl_rcvd='Y' AND lognumber='%1')").arg(_logNumber);
|
|
//stringQuery = QString("SELECT COUNT (cqz) FROM (SELECT DISTINCT cqz FROM awardwaz WHERE lognumber='%1' AND confirmed='1' AND cqz <> '')").arg(_logNumber);
|
|
query.exec(stringQuery);
|
|
|
|
query.next();
|
|
if (query.isValid())
|
|
{
|
|
return (query.value(0)).toInt();
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
int Awards::getDXStatus (const QStringList _qs)
|
|
{
|
|
|
|
//qDebug() << "Awards::getDXStatus: Call: " << _qs.at(0) << "/ Band: " << _qs.at(1) << "/ Mode: " << _qs.at(2) << "/ Log: " << _qs.at(3) << endl;
|
|
// Receives: QStringList _qs;
|
|
//_qs << QRZ << BandId << << ModeId << lognumber;
|
|
|
|
/*
|
|
-1 - Error.
|
|
0 - New one.
|
|
1 - worked in this mode, not this band - newOneColor ( mode=-1=> 0/newOneColor )
|
|
2 - worked in this band, not this mode - neededColor ( mode=-1=> 3/neededColor )
|
|
3 - worked in this band and mode - neededColor ( mode=-1=> 3/neededColor )
|
|
4 - confirmed in this mode, not worked in this band - workedColor ( mode=-1=> 0/newOneColor )
|
|
5 - confirmed in this band, not worked in this mode - neededColor ( mode=-1=> 8/confirmedColor )
|
|
6 - confirmed in this mode, not confirmed, but worked in this band - workedColor ( mode=-1=> 3/neededColor )
|
|
7 - confirmed in this band, not confirmed, but worked in this mode - workedColor ( mode=-1=> 8/confirmedColor )
|
|
8 - confirmed in this band and mode - confirmedColor ( mode=-1=> 8/confirmedColor )
|
|
*/
|
|
|
|
/*
|
|
0 - New One - Never worked before - RED
|
|
1 - Needed - New one in this band - ORANGE
|
|
2 - Worked - Worked in this band but not confirmed - YELLOW
|
|
3 - Confirmed - Confirmed in this band - GREEN
|
|
*/
|
|
|
|
|
|
if (_qs.length() != 4 )
|
|
{
|
|
return -1;
|
|
}
|
|
int errorCode = 0;
|
|
|
|
int _band = _qs.at(1).toInt();
|
|
int _mode = _qs.at(2).toInt();
|
|
int _logNumber = _qs.at(3).toInt();
|
|
int dxccEntity = world->getQRZARRLId(_qs.at(0) );
|
|
|
|
//qDebug() << "Awards::getDXStatus: dxccEntity: " << QString::number(dxccEntity) << endl;
|
|
|
|
|
|
bool checkingMode = true;
|
|
if (_mode==-1)
|
|
{
|
|
checkingMode = false;
|
|
//qDebug() << "Awards::getDXStatus: checkingMode = FALSE" << endl;
|
|
}
|
|
|
|
switch(dxccStatus(dxccEntity, _logNumber))
|
|
{ //-1 error / 0 Not worked / 1 worked / 2 confirmed
|
|
case 0: // Not worked in any band => NEW ONE!
|
|
return 0;
|
|
break;
|
|
case 1: // Worked in another band, but not confirmed => Could be new one, but it has been worked
|
|
switch (dxccStatusBandMode (dxccEntity, _band, _mode, _logNumber, checkingMode))
|
|
{// Status in this band & Mode? //-1 error / 0 Not worked / 1 worked / 2 confirmed
|
|
case 0: //
|
|
return 1;
|
|
break;
|
|
case 1: //
|
|
return 2;
|
|
break;
|
|
default:
|
|
return -1;
|
|
break;
|
|
}
|
|
break;
|
|
case 2: // Confirmed
|
|
switch (dxccStatusBandMode (dxccEntity, _band, _mode, _logNumber, checkingMode))
|
|
{// Status in this band & Mode? //-1 error / 0 Not worked / 1 worked / 2 confirmed
|
|
case 0: // Not worked in this band&Mode
|
|
return 1;
|
|
break;
|
|
case 1: // Worked in this band&Mode
|
|
return 2;
|
|
break;
|
|
case 2: // Confirmed in this band&Mode
|
|
return 3;
|
|
break;
|
|
default:
|
|
return -1;
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
return -1;
|
|
break;
|
|
}
|
|
return -1;
|
|
}
|
|
int Awards::dxccStatusBandMode(const int _ent, const int _band, const int _mode, const int _logNumber, bool _checkingMode)
|
|
{//-1 error / 0 Not worked / 1 worked / 2 confirmed
|
|
//qDebug() << "Awards::dxccStatusBandMode: " << QString::number(_ent) << "/" << QString::number(_band) << "/" << QString::number(_mode) << endl;
|
|
QSqlQuery query = QSqlQuery();
|
|
QString queryString = QString();
|
|
|
|
if (_checkingMode)
|
|
{
|
|
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));
|
|
}
|
|
else
|
|
{
|
|
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));
|
|
}
|
|
|
|
|
|
if (query.exec(queryString))
|
|
{
|
|
if (query.next())
|
|
{
|
|
if ( query.isValid() )
|
|
{
|
|
if(query.value(0).toInt() == 1)
|
|
{
|
|
return 2;
|
|
}
|
|
else if(query.value(0).toInt() == 0)
|
|
{
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
else
|
|
{ // No value => Not Worked
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
else
|
|
{ // The query fails...
|
|
//TODO: Manage the query error
|
|
return -1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
int Awards::dxccStatus(const int _ent, const int _logNumber)
|
|
{//-1 error / 0 Not worked / 1 worked / 2 confirmed
|
|
//qDebug() << "Awards::dxccStatus: " << QString::number(_ent) << endl;
|
|
QSqlQuery query = QSqlQuery();
|
|
QString queryString = QString();
|
|
int worked = 0;
|
|
|
|
queryString = QString("SELECT confirmed FROM awarddxcc WHERE dxcc='%1' AND lognumber='%2' ").arg(QString::number(_ent)).arg(QString::number(_logNumber));
|
|
|
|
if (query.exec(queryString))
|
|
{
|
|
while (query.next())
|
|
{
|
|
if ( query.isValid() )
|
|
{
|
|
if(query.value(0).toInt() == 1)
|
|
{
|
|
return 2;
|
|
}
|
|
else if(query.value(0).toInt() == 0)
|
|
{
|
|
worked = 1;
|
|
}
|
|
}
|
|
}
|
|
return worked;
|
|
|
|
}
|
|
else
|
|
{ // The query fails...
|
|
//TODO: Manage the query error
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
QColor Awards::getQRZDXStatusColor(const QStringList _qs)
|
|
{
|
|
//qDebug() << "Awards::getQRZDXStatusColor qs.length: " << QString::number(_qs.length()) << endl;
|
|
|
|
//From Search QSO to QSL: q << _call << bandid << _mode << QString::number(currentLog);
|
|
|
|
|
|
//qDebug() << "Awards::getQRZDXStatusColor: " << _qs.at(0) << "/" << _qs.at(1) << "/" << _qs.at(2) << _qs.at(3) << endl;
|
|
// Receives: QStringList _qs;
|
|
//_qs << QRZ << BandID << ModeId << lognumber;
|
|
|
|
/*
|
|
0 - New One
|
|
1 - Needed
|
|
2 - Worked
|
|
3 - Confirmed
|
|
*/
|
|
|
|
QColor returnedColor;
|
|
int status = getDXStatus(_qs);
|
|
//qDebug() << "Awards::getQRZDXStatusColor: status: " << QString::number(status) << endl;
|
|
switch (status) {
|
|
|
|
case 0:
|
|
returnedColor = newOneColor;
|
|
//qDebug() << "Awards::getQRZDXStatusColor: 0: " << returnedColor.name() << endl;
|
|
|
|
break;
|
|
case 1:
|
|
returnedColor = neededColor;
|
|
//qDebug() << "Awards::getQRZDXStatusColor: 1: " << returnedColor.name() << endl;
|
|
break;
|
|
case 2:
|
|
returnedColor = workedColor;
|
|
//qDebug() << "Awards::getQRZDXStatusColor: 2: " << returnedColor.name() << endl;
|
|
break;
|
|
case 3:
|
|
returnedColor = confirmedColor;
|
|
//qDebug() << "Awards::getQRZDXStatusColor: 3: " << returnedColor.name() << endl;
|
|
break;
|
|
default:
|
|
returnedColor = defaultColor;
|
|
//qDebug() << "Awards::getQRZDXStatusColor: Def: " << returnedColor.name() << endl;
|
|
break;
|
|
|
|
}
|
|
return returnedColor;
|
|
}
|
|
|
|
|
|
|
|
|
|
QString Awards::checkIfValidIOTA(const QString _tiota)
|
|
{
|
|
/**********************************
|
|
IOTA should be always with this format: CC-NNN
|
|
being:
|
|
- CC the shortname of the continent
|
|
- NNN Number of the reference.
|
|
NNN has ALWAYS to include THREE(3) characters.
|
|
ADIF Specs says:
|
|
CC is the continent designator {NA, SA, EU , AF, OC, AS, AN}
|
|
XXX is the island designator, where 0 <= XXX ,<= 999 [use leading zeroes]
|
|
|
|
Returns a valid format IOTA if possible and "" in other cases.
|
|
|
|
************************************/
|
|
//qDebug() << "Awards::checkIfValidIOTA: " << _tiota << endl;
|
|
bool _valid = false;
|
|
QString _continent;
|
|
QString _number;
|
|
|
|
if (_tiota.count("-") == 1)
|
|
{
|
|
QStringList _values = _tiota.split("-", QString::SkipEmptyParts);
|
|
_continent = _values.at(0);
|
|
_number = _values.at(1);
|
|
}
|
|
else
|
|
{
|
|
return "";
|
|
}
|
|
|
|
//qDebug() << "Awards::checkIfValidIOTA (cont) " << _continent << endl;
|
|
//qDebug() << "Awards::checkIfValidIOTA (numb): " << _number << endl;
|
|
|
|
// Check if continent is valid
|
|
QString stringQuery = QString("SELECT id FROM continent WHERE shortname ='%1'").arg(_continent);
|
|
|
|
QSqlQuery query;
|
|
query.exec(stringQuery);
|
|
while (query.next()) {
|
|
if (query.isValid())
|
|
{
|
|
_valid = true;
|
|
|
|
if ( (_number.toInt() >0 ) && ((_number.toInt()) < 1000 ))
|
|
{
|
|
if ((_number.length()) == 3)
|
|
{
|
|
return _continent + "-" + _number ;
|
|
}
|
|
else if ((_number.length()) == 2)
|
|
{
|
|
return _continent + "-0" + QString::number((_number).toInt());
|
|
}
|
|
else if ((_number.length()) == 1)
|
|
{
|
|
return _continent + "-00" + QString::number((_number).toInt());
|
|
}
|
|
else
|
|
{
|
|
return "";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return "";
|
|
}
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
|
|
|
|
void Awards::setColors (const QString _newOne, const QString _needed, const QString _worked, const QString _confirmed, const QString _default)
|
|
//void Awards::setColors (const QString &_newOne, const QString &_needed, const QString &_worked, const QString &_confirmed, const QString &_default)
|
|
{
|
|
//qDebug() << "Awards::setColors: " << _newOne << "/" << _needed << "/" << _worked << "/" << _confirmed << "/" << _default << endl;
|
|
|
|
defaultColor = QColor(_default.toUpper());
|
|
neededColor = QColor(_needed.toUpper());
|
|
workedColor = QColor(_worked.toUpper());
|
|
confirmedColor = QColor(_confirmed.toUpper());
|
|
newOneColor = QColor(_newOne.toUpper());
|
|
|
|
if (defaultColor.isValid())
|
|
{
|
|
defaultColor.setNamedColor(_default.toUpper());
|
|
}
|
|
else
|
|
{
|
|
}
|
|
|
|
if (neededColor.isValid())
|
|
{
|
|
neededColor.setNamedColor(_needed.toUpper());
|
|
}
|
|
else
|
|
{
|
|
}
|
|
|
|
|
|
if (confirmedColor.isValid())
|
|
{
|
|
confirmedColor.setNamedColor(_confirmed.toUpper());
|
|
}
|
|
else
|
|
{
|
|
}
|
|
|
|
if (newOneColor.isValid())
|
|
{
|
|
newOneColor.setNamedColor(_newOne.toUpper());
|
|
}
|
|
else
|
|
{
|
|
}
|
|
|
|
if (workedColor.isValid())
|
|
{
|
|
workedColor.setNamedColor(_worked.toUpper());
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "Awards::setColors: Worked NOT VALID" << endl;
|
|
}
|
|
}
|
|
|
|
QColor Awards::getDefaultColor()
|
|
{
|
|
return defaultColor;
|
|
}
|
|
|
|
void Awards::recalculateAwards()
|
|
{
|
|
/*
|
|
TODO: I need to optimize this function.
|
|
The select & insert of setAwardDXCC are too slow)
|
|
Should go in a transaction
|
|
*/
|
|
|
|
//qDebug() << "Awards::recalculateAwards" << endl;
|
|
//select distinct dxcc, band, mode from awarddxcc
|
|
QList<QString> awardsQList;
|
|
awardsQList.clear();
|
|
|
|
QSqlDatabase db = QSqlDatabase::database();
|
|
|
|
//1.- Delete ALL the data in awarddxcc and awardwaz
|
|
QSqlQuery query, queryInsert, queryCQZ, queryUpdate;
|
|
QString queryString, aux, _call, _qslStatus;
|
|
bool cancelPressed = false;
|
|
bool CQZknown = false;
|
|
bool CQZknownBefore = false;
|
|
bool DXCCknown = false;
|
|
bool DXCCknownBefore = false;
|
|
bool queryOk = false;
|
|
bool queryOkcq = false;
|
|
int errorCode = -1;
|
|
int nameCol, _id, _dxcc, _band, _mode, _cqz, _logNumber, _confirmed;
|
|
|
|
|
|
int i = 0;
|
|
int step = 1;
|
|
int numberOfQsos = 0;
|
|
if (query.exec("SELECT MAX(id) FROM log"))
|
|
{
|
|
query.next();
|
|
numberOfQsos = query.value(0).toInt();
|
|
//qDebug() << "Awards::recalculateAwards: MAX = " << QString::number(numberOfQsos) << endl;
|
|
step = getProgresStepForDialog(numberOfQsos);
|
|
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "Awards::recalculateAwards: Query FAILED so MAX = " << QString::number(numberOfQsos) << endl;
|
|
}
|
|
|
|
|
|
query.exec("DELETE FROM awarddxcc");
|
|
query.exec("DELETE FROM awardwaz");
|
|
|
|
QProgressDialog progress("Updating the award status... " + QString::number(numberOfQsos) + " QSOs", "Abort Update", 0, numberOfQsos);
|
|
progress.setWindowModality(Qt::WindowModal);
|
|
|
|
queryString = QString("SELECT dxcc, call, bandid, modeid, qsl_rcvd, lognumber, cqz, id FROM log");
|
|
if (query.exec(queryString))
|
|
{
|
|
QSqlRecord rec = query.record();
|
|
|
|
db.transaction();
|
|
|
|
while ( (query.next()) && (!cancelPressed))
|
|
{
|
|
i++;
|
|
DXCCknownBefore = false;
|
|
CQZknownBefore = false;
|
|
nameCol = rec.indexOf("call");
|
|
_call = (query.value(nameCol)).toString();
|
|
|
|
|
|
nameCol = rec.indexOf("id");
|
|
_id = (query.value(nameCol)).toInt();
|
|
|
|
|
|
nameCol = rec.indexOf("dxcc");
|
|
_dxcc = (query.value(nameCol)).toInt();
|
|
//qDebug() << "Awards::recalculateAwards: CALL/ID/DXCC: " << _call << "/"<< _id << "/" << QString::number(_dxcc) << endl;
|
|
|
|
if (_dxcc<=0)
|
|
{
|
|
//qDebug() << "Awards::recalculateAwards: DXCC not known for id: " << QString::number(_id) << "Searching..." << endl;
|
|
_dxcc = world->getQRZARRLId(_call);
|
|
if (_dxcc<=0)
|
|
{
|
|
//qDebug() << "Awards::recalculateAwards: DXCC not known for id: " << QString::number(_id) << endl;
|
|
DXCCknown = false;
|
|
|
|
}
|
|
else
|
|
{
|
|
DXCCknown = true;
|
|
//qDebug() << "Awards::recalculateAwards: DXCC found " << QString::number(_id) << "/" << QString::number(_dxcc)<< endl;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DXCCknown = true;
|
|
DXCCknownBefore = true;
|
|
//qDebug() << "Awards::recalculateAwards: DXCC already known for id: " << QString::number(_id) << " = " << QString::number(_dxcc) << endl;
|
|
}
|
|
|
|
//qDebug() << "Awards::recalculateAwards: CALL/ID/DXCC-2: " << _call << "/"<< _id << "/" << QString::number(_dxcc) << endl;
|
|
|
|
nameCol = rec.indexOf("bandid");
|
|
_band = (query.value(nameCol)).toInt();
|
|
|
|
nameCol = rec.indexOf("modeid");
|
|
_mode = (query.value(nameCol)).toInt();
|
|
|
|
nameCol = rec.indexOf("qsl_rcvd");
|
|
_qslStatus = (query.value(nameCol)).toString();
|
|
if (_qslStatus == "Y")
|
|
{
|
|
_confirmed = 1 ;
|
|
}
|
|
else
|
|
{
|
|
_confirmed = 0;
|
|
}
|
|
|
|
//qDebug() << "Awards::recalculateAwards: Recalculating CQZ " << endl;
|
|
|
|
nameCol = rec.indexOf("cqz");
|
|
_cqz = (query.value(nameCol)).toInt();
|
|
//awardsQList << QString::number(_cqz);
|
|
if ((_cqz<=0) && (_dxcc>0))
|
|
{
|
|
//qDebug() << "Awards::recalculateAwards: CQZ not known for id: " << QString::number(_id) << "Searching..." << endl;
|
|
_cqz = world->getEntityCqz(_dxcc);
|
|
if (_cqz<=0)
|
|
{
|
|
//qDebug() << "Awards::recalculateAwards: CQZ not known for id: " << QString::number(_id) << endl;
|
|
CQZknown = false;
|
|
}
|
|
else
|
|
{
|
|
CQZknown = true;
|
|
//qDebug() << "Awards::recalculateAwards: CQZ found " << QString::number(_id) << "/" << QString::number(_cqz)<< endl;
|
|
}
|
|
}
|
|
else if ((_cqz<=0) && (_dxcc<=0))
|
|
{
|
|
//qDebug() << "Awards::recalculateAwards: CQZ nor DXCC not known for id: " << QString::number(_id) << endl;
|
|
CQZknown = false;
|
|
DXCCknown = false;
|
|
}
|
|
else
|
|
{
|
|
CQZknown = true;
|
|
CQZknownBefore = true;
|
|
//qDebug() << "Awards::recalculateAwards: CQZ already known for id: " << QString::number(_id) << " = " << QString::number(_cqz) << endl;
|
|
}
|
|
|
|
nameCol = rec.indexOf("lognumber");
|
|
_logNumber = (query.value(nameCol)).toInt();
|
|
|
|
if (_dxcc>0)
|
|
{
|
|
awardsQList << QString::number(_dxcc);
|
|
if (_cqz>0)
|
|
{
|
|
awardsQList << QString::number(_cqz);
|
|
}
|
|
else
|
|
{
|
|
awardsQList << QString::number(-1);
|
|
}
|
|
awardsQList << QString::number(_band);
|
|
awardsQList << QString::number(_mode);
|
|
awardsQList << QString::number(_confirmed);
|
|
awardsQList << QString::number(_id);
|
|
awardsQList << QString::number(_logNumber);
|
|
}
|
|
// awardsQList << _dxcc / _cqz / _band / _mode / confirmed / id / logNumber
|
|
if ((DXCCknown) && (!DXCCknownBefore))
|
|
{ //I should update the DXCC in the log as it was not known before and now it is!
|
|
errorCode = setDXCCToQSO(_dxcc, _id);
|
|
}
|
|
if ((CQZknown) && (!CQZknownBefore))
|
|
{ //I should update the DXCC in the log as it was not known before and now it is!
|
|
errorCode = setCQToQSO(_cqz, _id);
|
|
}
|
|
|
|
if (( (i % step ) == 0) )
|
|
{ // To update the speed I will only show the progress once each X QSOs
|
|
|
|
aux = "Updating the award status... " + QString::number(i) + "/" + QString::number(numberOfQsos);
|
|
progress.setLabelText(aux);
|
|
progress.setValue(i);
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
|
|
if (progress.wasCanceled())
|
|
{
|
|
cancelPressed = true;
|
|
}
|
|
|
|
} // END of While
|
|
db.commit();
|
|
|
|
query.prepare( "INSERT INTO awarddxcc (dxcc, band, mode, confirmed, lognumber, qsoid) VALUES (:dxcc, :band, :mode, :confirmed, :lognumber, :qsoid)" );
|
|
queryCQZ.prepare( "INSERT INTO awardwaz (cqz, band, mode, confirmed, lognumber, qsoid) VALUES (:cqz, :band, :mode, :confirmed, :lognumber, :qsoid)" );
|
|
|
|
db.transaction();
|
|
//queryString = QString("SELECT dxcc, call, bandid, modeid, qsl_rcvd, lognumber, cqz, id FROM log");
|
|
// awardsQList << _dxcc / _cqz / _band / _mode / confirmed / id / logNumber
|
|
int _cqzt = -1;
|
|
for (int i = 0; i < awardsQList.size(); i++) {
|
|
|
|
query.bindValue( ":dxcc", awardsQList.at(i));
|
|
_dxcc = (awardsQList.at(i)).toInt();
|
|
|
|
i++;
|
|
_cqzt = (awardsQList.at(i)).toInt(); // We read the CQz
|
|
if (_cqzt>0) // CQ
|
|
{
|
|
queryCQZ.bindValue( ":cqz", awardsQList.at(i));
|
|
|
|
}
|
|
|
|
i++;
|
|
query.bindValue( ":band", awardsQList.at(i));
|
|
_band = (awardsQList.at(i)).toInt();
|
|
|
|
if (_cqzt>0) // CQ
|
|
{
|
|
queryCQZ.bindValue( ":band", awardsQList.at(i));
|
|
}
|
|
|
|
i++;
|
|
query.bindValue( ":mode", awardsQList.at(i));
|
|
_mode = (awardsQList.at(i)).toInt();
|
|
if (_cqzt>0) // CQ
|
|
{
|
|
queryCQZ.bindValue( ":mode", awardsQList.at(i));
|
|
}
|
|
|
|
i++;
|
|
query.bindValue( ":confirmed", awardsQList.at(i));
|
|
_confirmed = (awardsQList.at(i)).toInt();
|
|
//qDebug() << "Awards::recalculateAwards: Confirmed=" << QString::number(_confirmed) << endl;
|
|
if (_cqzt>0) // CQ
|
|
{
|
|
queryCQZ.bindValue( ":confirmed", awardsQList.at(i));
|
|
}
|
|
|
|
i++;
|
|
query.bindValue( ":qsoid", awardsQList.at(i));
|
|
_id =(awardsQList.at(i)).toInt();
|
|
if (_cqzt>0) // CQ
|
|
{
|
|
queryCQZ.bindValue( ":qsoid", awardsQList.at(i));
|
|
}
|
|
|
|
i++;
|
|
query.bindValue( ":lognumber", awardsQList.at(i));
|
|
if (_cqzt>0) // CQ
|
|
{
|
|
queryCQZ.bindValue( ":lognumber", awardsQList.at(i));
|
|
}
|
|
|
|
queryOk = query.exec(); // Add a DXCC
|
|
|
|
|
|
if (queryOk)
|
|
{// New worked QSO inserted in AwardDXCC
|
|
//qDebug() << "Awards::recalculateAwards: queryOK!" << endl;
|
|
}
|
|
else
|
|
{// Something happened while adding the new worked DXCC (may be already worked/confirmed or simply something went wrong)
|
|
//qDebug() << "Awards::recalculateAwards: queryOK = False" << endl;
|
|
errorCode = query.lastError().number();
|
|
if (errorCode == 19)
|
|
{ // More than probably the SET band/mode/DXCC is already in the DB
|
|
|
|
//qDebug() << "Awards::recalculateAwards: queryOK = False - errorCode 19" << endl;
|
|
if (_confirmed == 1)
|
|
{
|
|
//qDebug() << "Awards::recalculateAwards: queryOK = False - errorCode 19 & _confirmed = true. Updating: " << _id << "..." << endl;
|
|
errorCode = setAwardDXCCConfirmed(_band, _mode, _dxcc, _id) ;
|
|
//qDebug() << "Awards::recalculateAwards: queryOK = False - errorCode 19 & _confirmed = true. Updated: " << errorCode << "..." << endl;
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "Awards::recalculateAwards: queryOK = False - errorCode 19 & _confirmed = false, no need to update anything: " << _id << endl;
|
|
//No consigo que se mantenga cuando se ha confirmado un pais
|
|
}
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "Awards::recalculateAwards: LastQuery-2: " << query.lastQuery() << endl;
|
|
//qDebug() << "Awards::recalculateAwards: LastError-data-2: " << query.lastError().databaseText() << endl;
|
|
//qDebug() << "Awards::recalculateAwards: LastError-driver-2: " << query.lastError().driverText() << endl;
|
|
//qDebug() << "Awards::recalculateAwards: LastError-n-2: " << QString::number(query.lastError().number() ) << endl;
|
|
}
|
|
|
|
}
|
|
|
|
//queryOkcq = queryCQZ.exec(); // Add a CQz
|
|
|
|
}
|
|
|
|
db.commit();
|
|
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
//qDebug() << "Awards::recalculateAwards - END" << endl;
|
|
}
|
|
|
|
int Awards::getQSOsInLog(const int _logNumber)
|
|
{
|
|
//qDebug() << "Awards::getQSOsInLog: " << QString::number(_logNumber) << endl;
|
|
QSqlQuery query;
|
|
QString queryString;
|
|
|
|
queryString = QString("SELECT COUNT (id) FROM log WHERE lognumber='%1'").arg(_logNumber) ;
|
|
|
|
if( !query.exec(queryString) )
|
|
{
|
|
return -1;
|
|
}
|
|
else
|
|
{
|
|
query.next();
|
|
if (query.isValid())
|
|
{
|
|
return query.value(0).toInt();
|
|
}
|
|
else
|
|
{
|
|
return -2;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void Awards::setAwards(const int _dxcc, const int _waz, const int _band, const int _mode, const int _workedOrConfirmed, const int _logNumber, const int _qsoId)
|
|
{
|
|
//qDebug() << "Awards::setAwards: " << QString::number(_dxcc) << endl;
|
|
/*
|
|
_workedOrConfirmed = -1 Remove this pair
|
|
_workedOrConfirmed = 0 Set as Worked
|
|
_workedOrConfirmed = 1 Set as Confirmed
|
|
*/
|
|
int d = _dxcc;
|
|
int b = _band;
|
|
int m = _mode;
|
|
int w = _workedOrConfirmed;
|
|
int l = _logNumber;
|
|
int i = _qsoId;
|
|
//setAwardDXCC(_dxcc, _band, _mode, _workedOrConfirmed, _logNumber);
|
|
//
|
|
//bool Awards::setAwardDXCC(const int _dxcc, const int _band, const int _mode, const int _workedOrConfirmed, const int _logNumber, const int _qsoId)
|
|
|
|
setAwardDXCC(d, b, m, w, l, i);
|
|
setAwardWAZ(d, b, m, w, l, i);
|
|
//setAwardWAZ(_waz, _band, _mode, _workedOrConfirmed, _logNumber);
|
|
|
|
}
|
|
|
|
|
|
void Awards::setAwards(const int _qsoId)
|
|
{
|
|
//qDebug() << "Awards::setAwards: _qsoId: " << QString::number(_qsoId) << endl;
|
|
|
|
QString stringQuery, _confirmed, _call;
|
|
QSqlQuery query;
|
|
int nameCol;
|
|
bool DXCCknown=false;
|
|
bool CQZknown=false;
|
|
int _dxcc, _cqz, _band, _mode, _logNumber, _alreadyConfirmed;
|
|
bool _confirmedB = false;
|
|
|
|
stringQuery = QString("SELECT dxcc, call, bandid, modeid, qsl_rcvd, lognumber, cqz FROM log WHERE id='%1'").arg(_qsoId);
|
|
|
|
if (query.exec(stringQuery))
|
|
{
|
|
query.next();
|
|
QSqlRecord rec = query.record();
|
|
|
|
nameCol = rec.indexOf("call");
|
|
_call = (query.value(nameCol)).toString();
|
|
|
|
nameCol = rec.indexOf("dxcc");
|
|
_dxcc = (query.value(nameCol)).toInt();
|
|
|
|
nameCol = rec.indexOf("cqz");
|
|
_cqz = (query.value(nameCol)).toInt();
|
|
|
|
nameCol = rec.indexOf("bandid");
|
|
_band = (query.value(nameCol)).toInt();
|
|
|
|
nameCol = rec.indexOf("modeid");
|
|
_mode = (query.value(nameCol)).toInt();
|
|
|
|
nameCol = rec.indexOf("qsl_rcvd");
|
|
_confirmed = (query.value(nameCol)).toString();
|
|
|
|
nameCol = rec.indexOf("lognumber");
|
|
_logNumber = (query.value(nameCol)).toInt();
|
|
|
|
if (_dxcc <= 0)
|
|
{
|
|
_dxcc = world->getQRZARRLId(_call);
|
|
if (_dxcc > 0)
|
|
{
|
|
DXCCknown = true;
|
|
}
|
|
else
|
|
{
|
|
DXCCknown = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DXCCknown = true;
|
|
}
|
|
|
|
if ( (_cqz <= 0) && (DXCCknown) )
|
|
{
|
|
_cqz = world->getEntityCqz(_dxcc);
|
|
if (_cqz > 0)
|
|
{
|
|
CQZknown = true;
|
|
}
|
|
else
|
|
{
|
|
CQZknown = false;
|
|
}
|
|
}
|
|
else if (_cqz > 0)
|
|
{
|
|
CQZknown = true;
|
|
}
|
|
else
|
|
{
|
|
CQZknown = false;
|
|
}
|
|
|
|
|
|
if (_confirmed == "Y")
|
|
{
|
|
//qDebug() << "Awards::setAwards: QSO is CONFIRMED: " << QString::number(_qsoId) << " = " << QString::number(_dxcc) << endl;
|
|
_confirmed = "1" ;
|
|
_confirmedB = true;
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "Awards::setAwards: QSO is only WORKED: " << QString::number(_qsoId) << " = " << QString::number(_dxcc) << endl;
|
|
_confirmed = "0";
|
|
_confirmedB = false;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
else
|
|
{
|
|
//qDebug() << "Awards::setAwards: ERROR IN First Select: " << QString::number(_qsoId) << endl;
|
|
//qDebug() << "Awards::setAwardDXCC: ERROR IFS: " << QString::number(_qsoId) << endl;
|
|
//qDebug() << "Awards::setAwardDXCC: ERROR IFS Driver-error: " <<query.lastError().driverText() << endl;
|
|
//qDebug() << "Awards::setAwardDXCC: ERROR IFS DB-error: " <<query.lastError().databaseText() << endl;
|
|
//qDebug() << "Awards::setAwardDXCC: ERROR IFS lastQuery: " <<query.lastQuery() << endl;
|
|
return;
|
|
}
|
|
|
|
if (DXCCknown)
|
|
{
|
|
//int setAwardDXCCst(const int _dxcc, const int _band, const int _mode, const bool _confirmed, const int _logNumber, const int _qsoId);
|
|
// int _dxcc, _cqz, _band, _mode, _logNumber,
|
|
nameCol = setAwardDXCCst(_dxcc, _band, _mode, _confirmedB, _logNumber, _qsoId);
|
|
//qDebug() << "Awards::setAwards: OutPutDXCC: " << QString::number(_qsoId) << " = " << QString::number(nameCol) << endl;
|
|
}
|
|
|
|
if (CQZknown)
|
|
{
|
|
nameCol = setAwardWAZst(_cqz, _band, _mode, _confirmedB, _logNumber, _qsoId);
|
|
//qDebug() << "Awards::setAwards: OutPut (WAZ): " << QString::number(_qsoId) << " = " << QString::number(nameCol) << endl;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Awards::setAwardDXCC(const int _dxcc, const int _band, const int _mode, const int _workedOrConfirmed, const int _logNumber, const int _qsoId)
|
|
{
|
|
//qDebug() << "Awards::setAwardDXCC(DXCC/BAND/MODE/WORKED/log/qsoid): " << QString::number(_dxcc) << "/" << QString::number(_band) << "/" << QString::number(_mode) << "/"<< QString::number(_workedOrConfirmed) << "/" << QString::number(_logNumber) << "/" << QString::number(_qsoId) << endl;
|
|
bool isOK1 = false;
|
|
bool isOK2 = false;
|
|
QString stringQuery;
|
|
if (_dxcc<=0)
|
|
{
|
|
//qDebug() << "Awards::setAwardDXCC: DXCC < 0" << endl;
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
|
|
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
|
|
"dxcc INTEGER NOT NULL,"
|
|
"band INTEGER NOT NULL, "
|
|
"mode INTEGER NOT NULL, "
|
|
"confirmed INTEGER, "
|
|
"qsoid INTEGER NOT NULL, "
|
|
"lognumber INTEGER NOT NULL, "
|
|
*/
|
|
QSqlQuery query;
|
|
if (_dxcc>0)
|
|
{
|
|
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(_workedOrConfirmed).arg(_logNumber).arg(_qsoId);
|
|
if (query.exec(stringQuery) )
|
|
{
|
|
//qDebug() << "Awards::setAwardDXCC: OK DXCC _qsoId: " << QString::number(_qsoId) << endl;
|
|
isOK1 = true;
|
|
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "Awards::setAwardDXCC: NOK DXCC _qsoId: " << QString::number(_qsoId) << endl;
|
|
//qDebug() << "Awards::setAwardDXCC: NOK DXCC Driver-error: " <<query.lastError().driverText() << endl;
|
|
//qDebug() << "Awards::setAwardDXCC: NOK DXCC DB-error: " <<query.lastError().databaseText() << endl;
|
|
//qDebug() << "Awards::setAwardDXCC: NOK DXCC lastQuery: " <<query.lastQuery() << endl;
|
|
|
|
return false;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
|
|
|
|
// Second phase, the memory storage.
|
|
//TODO: Choose whether I use a DB or memory but both may not be optimal.
|
|
int value = (QString::number(_band) + QString::number(_mode)).toInt();
|
|
|
|
if (_workedOrConfirmed == -1)
|
|
{
|
|
dxccWorked.remove(_dxcc, value);
|
|
dxccConfirmed.remove(_dxcc, value);
|
|
isOK2 = true;
|
|
}
|
|
|
|
if ( dxccConfirmed.contains(_dxcc, value) )
|
|
{ // Already confirmed, nothing to do
|
|
isOK2 = true;
|
|
}
|
|
else
|
|
{
|
|
if (dxccWorked.contains(_dxcc, value))
|
|
{ //It is worked
|
|
if (_workedOrConfirmed == 1)
|
|
{
|
|
dxccConfirmed.insert(_dxcc, value);
|
|
isOK2 = true;
|
|
}
|
|
else
|
|
{
|
|
}
|
|
}
|
|
else
|
|
{ // It is not worked!
|
|
dxccWorked.insert(_dxcc, value);
|
|
isOK2 = true;
|
|
}
|
|
}
|
|
return (isOK1 && isOK2);
|
|
}
|
|
|
|
|
|
|
|
bool Awards::setAwardWAZ(const int _cqz, const int _band, const int _mode, const int _workedOrConfirmed, const int _logNumber, const int _qsoId)
|
|
{
|
|
//qDebug() << "Awards::setAwardWAZ: " << QString::number(_band) + QString::number(_mode) << endl;
|
|
bool isOK1 = false;
|
|
bool isOK2 = false;
|
|
/*
|
|
|
|
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
|
|
"dxcc INTEGER NOT NULL,"
|
|
"band INTEGER NOT NULL, "
|
|
"mode INTEGER NOT NULL, "
|
|
"confirmed INTEGER, "
|
|
"qsoid INTEGER NOT NULL, "
|
|
"lognumber INTEGER NOT NULL, "
|
|
*/
|
|
QSqlQuery query;
|
|
if (_cqz>0)
|
|
{
|
|
QString 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(_workedOrConfirmed).arg(_logNumber).arg(_qsoId);
|
|
if (query.exec(stringQuery) )
|
|
{
|
|
//qDebug() << "Awards::setAwardWAZ: OK CQZ _qsoId: " << QString::number(_qsoId) << endl;
|
|
isOK1 = true;
|
|
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "Awards::setAwardWAZ: NOK CQZ _qsoId: " << QString::number(_qsoId) << endl;
|
|
return false;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
|
|
|
|
// Second phase, the memory storage.
|
|
//TODO: Choose whether I use a DB or memory but both may not be optimal.
|
|
int value = (QString::number(_band) + QString::number(_mode)).toInt();
|
|
|
|
if (_workedOrConfirmed == -1)
|
|
{
|
|
wazWorked.remove(_cqz, value);
|
|
wazConfirmed.remove(_cqz, value);
|
|
isOK2 = true;
|
|
}
|
|
|
|
if ( wazConfirmed.contains(_cqz, value) )
|
|
{ // Already confirmed, nothing to do
|
|
isOK2 = true;
|
|
}
|
|
else
|
|
{
|
|
if (wazWorked.contains(_cqz, value))
|
|
{ //It is worked
|
|
if (_workedOrConfirmed == 1)
|
|
{
|
|
wazConfirmed.insert(_cqz, value);
|
|
isOK2 = true;
|
|
}
|
|
else
|
|
{
|
|
}
|
|
}
|
|
else
|
|
{ // It is not worked!
|
|
wazWorked.insert(_cqz, value);
|
|
isOK2 = true;
|
|
}
|
|
}
|
|
return (isOK1 && isOK2);
|
|
}
|
|
|
|
|
|
|
|
int Awards::getProgresStepForDialog(int totalSteps){
|
|
//qDebug() << "FileManager::getProgresStepForDialog";
|
|
if (totalSteps <=100)
|
|
return 1;
|
|
else if (totalSteps <=1000)
|
|
return 5;
|
|
else if (totalSteps <=4000)
|
|
return 10;
|
|
else if (totalSteps <=5000)
|
|
return 15;
|
|
else if (totalSteps <=7000)
|
|
return 20;
|
|
else if (totalSteps <=9999)
|
|
return 25;
|
|
else
|
|
return 50;
|
|
}
|
|
|
|
|
|
int Awards::setAwardDXCCst(const int _dxcc, const int _band, const int _mode, const bool _confirmed, const int _logNumber, const int _qsoId)
|
|
{
|
|
//qDebug() << "Awards::setAwardDXCCst-0: " << QString::number(_dxcc) << "/" << QString::number(_band) << "/" << QString::number(_mode) << "/" << QString::number(_logNumber) << "/" << QString::number(_qsoId) << endl;
|
|
int nameCol=-1;
|
|
QString _refid = QString();
|
|
/*
|
|
_confirmedQSO == false QSO is just worked
|
|
_confirmedQSO == true QSO is confirmed
|
|
|
|
*/
|
|
//TODO: Fix the way we check for data validity for this function
|
|
if (!( (_dxcc>=0) && (_band >=0) && (_mode>=0) && (_logNumber>=0) && (_qsoId >=0) ))
|
|
{
|
|
//qDebug() << "Awards::setAwardDXCCst: Not valid data received!" << endl;
|
|
return -1;
|
|
}
|
|
int _iconfirmed;
|
|
|
|
if (_confirmed)
|
|
{
|
|
_iconfirmed = 1;
|
|
}
|
|
else
|
|
{
|
|
_iconfirmed = 0;
|
|
}
|
|
|
|
//qDebug() << "Awards::setAwardDXCCst: _qsoId: " << QString::number(_qsoId) << "/" << QString::number(_iconfirmed) << endl;
|
|
QString stringQuery = QString();
|
|
QSqlQuery query;
|
|
bool sqlOK = false;
|
|
int errorCode = -1;
|
|
|
|
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);
|
|
|
|
//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);
|
|
|
|
sqlOK = query.exec(stringQuery);
|
|
if (sqlOK)
|
|
{
|
|
//qDebug() << "Awards::setAwardDXCCst-1:" << endl;
|
|
|
|
query.next();
|
|
QSqlRecord rec = query.record();
|
|
|
|
if (query.isValid())
|
|
{// We have some data, we need to UPDATE - We are only confirming!
|
|
//qDebug() << "Awards::setAwardDXCCst: We have some data, we neer to update" << endl;
|
|
nameCol = rec.indexOf("id");
|
|
_refid = query.value(nameCol).toString();
|
|
stringQuery = QString("UPDATE awarddxcc SET confirmed='1', qsoid='%1' WHERE id='%2'").arg(_qsoId).arg(_refid);
|
|
//qDebug() << "Awards::setAwardDXCCst: (UPDATE): " << stringQuery << endl;
|
|
if (sqlOK)
|
|
{ // Set of data updated
|
|
//qDebug() << "Awards::setAwardDXCCst: Data updated!" << endl;
|
|
return 1;
|
|
}
|
|
else
|
|
{ // Something failed. Trace it!
|
|
errorCode = query.lastError().number();
|
|
//qDebug() << "Awards::setAwardDXCCst(UPDATE): LastQuery: " << query.lastQuery() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCst(UPDATE): LastError-data: " << query.lastError().databaseText() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCst(UPDATE): LastError-driver: " << query.lastError().driverText() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCst(UPDATE): LastError-n: " << QString::number(query.lastError().number() ) << endl;
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
else
|
|
{ // We don't have this set, we need to INSERT
|
|
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);
|
|
sqlOK = query.exec(stringQuery);
|
|
//qDebug() << "Awards::setAwardDXCCst: We don't have data... so we INSERT" << endl;
|
|
//qDebug() << "Awards::setAwardDXCCst: (INSERT): " << stringQuery << endl;
|
|
if (sqlOK)
|
|
{ // Set of data included
|
|
|
|
//qDebug() << "Awards::setAwardDXCCst: Data inserted!" << endl;
|
|
}
|
|
else
|
|
{ // Something failed. Trace it!
|
|
errorCode = query.lastError().number();
|
|
//qDebug() << "Awards::setAwardDXCCst(INSERT): LastQuery: " << query.lastQuery() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCst(INSERT): LastError-data: " << query.lastError().databaseText() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCst(INSERT): LastError-driver: " << query.lastError().driverText() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCst(INSERT): LastError-n: " << QString::number(query.lastError().number() ) << endl;
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
else
|
|
{ // Trave the error... what may be happening???
|
|
errorCode = query.lastError().number();
|
|
//qDebug() << "Awards::setAwardDXCCst(SELECT): LastQuery: " << query.lastQuery() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCst(SELECT): LastError-data: " << query.lastError().databaseText() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCst(SELECT): LastError-driver: " << query.lastError().driverText() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCst(SELECT): LastError-n: " << QString::number(query.lastError().number() ) << endl;
|
|
return -1;
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
int Awards::setAwardWAZst(const int _cqz, const int _band, const int _mode, const bool _confirmed, const int _logNumber, const int _qsoId)
|
|
{
|
|
//qDebug() << "Awards::setAwardWAZst(CQZ/BAND/MODE/WORKED/log/qsoid): " << QString::number(_cqz) << "/" << QString::number(_band) << "/" << QString::number(_mode) << "/" << QString::number(_logNumber) << "/" << QString::number(_qsoId) << endl;
|
|
|
|
/*
|
|
_confirmed == false QSO is just worked
|
|
_confirmed == true QSO is confirmed
|
|
|
|
*/
|
|
|
|
//TODO: Fix the way we check for data validity for this function
|
|
if (!( (_cqz>=0) && (_band >=0) && (_mode>=0) && (_logNumber>=0) && (_qsoId >=0) ))
|
|
{
|
|
//qDebug() << "Awards::setAwardWAZst: some data was NOK" << endl;
|
|
return -1;
|
|
}
|
|
int _iconfirmed;
|
|
|
|
if (_confirmed)
|
|
{
|
|
_iconfirmed = 1;
|
|
|
|
}
|
|
else
|
|
{
|
|
_iconfirmed = 0;
|
|
}
|
|
|
|
|
|
QString stringQuery;
|
|
QSqlQuery query;
|
|
bool sqlOK;
|
|
int errorCode = -1;
|
|
|
|
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);
|
|
|
|
sqlOK = query.exec(stringQuery);
|
|
|
|
if ((sqlOK) && (!_confirmed)) // First time a DXCC/Band/mode is worked
|
|
{
|
|
//qDebug() << "Awards::setAwardWAZst: _qsoId: " << QString::number(_qsoId) << "- 1" << endl;
|
|
return 1;
|
|
}
|
|
else if ((sqlOK) && (_confirmed)) // First time a CQZ/Band/Mode is confirmed
|
|
{
|
|
//qDebug() << "Awards::setAwardWAZst: _qsoId: " << QString::number(_qsoId) << "- 2" << endl;
|
|
return 2;
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "Awards::setAwardWAZst: _qsoId: " << QString::number(_qsoId) << "- sqlOK ERROR: " << endl;
|
|
errorCode = query.lastError().number();
|
|
//qDebug() << "Awards::setAwardWAZst: LastQuery: " << query.lastQuery() << endl;
|
|
//qDebug() << "Awards::setAwardWAZst: LastError-data: " << query.lastError().databaseText() << endl;
|
|
//qDebug() << "Awards::setAwardWAZst: LastError-driver: " << query.lastError().driverText() << endl;
|
|
//qDebug() << "Awards::setAwardWAZst: LastError-n: " << QString::number(query.lastError().number() ) << endl;
|
|
|
|
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
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
|
|
{
|
|
//qDebug() << "Awards::setAwardDXCCConfirmed: " << QString::number(_band) << "/" << QString::number(_mode) << "/" << QString::number(_dxcc)<< "/" << QString::number(_newQSOid)<< endl;
|
|
|
|
/*
|
|
* Check if the DXCC is worked
|
|
* If worked, change the qsoid and set is confirmed
|
|
* If not worked (or _prev=0), add the DXCC as confimed
|
|
*
|
|
*/
|
|
|
|
QString stringQuery;
|
|
QSqlQuery query = QSqlQuery();
|
|
bool sqlOK = false;
|
|
int errorCode = -1;
|
|
int nameCol = -1;
|
|
QString aux = QString();
|
|
|
|
stringQuery = QString("SELECT qsoid FROM awarddxcc WHERE band='%1' AND mode='%2' AND dxcc='%3'").arg(_band).arg(_mode).arg(_dxcc);
|
|
sqlOK = query.exec(stringQuery);
|
|
if (sqlOK)
|
|
{
|
|
QSqlRecord rec = query.record();
|
|
if (query.next())
|
|
{
|
|
if (query.isValid())
|
|
{
|
|
nameCol = rec.indexOf("qsoid");
|
|
aux = (query.value(nameCol)).toString();
|
|
stringQuery = QString("UPDATE awarddxcc SET confirmed='1', qsoid='%1' WHERE qsoid='%2'").arg(_newQSOid).arg(aux);
|
|
sqlOK = query.exec(stringQuery);
|
|
if (sqlOK)
|
|
{
|
|
return _newQSOid;
|
|
}
|
|
else
|
|
{ // UPDATE failed
|
|
errorCode = query.lastError().number();
|
|
//qDebug() << "Awards::setAwardDXCCConfirmed-Update: LastQuery: " << query.lastQuery() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCConfirmed-Update: LastError-data: " << query.lastError().databaseText() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCConfirmed-Update: LastError-driver: " << query.lastError().driverText() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCConfirmed-Update: LastError-n: " << QString::number(query.lastError().number() ) << endl;
|
|
return errorCode;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
// Not valid record
|
|
//qDebug() << "Awards::setAwardDXCCConfirmed: Not valid record" << endl;
|
|
return -3;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Not next record
|
|
//qDebug() << "Awards::setAwardDXCCConfirmed: Not next record" << endl;
|
|
return -2;
|
|
}
|
|
}
|
|
else
|
|
{ //
|
|
errorCode = query.lastError().number();
|
|
//qDebug() << "Awards::setAwardDXCCConfirmed: LastQuery: " << query.lastQuery() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCConfirmed: LastError-data: " << query.lastError().databaseText() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCConfirmed: LastError-driver: " << query.lastError().driverText() << endl;
|
|
//qDebug() << "Awards::setAwardDXCCConfirmed: LastError-n: " << QString::number(query.lastError().number() ) << endl;
|
|
return errorCode;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
int Awards::setDXCCToQSO(const int _dxcc, const int _qsoid) // Defines the DXCC in a QSO
|
|
{
|
|
//qDebug() << "Awards::setDXCCToQSO: " << QString::number(_dxcc) << "/" << QString::number(_qsoid) << endl;
|
|
int errorCode = -1;
|
|
QString queryString = QString("UPDATE log SET dxcc='%1' WHERE id='%2'").arg(_dxcc).arg(_qsoid);
|
|
QSqlQuery query = QSqlQuery();
|
|
bool sqlOK = query.exec(queryString);
|
|
if (sqlOK)
|
|
{
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "Awards::setDXCCToQSO: DXCC Updated in Log but failed...." << endl;
|
|
errorCode = query.lastError().number();
|
|
//qDebug() << "Awards::setDXCCToQSO: LastQuery: " << query.lastQuery() << endl;
|
|
//qDebug() << "Awards::setDXCCToQSO: LastError-data: " << query.lastError().databaseText() << endl;
|
|
//qDebug() << "Awards::setDXCCToQSO: LastError-driver: " << query.lastError().driverText() << endl;
|
|
//qDebug() << "Awards::setDXCCToQSO: LastError-n: " << QString::number(query.lastError().number() ) << endl;
|
|
return errorCode;
|
|
}
|
|
}
|
|
|
|
int Awards::setCQToQSO(const int _cqz, const int _qsoid) // Defines the CQ in a QSO
|
|
{
|
|
//qDebug() << "Awards::setCQToQSO: " << QString::number(_cqz) << "/" << QString::number(_qsoid) << endl;
|
|
int errorCode = -1;
|
|
QString queryString = QString("UPDATE log SET cqz='%1' WHERE id='%2'").arg(_cqz).arg(_qsoid);
|
|
QSqlQuery query = QSqlQuery();
|
|
bool sqlOK = query.exec(queryString);
|
|
if (sqlOK)
|
|
{
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "Awards::setCQToQSO: DXCC Updated in Log but failed...." << endl;
|
|
errorCode = query.lastError().number();
|
|
//qDebug() << "Awards::setCQToQSO: LastQuery: " << query.lastQuery() << endl;
|
|
//qDebug() << "Awards::setCQToQSO: LastError-data: " << query.lastError().databaseText() << endl;
|
|
//qDebug() << "Awards::setCQToQSO: LastError-driver: " << query.lastError().driverText() << endl;
|
|
//qDebug() << "Awards::setCQToQSO: LastError-n: " << QString::number(query.lastError().number() ) << endl;
|
|
return errorCode;
|
|
}
|
|
}
|
|
|
|
bool Awards::getIsDXCCConfirmed(const int _dxcc, const int _logNumber)
|
|
{
|
|
// isDXCCConfirmed(const int _dxcc, const int _currentLog);
|
|
return dataProxy->isDXCCConfirmed(_dxcc, _logNumber);
|
|
|
|
}
|
|
|
|
int Awards::getDXMarathonDXCC(const int _year, const int _logNumber)
|
|
{
|
|
//qDebug() << "Awards::getDXMarathonDXCC: " << QString::number(_year) << endl;
|
|
|
|
return dxMarathon->getDXMarathonDXCC(_year, _logNumber);
|
|
}
|
|
|
|
int Awards::getDXMarathonCQ(const int _year, const int _logNumber)
|
|
{
|
|
//qDebug() << "Awards::getDXMarathonCQ: " << QString::number(_year) << endl;
|
|
return dxMarathon->getDXMarathonCQ(_year, _logNumber);
|
|
}
|
|
|
|
int Awards::getDXMarathonScore(const int _year, const int _logNumber)
|
|
{
|
|
//qDebug() << "Awards::getDXMarathonScore: " << QString::number(_year) << endl;
|
|
|
|
return dxMarathon->getDXMarathonScore(_year, _logNumber);
|
|
|
|
}
|