dbpilots.cpp 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. /*
  2. *openPilot Log - A FOSS Pilot Logbook Application
  3. *Copyright (C) 2020 Felix Turowsky
  4. *
  5. *This program is free software: you can redistribute it and/or modify
  6. *it under the terms of the GNU General Public License as published by
  7. *the Free Software Foundation, either version 3 of the License, or
  8. *(at your option) any later version.
  9. *
  10. *This program is distributed in the hope that it will be useful,
  11. *but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. *GNU General Public License for more details.
  14. *
  15. *You should have received a copy of the GNU General Public License
  16. *along with this program. If not, see <https://www.gnu.org/licenses/>.
  17. */
  18. #include "dbpilots.h"
  19. /*!
  20. * \brief RetreivePilotNameFromID Looks up pilot ID in database
  21. * \param pilotID pilot_id in database
  22. * \return Pilot Name
  23. */
  24. QString dbPilots::retreivePilotNameFromID(QString pilotID)
  25. {
  26. QString pilotName("");
  27. if (pilotID == "1")
  28. {
  29. pilotName = "self";
  30. return pilotName;
  31. }
  32. QSqlQuery query;
  33. query.prepare("SELECT piclastname, picfirstname, alias FROM pilots WHERE pilot_id == ?");
  34. query.addBindValue(pilotID.toInt());
  35. query.exec();
  36. while (query.next()) {
  37. pilotName.append(query.value(0).toString());
  38. pilotName.append(", ");
  39. pilotName.append(query.value(1).toString());//.left(1));
  40. }
  41. if(pilotName.length() == 0)
  42. {
  43. qDebug() << ("No Pilot with this ID found");
  44. }
  45. return pilotName;
  46. }
  47. /*!
  48. * \brief dbPilots::retreivePilotIdFromString Looks up a pilot in the database
  49. * \param lastname pic_lastname in pilots table
  50. * \param firstname pic_firstname in pilots table
  51. * \return pilot_id from database or empty string.
  52. */
  53. QString dbPilots::retreivePilotIdFromString(QString lastname, QString firstname)
  54. {
  55. QSqlQuery query;
  56. query.prepare("SELECT pilot_id from pilots "
  57. "WHERE piclastname = ? AND picfirstname LIKE ?");
  58. query.addBindValue(lastname);
  59. firstname.prepend("%"); firstname.append("%");
  60. query.addBindValue(firstname);
  61. query.exec();
  62. QString id;
  63. if(query.first()){id.append(query.value(0).toString());}
  64. return id;
  65. }
  66. /*!
  67. * \brief dbPilots::retreivePilotNameFromString Searches the pilot Name
  68. * in the Database and returns the name as a vector of results unless the pilot in command is the logbook owner.
  69. * \param searchstring
  70. * \return
  71. */
  72. QStringList dbPilots::retreivePilotNameFromString(QString searchstring)
  73. {
  74. QString firstname = searchstring; //To Do: Two control paths, one for single word, query as before with only searchstring
  75. QString lastname = searchstring; // second control path with comma, lastname like AND firstname like
  76. if(searchstring.contains(QLatin1Char(',')))
  77. {
  78. QStringList namelist = searchstring.split(QLatin1Char(','));
  79. QString lastname = namelist[0].trimmed();
  80. lastname = lastname.toLower();
  81. lastname[0] = lastname[0].toUpper();
  82. lastname.prepend("%"), lastname.append("%");
  83. QString firstname = namelist[1].trimmed();
  84. if(firstname.length()>1)
  85. {
  86. firstname = firstname.toLower();
  87. firstname[0] = firstname[0].toUpper();
  88. firstname.prepend("%"), firstname.append("%");
  89. }
  90. qDebug() << "db::RetreivePilotNameFromString: first last after comma";
  91. qDebug() << firstname << lastname;
  92. }
  93. QSqlQuery query;
  94. query.prepare("SELECT piclastname, picfirstname, alias "
  95. "FROM pilots WHERE "
  96. "picfirstname LIKE ? OR piclastname LIKE ? OR alias LIKE ?");
  97. searchstring.prepend("%");
  98. searchstring.append("%");
  99. query.addBindValue(firstname);
  100. query.addBindValue(lastname);
  101. query.addBindValue(searchstring);
  102. query.exec();
  103. QStringList result;
  104. while (query.next()) {
  105. QString piclastname = query.value(0).toString();
  106. QString picfirstname = query.value(1).toString();
  107. QString alias = query.value(2).toString();
  108. QString name = piclastname + ", " + picfirstname;
  109. result.append(name);
  110. }
  111. qDebug() << "db::RetreivePilotNameFromString Result: " << result;
  112. if(result.size() == 0)
  113. {
  114. qDebug() << ("db::RetreivePilotNameFromString: No Pilot found");
  115. return result;
  116. }
  117. return result;
  118. }
  119. /*!
  120. * \brief newPicGetString This function is returning a QStringList for the QCompleter in the NewFlight::newPic line edit
  121. * A regular expression limits the input possibilities to only characters,
  122. * followed by an optional ',' and 1 whitespace, e.g.:
  123. * Miller, Jim ->valid / Miller, Jim -> invalid / Miller,, Jim -> invalid
  124. * Miller Jim -> valid / Miller Jim ->invalid
  125. * Jim Miller-> valid
  126. * \param searchstring
  127. * \return
  128. */
  129. QStringList dbPilots::newPicGetString(QString searchstring)
  130. {
  131. qWarning() << "newPicGetString is deprecated";
  132. QStringList result;
  133. QStringList searchlist;
  134. if(searchstring == "self")
  135. {
  136. result.append("self");
  137. qDebug() << "Pilot is self";
  138. return result;
  139. }
  140. //Case 1) Lastname, Firstname
  141. if(searchstring.contains(QLatin1Char(',')))
  142. {
  143. QStringList namelist = searchstring.split(QLatin1Char(','));
  144. QString name1 = namelist[0].trimmed();
  145. name1 = name1.toLower();
  146. name1[0] = name1[0].toUpper();
  147. searchlist.append(name1);
  148. if(namelist[1].length() > 1)
  149. {
  150. QString name2 = namelist[1].trimmed();
  151. name2 = name2.toLower();
  152. name2[0] = name2[0].toUpper();
  153. searchlist.append(name2);
  154. }
  155. }
  156. //Case 2: Firstname Lastname
  157. if(searchstring.contains(" ") && !searchstring.contains(QLatin1Char(',')))
  158. {
  159. QStringList namelist = searchstring.split(" ");
  160. QString name1 = namelist[0].trimmed();
  161. name1 = name1.toLower();
  162. name1[0] = name1[0].toUpper();
  163. searchlist.append(name1);
  164. if(namelist[1].length() > 1) //To avoid index out of range if the searchstring is one word followed by only one whitespace
  165. {
  166. QString name2 = namelist[1].trimmed();
  167. name2 = name2.toLower();
  168. name2[0] = name2[0].toUpper();
  169. searchlist.append(name2);
  170. }
  171. }
  172. //Case 3: Lastname
  173. if(!searchstring.contains(" ") && !searchstring.contains(QLatin1Char(',')))
  174. {
  175. QString name1 = searchstring.toLower();
  176. name1[0] = name1[0].toUpper();
  177. searchlist.append(name1);
  178. }
  179. if(searchlist.length() == 1)
  180. {
  181. QSqlQuery query;
  182. query.prepare("SELECT piclastname, picfirstname FROM pilots "
  183. "WHERE piclastname LIKE ?");
  184. query.addBindValue(searchlist[0] + '%');
  185. query.exec();
  186. while(query.next())
  187. {
  188. result.append(query.value(0).toString() + ", " + query.value(1).toString());
  189. }
  190. QSqlQuery query2;
  191. query2.prepare("SELECT piclastname, picfirstname FROM pilots "
  192. "WHERE picfirstname LIKE ?");
  193. query2.addBindValue(searchlist[0] + '%');
  194. query2.exec();
  195. while(query2.next())
  196. {
  197. result.append(query2.value(0).toString() + ", " + query2.value(1).toString());
  198. }
  199. }else
  200. {
  201. QSqlQuery query;
  202. query.prepare("SELECT piclastname, picfirstname FROM pilots "
  203. "WHERE piclastname LIKE ? AND picfirstname LIKE ?");
  204. query.addBindValue(searchlist[0] + '%');
  205. query.addBindValue(searchlist[1] + '%');
  206. query.exec();
  207. while(query.next())
  208. {
  209. result.append(query.value(0).toString() + ", " + query.value(1).toString());
  210. }
  211. QSqlQuery query2;
  212. query2.prepare("SELECT piclastname, picfirstname FROM pilots "
  213. "WHERE picfirstname LIKE ? AND piclastname LIKE ?");
  214. query2.addBindValue(searchlist[0] + '%');
  215. query2.addBindValue(searchlist[1] + '%');
  216. query2.exec();
  217. while(query2.next())
  218. {
  219. result.append(query2.value(0).toString() + ", " + query2.value(1).toString());
  220. }
  221. }
  222. qDebug() << "db::newPic Result" << result.length() << result;
  223. if(result.length() == 0)
  224. {
  225. //To Do: try first name search
  226. qDebug() << "No Pilot with this name found";
  227. return result;
  228. }else
  229. {
  230. return result;
  231. }
  232. }
  233. QStringList dbPilots::retreivePilotList()
  234. {
  235. QSqlQuery query;
  236. query.prepare("SELECT piclastname, picfirstname FROM pilots");
  237. query.exec();
  238. QStringList result;
  239. while (query.next()) {
  240. result.append(query.value(0).toString() + ", " + query.value(1).toString());
  241. }
  242. return result;
  243. }
  244. QString dbPilots::newPicGetId(QString name)
  245. {
  246. QString result;
  247. QStringList nameparts = name.split(QLatin1Char(','));
  248. QString lastname = nameparts[0].trimmed();
  249. lastname = lastname.toLower(); lastname[0] = lastname[0].toUpper();
  250. QString firstname = nameparts[1].trimmed();
  251. firstname = firstname.toLower(); firstname[0] = firstname[0].toUpper();
  252. firstname.prepend("%"); firstname.append("%");
  253. QSqlQuery query;
  254. query.prepare("SELECT pilot_id FROM pilots "
  255. "WHERE piclastname = ? AND picfirstname LIKE ?");
  256. query.addBindValue(lastname);
  257. query.addBindValue(firstname);
  258. query.exec();
  259. while (query.next())
  260. {
  261. result.append(query.value(0).toString());
  262. }
  263. qDebug() << "newPicGetId: result = " << result;
  264. return result;
  265. }