Files
BeWoPlaner/Service/Import/AvisImport/LvrAvisKlientGesamt.cs

160 lines
5.7 KiB
C#

using DevExpress.Pdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace BeWo.Service.Import.AvisImport
{
public class LvrAvisKlientGesamt
{
public String GesamtText { get; set; }
public String Klient { get; set; }
public String Aktenzeichen { get; set; }
public String Sachbearbeiter { get; set; }
public LvrAvisKlientGesamt(String aktenzeichen)
{
this.Aktenzeichen = aktenzeichen;
}
public List<LvrAvisMonatGesamt> CreateMonatsBereiche()
{
CorrectText();
var bereiche = new List<LvrAvisMonatGesamt>();
var lines = GesamtText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
if (Aktenzeichen.Contains("2100235109"))
{
int test = 0;
}
int index = LeseKlientAktenzeichenUndSachbearbeiter(lines);
while (index < lines.Length)
{
var datumTa = LvrAvisTextAbschnitt.LeseBisDatum(lines, index, false);
if (datumTa.Success)
{
index = datumTa.ZeilenIndex;
var line = lines[index];
StringBuilder textBereich = new StringBuilder();
var monatTa = LvrAvisTextAbschnitt.LeseBisText(lines, index, "Monat:");
if (monatTa.Success)
{
textBereich.Append(monatTa.Text);
var bereich = new LvrAvisMonatGesamt(this);
bereich.GesamtText = textBereich.ToString();
bereiche.Add(bereich);
index = monatTa.ZeilenIndex;
}
}
index++;
}
return bereiche;
}
private void CorrectText()
{
//Bei der OCR Texterkennung wird das € Zeichen manchmal als © erkannt. Hier wird das korrigiert
if (!String.IsNullOrEmpty(GesamtText))
{
GesamtText = GesamtText.Replace("©", "€");
}
}
private int LeseKlientAktenzeichenUndSachbearbeiter(string[] lines)
{
int index = 0;
var ta = LvrAvisTextAbschnitt.LeseBisText(lines, index, Aktenzeichen);
index = ta.ZeilenIndex;
//Prüfe ob zuerst der Sachbearbeiter oder der Klientenname im Text steht. Der Sachbearbeiter beginnt mit dem Text "Sachbearbeiter:", der Klient endet mit dem Text "Aktenzeichen"
var sbTest = LvrAvisTextAbschnitt.LeseBisText(lines, index, "Sachbearbeiter");
var azTest = LvrAvisTextAbschnitt.LeseBisText(lines, index, "Aktenzeichen");
if (sbTest.Success && azTest.Success)
{
String klientenZeile = "";
String sbZeile = "";
if (sbTest.ZeilenIndex > azTest.ZeilenIndex) // Sachbearbeiter hinter Aktenzeichen bzw. Klientenname
{
index = azTest.ZeilenIndex + 1;
klientenZeile = azTest.Text;
//Sachbearbeiter steht hinter Klient
ta = LvrAvisTextAbschnitt.LeseBisDatum(lines, index, false);
sbZeile = ta.Text;
}
else
{
index = sbTest.ZeilenIndex + 1;
sbZeile = sbTest.Text;
//Suche Klient hinter Sachbearbeiter
ta = LvrAvisTextAbschnitt.LeseBisDatum(lines, index, false);
klientenZeile = ta.Text;
}
this.Klient = klientenZeile.Replace("GP:", "").Replace(Aktenzeichen, "").Replace("Ihr Aktenzeichen", "").Replace("Sachbearbeiter", "").Replace(":", "").Trim();
this.Sachbearbeiter = sbZeile.Replace("GP:", "").Replace(Aktenzeichen, "").Replace("Ihr Aktenzeichen", "").Replace("Sachbearbeiter", "").Replace(":", "").Trim();
if (ta.Success)
{
index = ta.ZeilenIndex;
}
if (Klient.Contains("Aktenzeichen"))
{
//Klient darf nicht den String Aktenzeichen enthalten, das ist der Fall, wenn der Text nicht das richtige Format hat
return lines.Length;
}
}
//Lese Klient. Der Klientenname steht zwischen dem Aktenzeichen und dem nächsten Text "Ihr Aktenzeichen"
// String sbZeile = "";
//if (az.Contains("Aktenzeichen"))
//{
// klientenZeile = az;
// var match = Regex.Match(az, "[0-9]+"); //Lese alle zusammenhängenden Ziffern, Leerzeichen, Sonderzeichen etc. werden nicht berücksichtigt.
// az = match.Value;
// klientenZeile = klientenZeile.Replace(az, "").Trim();
// sbZeile = lines[1];
// index = 2;
//}
//else if (lines.Length > 2)
//{
// sbZeile = lines[1];
// klientenZeile = lines[2];
// index = 3;
//}
//this.Sachbearbeiter = sbZeile.Replace("Sachbearbeiter", "").Replace(":", "").Trim();
//this.Klient = klientenZeile.Replace("Ihr Aktenzeichen", "").Replace(":", "").Trim();
return index;
}
}
}