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

89 lines
3.3 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 LvrAvisTextReader
{
public virtual List<Avis> LeseAvise(String text)
{
List<Avis> avise = new List<Avis>();
var klientenListe = CreateKlientenBereiche(text);
foreach (var kg in klientenListe)
{
foreach (var mb in kg.CreateMonatsBereiche())
{
avise.AddRange(mb.LeseEinzelAvise());
}
}
return avise;
}
private List<LvrAvisKlientGesamt> CreateKlientenBereiche(string text)
{
var bereiche = new List<LvrAvisKlientGesamt>();
var lines = text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
int index = 0;
while (index < lines.Length)
{
var line = lines[index++];
if (line.StartsWith("GP:"))
{
StringBuilder textBereich = new StringBuilder();
textBereich.AppendLine(line);
//Start eines Bereichs beginnt immer mit "GP:"
//Suche Aktenzeichen. Das Aktenzeichen kann auch in der nächsten Zeile stehen
String aktenzeichen = line.Replace("GP:", "").Trim();
var match = Regex.Match(aktenzeichen, "[0-9]+"); //Lese alle zusammenhängenden Ziffern, Leerzeichen, Sonderzeichen etc. werden nicht berücksichtigt.
aktenzeichen = match.Value;
while (String.IsNullOrWhiteSpace(aktenzeichen) && index < lines.Length)
{
line = lines[index++];
textBereich.AppendLine(line);
match = Regex.Match(line, "[0-9]+");
aktenzeichen = match.Value;
}
var bereich = new LvrAvisKlientGesamt(aktenzeichen);
bool endeBereich = false;
while (index < lines.Length && !endeBereich)
{
line = lines[index++];
textBereich.AppendLine(line);
//Die Bereiche werden immer mit dem Aktenzeichen abgeschlossen. Nimm also alle Zeilen bis obiges Aktenzeichen erneut gefunden wird.
if (line.Contains(aktenzeichen) && (!line.Contains("Endabr") && !line.Contains("GPNr"))) //CB, 08.09.2025: Wurde in einem neuen Fall fälschlicherweise als Ende gefunden, weil das Aktenzeichen in der Endabrechnungs Postition mit aufgeführt war. In diesem Fall von Frau Behrend: "SL 35/2025 Endabr. Behrend 2100444891"
{
endeBereich = true;
bereich.GesamtText = textBereich.ToString();
bereiche.Add(bereich);
}
}
}
}
return bereiche;
}
}
}