123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 |
- /*
- *openPilot Log - A FOSS Pilot Logbook Application
- *Copyright (C) 2020 Felix Turowsky
- *
- *This program 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.
- *
- *This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
- */
- #include "dbpilots.h"
- #include "dbapi.h"
- /*!
- * \brief RetreivePilotNameFromID Looks up pilot ID in database
- * \param pilotID pilot_id in database
- * \return Pilot Name
- */
- QString dbPilots::retreivePilotNameFromID(QString pilotID)
- {
- QString pilotName("");
- if (pilotID == "1")
- {
- pilotName = "self";
- return pilotName;
- }
- QSqlQuery query;
- query.prepare("SELECT piclastname, picfirstname, alias FROM pilots WHERE pilot_id == ?");
- query.addBindValue(pilotID.toInt());
- query.exec();
- while (query.next()) {
- pilotName.append(query.value(0).toString());
- pilotName.append(", ");
- pilotName.append(query.value(1).toString());//.left(1));
- }
- if(pilotName.length() == 0)
- {
- qDebug() << ("No Pilot with this ID found");
- }
- return pilotName;
- }
- /*!
- * \brief dbPilots::retreivePilotIdFromString Looks up a pilot in the database
- * \param lastname pic_lastname in pilots table
- * \param firstname pic_firstname in pilots table
- * \return pilot_id from database or empty string.
- */
- QString dbPilots::retreivePilotIdFromString(QString lastname, QString firstname)
- {
- QSqlQuery query;
- query.prepare("SELECT pilot_id from pilots "
- "WHERE piclastname = ? AND picfirstname LIKE ?");
- query.addBindValue(lastname);
- firstname.prepend("%"); firstname.append("%");
- query.addBindValue(firstname);
- query.exec();
- QString id;
- if(query.first()){id.append(query.value(0).toString());}
- return id;
- }
- /*!
- * \brief dbPilots::retreivePilotNameFromString Searches the pilot Name
- * in the Database and returns the name as a vector of results unless the pilot in command is the logbook owner.
- * \param searchstring
- * \return
- */
- QStringList dbPilots::retreivePilotNameFromString(QString searchstring)
- {
- QString firstname = searchstring; //To Do: Two control paths, one for single word, query as before with only searchstring
- QString lastname = searchstring; // second control path with comma, lastname like AND firstname like
- if(searchstring.contains(QLatin1Char(',')))
- {
- QStringList namelist = searchstring.split(QLatin1Char(','));
- QString lastname = namelist[0].trimmed();
- lastname = lastname.toLower();
- lastname[0] = lastname[0].toUpper();
- lastname.prepend("%"), lastname.append("%");
- QString firstname = namelist[1].trimmed();
- if(firstname.length()>1)
- {
- firstname = firstname.toLower();
- firstname[0] = firstname[0].toUpper();
- firstname.prepend("%"), firstname.append("%");
- }
- qDebug() << "db::RetreivePilotNameFromString: first last after comma";
- qDebug() << firstname << lastname;
- }
- QSqlQuery query;
- query.prepare("SELECT piclastname, picfirstname, alias "
- "FROM pilots WHERE "
- "picfirstname LIKE ? OR piclastname LIKE ? OR alias LIKE ?");
- searchstring.prepend("%");
- searchstring.append("%");
- query.addBindValue(firstname);
- query.addBindValue(lastname);
- query.addBindValue(searchstring);
- query.exec();
- QStringList result;
- while (query.next()) {
- QString piclastname = query.value(0).toString();
- QString picfirstname = query.value(1).toString();
- QString alias = query.value(2).toString();
- QString name = piclastname + ", " + picfirstname;
- result.append(name);
- }
- qDebug() << "db::RetreivePilotNameFromString Result: " << result;
- if(result.size() == 0)
- {
- qDebug() << ("db::RetreivePilotNameFromString: No Pilot found");
- return result;
- }
- return result;
- }
- /*!
- * \brief newPicGetString This function is returning a QStringList for the QCompleter in the NewFlight::newPic line edit
- * A regular expression limits the input possibilities to only characters,
- * followed by an optional ',' and 1 whitespace, e.g.:
- * Miller, Jim ->valid / Miller, Jim -> invalid / Miller,, Jim -> invalid
- * Miller Jim -> valid / Miller Jim ->invalid
- * Jim Miller-> valid
- * \param searchstring
- * \return
- */
- QStringList dbPilots::newPicGetString(QString searchstring)
- {
- qWarning() << "newPicGetString is deprecated";
- QStringList result;
- QStringList searchlist;
- if(searchstring == "self")
- {
- result.append("self");
- qDebug() << "Pilot is self";
- return result;
- }
- //Case 1) Lastname, Firstname
- if(searchstring.contains(QLatin1Char(',')))
- {
- QStringList namelist = searchstring.split(QLatin1Char(','));
- QString name1 = namelist[0].trimmed();
- name1 = name1.toLower();
- name1[0] = name1[0].toUpper();
- searchlist.append(name1);
- if(namelist[1].length() > 1)
- {
- QString name2 = namelist[1].trimmed();
- name2 = name2.toLower();
- name2[0] = name2[0].toUpper();
- searchlist.append(name2);
- }
- }
- //Case 2: Firstname Lastname
- if(searchstring.contains(" ") && !searchstring.contains(QLatin1Char(',')))
- {
- QStringList namelist = searchstring.split(" ");
- QString name1 = namelist[0].trimmed();
- name1 = name1.toLower();
- name1[0] = name1[0].toUpper();
- searchlist.append(name1);
- if(namelist[1].length() > 1) //To avoid index out of range if the searchstring is one word followed by only one whitespace
- {
- QString name2 = namelist[1].trimmed();
- name2 = name2.toLower();
- name2[0] = name2[0].toUpper();
- searchlist.append(name2);
- }
- }
- //Case 3: Lastname
- if(!searchstring.contains(" ") && !searchstring.contains(QLatin1Char(',')))
- {
- QString name1 = searchstring.toLower();
- name1[0] = name1[0].toUpper();
- searchlist.append(name1);
- }
- if(searchlist.length() == 1)
- {
- QSqlQuery query;
- query.prepare("SELECT piclastname, picfirstname FROM pilots "
- "WHERE piclastname LIKE ?");
- query.addBindValue(searchlist[0] + '%');
- query.exec();
- while(query.next())
- {
- result.append(query.value(0).toString() + ", " + query.value(1).toString());
- }
- QSqlQuery query2;
- query2.prepare("SELECT piclastname, picfirstname FROM pilots "
- "WHERE picfirstname LIKE ?");
- query2.addBindValue(searchlist[0] + '%');
- query2.exec();
- while(query2.next())
- {
- result.append(query2.value(0).toString() + ", " + query2.value(1).toString());
- }
- }else
- {
- QSqlQuery query;
- query.prepare("SELECT piclastname, picfirstname FROM pilots "
- "WHERE piclastname LIKE ? AND picfirstname LIKE ?");
- query.addBindValue(searchlist[0] + '%');
- query.addBindValue(searchlist[1] + '%');
- query.exec();
- while(query.next())
- {
- result.append(query.value(0).toString() + ", " + query.value(1).toString());
- }
- QSqlQuery query2;
- query2.prepare("SELECT piclastname, picfirstname FROM pilots "
- "WHERE picfirstname LIKE ? AND piclastname LIKE ?");
- query2.addBindValue(searchlist[0] + '%');
- query2.addBindValue(searchlist[1] + '%');
- query2.exec();
- while(query2.next())
- {
- result.append(query2.value(0).toString() + ", " + query2.value(1).toString());
- }
- }
- qDebug() << "db::newPic Result" << result.length() << result;
- if(result.length() == 0)
- {
- //To Do: try first name search
- qDebug() << "No Pilot with this name found";
- return result;
- }else
- {
- return result;
- }
- }
- QStringList dbPilots::retreivePilotList()
- {
- QSqlQuery query;
- query.prepare("SELECT piclastname, picfirstname FROM pilots");
- query.exec();
- QStringList result;
- while (query.next()) {
- result.append(query.value(0).toString() + ", " + query.value(1).toString());
- }
- return result;
- }
- QString dbPilots::newPicGetId(QString name)
- {
- QString result;
- QStringList nameparts = name.split(QLatin1Char(','));
- QString lastname = nameparts[0].trimmed();
- lastname = lastname.toLower(); lastname[0] = lastname[0].toUpper();
- QString firstname = nameparts[1].trimmed();
- firstname = firstname.toLower(); firstname[0] = firstname[0].toUpper();
- firstname.prepend("%"); firstname.append("%");
- QSqlQuery query;
- query.prepare("SELECT pilot_id FROM pilots "
- "WHERE piclastname = ? AND picfirstname LIKE ?");
- query.addBindValue(lastname);
- query.addBindValue(firstname);
- query.exec();
- while (query.next())
- {
- result.append(query.value(0).toString());
- }
- qDebug() << "newPicGetId: result = " << result;
- return result;
- }
- bool dbPilots::verifyPilotExists(QStringList names)
- {
- QString name0;
- QString name1;
- if (!names.isEmpty()){
- if(names.length() == 1){ //only lastname
- name0 = names[0].trimmed();
- }else if (names.length() == 2){ //firstname and lastname
- name0 = names[0].trimmed();
- name1 = names[1].trimmed();
- }
- }else{
- qWarning() << __func__ << "Invalid Input. Aborting.";
- return false;
- }
- QSqlQuery query;
- if(names.length() == 1){ //only lastname
- query.prepare("SELECT pilot_id FROM pilots "
- "WHERE piclastname = ?");
- query.addBindValue(name0);
- }else if (names.length() == 2){ //firstname and lastname
- query.prepare("SELECT pilot_id FROM pilots "
- "WHERE piclastname = ? AND picfirstname = ? "
- "OR picfirstname = ? AND piclastname = ? ");
- query.addBindValue(name0);
- query.addBindValue(name1);
- query.addBindValue(name0);
- query.addBindValue(name1);
- }
- query.exec();
- if(query.first()){
- qDebug() << __func__ << "Pilot found: " << name0;
- return true;
- }else{
- qDebug() << __func__ << "No Pilot found";
- return false;
- }
- }
|