238 lines
11 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
|