2024-04-15 16:33:04 +02:00
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.
2025-12-03 15:49:22 +01:00
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"
2024-04-15 16:33:04 +02:00
{
endeBereich = true ;
bereich . GesamtText = textBereich . ToString ( ) ;
bereiche . Add ( bereich ) ;
}
}
}
}
return bereiche ;
}
}
}