Files
MergeCMInpro/Data/DataOperations.cs
2026-04-23 14:26:26 +02:00

235 lines
10 KiB
C#

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<string> vorgängeInpro = new List<string>();
public static List<string> vorgängeCM = new List<string>();
public static List<string> vorgängeStandort = new List<string>();
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<VorgangCM, VorgangInpro> 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>(vorgangCM, vorgangInpro);
}
}
internal static Tuple<VorgangCM, VorgangInpro> 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>(vorgangCM, vorgangInpro);
}
#region Extract Strassen
#endregion
public static void ConnectAndExecute(Vorgang v, string archivNetPath)
{
Tuple<VorgangCM, VorgangInpro> 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);
}
}
}
}