89 lines
3.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|