dbpilots.cpp 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. #include "dbpilots.h"
  2. #include "dbman.cpp"
  3. /*!
  4. * \brief RetreivePilotNameFromID Looks up pilot ID in database
  5. * \param pilotID pilot_id in database
  6. * \return Pilot Name
  7. */
  8. QString dbPilots::retreivePilotNameFromID(QString pilotID)
  9. {
  10. QString pilotName("");
  11. if (pilotID == "1")
  12. {
  13. pilotName = "self";
  14. return pilotName;
  15. }
  16. QSqlQuery query;
  17. query.prepare("SELECT piclastname, picfirstname, alias FROM pilots WHERE pilot_id == ?");
  18. query.addBindValue(pilotID.toInt());
  19. query.exec();
  20. while (query.next()) {
  21. pilotName.append(query.value(0).toString());
  22. pilotName.append(", ");
  23. pilotName.append(query.value(1).toString());//.left(1));
  24. }
  25. if(pilotName.length() == 0)
  26. {
  27. qDebug() << ("No Pilot with this ID found");
  28. }
  29. return pilotName;
  30. }
  31. /*!
  32. * \brief dbPilots::retreivePilotIdFromString Looks up a pilot in the database
  33. * \param lastname pic_lastname in pilots table
  34. * \param firstname pic_firstname in pilots table
  35. * \return pilot_id from database or empty string.
  36. */
  37. QString dbPilots::retreivePilotIdFromString(QString lastname, QString firstname)
  38. {
  39. QSqlQuery query;
  40. query.prepare("SELECT pilot_id from pilots "
  41. "WHERE piclastname = ? AND picfirstname LIKE ?");
  42. query.addBindValue(lastname);
  43. firstname.prepend("%"); firstname.append("%");
  44. query.addBindValue(firstname);
  45. query.exec();
  46. QString id;
  47. if(query.first()){id.append(query.value(0).toString());}
  48. return id;
  49. }
  50. /*!
  51. * \brief dbPilots::retreivePilotNameFromString Searches the pilot Name
  52. * in the Database and returns the name as a vector of results unless the pilot in command is the logbook owner.
  53. * \param searchstring
  54. * \return
  55. */
  56. QStringList dbPilots::retreivePilotNameFromString(QString searchstring)
  57. {
  58. QString firstname = searchstring; //To Do: Two control paths, one for single word, query as before with only searchstring
  59. QString lastname = searchstring; // second control path with comma, lastname like AND firstname like
  60. if(searchstring.contains(QLatin1Char(',')))
  61. {
  62. QStringList namelist = searchstring.split(QLatin1Char(','));
  63. QString lastname = namelist[0].trimmed();
  64. lastname = lastname.toLower();
  65. lastname[0] = lastname[0].toUpper();
  66. lastname.prepend("%"), lastname.append("%");
  67. QString firstname = namelist[1].trimmed();
  68. if(firstname.length()>1)
  69. {
  70. firstname = firstname.toLower();
  71. firstname[0] = firstname[0].toUpper();
  72. firstname.prepend("%"), firstname.append("%");
  73. }
  74. qDebug() << "db::RetreivePilotNameFromString: first last after comma";
  75. qDebug() << firstname << lastname;
  76. }
  77. QSqlQuery query;
  78. query.prepare("SELECT piclastname, picfirstname, alias "
  79. "FROM pilots WHERE "
  80. "picfirstname LIKE ? OR piclastname LIKE ? OR alias LIKE ?");
  81. searchstring.prepend("%");
  82. searchstring.append("%");
  83. query.addBindValue(firstname);
  84. query.addBindValue(lastname);
  85. query.addBindValue(searchstring);
  86. query.exec();
  87. QStringList result;
  88. while (query.next()) {
  89. QString piclastname = query.value(0).toString();
  90. QString picfirstname = query.value(1).toString();
  91. QString alias = query.value(2).toString();
  92. QString name = piclastname + ", " + picfirstname;
  93. result.append(name);
  94. }
  95. qDebug() << "db::RetreivePilotNameFromString Result: " << result;
  96. if(result.size() == 0)
  97. {
  98. qDebug() << ("db::RetreivePilotNameFromString: No Pilot found");
  99. return result;
  100. }
  101. return result;
  102. }
  103. /*!
  104. * \brief newPicGetString This function is returning a QStringList for the QCompleter in the NewFlight::newPic line edit
  105. * A regular expression limits the input possibilities to only characters,
  106. * followed by an optional ',' and 1 whitespace, e.g.:
  107. * Miller, Jim ->valid / Miller, Jim -> invalid / Miller,, Jim -> invalid
  108. * Miller Jim -> valid / Miller Jim ->invalid
  109. * Jim Miller-> valid
  110. * \param searchstring
  111. * \return
  112. */
  113. QStringList dbPilots::newPicGetString(QString searchstring)
  114. {
  115. QStringList result;
  116. QStringList searchlist;
  117. if(searchstring == "self")
  118. {
  119. result.append("self");
  120. qDebug() << "Pilot is self";
  121. return result;
  122. }
  123. //Case 1) Lastname, Firstname
  124. if(searchstring.contains(QLatin1Char(',')))
  125. {
  126. QStringList namelist = searchstring.split(QLatin1Char(','));
  127. QString name1 = namelist[0].trimmed();
  128. name1 = name1.toLower();
  129. name1[0] = name1[0].toUpper();
  130. searchlist.append(name1);
  131. if(namelist[1].length() > 1)
  132. {
  133. QString name2 = namelist[1].trimmed();
  134. name2 = name2.toLower();
  135. name2[0] = name2[0].toUpper();
  136. searchlist.append(name2);
  137. }
  138. }
  139. //Case 2: Firstname Lastname
  140. if(searchstring.contains(" ") && !searchstring.contains(QLatin1Char(',')))
  141. {
  142. QStringList namelist = searchstring.split(" ");
  143. QString name1 = namelist[0].trimmed();
  144. name1 = name1.toLower();
  145. name1[0] = name1[0].toUpper();
  146. searchlist.append(name1);
  147. if(namelist[1].length() > 1) //To avoid index out of range if the searchstring is one word followed by only one whitespace
  148. {
  149. QString name2 = namelist[1].trimmed();
  150. name2 = name2.toLower();
  151. name2[0] = name2[0].toUpper();
  152. searchlist.append(name2);
  153. }
  154. }
  155. //Case 3: Lastname
  156. if(!searchstring.contains(" ") && !searchstring.contains(QLatin1Char(',')))
  157. {
  158. QString name1 = searchstring.toLower();
  159. name1[0] = name1[0].toUpper();
  160. searchlist.append(name1);
  161. }
  162. if(searchlist.length() == 1)
  163. {
  164. QSqlQuery query;
  165. query.prepare("SELECT piclastname, picfirstname FROM pilots "
  166. "WHERE piclastname LIKE ?");
  167. query.addBindValue(searchlist[0] + '%');
  168. query.exec();
  169. while(query.next())
  170. {
  171. result.append(query.value(0).toString() + ", " + query.value(1).toString());
  172. }
  173. QSqlQuery query2;
  174. query2.prepare("SELECT piclastname, picfirstname FROM pilots "
  175. "WHERE picfirstname LIKE ?");
  176. query2.addBindValue(searchlist[0] + '%');
  177. query2.exec();
  178. while(query2.next())
  179. {
  180. result.append(query2.value(0).toString() + ", " + query2.value(1).toString());
  181. }
  182. }else
  183. {
  184. QSqlQuery query;
  185. query.prepare("SELECT piclastname, picfirstname FROM pilots "
  186. "WHERE piclastname LIKE ? AND picfirstname LIKE ?");
  187. query.addBindValue(searchlist[0] + '%');
  188. query.addBindValue(searchlist[1] + '%');
  189. query.exec();
  190. while(query.next())
  191. {
  192. result.append(query.value(0).toString() + ", " + query.value(1).toString());
  193. }
  194. QSqlQuery query2;
  195. query2.prepare("SELECT piclastname, picfirstname FROM pilots "
  196. "WHERE picfirstname LIKE ? AND piclastname LIKE ?");
  197. query2.addBindValue(searchlist[0] + '%');
  198. query2.addBindValue(searchlist[1] + '%');
  199. query2.exec();
  200. while(query2.next())
  201. {
  202. result.append(query2.value(0).toString() + ", " + query2.value(1).toString());
  203. }
  204. }
  205. qDebug() << "db::newPic Result" << result.length() << result;
  206. if(result.length() == 0)
  207. {
  208. //To Do: try first name search
  209. qDebug() << "No Pilot with this name found";
  210. return result;
  211. }else
  212. {
  213. return result;
  214. }
  215. }
  216. QString dbPilots::newPicGetId(QString name)
  217. {
  218. QString result;
  219. QStringList nameparts = name.split(QLatin1Char(','));
  220. QString lastname = nameparts[0].trimmed();
  221. lastname = lastname.toLower(); lastname[0] = lastname[0].toUpper();
  222. QString firstname = nameparts[1].trimmed();
  223. firstname = firstname.toLower(); firstname[0] = firstname[0].toUpper();
  224. firstname.prepend("%"); firstname.append("%");
  225. QSqlQuery query;
  226. query.prepare("SELECT pilot_id FROM pilots "
  227. "WHERE piclastname = ? AND picfirstname LIKE ?");
  228. query.addBindValue(lastname);
  229. query.addBindValue(firstname);
  230. query.exec();
  231. while (query.next())
  232. {
  233. result.append(query.value(0).toString());
  234. }
  235. qDebug() << "newPicGetId: result = " << result;
  236. return result;
  237. }