| 
					
				 | 
			
			
				@@ -2,8 +2,11 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "QtSql/qsqltablemodel.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "QtWidgets/qgridlayout.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "QtWidgets/qheaderview.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "src/classes/easaftl.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "src/classes/time.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/database/database.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/functions/statistics.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "src/classes/settings.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <QCalendarWidget> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <QInputDialog> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <QLabel> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -113,35 +116,52 @@ void CurrencyWidget::setupUI() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void CurrencyWidget::fillTakeOffAndLandingCurrencies() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const auto takeoff_landings = OPL::Statistics::countTakeOffLanding(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(takeoff_landings.isEmpty() || takeoff_landings.size() != 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        QList<QLabel*> displayLabels = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            takeOffCountDisplayLabel, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            landingCountDisplayLabel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for(int i = 0; i < 2; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int count = takeoff_landings[i].toInt(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(count < 3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                setLabelColour(displayLabels[i], Colour::Red); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            displayLabels[i]->setText(displayLabels[i]->text().arg(count)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         QDate expiration_date = OPL::Statistics::currencyTakeOffLandingExpiry(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (expiration_date <= QDate::currentDate()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                setLabelColour(takeOffLandingExpiryDisplayLabel, Colour::Red); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            takeOffLandingExpiryDisplayLabel->setText(expiration_date.toString(Qt::TextDate)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const auto takeoff_landings = OPL::Statistics::countTakeOffLanding(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(takeoff_landings.isEmpty() || takeoff_landings.size() != 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    QList<QLabel*> displayLabels = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        takeOffCountDisplayLabel, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        landingCountDisplayLabel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for(int i = 0; i < 2; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int count = takeoff_landings[i].toInt(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(count < 3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setLabelColour(displayLabels[i], Colour::Red); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        displayLabels[i]->setText(displayLabels[i]->text().arg(count)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    QDate expiration_date = OPL::Statistics::currencyTakeOffLandingExpiry(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (expiration_date <= QDate::currentDate()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        setLabelColour(takeOffLandingExpiryDisplayLabel, Colour::Red); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    takeOffLandingExpiryDisplayLabel->setText(expiration_date.toString(Qt::TextDate)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void CurrencyWidget::fillFlightTimeLimitations() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    TODO << "Fill flight time limitations"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const QList<QPair<QLabel *, OPL::Statistics::TimeFrame>> limits = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { flightTime28DaysDisplayLabel, 		 OPL::Statistics::TimeFrame::Rolling28Days }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { flightTime365DaysDisplayLabel, 	 	 OPL::Statistics::TimeFrame::Rolling12Months }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { flightTimeCalendarYearDisplayLabel,    OPL::Statistics::TimeFrame::CalendarYear }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    double ftlWarningThreshold = Settings::getFtlWarningThreshold(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (const auto &pair : limits) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int accruedMinutes = OPL::Statistics::totalTime(pair.second); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int limitMinutes = EasaFTL::getLimit(pair.second); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pair.first->setText(OPL::Time(accruedMinutes).toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (accruedMinutes >= limitMinutes) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setLabelColour(pair.first, Colour::Red); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else if (accruedMinutes >= limitMinutes * ftlWarningThreshold) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setLabelColour(pair.first, Colour::Orange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void CurrencyWidget::editRequested(const QModelIndex &index) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    LOG << "Edit requested at: " << index.data(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     lastSelection = index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const QString selection = index.data().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const QDate selectedDate = QDate::fromString(selection, dateFormat); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -152,7 +172,6 @@ void CurrencyWidget::editRequested(const QModelIndex &index) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         calendar->show(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // the displayName column has been selected for editing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LOG << "Other edit requested"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         displayNameEditRequested(index); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |