Compare commits

4 Commits

Author SHA1 Message Date
dev-mkoebis
690626582e Merge branch 'Standortänderung' into dev-mkoebis
# Conflicts:
#	MergeCMInpro.csproj
2026-06-26 12:26:35 +02:00
dev-mkoebis
c401dae875 Pakete aktualisiert
Deprecaterd Vorgang-Datei aus Scan2Compress gelöscht
2026-06-26 10:12:37 +02:00
dev-mkoebis
7e3e99ad20 Server in config.txt angepasst Datum in Standortklasse angepasst
header eingefügt
Testing hinzugefügt
2026-04-23 14:59:28 +02:00
dev-mkoebis
1905243a4a Verfolgung für Dateien in bin und obj-Ordner gestoppt 2026-04-23 14:56:47 +02:00
8 changed files with 170 additions and 588 deletions

View File

@@ -101,7 +101,6 @@ namespace MergeCMInpro.Business
{ {
int count = 0; int count = 0;
int countRows = File.ReadAllLines(path).Length; int countRows = File.ReadAllLines(path).Length;
using (StreamReader sr = new StreamReader(path, System.Text.Encoding.GetEncoding("ISO-8859-1"))) using (StreamReader sr = new StreamReader(path, System.Text.Encoding.GetEncoding("ISO-8859-1")))
{ {
string[] arr = new string[10]; string[] arr = new string[10];
@@ -117,44 +116,22 @@ namespace MergeCMInpro.Business
Console.WriteLine("\r{0}/{1} ", count, countRows); Console.WriteLine("\r{0}/{1} ", count, countRows);
} }
arr = sr.ReadLine().Split(";"); arr = sr.ReadLine().Split(";");
bool jpmFiles = arr[2].Contains(".jpm");
//Erstelle Basis-Vorgang aus den SAGA-Daten //Erstelle Basis-Vorgang aus den SAGA-Daten
Vorgang v; Vorgang v;
if(arr[2].Contains("70/")) if(arr[2].Contains("70/"))
{ {
//arr[0]=ID z.B. 815922, arr[2]=AZ z.B. 61/5-3-048105, arr[3]=Strasse z.B. Westheck, arr[5]=DocType z.B. SCHRIFTVERKEHR, arr[6]=Teil z.B. 001, arr[8]=PDF z.B. 815922.pdf //arr[0]=ID z.B. 815922, arr[2]=AZ z.B. 61/5-3-048105, arr[3]=Strasse z.B. Westheck, arr[5]=DocType z.B. SCHRIFTVERKEHR, arr[6]=Teil z.B. 001, arr[8]=PDF z.B. 815922.pdf
if (jpmFiles) v = new Vorgang(arr[0], arr[2], string.Concat(arr[5], " Teil ", arr[6]), arr[6], arr[8], arr[3],arr[4]);
{
v = new Vorgang(arr[0], arr[2], string.Concat(arr[5], " Teil ", arr[6]), arr[6], arr[7], arr[3], arr[4]);
}
else
{
v = new Vorgang(arr[0], arr[2], string.Concat(arr[5], " Teil ", arr[6]), arr[6], arr[7], arr[3], arr[4]);
}
} }
else else
{ {
if (jpmFiles) v = new Vorgang(arr[0], arr[2], string.Concat(arr[5], " Teil ", arr[6]), arr[6], arr[8]);
{
v = new Vorgang(arr[0], arr[2], string.Concat(arr[5], " Teil ", arr[6]), arr[6], arr[8]);
}
else
{
v = new Vorgang(arr[0], arr[2], string.Concat(arr[5], " Teil ", arr[6]), arr[6], arr[7]);
}
} }
#region PDF #region PDF
if(jpmFiles) v.AbsoluteFilePath = GetFullFilePath(arr[8], path); //arr[7]=jpm-Dateien
{
v.AbsoluteFilePath = GetFullFilePath(arr[8], path); //arr[7]=jpm-Dateien
}
else
{
v.AbsoluteFilePath = GetFullFilePath(arr[7], path);
}
if (v.AbsoluteFilePath == string.Empty) if (v.AbsoluteFilePath == string.Empty)
{ {
Console.WriteLine("Keine PDF-Dateien gefunden."); Console.WriteLine("Keine PDF-Dateien gefunden.");

View File

@@ -108,7 +108,8 @@ namespace MergeCMInpro.Business
byte[] tmpHash; byte[] tmpHash;
tmpDt = ASCIIEncoding.ASCII.GetBytes(dt); tmpDt = ASCIIEncoding.ASCII.GetBytes(dt);
tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpDt); tmpHash = MD5.Create().ComputeHash(tmpDt);
//tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpDt);
StringBuilder res = new StringBuilder(tmpHash.Length); StringBuilder res = new StringBuilder(tmpHash.Length);
for (int i = 0; i < tmpHash.Length; i++) for (int i = 0; i < tmpHash.Length; i++)

View File

@@ -33,21 +33,7 @@ namespace MergeCMInpro.Business
string documentType = FileOperations.LowerDocumentType(v.DocType.Split(" ").FirstOrDefault()); string documentType = FileOperations.LowerDocumentType(v.DocType.Split(" ").FirstOrDefault());
sbCM.Append(string.Concat(documentType, " ", string.Concat(v.DocType.Split(" ").FirstOrDefault().Substring(0, 1), v.DocType.Split(" ").FirstOrDefault().Substring(1).ToLower()), " ", v.DocType.Split(" ", 2).Skip(1).FirstOrDefault(), ";")); sbCM.Append(string.Concat(documentType, " ", string.Concat(v.DocType.Split(" ").FirstOrDefault().Substring(0, 1), v.DocType.Split(" ").FirstOrDefault().Substring(1).ToLower()), " ", v.DocType.Split(" ", 2).Skip(1).FirstOrDefault(), ";"));
string langBez = string.Empty; string langBez = base.GenerateLangbezeichnungFromPath(v.AbsoluteFilePath);
try
{
langBez = base.GenerateLangbezeichnungFromPath(v.AbsoluteFilePath);
}
catch (ArgumentOutOfRangeException ex)
{
Console.WriteLine("ERROR: Wrong Path {0}. Please provide folder like '843.818 - 847.187 SAGA HD 28 2023_12_18'", Path.GetDirectoryName(v.AbsoluteFilePath));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
//string langBez = base.GenerateLangbezeichnungFromPath(v.AbsoluteFilePath);
sbCM.Append(string.Concat(langBez, ";")); sbCM.Append(string.Concat(langBez, ";"));
sbCM.Append(string.Concat(v.FameId, ".pdf")); sbCM.Append(string.Concat(v.FameId, ".pdf"));
@@ -55,5 +41,7 @@ namespace MergeCMInpro.Business
return sbCM.ToString(); return sbCM.ToString();
} }
} }
} }

