256 lines
10 KiB
C#
256 lines
10 KiB
C#
using BeWo.Data.Access;
|
|
using BeWo.Data.Entities;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace BeWo.Service.Import.AvisImport
|
|
{
|
|
public class AviseImporter
|
|
{
|
|
|
|
public DateTime BuchungsDatum { get; set; } = DateTime.Now.Date;
|
|
|
|
|
|
//Der Rückgabewert wird beim Client in einer Messagebox angezeigt
|
|
public virtual String ImportAvise(List<Avis> avise, List<HilfeplanInfo> hilfeplaene)
|
|
{
|
|
var importresult = ImportAbschlagszahlungen(avise, hilfeplaene);
|
|
String importDaten = "1 Datensatz";
|
|
String vorhandenDaten = "0 Datensätze waren";
|
|
int importiertCount = 0;
|
|
int bereitsVorhandenCount = 0;
|
|
var irFalseList = new List<AvisImportResult>();
|
|
var irDoubleList = new List<AvisImportResult>();
|
|
var newEntities = new List<AccountingTransaction>();
|
|
|
|
foreach (var ir in importresult)
|
|
{
|
|
switch (ir.ResultState)
|
|
{
|
|
case ImportResultState.Success:
|
|
importiertCount++;
|
|
if (ir.NewAbschlagszahlung != null)
|
|
{
|
|
newEntities.Add(ir.NewAbschlagszahlung);
|
|
}
|
|
break;
|
|
case ImportResultState.Failed:
|
|
irFalseList.Add(ir);
|
|
break;
|
|
case ImportResultState.AlreadyExisting:
|
|
irDoubleList.Add(ir);
|
|
bereitsVorhandenCount++;
|
|
break;
|
|
}
|
|
}
|
|
|
|
DAOFactory.GenericDAO.Insert(newEntities);
|
|
|
|
if (importiertCount != 1)
|
|
{
|
|
importDaten = String.Format("{0} Datensätze", importiertCount);
|
|
}
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.AppendLine(String.Format("Der Import ist abgeschlossen. Es wurden {0} neu importiert.", importDaten));
|
|
|
|
if (bereitsVorhandenCount > 0)
|
|
{
|
|
vorhandenDaten = "1 Datensatz war";
|
|
if (bereitsVorhandenCount != 1)
|
|
{
|
|
vorhandenDaten = String.Format("{0} Datensätze waren", irDoubleList.Count);
|
|
}
|
|
|
|
sb.AppendLine("");
|
|
sb.AppendLine(String.Format("{0} bereits vorhanden:", vorhandenDaten));
|
|
foreach (var ir in irDoubleList)
|
|
{
|
|
sb.AppendLine(ir.Message);
|
|
}
|
|
}
|
|
|
|
if (irFalseList.Count > 0)
|
|
{
|
|
String nichtImportiertDaten = "1 Datensatz konnte";
|
|
if (irFalseList.Count != 1)
|
|
{
|
|
nichtImportiertDaten = String.Format("{0} Datensätze konnten", irFalseList.Count);
|
|
}
|
|
|
|
sb.AppendLine("");
|
|
sb.AppendLine(String.Format("{0} nicht importiert werden:", nichtImportiertDaten));
|
|
foreach (var ir in irFalseList)
|
|
{
|
|
sb.AppendLine(ir.Message);
|
|
}
|
|
}
|
|
|
|
var text = sb.ToString();
|
|
if (text.Length > 5700) // Gibt sonst einen Fehler beim Deserialisieren auf dem Client
|
|
{
|
|
text = text.Substring(0, 5700) + "...";
|
|
}
|
|
|
|
return text;
|
|
}
|
|
|
|
public virtual List<AvisImportResult> ImportAbschlagszahlungen(List<Avis> avise, List<HilfeplanInfo> hilfeplaene)
|
|
{
|
|
var result = new List<AvisImportResult>();
|
|
|
|
foreach (var avis in avise)
|
|
{
|
|
//if (avis.Klient != null && avis.Klient.Contains("Noga"))
|
|
//{
|
|
|
|
//}
|
|
var ir = ImportAbschlagszahlung(avis, hilfeplaene);
|
|
result.Add(ir);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public virtual AvisImportResult ImportAbschlagszahlung(Avis avis, List<HilfeplanInfo> hilfeplaene)
|
|
{
|
|
var result = new AvisImportResult();
|
|
result.ResultState = ImportResultState.Failed;
|
|
result.Avis = avis;
|
|
var allePassendenHps = new List<HilfeplanInfo>();
|
|
HilfeplanInfo passenderHilfeplan = null;
|
|
|
|
foreach (var hp in hilfeplaene)
|
|
{
|
|
var r = VergleicheAvisMitHilfeplan(avis, hp);
|
|
if (r.ResultState == ImportResultState.Success)
|
|
{
|
|
allePassendenHps.Add(hp);
|
|
}
|
|
}
|
|
|
|
if (allePassendenHps.Count == 0)
|
|
{
|
|
result.Message = String.Format("GP {0} konnte nicht gefunden werden.", avis.Aktenzeichen);
|
|
}
|
|
// Gibt es nur einen Hilfeplan überhaupt, dann muss nicht auf vorhandenes Start- und Enddatum geprüft werden, sonst schon
|
|
else if (allePassendenHps.Count == 1)
|
|
{
|
|
result.Message = String.Format("Es wurde kein Hilfeplan mit passendem Zeitraum gefunden.");
|
|
DateTime monatStart = new DateTime(avis.GueltigkeitsDatum.Year, avis.GueltigkeitsDatum.Month, 1);
|
|
DateTime monatEnde = monatStart.AddMonths(1);
|
|
|
|
if (allePassendenHps[0].Start < monatEnde && allePassendenHps[0].Ende >= monatStart)
|
|
{
|
|
passenderHilfeplan = allePassendenHps[0];
|
|
result.ResultState = ImportResultState.Success;
|
|
result.Message = "";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
result.Message = String.Format("Es wurde kein Hilfeplan mit passendem Zeitraum gefunden.");
|
|
DateTime monatStart = new DateTime(avis.GueltigkeitsDatum.Year, avis.GueltigkeitsDatum.Month, 1);
|
|
DateTime monatEnde = monatStart.AddMonths(1);
|
|
|
|
foreach (var hp in allePassendenHps)
|
|
{
|
|
// Auf Jahr 1 und 9999 prüfen, weil das bei Plänen ohne Start und Enddatum gesetzt ist. Auf so einen soll NUR gebucht werden, wenn es nur diesen einen gibt
|
|
if (hp.Start.Value.Year != 1 && hp.Ende.Value.Year != 9999 && hp.Start < monatEnde && hp.Ende >= monatStart)
|
|
{
|
|
passenderHilfeplan = hp;
|
|
result.ResultState = ImportResultState.Success;
|
|
result.Message = "";
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if (result.ResultState == ImportResultState.Failed)
|
|
{
|
|
result.Message = String.Format("{0}, {1}, {2:MMM yyyy}, Grund: {3}", avis.Klient, avis.Aktenzeichen, avis.GueltigkeitsDatum, result.Message);
|
|
}
|
|
else if (passenderHilfeplan != null)
|
|
{
|
|
if (!CheckObAbschlagszahlungBereitsImportiert(avis, passenderHilfeplan))
|
|
{
|
|
result.NewAbschlagszahlung = CreateAbschlagszahlung(avis, passenderHilfeplan);
|
|
result.ResultState = ImportResultState.Success;
|
|
}
|
|
else
|
|
{
|
|
result.ResultState = ImportResultState.AlreadyExisting;
|
|
result.Message = String.Format("{0}, {1}, {2:MMM yyyy}, wurde bereits importiert.", avis.Klient, avis.Aktenzeichen, avis.GueltigkeitsDatum);
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
public virtual AvisImportResult VergleicheAvisMitHilfeplan(Avis avis, HilfeplanInfo hp)
|
|
{
|
|
var result = new AvisImportResult();
|
|
result.Avis = avis;
|
|
//Prüfe ob Aktenzeichen vorkommt
|
|
if (!String.IsNullOrEmpty(hp.Aktenzeichen) && hp.Aktenzeichen.Contains(avis.Aktenzeichen))
|
|
{
|
|
result.ResultState = ImportResultState.Success;
|
|
}
|
|
else
|
|
{
|
|
result.Message = String.Format("Aktenzeichen {0} konnte nicht gefunden werden.", avis.Aktenzeichen);
|
|
}
|
|
|
|
|
|
//Prüfe ob Klientname vorkommt
|
|
//var nameBuchung = avis.Verwendungszweck.ToLower();
|
|
//var nachname = hp.CustomerLastName.ToLower();
|
|
//var vorname = hp.CustomerFirstName.ToLower();
|
|
//nachname = nachname.Replace("ö", "oe");
|
|
//nachname = nachname.Replace("ü", "ue");
|
|
//nachname = nachname.Replace("ä", "ae");
|
|
//nachname = nachname.Replace("ß", "ss");
|
|
//vorname = vorname.Replace("ö", "oe");
|
|
//vorname = vorname.Replace("ü", "ue");
|
|
//vorname = vorname.Replace("ä", "ae");
|
|
//vorname = vorname.Replace("ß", "ss");
|
|
//var name = String.Format("{0}{1}", nachname, vorname);
|
|
//if (nameBuchung.Contains(name))
|
|
//{
|
|
// return true;
|
|
//}
|
|
|
|
return result;
|
|
}
|
|
|
|
public virtual AccountingTransaction CreateAbschlagszahlung(Avis avis, HilfeplanInfo hp)
|
|
{
|
|
var newAz = new AccountingTransaction();
|
|
newAz.CostBearer2SupportConcept = hp.CostBearer2SupportConcept;
|
|
newAz.Amount = avis.Betrag;
|
|
newAz.BookingDate = BuchungsDatum;
|
|
newAz.ImportNotice = CreateImportNotice(avis);
|
|
newAz.ValidityDate = avis.GueltigkeitsDatum;
|
|
newAz.Notice = String.Format("Automatischer Import vom {0:dd.MM.yyyy} für {1}, AZ: {2}", avis.BuchungsDatum, avis.Klient, avis.Aktenzeichen);
|
|
|
|
return newAz;
|
|
}
|
|
|
|
public virtual String CreateImportNotice(Avis avis)
|
|
{
|
|
return String.Format("Automatischer Import vom {0:dd.MM.yyyy} für {1}, AZ: {2} über {3:c}", avis.GueltigkeitsDatum, avis.Klient, avis.Aktenzeichen, avis.Betrag);
|
|
}
|
|
|
|
public virtual bool CheckObAbschlagszahlungBereitsImportiert(Avis avis, HilfeplanInfo hp)
|
|
{
|
|
var azAltList = DAOFactory.SearchDAO.FindAccountingTransactionsWithImportNotice(CreateImportNotice(avis));
|
|
return azAltList != null && azAltList.Any();
|
|
}
|
|
}
|
|
}
|
|
|