using MergeCMInpro.Business; using System; using System.Collections.Generic; using System.Text; using NLog; using System.Linq; using System.IO; namespace MergeCMInpro.Data { public static class DataOperations { private static readonly Logger _logger = NLog.LogManager.GetCurrentClassLogger(); public static string conString = string.Empty; public static string kanalAktePath = string.Empty; public static string csvPath = string.Empty; public static List vorgängeInpro = new List(); public static List vorgängeCM = new List(); public static List vorgängeStandort = new List(); public static string GenerateQuery(string az) { string sqlQuery = "SELECT " + "INPROP.PMGTVVORGANG.VORGANGID, " + "INPROP.PMGTVVORGANG.VORGANGDEFID, " + "INPROP.PMVBCHECKLIST.CHECKLISTID, " + "INPROP.PMVBCHECKLIST.DESCRIPTION, " + "INPROP.PMGTVVORGANG.STRASSE1ID, " + "INPROP.PMGTVVORGANG.STRASSE1, " + "INPROP.PMGTVVORGANG.HAUSNUMMER1, " + "INPROP.PMGTVVORGANG.HSNRVON, " + "INPROP.PMGTVVORGANG.HSNRVONZUSATZ, " + "INPROP.PMGTVVORGANG.HSNRBIS, " + "INPROP.PMGTVVORGANG.HSNRBISZUSATZ, " + "INPROP.PMGTVVORGANG.STRASSE2, " + "INPROP.PMGTVVORGANG.HAUSNUMMER2, " + "INPROP.PMGTVVORGANG.DATUMEINGANG, " + "INPROP.PMGTVVORGANG.DATUMABSCHLUSS " + "FROM INPROP.PMGTVVORGANG " + "INNER JOIN INPROP.PMVBCHECKLIST ON INPROP.PMGTVVORGANG.CHECKID = INPROP.PMVBCHECKLIST.CHECKLISTID " + "WHERE INPROP.PMGTVVORGANG.VORGANGID='" + az + "'"; return sqlQuery; } private static string KanalakteQueryForStrasseID(string strasse) { string sqlQuery = "SELECT " + "INPROP.PMGTVSTRASSE.BEZEICHNUNG, " + "INPROP.PMGTVSTRASSE.STRASSENNR " + "FROM INPROP.PMGTVSTRASSE " + "WHERE INPROP.PMGTVSTRASSE.BEZEICHNUNG='" + strasse.TrimEnd() + "'"; return sqlQuery; } static Tuple FillVorgangObjects(Oracle.ManagedDataAccess.Client.OracleConnection con, Oracle.ManagedDataAccess.Client.OracleCommand cmd, Vorgang v) { con.Open(); using (Oracle.ManagedDataAccess.Client.OracleDataReader reader = cmd.ExecuteReader()) { VorgangInpro vorgangInpro = new VorgangInpro(); VorgangCM vorgangCM = new VorgangCM(); while (reader.Read()) { vorgangInpro.Checkliste = reader.GetString(2); v.VorgangsDefinition = reader.GetString(1); vorgangCM.BeschreibungVorgang = reader.GetString(3); var tempDate = reader.GetValue(13).ToString(); if (tempDate == "null" || tempDate.Equals(string.Empty)) { vorgangInpro.Eingangsdatum = new DateTime(1900, 1, 1); _logger.Error("Wrong date " + v.Aktenzeichen); } else { vorgangInpro.Eingangsdatum = Convert.ToDateTime(tempDate); } tempDate = reader.GetValue(14).ToString(); if (tempDate == "null" || tempDate.Equals(string.Empty)) { vorgangInpro.Enddatum = new DateTime(1900, 1, 1); vorgangCM.Enddatum = vorgangInpro.Enddatum; _logger.Error("Wrong date " + v.Aktenzeichen); } else { vorgangInpro.Enddatum = Convert.ToDateTime(tempDate); vorgangCM.Enddatum = vorgangInpro.Enddatum; } var strasseId = reader.GetValue(4); if (strasseId.ToString() == "") { vorgangInpro.IdStrasse = "null"; _logger.Error("No ID for Street: " + v.Strasse1); } else { vorgangInpro.IdStrasse = strasseId.ToString(); } v.Strasse1 = reader.GetValue(5).ToString(); v.Hausnummer1 = reader.GetValue(6).ToString(); vorgangInpro.Hausnummer1Von = reader.GetValue(7).ToString(); vorgangInpro.HsNrVonZusatz = reader.GetValue(8).ToString(); vorgangInpro.Hausnummer1Bis = reader.GetValue(9).ToString(); vorgangInpro.HsNrBisZusatz = reader.GetValue(10).ToString(); v.Strasse2 = reader.GetValue(11).ToString(); v.Hausnummer2 = reader.GetValue(12).ToString(); } return new Tuple(vorgangCM, vorgangInpro); } } internal static Tuple FillVorgangObjectsKanalakte(Vorgang v) { VorgangInpro vorgangInpro = new VorgangInpro(); VorgangCM vorgangCM = new VorgangCM(); vorgangInpro.Checkliste = "0000000198"; v.VorgangsDefinition = "AA"; vorgangCM.BeschreibungVorgang = "Kanalakte"; vorgangInpro.Eingangsdatum = DateTime.Parse(ExcelReader.ReadExcel(kanalAktePath, v.Aktenzeichen)); vorgangInpro.Enddatum = DateTime.Parse(ExcelReader.ReadExcel(kanalAktePath, v.Aktenzeichen)); vorgangCM.Enddatum = vorgangInpro.Enddatum; //_logger.Error("Wrong date " + v.Aktenzeichen); #region Strasse using (Oracle.ManagedDataAccess.Client.OracleConnection oracle = new Oracle.ManagedDataAccess.Client.OracleConnection()) { oracle.ConnectionString = conString; string queryStrasse = KanalakteQueryForStrasseID(v.Strasse1); oracle.Open(); using (Oracle.ManagedDataAccess.Client.OracleCommand com = new Oracle.ManagedDataAccess.Client.OracleCommand(queryStrasse, oracle)) { using (Oracle.ManagedDataAccess.Client.OracleDataReader reader = com.ExecuteReader()) { while (reader.Read()) { var strasseId = reader.GetValue(1).ToString(); if (strasseId.ToString() == "") { vorgangInpro.IdStrasse = "null"; _logger.Error("No ID for Street: " + v.Strasse1); } else { vorgangInpro.Strasse1 = reader.GetValue(0).ToString(); vorgangInpro.IdStrasse = strasseId.ToString(); } } } } } #endregion //TODO: Hausnummer muss gesplittet werden vorgangInpro.SplittedHausnummerZusatz(v); return new Tuple(vorgangCM, vorgangInpro); } #region Extract Strassen #endregion public static void ConnectAndExecute(Vorgang v, string archivNetPath) { Tuple tuple; try { #region Kanalakten if (v.Aktenzeichen.StartsWith("70/")) { tuple = FillVorgangObjectsKanalakte(v); //CM vorgängeCM.Add(tuple.Item1.GenerateVorgang(v)); //Inpro vorgängeInpro.Add(tuple.Item2.GenerateVorgang(v)); //Copy PDF to Destination on NetShare var tmp = FileOperations.ExtractFilePath(v.AbsoluteFilePath); var destFolder = string.Concat("pdf", tmp.ElementAt(5), " ", tmp.ElementAt(0), " bis ", tmp.ElementAt(2)); FileOperations.CopySourcePdfFileToDestination(v.AbsoluteFilePath, destFolder, string.Concat(v.FameId, ".pdf"), archivNetPath); return; } #endregion using (Oracle.ManagedDataAccess.Client.OracleConnection oracle = new Oracle.ManagedDataAccess.Client.OracleConnection()) { oracle.ConnectionString = conString; string sqlQuery = GenerateQuery(v.Aktenzeichen); using (Oracle.ManagedDataAccess.Client.OracleCommand com = new Oracle.ManagedDataAccess.Client.OracleCommand(sqlQuery, oracle)) { //Erstelle Inpro und CM-Objekt tuple = FillVorgangObjects(oracle, com, v); //Füge CM-Objekt Liste hinzu vorgängeCM.Add(tuple.Item1.GenerateVorgang(v)); //Für Inpro-Objekt Liste hinzu vorgängeInpro.Add(tuple.Item2.GenerateVorgang(v)); //Standort var vStandort = new VorgangStandort(csvPath); vorgängeStandort.Add(vStandort.GenerateVorgang(v)); //Copy PDF to Destination on NetShare var tmp = FileOperations.ExtractFilePath(v.AbsoluteFilePath); var destFolder = string.Concat("pdf", tmp.ElementAt(5), " ", tmp.ElementAt(0), " bis ", tmp.ElementAt(2)); FileOperations.CopySourcePdfFileToDestination(v.AbsoluteFilePath, destFolder, string.Concat(v.FameId, ".pdf"), archivNetPath); } } } catch (Exception ex) { Console.WriteLine("Error {0}:{1}", v.Aktenzeichen, ex.Message); _logger.Error(ex.Message + " " + v.Aktenzeichen); } } } }