View File

@@ -37,11 +37,12 @@ namespace MergeCMInpro.Business
sbStandort.Append(string.Concat(this.CID, ";"));//CID sbStandort.Append(string.Concat(this.CID, ";"));//CID
sbStandort.Append(string.Concat(v.Aktenzeichen, ";"));//Vorgangsnummer sbStandort.Append(string.Concat(v.Aktenzeichen, ";"));//Vorgangsnummer
sbStandort.Append(string.Concat(this.Sachbearbeiter, ";"));//Sachbearbeiter sbStandort.Append(string.Concat(this.Sachbearbeiter, ";"));//Sachbearbeiter
sbStandort.Append(string.Concat(this.Bemerkung, ";"));//Bemerkung
sbStandort.Append(string.Concat(this.Standort, ";"));//Standort sbStandort.Append(string.Concat(this.Standort, ";"));//Standort
sbStandort.Append(string.Concat(this.Entnahmedatum.ToShortDateString(), ";"));//Entnahmedatum -> Datum Tabelle sbStandort.Append(string.Concat(this.Entnahmedatum.ToShortDateString(), ";"));//Entnahmedatum -> Datum Tabelle
sbStandort.Append(string.Concat(this.Entnahmezeit, ";"));//Entnahmezeit sbStandort.Append(string.Concat(this.Entnahmezeit, ";"));//Entnahmezeit
sbStandort.Append(string.Concat(this.Entnahmedatum.ToShortDateString(), ";"));//Rückgabedatum=Entnahmedatum sbStandort.Append(string.Concat(this.Entnahmedatum.ToShortDateString(), ";"));//Rückgabedatum=Entnahmedatum
sbStandort.Append(string.Concat(this.Entnahmezeit, ";"));//Rückgabezeit=Entnahmezeit sbStandort.Append(this.Entnahmezeit);//Rückgabezeit=Entnahmezeit
return sbStandort.ToString(); return sbStandort.ToString();
} }

View File

