Browse Source

new flight class and rework of database

fiffty-50 4 years ago
parent
commit
90b70e3da7
6 changed files with 158 additions and 9 deletions
  1. 1 1
      dbaircraft.cpp
  2. 3 3
      dbairport.cpp
  3. 108 5
      dbflight.cpp
  4. 43 0
      dbpilots.cpp
  5. 2 0
      dbpilots.h
  6. 1 0
      flight.cpp

+ 1 - 1
dbaircraft.cpp

@@ -84,7 +84,7 @@ QStringList dbAircraft::newAcftGetString(QString searchstring)
 /*!
  * \brief dbAircraft::newAcftGetId Looks up a registration in the databse
  * \param registration Aircraft Registration
- * \return tail_id
+ * \return tail_id or empty string
  */
 QString dbAircraft::retreiveTailId(QString registration)
 {

+ 3 - 3
dbairport.cpp

@@ -112,14 +112,14 @@ bool dbAirport::checkICAOValid(QString identifier)
         QString check = retreiveAirportIdFromIcao(identifier);
         if(check.length() > 0)
         {
-            return 1;
+            return true;
         }else
         {
-            return 0;
+            return false;
         }
     }else
     {
-        return 0;
+        return false;
     }
 }
 

+ 108 - 5
dbflight.cpp

@@ -28,14 +28,117 @@
  */
 void dbFlight::verifyInput(flight object)
 {
-    object.print();
-    //to do
+
+    if (object.doft.isValid()){
+        object.invalidItems.removeOne("doft");
+        qDebug() << "doft verified.";
+    }else{
+        qWarning() << "Invalid entry: doft";
+    }
+
+    if(dbAirport::checkICAOValid(object.dept)){
+        object.invalidItems.removeOne("dept");
+        qDebug() << "dept verified.";
+    }else{
+        qWarning() << "Invalid entry: dept";
+    }
+
+    if(dbAirport::checkICAOValid(object.dest)){
+        object.invalidItems.removeOne("dest");
+        qDebug() << "dest verified.";
+    }else{
+        qWarning() << "Invalid entry: dest";
+    }
+
+    if(object.tofb.isValid()){
+        object.invalidItems.removeOne("tofb");
+        qDebug() << "tofb verified.";
+    }else{
+        qWarning() << "Invalid entry: tofb";
+    }
+
+    if(object.tonb.isValid()){
+        object.invalidItems.removeOne("tonb");
+        qDebug() << "tonb verified.";
+    }else{
+        qWarning() << "Invalid entry: tonb";
+    }
+
+    if(dbPilots::verifyPilotExists(object.pic.split(QLatin1Char(',')))){
+        object.invalidItems.removeOne("pic");
+        qDebug() << "pic verified.";
+    }else{
+        qWarning() << "Invalid entry: pic";
+    }
+
+    //acft
+
+    QTime tblkcheck = calc::blocktime(object.tofb, object.tonb);
+    if(object.tblk.isValid() && !object.tblk.isNull() && tblkcheck == object.tblk){
+        object.invalidItems.removeOne("tblk");
+        qDebug() << "tblk verified.";
+    }else{
+        qWarning() << "Invalid entry: tblk";
+    }
+
+    if(!dbAircraft::retreiveTailId(object.acft).isEmpty()){
+        object.invalidItems.removeOne("acft");
+        qDebug() << "acft verified.";
+    }else{
+        qWarning() << "Invalid entry: acft";
+    }
+
+    if(object.invalidItems.isEmpty()){
+        object.isValid = true;
+        qDebug() << "All checks passed. Object is now verified.";
+    }else{
+        qDebug() << "Not all checks have been passed.";
+        qDebug() << "Invalid items: " << object.invalidItems;
+    }
+
+    /* To Do: Checks on internal logic, i.e. times <= tblk,
+     * restrict what strings are allowed in remarks etc.
+
+    object.pic     = details[7];
+    object.acft    = details[8];
+    object.tblk    = QTime::fromString(details[9],"hh:mm");*/
+
+    /*object.tSPSE   = QTime::fromString(details[10],"hh:mm");
+    object.tSPME   = QTime::fromString(details[11],"hh:mm");
+    object.tMP     = QTime::fromString(details[12],"hh:mm");
+    object.tNIGHT  = QTime::fromString(details[13],"hh:mm");
+    object.tIFR    = QTime::fromString(details[14],"hh:mm");
+
+    object.tPIC    = QTime::fromString(details[15],"hh:mm");
+    object.tPICUS  = QTime::fromString(details[16],"hh:mm");
+    object.tSIC    = QTime::fromString(details[17],"hh:mm");
+    object.tDUAL   = QTime::fromString(details[18],"hh:mm");
+    object.tFI     = QTime::fromString(details[19],"hh:mm");
+    object.tSIM    = QTime::fromString(details[20],"hh:mm");
+
+    object.pilotFlying  = details[21].toInt();
+    object.toDay        = details[22].toInt();
+    object.toNight      = details[23].toInt();
+    object.ldgDay       = details[24].toInt();
+    object.ldgNight     = details[25].toInt();
+    object.autoland     = details[26].toInt();
+
+    object.secondPilot  = details[27];
+    object.thirdPilot   = details[28];
+    object.approachType = details[29];
+    object.flightNumber = details[30];
+    object.remarks      = details[31];*/
 }
 
+/*!
+ * \brief dbFlight::retreiveFlight Runs a select statement on the database
+ * for a given flight_id and returns a flight object containing the details
+ * for the given ID. If no matching ID is found, an empty flight object is
+ * returned
+ * \param flight_id Primary Key of flight database
+ */
 flight dbFlight::retreiveFlight(QString flight_id)
 {
-    //To Do
-
     QSqlQuery query;
     query.prepare("SELECT * FROM flights WHERE id = ?");
     query.addBindValue(flight_id);
@@ -116,7 +219,7 @@ flight dbFlight::retreiveFlight(QString flight_id)
     object.remarks      = query.value(30).toString();
 
     //Database entries are assumed to be valid
-    object.isValid = true;
+    object.isValid      = true;
     object.invalidItems.clear();
 
     return object;

+ 43 - 0
dbpilots.cpp

@@ -298,3 +298,46 @@ QString dbPilots::newPicGetId(QString name)
     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;
+    }
+}

+ 2 - 0
dbpilots.h

@@ -42,6 +42,8 @@ public:
     static QStringList retreivePilotList();
 
     static QString newPicGetId(QString name);
+
+    static bool verifyPilotExists(QStringList);
 };
 
 #endif // DBPILOTS_H

+ 1 - 0
flight.cpp

@@ -71,6 +71,7 @@ void flight::print()
         for(auto const& item : invalidItems){
             cout << item + QLatin1Char(' ');
         }
+        cout << "\n";
     }
 }
 /*!