private void WriteLogFile() { try { var folder = ExportFolderName + CreationTimeStamp.ToString("yyyy-MM-dd") + "\\"; if (Directory.Exists(folder) == false) { Directory.CreateDirectory(folder); } var exportFilename = Path.Combine(folder, $"{CreationTimeStamp.ToString("yyyy-MM-dd-HHmm")}_Log.log"); using (var w = new StreamWriter(exportFilename)) { foreach (var logEntry in _logEntries) { w.WriteLine(logEntry); } w.Flush(); } } catch (Exception e) { OnLogEventRaised($"Konnte Logdatei nicht schreiben. Fehlermeldung: {e.Message}"); } }
public void Convert() { try { ExportErrorMessage = string.Empty; HasExportError = false; //loading proffix address numbers from database var nrOfAddressesFromProffixRead = _dataManager.ReadProffixDatabase(); if (ImportFileName.ToLower().EndsWith(".csv") == false) { var directory = new DirectoryInfo(ImportFileName); var lastFile = directory.GetFiles().OrderByDescending(f => f.LastWriteTime).FirstOrDefault(); if (lastFile == null) { OnLogEventRaised("Konnte keine aktuelle Datei zum Importieren finden!"); throw new ApplicationException($"Konnte keine aktuelle Datei zum Importieren in Verzeichnis {ImportFileName} finden!"); } ImportFileName = lastFile.FullName; OnLogEventRaised($"Verwende Datei: {ImportFileName}"); } _logEntries = new List <string>(); var flightBoxDataList = ReadFile(); var proffixDataList = new List <ProffixData>(); CreationTimeStamp = DateTime.Now; OnLogEventRaised("Bereinige Basis-Daten..."); if (Settings.Default.ReadProffixDbData) { OnLogEventRaised($"Mitgliedernummern werden anhand der Proffix-Datenbank überprüft. {nrOfAddressesFromProffixRead} Adressen aus Proffix geladen."); } else { OnLogEventRaised("Proffix-Datenbank wird für die Mitgliedernummer-Prüfung nicht verwendet!"); } foreach (var flightBoxData in flightBoxDataList) { var proffixData = new ProffixData(flightBoxData); //check movement date within the valid import range //we won't import old movement data into proffix var minMovementDate = new DateTime(DateTime.Now.AddMonths(-1).Year, DateTime.Now.AddMonths(-1).Month, 1); if (flightBoxData.MovementDateTime < minMovementDate) { // found movement older than the previous months flightBoxData.IsOlderMovementDate = true; OnLogEventRaised( $"Alte Flugbewegung gefunden vom {flightBoxData.MovementDateTime.ToShortDateString()} (Zeile: {flightBoxData.LineNumber})."); if (_ignoreDateRange == false) { ExportErrorMessage = "Alte Flugbewegung wurde gefunden und Warnung bei alten Daten darf nicht ignoriert werden. Verarbeitung wird abgebrochen."; HasExportError = true; WriteLogFile(); ExportFinished?.Invoke(this, EventArgs.Empty); return; } } // try to find MemberNumber based on name if no MemberNumber is set if (string.IsNullOrWhiteSpace(flightBoxData.MemberNumber) || flightBoxData.MemberNumber == "000000") { if (_dataManager.FindLastnameAndSetMemberNumber(proffixData)) { OnLogEventRaised( $"MemberNumber {proffixData.MemberNumber} für {flightBoxData.Lastname} mit {flightBoxData.Immatriculation} gesetzt (Zeile: {flightBoxData.LineNumber})."); } } // set MemberNumber based on immatriculation if (_dataManager.FindImmatriculationAndMapMemberNumber(proffixData)) { OnLogEventRaised($"Setze spezielle Mitgliedernummer für {proffixData.FlightBoxData.Immatriculation} (Zeile: {flightBoxData.LineNumber}): Alte Mitgliedernummer {proffixData.FlightBoxData.MemberNumber}, neue Mitgliedernummer {proffixData.MemberNumber}"); } if (Settings.Default.ReadProffixDbData && _dataManager.FindMemberNumberInProffix(proffixData) == false) { OnLogEventRaised($"Mitgliedernummer {proffixData.MemberNumber} für {proffixData.FlightBoxData.Lastname} mit {proffixData.FlightBoxData.Immatriculation} in Proffix-Datenbank nicht gefunden (Zeile: {flightBoxData.LineNumber})"); } proffixDataList.Add(proffixData); } Thread.Sleep(50); WriteBaseFile(proffixDataList); Thread.Sleep(50); foreach (var proffixData in proffixDataList) { if (_dataManager.IsNoLdgTaxMember(proffixData)) { proffixData.FlightBoxData.IgnoreLandingTax = true; } if (proffixData.MemberNumber == "999605" && proffixData.FlightBoxData.TypeOfTraffic == (int)TypeOfTraffic.Instruction) { // Heli Sitterdorf is always private tax not training proffixData.FlightBoxData.TypeOfTraffic = (int)TypeOfTraffic.Private; } if ((proffixData.MemberNumber == "999998" || proffixData.MemberNumber == "383909") && proffixData.FlightBoxData.TypeOfTraffic == (int)TypeOfTraffic.Instruction) { // Stoffel Aviation is external on instruction proffixData.FlightBoxData.IsHomebased = false; } //TODO: Handle maintenance flights from Seiferle // filtering for tow flights and departure movements are handled within the FlightBoxData class directly if (string.IsNullOrWhiteSpace(proffixData.MemberNumber) || proffixData.MemberNumber == "000000") { proffixData.MemberNumberInProffixNotFound = true; ExportErrorMessage += $"{Environment.NewLine}Fehlerhafte MemberNumber {proffixData.MemberNumber} für {proffixData.FlightBoxData.Lastname} mit {proffixData.FlightBoxData.Immatriculation} gefunden (Zeile: {proffixData.FlightBoxData.LineNumber})."; OnLogEventRaised( $"Fehlerhafte MemberNumber {proffixData.MemberNumber} für {proffixData.FlightBoxData.Lastname} mit {proffixData.FlightBoxData.Immatriculation} gefunden (Zeile: {proffixData.FlightBoxData.LineNumber})."); } CalculateLandingTax(proffixData); } if (HasExportError) { WriteLogFile(); ExportFinished?.Invoke(this, EventArgs.Empty); return; } Thread.Sleep(50); OnLogEventRaised(string.Empty); var folder = Path.Combine(ExportFolderName, CreationTimeStamp.ToString("yyyy-MM-dd")); var exportFilename = Path.Combine(folder, $"{CreationTimeStamp.ToString("yyyy-MM-dd-HHmm")}_LdgTaxes_without_Remarks (to Import in Proffix).csv"); var listToExport = proffixDataList.Where(x => x.FlightBoxData.IsDepartureMovement == false && x.FlightBoxData.IsMaintenanceFlight == false && x.FlightBoxData.IsTowFlight == false && x.FlightBoxData.IgnoreLandingTax == false && string.IsNullOrWhiteSpace(x.FlightBoxData.Remarks) && x.MemberNumberInProffixNotFound == false) .ToList(); if (listToExport.Any()) { OnLogEventRaised($"Exportiere Proffix-Daten ohne Bemerkungen in Datei: {exportFilename}"); var exporter = new ProffixDataCsvExporter(exportFilename, listToExport); exporter.Export(); OnLogEventRaised( $"{exporter.NumberOfLinesExported} Proffix-Daten ohne Bemerkungen erfolgreich exportiert."); } else { OnLogEventRaised( $"Keine Proffix-Daten ohne Bemerkungen exportiert. Datei: {exportFilename} wurde nicht erzeugt!"); } Thread.Sleep(50); OnLogEventRaised(string.Empty); exportFilename = Path.Combine(folder, $"{CreationTimeStamp.ToString("yyyy-MM-dd-HHmm")}_LdgTaxes_With_MemberNumberNotFound_Error (to correct and Import in Proffix).csv"); listToExport = proffixDataList.Where(x => x.FlightBoxData.IsDepartureMovement == false && x.FlightBoxData.IsMaintenanceFlight == false && x.FlightBoxData.IsTowFlight == false && x.FlightBoxData.IgnoreLandingTax == false && x.MemberNumberInProffixNotFound) .ToList(); if (listToExport.Any()) { OnLogEventRaised($"Exportiere Proffix-Daten mit fehlerhaften Mitgliedernummern in Datei: {exportFilename}"); var exporter = new ProffixDataCsvExporter(exportFilename, listToExport); exporter.Export(); OnLogEventRaised( $"{exporter.NumberOfLinesExported} Proffix-Daten mit fehlerhaften Mitgliedernummern erfolgreich exportiert."); } else { OnLogEventRaised( $"Keine Proffix-Daten mit fehlerhaften Mitgliedernummern exportiert. Datei: {exportFilename} wurde nicht erzeugt!"); } Thread.Sleep(50); OnLogEventRaised(string.Empty); exportFilename = Path.Combine(folder, $"{CreationTimeStamp.ToString("yyyy-MM-dd-HHmm")}_LdgTaxes_with_Remarks (to check and import in Proffix).csv"); listToExport = proffixDataList.Where(x => x.FlightBoxData.IsDepartureMovement == false && x.FlightBoxData.IsMaintenanceFlight == false && x.FlightBoxData.IsTowFlight == false && x.FlightBoxData.IgnoreLandingTax == false && string.IsNullOrWhiteSpace(x.FlightBoxData.Remarks) == false && x.MemberNumberInProffixNotFound == false) .ToList(); if (listToExport.Any()) { OnLogEventRaised( $"Exportiere Daten mit Bemerkungen zur Prüfung und Importieren in Proffix in Datei: {exportFilename}"); var exporter = new ProffixDataCsvExporter(exportFilename, listToExport); exporter.Export(); OnLogEventRaised( $"{exporter.NumberOfLinesExported} Daten mit Bemerkungen zur Prüfung und Importieren in Proffix erfolgreich exportiert."); } else { OnLogEventRaised( $"Keine Daten mit Bemerkungen zur Prüfung und Importieren in Proffix exportiert. Datei: {exportFilename} wurde nicht erzeugt!"); } Thread.Sleep(50); OnLogEventRaised(string.Empty); exportFilename = Path.Combine(folder, $"{CreationTimeStamp.ToString("yyyy-MM-dd-HHmm")}_No_LdgTaxes_without_Remarks (not to import).csv"); listToExport = proffixDataList.Where(x => (x.FlightBoxData.IsMaintenanceFlight || x.FlightBoxData.IsTowFlight || x.FlightBoxData.IgnoreLandingTax) && string.IsNullOrWhiteSpace(x.FlightBoxData.Remarks)) .ToList(); if (listToExport.Any()) { OnLogEventRaised($"Exportiere Nicht-Proffix-Daten ohne Bemerkungen in Datei: {exportFilename}"); var exporter = new ProffixDataCsvExporter(exportFilename, listToExport); exporter.Export(); OnLogEventRaised( $"{exporter.NumberOfLinesExported} Nicht-Proffix-Daten ohne Bemerkungen erfolgreich exportiert."); } else { OnLogEventRaised( $"Keine Nicht-Proffix-Daten ohne Bemerkungen exportiert. Datei: {exportFilename} wurde nicht erzeugt!"); } Thread.Sleep(50); OnLogEventRaised(string.Empty); exportFilename = Path.Combine(folder, $"{CreationTimeStamp.ToString("yyyy-MM-dd-HHmm")}_No_LdgTaxes_with_Remarks (to check and NO import in Proffix).csv"); listToExport = proffixDataList.Where(x => (x.FlightBoxData.IsMaintenanceFlight || x.FlightBoxData.IsTowFlight || x.FlightBoxData.IgnoreLandingTax) && string.IsNullOrWhiteSpace(x.FlightBoxData.Remarks) == false) .ToList(); if (listToExport.Any()) { OnLogEventRaised( $"Exportiere Daten mit Bemerkungen zur Prüfung und NICHT importieren in Proffix in Datei: {exportFilename}"); var exporter = new ProffixDataCsvExporter(exportFilename, listToExport); exporter.Export(); OnLogEventRaised( $"{exporter.NumberOfLinesExported} Daten mit Bemerkungen zur Prüfung und NICHT importieren in Proffix erfolgreich exportiert."); } else { OnLogEventRaised( $"Keine Daten mit Bemerkungen zur Prüfung und NICHT importieren in Proffix exportiert. Datei: {exportFilename} wurde nicht erzeugt!"); } Thread.Sleep(50); OnLogEventRaised(string.Empty); exportFilename = Path.Combine(folder, $"{CreationTimeStamp.ToString("yyyy-MM-dd-HHmm")}_Heli Sitterdorf.csv"); listToExport = proffixDataList.Where(x => x.MemberNumber == "999605" && x.FlightBoxData.IsDepartureMovement == false) .ToList(); if (listToExport.Any()) { OnLogEventRaised($"Exportiere Daten für Heli Sitterdorf in Datei: {exportFilename}"); var reportExporter = new ReportExporter(exportFilename, listToExport); reportExporter.Export(); OnLogEventRaised( $"{reportExporter.NumberOfLinesExported} Daten für Heli Sitterdorf erfolgreich exportiert."); } else { OnLogEventRaised( $"Keine Daten für Heli Sitterdorf exportiert. Datei: {exportFilename} wurde nicht erzeugt!"); } Thread.Sleep(50); OnLogEventRaised(string.Empty); exportFilename = Path.Combine(folder, $"{CreationTimeStamp.ToString("yyyy-MM-dd-HHmm")}_Skydive.csv"); listToExport = proffixDataList.Where(x => x.MemberNumber == "703100" && x.FlightBoxData.IsDepartureMovement == false) .ToList(); if (listToExport.Any()) { OnLogEventRaised($"Exportiere Daten für Skydive in Datei: {exportFilename}"); var reportExporter = new ReportExporter(exportFilename, listToExport); reportExporter.Export(); OnLogEventRaised( $"{reportExporter.NumberOfLinesExported} Daten für Skydive erfolgreich exportiert."); } else { OnLogEventRaised( $"Keine Daten für Skydive exportiert. Datei: {exportFilename} wurde nicht erzeugt!"); } Thread.Sleep(50); OnLogEventRaised(string.Empty); exportFilename = Path.Combine(folder, $"{CreationTimeStamp.ToString("yyyy-MM-dd-HHmm")}_Swiss oldies.csv"); listToExport = proffixDataList.Where(x => x.MemberNumber == "28" && x.FlightBoxData.IsDepartureMovement == false) .ToList(); if (listToExport.Any()) { OnLogEventRaised($"Exportiere Daten für Swiss oldies in Datei: {exportFilename}"); var reportExporter = new ReportExporter(exportFilename, listToExport); reportExporter.Export(); OnLogEventRaised( $"{reportExporter.NumberOfLinesExported} Daten für Swiss oldies erfolgreich exportiert."); } else { OnLogEventRaised( $"Keine Daten für Swiss oldies exportiert. Datei: {exportFilename} wurde nicht erzeugt!"); } Thread.Sleep(50); WriteLogFile(); Thread.Sleep(50); ExportFinished?.Invoke(this, EventArgs.Empty); } catch (Exception e) { HasExportError = true; ExportErrorMessage = e.Message; OnLogEventRaised("Fehler beim Convertieren..." + Environment.NewLine + "Fehlermeldung: " + e.Message); ExportFinished?.Invoke(this, EventArgs.Empty); } }
private void WriteBaseFile(List <ProffixData> proffixDataList) { var folder = ExportFolderName + CreationTimeStamp.ToString("yyyy-MM-dd") + "\\"; if (Directory.Exists(folder) == false) { Directory.CreateDirectory(folder); } var exportFilename = Path.Combine(folder, $"{CreationTimeStamp.ToString("yyyy-MM-dd-HHmm")}_Base.csv"); var nrOfLinesExported = 0; OnLogEventRaised($"Exportiere Basis-Daten in Datei: {exportFilename}"); using (var w = new StreamWriter(exportFilename)) { var header = "ARP,TYPMO,ACREG,TYPTR,NUMMO,ORIDE,PAX,DATMO,TIMMO,PIMO,TYPPI,DIRDE,CID,CDT,CDM,KEY,Mitgliedernummer,LASTNAME,MTOW,CLUB,HOME_BASE,ORIGINAL_ORIDE,REMARKS"; w.WriteLine(header); foreach (var proffixData in proffixDataList) { var sb = new StringBuilder(); sb.Append(proffixData.FlightBoxData.Airport); sb.Append(","); sb.Append(proffixData.FlightBoxData.MovementType); sb.Append(","); sb.Append(proffixData.FlightBoxData.Immatriculation); sb.Append(","); sb.Append(proffixData.FlightBoxData.TypeOfTraffic); sb.Append(","); sb.Append(proffixData.FlightBoxData.NrOfMovements); sb.Append(","); sb.Append(proffixData.FlightBoxData.Location); sb.Append(","); sb.Append(proffixData.FlightBoxData.NrOfPassengers); sb.Append(","); sb.Append(proffixData.FlightBoxData.MovementDate); sb.Append(","); sb.Append(proffixData.FlightBoxData.MovementTime); sb.Append(","); sb.Append(proffixData.FlightBoxData.Runway); sb.Append(","); sb.Append(proffixData.FlightBoxData.TypePi); sb.Append(","); sb.Append(proffixData.FlightBoxData.DirectionOfDeparture); sb.Append(","); sb.Append(proffixData.FlightBoxData.CID); sb.Append(","); sb.Append(proffixData.FlightBoxData.CreationDate); sb.Append(","); sb.Append(proffixData.FlightBoxData.CreationTime); sb.Append(","); sb.Append(proffixData.FlightBoxData.Key); sb.Append(","); sb.Append(proffixData.MemberNumber); // using the new mapped member number sb.Append(","); sb.Append(proffixData.FlightBoxData.Lastname); sb.Append(","); sb.Append(proffixData.FlightBoxData.MaxTakeOffWeight); sb.Append(","); sb.Append(proffixData.FlightBoxData.Club); sb.Append(","); if (proffixData.FlightBoxData.IsHomebased) { sb.Append("1"); } sb.Append(","); sb.Append(proffixData.FlightBoxData.OriginalLocation); sb.Append(","); sb.Append(proffixData.FlightBoxData.Remarks); w.WriteLine(sb.ToString()); nrOfLinesExported++; } w.Flush(); } OnLogEventRaised($"{nrOfLinesExported} Basis-Daten erfolgreich exportiert."); }