@@ -1,17 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<DebugType>embedded</DebugType>
<Platforms>AnyCPU;x86</Platforms>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Remove="x64\**" /> <None Remove="NLog.config" />
<EmbeddedResource Remove="x64\**" />
<None Remove="x64\**" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<<<<<<< HEAD
<PackageReference Include="Microsoft.Office.Interop.Excel" Version="16.0.18925.20022" /> <PackageReference Include="Microsoft.Office.Interop.Excel" Version="16.0.18925.20022" />
<PackageReference Include="NLog" Version="4.7.11" /> <PackageReference Include="NLog" Version="4.7.11" />
<PackageReference Include="ODP.NetCore" Version="2.0.12" /> <PackageReference Include="ODP.NetCore" Version="2.0.12" />
@@ -20,6 +22,33 @@
<ItemGroup> <ItemGroup>
<Folder Include="config\" /> <Folder Include="config\" />
=======
<COMReference Include="Microsoft.Office.Interop.Excel">
<WrapperTool>tlbimp</WrapperTool>
<VersionMinor>8</VersionMinor>
<VersionMajor>1</VersionMajor>
<Guid>00020813-0000-0000-c000-000000000046</Guid>
<Lcid>0</Lcid>
<Isolated>false</Isolated>
<EmbedInteropTypes>true</EmbedInteropTypes>
</COMReference>
>>>>>>> Standortänderung
</ItemGroup> </ItemGroup>
<ItemGroup>
<Content Include="NLog.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="NLog" Version="6.1.3" />
<PackageReference Include="Oracle.ManagedDataAccess.Core" Version="23.26.200" />
</ItemGroup>
<ItemGroup>
<None Update="config.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project> </Project>

View File

