Files
Hochbaustatistik/Hochbaustatistik/Database/DatabaseOperations.cs
2026-04-23 14:48:00 +02:00

238 lines
11 KiB
C#

using Hochbaustatistik.Business;
using Hochbaustatistik.Utilities;
using NLog;
using OpenQA.Selenium.DevTools.V110.WebAuthn;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
namespace Hochbaustatistik.Database
{
public static class DatabaseOperations
{
private static readonly Logger _logger = NLog.LogManager.GetCurrentClassLogger();
public static string conString;
public static string csvPath;
[ExcludeFromCodeCoverage]
private static string GenerateQueryHochbau(string az, int identifikator = 0)
{
string sqlQuery = "SELECT "
+ "INPROP.PMGTVVORGANG.VORGANGID, "
+ "INPROP.PMGTVVORGANG.VORGANGDEFID, "
+ "INPROP.PMGTVVORGANG.STRASSE1ID, "
+ "INPROP.PMGTVVORGANG.STRASSE1, "
+ "INPROP.PMGTVVORGANG.HAUSNUMMER1, "
+ "INPROP.PMGTVSACHBEARB.NAME, "
+ "INPROP.PMGTVVORGANG.VORGANGABGESCHL, " //zdA
+ "INPROP.PMGTVVORGANG.DATUMEINGANG, "
+ "INPROP.PMGTVVORGANGVAR.FLD_D_3, " //Genehmigung
+ "INPROP.PMGTVVORGANGVAR.FLD_D_5, " //Freigabe
+ "INPROP.PMGTVVORGANG.FLD_B_2, " //Statistik relevant
+ "INPROP.PMGTVVORGANG.FLD_A_2, " //Statistik1
+ "INPROP.PMGTVVORGANG.FLD_A_3, " //Statistik2
+ "INPROP.PMGTVVORGANGVAR.FLD_D_10, " //Genehmigung gemeldet
+ "INPROP.PMGTVVORGANGVAR.FLD_D_11, " //Fertigstellung gemeldet
+ "INPROP.PMGTVVORGANGVAR.FLD_D_15, " //Baubeginn
+ "INPROP.PMGTVVORGANGVAR.FLD_D_16, " //Teilrohbauabnahme
+ "INPROP.PMGTVVORGANGVAR.FLD_D_17, " //Rohbauabnahme
+ "INPROP.PMGTVVORGANGVAR.FLD_D_20, " //Schlussabnahme
+ "INPROP.PMGTVVORGANG.FLD_A_20, " //Vorjahr
+ "INPROP.PMGTVVORGANGVAR.FLD_C_2, " //Bauüberhang Vorjahr
+ "INPROP.PMGTVVORGANG.AKTENSTANDORT, "
+ "INPROP.PMGTVVORGANGVAR.FLD_D_12 " //Baugenehmigung ausgeführt
+ "FROM INPROP.PMGTVVORGANG "
+ "INNER JOIN INPROP.PMGTVVORGANGVAR ON INPROP.PMGTVVORGANG.VORGANGID = INPROP.PMGTVVORGANGVAR.VORGANGID "
+ "AND INPROP.PMGTVVORGANG.VORGANGID = INPROP.PMGTVVORGANGVAR.VORGANGID "
+ "INNER JOIN INPROP.PMVBCHECKLIST ON INPROP.PMGTVVORGANG.CHECKID = INPROP.PMVBCHECKLIST.CHECKLISTID "
+ "INNER JOIN INPROP.PMGTVSACHBEARB ON INPROP.PMGTVVORGANG.ANWENDER = INPROP.PMGTVSACHBEARB.USERID ";
if (identifikator > 0)
{
sqlQuery += "WHERE INPROP.PMGTVVORGANG.FLD_A_2 LIKE '%" + identifikator.ToString() + "%' OR INPROP.PMGTVVORGANG.FLD_A_3 LIKE '%" + identifikator.ToString() + "%'";
}
else
{
sqlQuery += "WHERE INPROP.PMGTVVORGANG.VORGANGID='" + az + "'";
}
return sqlQuery;
}
[ExcludeFromCodeCoverage]
private static VorgangInpro FillVorgangInproHochbau(Oracle.ManagedDataAccess.Client.OracleConnection con, Oracle.ManagedDataAccess.Client.OracleCommand cmd, Vorgang v)
{
con.Open();
using (Oracle.ManagedDataAccess.Client.OracleDataReader reader = cmd.ExecuteReader())
{
VorgangInpro vorgangInproHochbau = new VorgangInpro();
while (reader.Read())
{
v.Aktenzeichen = reader.GetString(0);
if (v.Aktenzeichen == string.Empty)
{
//Kandidat für Tiefensuche
continue;
}
vorgangInproHochbau.Nummer = v.Aktenzeichen.Substring(8);
v.VorgangsDefinition = reader.GetString(1);
vorgangInproHochbau.IdStrasse = reader.GetValue(2).ToString();
vorgangInproHochbau.Bezirk = v.Aktenzeichen.Split("-").ElementAt(1).ToString();
v.Strasse1 = reader.GetValue(3).ToString().Trim();
v.Hausnummer1 = reader.GetValue(4).ToString().Trim();
vorgangInproHochbau.Sachbearbeiter = reader.GetValue(5).ToString();
vorgangInproHochbau.ZdA = reader.GetValue(6).ToString();
vorgangInproHochbau.Eingangsdatum = reader.GetValue(7).ToString().Split(' ').FirstOrDefault();
var tempDate = reader.GetValue(8).ToString();
if (tempDate == null)
{
vorgangInproHochbau.Genehmigung = "";
}
else
{
vorgangInproHochbau.Genehmigung = tempDate.Split(' ').FirstOrDefault();
}
vorgangInproHochbau.Freigabe = reader.GetValue(9).ToString();
vorgangInproHochbau.Statistik_Relevant = reader.GetValue(10).ToString();
vorgangInproHochbau.Statistik1 = reader.GetValue(11).ToString();
vorgangInproHochbau.Statistik2 = reader.GetValue(12).ToString();
tempDate = reader.GetValue(13).ToString();
if (tempDate == null)
{
vorgangInproHochbau.Genehmigung_Gemeldet = "";
}
else
{
vorgangInproHochbau.Genehmigung_Gemeldet = tempDate.Split(' ').FirstOrDefault();
}
tempDate = reader.GetValue(14).ToString();
if (tempDate == null)
{
vorgangInproHochbau.Fertigstellung_Gemeldet = "";
}
else
{
vorgangInproHochbau.Fertigstellung_Gemeldet = tempDate.Split(' ').FirstOrDefault();
}
tempDate = reader.GetValue(15).ToString();
if (tempDate == null)
{
vorgangInproHochbau.Baubeginn = "";
}
else
{
vorgangInproHochbau.Baubeginn = tempDate.Split(' ').FirstOrDefault();
}
tempDate = reader.GetValue(16).ToString();
if (tempDate == null)
{
vorgangInproHochbau.Teilrohbauabnahme = "";
}
else
{
vorgangInproHochbau.Teilrohbauabnahme = tempDate.Split(' ').FirstOrDefault();
}
tempDate = reader.GetValue(17).ToString();
if (tempDate == null)
{
vorgangInproHochbau.Rohbauabnahme = "";
}
else
{
vorgangInproHochbau.Rohbauabnahme = tempDate.Split(' ').FirstOrDefault();
}
tempDate = reader.GetValue(18).ToString();
if (tempDate == null)
{
vorgangInproHochbau.Schlussabnahme = "";
}
else
{
vorgangInproHochbau.Schlussabnahme = tempDate.Split(' ').FirstOrDefault();
}
if (tempDate == null)
{
vorgangInproHochbau.Vorjahr = "";
}
else
{
var splitted = tempDate.Split('.').LastOrDefault();
if (!string.IsNullOrEmpty(splitted))
{
vorgangInproHochbau.Vorjahr = splitted.Split(' ').FirstOrDefault();
}
else
{
vorgangInproHochbau.Vorjahr = string.Empty;
}
}
vorgangInproHochbau.Bauüberhang_Vorjahr = reader.GetValue(20).ToString();
vorgangInproHochbau.Aktenstandort = reader.GetValue(21).ToString();
vorgangInproHochbau.BaugenehmigungAusgeführt = reader.GetValue(22).ToString();
}
return vorgangInproHochbau;
}
}
//Verbindet zur Datenbank, führt Query aus und füllt Inpro-Objekt, identifikator optional -> nur falls Tiefensuche nötig
public static VorgangInpro ConnectAndExecuteHochbau(Vorgang v, int identifikator = 0)
{
VorgangInpro vorgangInproHochbau;
string sqlQuery;
try
{
using (Oracle.ManagedDataAccess.Client.OracleConnection oracle = new Oracle.ManagedDataAccess.Client.OracleConnection())
{
oracle.ConnectionString = conString;
if (identifikator != 0)
{
sqlQuery = GenerateQueryHochbau(v.Aktenzeichen, identifikator);
}
else
{
sqlQuery = GenerateQueryHochbau(v.Aktenzeichen);
}
using (Oracle.ManagedDataAccess.Client.OracleCommand com = new Oracle.ManagedDataAccess.Client.OracleCommand(sqlQuery, oracle))
{
vorgangInproHochbau = FillVorgangInproHochbau(oracle, com, v);
}
}
return vorgangInproHochbau;
}
catch (Exception ex)
{
//Fehler wird Benutzer angezeigt
Console.WriteLine("Error {0}:{1}", v.Aktenzeichen, ex.Message);
_logger.Error(ex.Message + " " + v.Aktenzeichen);
}
return null;
}
}
}