@@ -1,25 +1,31 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17 # Visual Studio Version 17
VisualStudioVersion = 17.1.32319.34 VisualStudioVersion = 17.0.32126.317
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MergeCMInpro", "MergeCMInpro.csproj", "{F50C40BA-1861-48DD-B5E7-9638439E15E1}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MergeCMInpro", "MergeCMInpro.csproj", "{0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU Release|Any CPU = Release|Any CPU
Release|x86 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F50C40BA-1861-48DD-B5E7-9638439E15E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F50C40BA-1861-48DD-B5E7-9638439E15E1}.Debug|Any CPU.Build.0 = Debug|Any CPU {0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F50C40BA-1861-48DD-B5E7-9638439E15E1}.Release|Any CPU.ActiveCfg = Release|Any CPU {0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Debug|x86.ActiveCfg = Debug|x86
{F50C40BA-1861-48DD-B5E7-9638439E15E1}.Release|Any CPU.Build.0 = Release|Any CPU {0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Debug|x86.Build.0 = Debug|x86
{0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Release|Any CPU.Build.0 = Release|Any CPU
{0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Release|x86.ActiveCfg = Release|x86
{0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Release|x86.Build.0 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A8D0CA7E-16F2-47DA-92BA-34B69950C507} SolutionGuid = {512F540C-4375-4C7D-B8F4-9D45AE50AA94}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View File

@@ -1,278 +1,136 @@
using System; using MergeCMInpro.Business;
using MergeCMInpro.Data;
using NLog;
using System;
using System.IO; using System.IO;
using Scan2Compress.Business;
using System.Linq; using System.Linq;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace MergeCMInpro namespace MergeCMInpro
{ {
class Program static class Program
{ {
static List<string> vorgängeCM = new List<string>(); private static readonly Logger _logger = NLog.LogManager.GetCurrentClassLogger();
static List<string> vorgängeInpro = new List<string>();
static string destinationFilePath = @"\\asbgvp02\Archivtransfer\"; static string csvPath = String.Empty;
static string constring = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dborap01.stadtdo.de)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=bgvp.stadtdo.de)));user id=leser;password=leser;";
static string csvPath = Path.Combine(Directory.GetFiles(Environment.CurrentDirectory, "*.csv").FirstOrDefault());
//static string csvPath = Path.Combine(Directory.GetFiles(@"S:\Bauvorhaben\0_SAGA\815.922 - 819.917 SAGA HD 21 2021_09_27", "*.csv").FirstOrDefault());
static string pathOutputFileCM = Path.Combine(Directory.GetParent(csvPath).FullName, "outputCM.csv");
static string pathOutputFileInpro = Path.Combine(Directory.GetParent(csvPath).FullName, "outputInpro.csv");
static void Main(string[] args) static void Main(string[] args)
{
Console.WriteLine("Working, please wait... or get yourself a tea.");
SplitRow(csvPath);
using (StreamWriter sw = new StreamWriter(pathOutputFileCM))
{
foreach (var item in vorgängeCM)
{
sw.WriteLine(item.ToString());
}
}
using (StreamWriter sw = new StreamWriter(pathOutputFileInpro))
{
foreach (var item in vorgängeInpro)
{
sw.WriteLine(item.ToString());
}
}
Console.WriteLine("{0} created.", pathOutputFileCM);
Console.WriteLine("{0} created.", pathOutputFileInpro);
Console.WriteLine("");
Console.WriteLine("You may close this window now.");
Console.ReadLine();
}
public static void SplitRow(string path)
{
int count = 0;
int countRows = File.ReadAllLines(path).Length;
using (StreamReader sr = new StreamReader(path, System.Text.Encoding.GetEncoding("ISO-8859-1")))
{
string[] arr = new string[10];
while (!sr.EndOfStream)
{
count++;
if (count != countRows)
{
Console.Write("\r{0}/{1} ", count, countRows);
}
else
{
Console.WriteLine("\r{0}/{1} ", count, countRows);
}
arr = sr.ReadLine().Split(";");
Vorgang v = new Vorgang(arr[0], arr[2], string.Concat(arr[5], " Teil ", arr[6]), arr[6], arr[8]);
v.AbsoluteFilePath = GetFullFilePath(arr[8]); //arr[7]=jpm-Dateien
if (v.AbsoluteFilePath == string.Empty)
{
Console.WriteLine("Datei {0} nicht gefunden", path);
return;
}
v.CreationDate = GetCreationDate(v.AbsoluteFilePath);
ConnectAndExecute(v);
//Backup JPM-Files
var z = ExtractFilePath(v.AbsoluteFilePath);
var folder = string.Concat("Sicherungen jpm ", z.ElementAt(0), " bis ", z.ElementAt(2));
CopySourceFileToDestination(GetFullFilePath(arr[7]), Path.Combine(destinationFilePath, "Archiv", folder), arr[7]);
}
}
}
static string[] ExtractFilePath(string path)
{
var splittedAbsolutePath = path.Split("\\").SkipLast(2).LastOrDefault();
return splittedAbsolutePath.Split(" ");
}
public static DateTime GetCreationDate(string file)
{
FileInfo fi = new FileInfo(file);
return fi.CreationTime;
}
public static string GetFullFilePath(string file)
{
string currentDirectory = Directory.GetParent(csvPath).FullName; //Directory.GetCurrentDirectory();
string res = string.Empty;
res = Directory.GetFiles(currentDirectory, file, SearchOption.AllDirectories).FirstOrDefault();
if (res == null)
return string.Empty;
else
{
//res = Directory.GetParent(res).Parent.Name.Split('\\').LastOrDefault();
return res;
}
}
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;
}
public static void ConnectAndExecute(Vorgang v)
{ {
try try
{ {
using (Oracle.ManagedDataAccess.Client.OracleConnection oracle = new Oracle.ManagedDataAccess.Client.OracleConnection()) Console.ForegroundColor = ConsoleColor.White;
//productive
csvPath = Path.Combine(Directory.GetFiles(Environment.CurrentDirectory, "*.csv").FirstOrDefault());
//testing
//csvPath = Path.Combine(Directory.GetFiles(@"\\fsdeg002\DatenStA61_S\Bauvorhaben\0_SAGA\815.922 - 819.917 SAGA HD 21 2021_09_27_Testing", "*.csv").FirstOrDefault());
//csvPath = Path.Combine(Directory.GetFiles(@"E:\TestData\MergeCMInpro", "*.csv").FirstOrDefault());
string pathOutputFileCM = Path.Combine(Directory.GetParent(csvPath).FullName, "outputCM.csv");
string pathOutputFileInpro = Path.Combine(Directory.GetParent(csvPath).FullName, "outputInpro.csv");
string pathOutputFileStandort = Path.Combine(Directory.GetParent(csvPath).FullName, "outputStandort.csv");
if (CheckFileExist())
{ {
oracle.ConnectionString = constring; Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("WARNING: import files already exist.");
Console.ResetColor();
return;
}
string sqlQuery = GenerateQuery(v.Aktenzeichen); var config = File.ReadLines(@".\config.txt").ToArray();
DataOperations.conString = config[0];
DataOperations.kanalAktePath = config[2];
DataOperations.csvPath = csvPath;
using (Oracle.ManagedDataAccess.Client.OracleCommand com = new Oracle.ManagedDataAccess.Client.OracleCommand(sqlQuery, oracle)) if (!File.Exists(DataOperations.kanalAktePath))
throw new FileNotFoundException("Kanalaktendatei nicht gefunden.");
string archivNetPath = Path.Combine(config[1]);
Console.WriteLine("Working, please wait... or get yourself a tea.");
FileOperations.SplitRow(csvPath, archivNetPath);
//CM
using (StreamWriter sw = new StreamWriter(pathOutputFileCM))
{
foreach (var item in DataOperations.vorgängeCM)
{ {
oracle.Open(); sw.WriteLine(item.ToString());
using (Oracle.ManagedDataAccess.Client.OracleDataReader reader = com.ExecuteReader())
{
while (reader.Read())
{
v.Checkliste = reader.GetString(2);
v.VorgangsDefinition = reader.GetString(1);
v.BeschreibungVorgang = reader.GetString(3);
v.Eingangsdatum = Convert.ToDateTime(reader.GetValue(13).ToString());
v.Enddatum = Convert.ToDateTime(reader.GetValue(14).ToString());
//var date = reader.GetValue(12);
//if (date.ToString() == string.Empty)
// v.Enddatum = DateTime.Now;
//else
// v.Enddatum = Convert.ToDateTime(reader.GetValue(12).ToString());
var strasseId = reader.GetValue(4);
if (strasseId.ToString() == "")
v.IdStrasse = "null";
else
v.IdStrasse = strasseId.ToString();
v.Strasse1 = reader.GetValue(5).ToString().Trim();
v.Hausnummer1Von = reader.GetValue(6).ToString();
v.HsNrVonZusatz = reader.GetValue(8).ToString();
v.Hausnummer1Bis = reader.GetValue(9).ToString();
v.HsNrBisZusatz = reader.GetValue(10).ToString();
v.Strasse2 = reader.GetValue(11).ToString();
v.Hausnummer2 = reader.GetValue(12).ToString();
}
//CM
StringBuilder sbCM = new StringBuilder();
sbCM.Append(string.Concat(v.Id, ";"));
sbCM.Append(string.Concat(v.Aktenzeichen, ";"));
sbCM.Append(string.Concat(v.VorgangsDefinition.Trim(), ';'));
sbCM.Append(string.Concat(v.BeschreibungVorgang, ";"));
sbCM.Append(string.Concat(v.Strasse1, ";"));
sbCM.Append(string.Concat(string.Concat(v.Hausnummer1Von, " ", v.HsNrVonZusatz).Trim(), ';'));
sbCM.Append(string.Concat(v.Strasse2.Trim(), ";"));
sbCM.Append(string.Concat(string.Concat(v.Hausnummer1Bis, " ", v.HsNrBisZusatz).Trim(), ';'));
sbCM.Append(string.Concat(v.Enddatum.ToShortDateString(), ";"));
sbCM.Append(string.Concat(v.FameId, ";"));
sbCM.Append(string.Concat(v.CreationDate.ToShortDateString(), ";"));
//Langbezeichnung
string documentType = CheckedForDocumentType(v.DocType.Split(" ").FirstOrDefault());
sbCM.Append(string.Concat(documentType, " ", string.Concat(v.DocType.Split(" ").FirstOrDefault().Substring(0, 1), v.DocType.Split(" ").FirstOrDefault().Substring(1).ToLower()), " ", v.DocType.Split(" ", 2).Skip(1).FirstOrDefault(), ";"));
sbCM.Append(string.Concat(v.AbsoluteFilePath.Split('\\').SkipLast(2).LastOrDefault(), " ", v.Id, ";"));
sbCM.Append(string.Concat(v.FameId, ".pdf", ";"));
vorgängeCM.Add(sbCM.ToString());
StringBuilder sbInpro = new StringBuilder();
sbInpro.Append(string.Concat(string.Empty, ";"));//Barcode
sbInpro.Append(string.Concat(v.Aktenzeichen, ";"));//Vorgangsnummer
sbInpro.Append(string.Concat(string.Empty, ";"));//Abteilung
sbInpro.Append(string.Concat(v.IdStrasse, ";"));//Strasse1ID
sbInpro.Append(string.Concat(v.Strasse1, ";").Trim());//Strasse1
sbInpro.Append(string.Concat(v.Hausnummer1Von, ";").Trim());//Hausnummer1
sbInpro.Append(string.Concat(v.Hausnummer1Von, ";").Trim());//Hausnummer1Von
sbInpro.Append(string.Concat(v.HsNrVonZusatz, ";").Trim());//Hausnummer1VonZusatz
sbInpro.Append(string.Concat(v.Hausnummer1Bis, ";").Trim());//Hausnummer1Bis
sbInpro.Append(string.Concat(v.HsNrBisZusatz, ";").Trim());//Hausnummer1BisZusatz
sbInpro.Append(string.Concat(v.Strasse2, ";").Trim());//Strasse2
sbInpro.Append(string.Concat(v.Hausnummer2, ";").Trim());//Hausnummer2
sbInpro.Append(string.Concat(v.DocType, ";"));//Bezeichnung1
sbInpro.Append(string.Concat(v.Eingangsdatum.ToShortDateString(), ";"));//Eingangsdatum
sbInpro.Append(string.Concat(string.Empty, ";"));//Beschreibung1
sbInpro.Append(string.Concat(string.Empty, ";")); //Beschreibung2
sbInpro.Append(string.Concat(string.Empty, ";"));//Bezeichnung2
sbInpro.Append(string.Concat(v.DocsSZ, ";"));//Bezeichnung3
sbInpro.Append(string.Concat(v.FameId, ".pdf", ";"));//Dateiname
sbInpro.Append(string.Concat(v.FameId, ";"));//FameId
sbInpro.Append(string.Concat(v.VorgangsDefinition, ";").Trim());//Vorgangsart
sbInpro.Append(string.Concat(v.Checkliste, ";").Trim());//Checkliste
sbInpro.Append(string.Concat(v.Enddatum.ToShortDateString(), ";"));//Abschlussdatum
sbInpro.Append(string.Concat(string.Concat(documentType, " ", string.Concat(v.DocType.Split(" ").FirstOrDefault().Substring(0, 1), v.DocType.Split(" ").FirstOrDefault().Substring(1).ToLower()), " ", v.DocType.Split(" ", 2).Skip(1).FirstOrDefault(), ";")));//Langbezeichnung
vorgängeInpro.Add(sbInpro.ToString());
var tmp = ExtractFilePath(v.AbsoluteFilePath);
var destFolder = string.Concat("pdf", tmp.ElementAt(5), " ", tmp.ElementAt(0), " bis ", tmp.ElementAt(1), " ", tmp.ElementAt(2));
CopySourceFileToDestination(v.AbsoluteFilePath, destFolder, string.Concat(v.FameId, ".pdf"));
}
} }
} }
//Inpro
using (StreamWriter sw = new StreamWriter(pathOutputFileInpro))
{
foreach (var item in DataOperations.vorgängeInpro)
{
sw.WriteLine(item.ToString());
}
}
//Standort
using (StreamWriter sw = new StreamWriter(pathOutputFileStandort))
{
for (int i = 0; i < DataOperations.vorgängeStandort.Count; i++)
{
if (i == 0)
{
sw.WriteLine(String.Concat("CID", "VORGANGID", "Sachbearbeiter", "Bemerkung", "Standort", "ENTNAHMEDATUM", "Entnahmezeit", "RUECKGABEDATUM", "Rückgabezeit"));
}
sw.WriteLine(DataOperations.vorgängeStandort[i]);
}
}
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("{0} created.", pathOutputFileCM);
Console.WriteLine("{0} created.", pathOutputFileInpro);
Console.WriteLine("{0} created.", pathOutputFileStandort);
Console.ResetColor();
//Backup JPM-Files
Console.WriteLine("Start copying jpm-files, please wait...");
FileInfo fi = new FileInfo(csvPath);
FileOperations.CopyJPMFilesToDestination(fi.Directory.FullName, archivNetPath);
Console.WriteLine("");
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Done. You may close this window now.");
Console.ReadLine();
}
catch (DirectoryNotFoundException)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("ERROR: source directory not found.");
Console.ReadLine();
}
catch (FileNotFoundException ex)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("ERROR: "+ex.Message);
Console.ReadLine();
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine("ERROR fetching data for {0}:{1}", v.Aktenzeichen, ex.Message); Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("ERROR: unknown error occured. Maybe no csv-File? Please check!\r\n{0}", ex.InnerException);
Console.ReadLine();
} }
} }
static string CheckedForDocumentType(string value)
{
switch (value)
{
case "SCHRIFTVERKEHR":
value = "01";
break;
case "ZEICHNUNGEN":
value = "02";
break;
case "STATIK":
value = "03";
break;
case "SONSTIGES":
value = "04";
break;
case "GENEHMIGUNG":
value = "05";
break;
default:
break;
}
return value;
}
static void CopySourceFileToDestination(string sourceFilePath, string destFolderName, string destFileName) public static bool CheckFileExist()
{ {
string destPath = Path.Combine(destinationFilePath, destFolderName); if (File.Exists(Path.Combine(Directory.GetParent(csvPath).FullName, "outputInpro.csv")) || File.Exists(Path.Combine(Directory.GetParent(csvPath).FullName, "outputCM.csv")))
if (!Directory.Exists(destPath)) {
Directory.CreateDirectory(destPath); return true;
File.Copy(sourceFilePath, Path.Combine(destPath, destFileName),true); }
else
{
return false;
}
} }
} }
} }

View File

@@ -1,278 +0,0 @@
using NLog;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace Scan2Compress.Business
{
public sealed class Vorgang
{
#region Fields
private static readonly Logger _logger = NLog.LogManager.GetCurrentClassLogger();
private string aktenzeichen;
#endregion
//TODO: fehlende Felder aus den CM und Inpro hinzufügen
#region Properties
public DateTime Enddatum { get; set; }
public DateTime Eingangsdatum { get; set; }
public string BeschreibungVorgang { get; set; }
public string Checkliste { get; set; }
public string VorgangsDefinition { get; set; }
public int Id { get; set; }
public string Aktenzeichen
{
get
{
return aktenzeichen;
}
set
{
aktenzeichen = value;
if (!aktenzeichen.Contains("/"))
{
aktenzeichen = ReplaceHiphenWithSlash(value);
}
}
}
public string FameId { get; set; }
public string DocsSZ { get; set; }
public string DocType { get; set; }
public static Dictionary<int, string> Strassen { get; set; }
public string IdStrasse { get; set; }
public string Strasse1 { get; set; }
public string Hausnummer1Von { get; set; }
public string Hausnummer1Bis { get; set; }
public string HsNrVonZusatz { get; set; }
public string HsNrBisZusatz { get; set; }
public string Strasse2 { get; set; } = string.Empty;
public string Hausnummer2 { get; set; } = string.Empty;
public string Teil { get; set; }
public string NamePDF { get; set; }
public string AbsoluteFilePath { get; set; }
public DateTime CreationDate { get; set; }
public DateTime ScanDatum { get; set; } = DateTime.Now; //Erstelldatum
#endregion Properties
#region Contructor
public Vorgang(string id, string aktenzeichen, string docType, string teil, string namePDF)
{
this.DocType = docType;
this.Teil = teil;
this.Aktenzeichen = aktenzeichen;
this.NamePDF = namePDF;
this.Id = Convert.ToInt32(id);
this.FameId = GenerateFameId();
}
public Vorgang(string id, string aktenzeichen, string docType, string teil, string namePDF, string strasse1, string hausnummer1)
{
this.DocType = docType;
this.Teil = teil;
this.Aktenzeichen = aktenzeichen;
this.NamePDF = namePDF;
this.Id = Convert.ToInt32(id);
this.FameId = GenerateFameId();
this.Strasse1 = strasse1.Trim();
this.Hausnummer1Von = hausnummer1;
}
public Vorgang()
{
}
#endregion
#region Methods
private int GenerateVorgangId(int oldValue)
{
int newValue = oldValue + 1;
return newValue;
}
//Erstelle Originalaktenzeichen
private string ReplaceHiphenWithSlash(string aktenzeichen)
{
var regex = new Regex(Regex.Escape("-"));
string res = regex.Replace(aktenzeichen, "/", 1);
return res;
}
#region Extract Strassen
private void ExtractStrasseHausnummer(string strasse)
{
string[] res = strasse.Split(' ');
StringBuilder sb = new StringBuilder();
try
{
//Abtrennen von Hausnummerzusätzen wie z.B. "4A" in "4" und "A" sowie Aufspaltung von Bereichen z.B. "4-8" in "4" und "8"
for (int i = 0; i < res.Length; i++)
{
if (!char.IsDigit(res[i].ElementAt(0)) && char.IsDigit(res[i].ElementAt(1)))
{
DocsSZ = res[i];
}
else if (char.IsDigit(res[i].ElementAt(0)))
{
SplittedHausnummerZusatz(res[i]);
}
else
{
//z.B. Auf der Mühle, Herbert-Scholtissek-Str, Westholz etc.
sb.Append(res[i]);
sb.Append(" ");
}
}
Strasse1 = sb.ToString().Trim();
}
catch (System.ArgumentOutOfRangeException ex)
{
_logger.Error(string.Concat(ex.Message, " Beim Extrahieren der Strasse/Hausnummer ist ein Fehler aufgetreten."));
throw new ArgumentOutOfRangeException("Beim Extrahieren der Strasse1 ist ein Fehler aufgetreten.\n\nBitte Eingaben überprüfen.", ex);
}
catch (Exception ex)
{
_logger.Error(ex.Message);
throw;
}
}
private void SplittedStrasse2(string input)
{
string[] strasseHnr = input.Split(' ');
StringBuilder builder = new StringBuilder();
Hausnummer2 = strasseHnr.LastOrDefault();
strasseHnr = strasseHnr.Take(strasseHnr.Length - 1).ToArray();
for (int i = 0; i < strasseHnr.Length; i++)
{
if (i == strasseHnr.Length - 1)
builder.Append(strasseHnr[i]);
else
builder.Append(string.Concat(strasseHnr[i], " "));
}
Strasse2 = builder.ToString();
}
private void SplittedHausnummerZusatz(string input)
{
string hausnummerZusatzVon = string.Empty;
string hausnummerZusatzBis = string.Empty;
Tuple<string, string> result;
if (input.Contains('-')) //13-15, 13a-15
{
hausnummerZusatzVon = input.Split('-').FirstOrDefault();
hausnummerZusatzBis = input.Split('-').LastOrDefault();
result = ExtractingZusatzFromHausnummer(hausnummerZusatzVon);
Hausnummer1Von = result.Item1;
HsNrVonZusatz = result.Item2;
result = ExtractingZusatzFromHausnummer(hausnummerZusatzBis);
Hausnummer1Bis = result.Item1;
HsNrBisZusatz = result.Item2;
if (HsNrBisZusatz.Length >= 2 || HsNrVonZusatz.Length >= 2)
{
HsNrVonZusatz = HsNrVonZusatz != string.Empty ? HsNrVonZusatz.FirstOrDefault().ToString() : string.Empty;
HsNrBisZusatz = HsNrBisZusatz != string.Empty ? HsNrBisZusatz.LastOrDefault().ToString() : string.Empty;
}
}
else //13
{
result = ExtractingZusatzFromHausnummer(input);
Hausnummer1Von = result.Item1;
HsNrBisZusatz = result.Item2;
}
}
private Tuple<string, string> ExtractingZusatzFromHausnummer(string input)
{
StringBuilder sbHausnummer = new StringBuilder();
StringBuilder sbZusatz = new StringBuilder();
for (int i = 0; i < input.Length; i++)
{
if (char.IsDigit(input[i]))
{
sbHausnummer.Append(input[i]);
}
else
{
sbZusatz.Append(input[i]);
}
}
return new Tuple<string, string>(sbHausnummer.ToString(), sbZusatz.ToString());
}
#endregion
private string GenerateFameId()
{
string dt = DateTime.Now.ToString("ddMMyyhhmmssfff");
byte[] tmpDt;
byte[] tmpHash;
tmpDt = ASCIIEncoding.ASCII.GetBytes(dt);
tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpDt);
StringBuilder res = new StringBuilder(tmpHash.Length);
for (int i = 0; i < tmpHash.Length; i++)
{
res.Append(tmpHash[i].ToString("X2"));
}
string tmp = res.ToString().ToLower().Substring(res.Length - 12);
_logger.Info("FameId " + tmp + " für " + dt + " und " + Aktenzeichen + " erzeugt.");
return tmp;
}
public override string ToString()
{
return Id.ToString() + ";" + Aktenzeichen + ";" + Checkliste + ";" + VorgangsDefinition + ";" + BeschreibungVorgang + ";" + Strasse1 + ";" + Hausnummer1Von + ";" + HsNrVonZusatz + ";" + Hausnummer1Bis + ";" + HsNrBisZusatz + ";" + Strasse2.Trim() + ";" + Hausnummer2 + ";" + Eingangsdatum.ToShortDateString() + ";" + FameId + ";" + Enddatum.ToShortDateString() + ";" + DocType + ";" + NamePDF;
}
//CM:
//aktenzeichen
//vorgangdefid VV
//Vorgangsart Kanalakte
//strasse 1
//strasse 1 hausnummer
//strasse 2
//strasse 2 hausnummer
//datumabschluss
//fameid
//dokumentdatum
//langebzeichnung/dokumentbezeichnung in inpro
//dokumentname mit Endung
#endregion
}
}