diff --git a/ReportImp/Alloheim/Alloheim.csproj b/ReportImp/Alloheim/Alloheim.csproj index 20956462b..8ec265eed 100644 --- a/ReportImp/Alloheim/Alloheim.csproj +++ b/ReportImp/Alloheim/Alloheim.csproj @@ -51,6 +51,9 @@ + + + Component diff --git a/ReportImp/Alloheim/Export/SAPExporter.cs b/ReportImp/Alloheim/Export/SAPExporter.cs index bd1546446..bb6664dcf 100644 --- a/ReportImp/Alloheim/Export/SAPExporter.cs +++ b/ReportImp/Alloheim/Export/SAPExporter.cs @@ -146,7 +146,18 @@ namespace Alloheim.Export sb.Append(String.Format("{0:ddMMyyyy} \t", lastDate)); sb.Append(String.Format("{0:ddMMyyyy} \t", lastDate)); sb.Append("EUR\t"); - sb.Append(String.Format("1192{0:ddMMyyyy}{1} \t", lastDate, counter));// Profitcenter + Rechnungs - Nr.VN + if (counter < 10) + { + sb.Append(String.Format("1192{0:yyyy}{0:MM}00{1} \t", lastDate, counter));// Profitcenter + Rechnungs - Nr.VN, genau 11 Stellen + } + else if (counter < 100) + { + sb.Append(String.Format("1192{0:yyyy}{0:MM}0{1} \t", lastDate, counter));// Profitcenter + Rechnungs - Nr.VN, genau 11 Stellen + } + else + { + sb.Append(String.Format("1192{0:yyyy}{0:MM}{1} \t", lastDate, counter));// Profitcenter + Rechnungs - Nr.VN, genau 11 Stellen + } sb.Append("1192\t"); // Belegkopftext 1192 sb.Append("D\t"); // D = Debitorenposition / zweite Zeile: S = Sachkontenposition sb.Append("01\t"); // Kontoart D: S=01 H=11 / zweite Zeile: Kontoart S: S=40 H=50 @@ -164,7 +175,18 @@ namespace Alloheim.Export sb.Append(String.Format("{0:ddMMyyyy} \t", lastDate)); sb.Append(String.Format("{0:ddMMyyyy} \t", lastDate)); sb.Append("EUR\t"); - sb.Append(String.Format("1192{0:ddMMyyyy}{1} \t", lastDate, counter));// Profitcenter + Rechnungs - Nr.VN + if (counter < 10) + { + sb.Append(String.Format("1192{0:yyyy}{0:MM}00{1} \t", lastDate, counter));// Profitcenter + Rechnungs - Nr.VN, genau 11 Stellen + } + else if (counter < 100) + { + sb.Append(String.Format("1192{0:yyyy}{0:MM}0{1} \t", lastDate, counter));// Profitcenter + Rechnungs - Nr.VN, genau 11 Stellen + } + else + { + sb.Append(String.Format("1192{0:yyyy}{0:MM}{1} \t", lastDate, counter));// Profitcenter + Rechnungs - Nr.VN, genau 11 Stellen + } sb.Append("1192\t"); // Belegkopftext 1192 sb.Append("S\t"); // S = Sachkontenposition sb.Append("50\t"); // Kontoart Kontoart S: S=40 H=50 diff --git a/ReportImp/Alloheim/Import/Abschlagszahlung.cs b/ReportImp/Alloheim/Import/Abschlagszahlung.cs new file mode 100644 index 000000000..d143bc075 --- /dev/null +++ b/ReportImp/Alloheim/Import/Abschlagszahlung.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Alloheim.Import +{ + public class Abschlagszahlung + { + //Symbol Posten offen/ausg.,Buchungskreis,Zuordnung,Konto,Name 1,Name 2,Referenz,Referenzschlüssel 2,Belegnummer,Belegart,Buchungsperiode, + //Geschäftsjahr,Belegdatum,Buchungsdatum,Betrag in Hauswährung,Text,Zahlungssperre,Mahnstufe,Mahnsperre,Datum Sozialhilfe beantragt am,Erfassungsdatum + + public long Auftragskonto { get; set; } + public String Gegenkonto { get; set; } + public DateTime? Buchungstag { get; set; } + public DateTime? Valutadatum { get; set; } + public String Buchungstext { get; set; } + public String Verwendungszweck { get; set; } + //public String GlaeubigerId { get; set; } + //public String Mandatsreferenz { get; set; } + //public String Kundenreferenz { get; set; } + //public String Sammlerreferenz { get; set; } + //public decimal LastschriftUrsprungsbetrag { get; set; } + //public String AuslagenersatzRuecklastschrift { get; set; } + //public String BeguenstigterZahlungspflichtiger { get; set; } + //public String Iban { get; set; } + //public String Bic { get; set; } + public decimal Betrag { get; set; } + //public String Waehrung { get; set; } + //public String Info { get; set; } + + + public String CustomerName { get; set; } + public String Aktenzeichen { get; set; } + public DateTime? DatumAnfang { get; set; } + public DateTime? DatumEnde { get; set; } + public DateTime? BescheidVom { get; set; } + + } +} diff --git a/ReportImp/Alloheim/Import/AbschlagszahlungImport.cs b/ReportImp/Alloheim/Import/AbschlagszahlungImport.cs new file mode 100644 index 000000000..e99a341c8 --- /dev/null +++ b/ReportImp/Alloheim/Import/AbschlagszahlungImport.cs @@ -0,0 +1,243 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BeWo.Data.Access; +using BeWo.Data.Entities; +using BeWo.Service.MessageContracts; +using BeWo.Service.Plugins; +using DevExpress.XtraPrinting.Native; + +namespace Alloheim.Import +{ + public class AbschlagszahlungImport : DataImporter + { + private int bereitsVorhandenCount = 0; + private int importiertCount = 0; + private int keinDebitorCount = 0; + private string Debitornr; + + public override UploadImportFileResult ImportData(string filename, byte[] daten) + { + + String str = System.Text.Encoding.Default.GetString(daten); + + var abschlagszahlungen = CreateAbschlagszahlungen(str); + var hilfeplaene = CreateHilfeplanInfos(); + + var importresult = ImportAbschlagszahlungen(abschlagszahlungen, hilfeplaene); + + + var result = new UploadImportFileResult(); + result.Success = false; + + String importDaten = "1 Datensatz"; + String vorhandenDaten = "1 Datensatz"; + String nichtImport = ""; + + if (importiertCount != 1) + { + importDaten = String.Format("{0} Datensätze", importiertCount); + } + + if (bereitsVorhandenCount != 1) + { + vorhandenDaten = String.Format("{0} Datensätze", bereitsVorhandenCount); + } + + if (String.IsNullOrEmpty(importresult)) + { + result.ResultMessage = String.Format( + "Die Daten wurden erfolgreich importiert.\nEs wurden {0} neu importiert. {1} waren bereits vorhanden.", + importDaten, vorhandenDaten); + } + else + { + result.ResultMessage = String.Format("Die Daten wurden erfolgreich importiert.\nEs wurden {0} neu importiert. {1} waren bereits vorhanden.\n\nFolgende Zahlungen konnten nicht importiert werden:\n{2}", importDaten, vorhandenDaten, importresult); + } + + return result; + } + + private String ImportAbschlagszahlungen(List abschlagszahlungen, List hilfeplaene) + { + StringBuilder ergebnis = new StringBuilder(); + + foreach (var az in abschlagszahlungen) + { + bool importiert = false; + foreach (var hilfeplanInfo in hilfeplaene) + { + importiert = ImportAbschlagszahlung(az, hilfeplanInfo, ergebnis); + if (importiert) + break; + } + + if (!importiert) + { + if (ergebnis.Length > 0) + ergebnis.Append("\n"); + ergebnis.Append("Debitor " + az.Gegenkonto + " " + az.Verwendungszweck + " " + az.Betrag); + } + } + + return ergebnis.ToString(); + } + + private bool ImportAbschlagszahlung(Abschlagszahlung az, HilfeplanInfo hp, StringBuilder log) + { + if (az.Buchungstag >= hp.Start && az.Buchungstag <= hp.Ende) + { + if (!String.IsNullOrEmpty(az.Gegenkonto) && !String.IsNullOrEmpty(hp.CustomerDebitorNummer)) + { + var azDebitor = az.Gegenkonto.ToLower().Trim(); + var debitor = hp.CustomerDebitorNummer.ToLower().Trim(); + + if (azDebitor == debitor) + { + if (!CheckAbschlagszahlung(az, hp)) + { + CreateAbschlagszahlung(az, hp); + importiertCount++; + } + else + { + bereitsVorhandenCount++; + } + + return true; + } + } + } + + return false; + } + + private void CreateAbschlagszahlung(Abschlagszahlung az, HilfeplanInfo hp) + { + var newAz = new AccountingTransaction(); + + newAz.CostBearer2SupportConcept = hp.CostBearer2SupportConcept; + newAz.Amount = az.Betrag; + newAz.BookingDate = az.Buchungstag; + newAz.ImportNotice = az.Verwendungszweck; + if (az.Valutadatum.HasValue) + { + newAz.ValidityDate = az.Valutadatum; + } + else + { + newAz.ValidityDate = az.Buchungstag; + } + + newAz.Notice = "Automatischer Import " + az.Verwendungszweck; + DAOFactory.GenericDAO.Insert(newAz); + } + + private bool CheckAbschlagszahlung(Abschlagszahlung az, HilfeplanInfo hp) + { + var azAltList = DAOFactory.SearchDAO.FindAccountingTransactionsWithImportNotice(az.Verwendungszweck); + return azAltList != null && azAltList.Any(); + } + + private List CreateAbschlagszahlungen(String importfile) + { + List liste = new List(); + String[] lines = importfile.Split('\n'); + DateTime month = DateTime.Now; + int jahr = 0; + int monat = 0; + + for (int i = 0; i < lines.Count(); i++) + { + string line = lines[i]; + var fields = line.Split(';'); + + if (i == 0) + { + // Kopfzeile + } + + if (i > 1) + { + if (fields.Length >= 15) + { + int.TryParse(fields[11], out jahr); + int.TryParse(fields[10], out monat); + if (jahr != 0 && monat != 0) + { + month = new DateTime(jahr, monat, 01); + } + if (!String.IsNullOrEmpty(fields[11]) && !String.IsNullOrEmpty(fields[14]) && !String.IsNullOrEmpty(fields[15])) + { + try + { + DateTime buchungstag = new DateTime(month.Year, month.Month, 1); + + Abschlagszahlung az = new Abschlagszahlung(); + az.Buchungstag = buchungstag; + if (DateTime.TryParse(fields[12], out buchungstag)) + az.Buchungstag = buchungstag; + az.Valutadatum = buchungstag; + az.Gegenkonto = fields[2].Substring(4,6); //führendes 1192 abschneiden + if (!String.IsNullOrEmpty(fields[15])) + { + az.Verwendungszweck = fields[15]; + } + else + { + az.Verwendungszweck = fields[6]; + } + + decimal betrag = 0; + if (Decimal.TryParse(fields[14], out betrag)) + { + az.Betrag = -(betrag); + } + + //ParseVerwendungszweck(az); + liste.Add(az); + } + catch (Exception e) + { + //ignore + } + } + } + } + } + return liste; + } + + private List CreateHilfeplanInfos() + { + List liste = new List(); + var scList = DAOFactory.GenericDAO.GetAllActiveAndArchived(); + + foreach (var supportConcept in scList) + { + foreach (var cb2sc in supportConcept.CostBearer2SupportConceptList) + { + HilfeplanInfo hi = new HilfeplanInfo(); + + hi.Start = cb2sc.StartDate; + hi.Ende = cb2sc.EndDate; + + hi.CostBearer2SupportConcept = cb2sc; + hi.CustomerFirstName = cb2sc.SupportConcept.Customer.Person.FirstName; + hi.CustomerLastName = cb2sc.SupportConcept.Customer.Person.LastName; + hi.CustomerBirthday = cb2sc.SupportConcept.Customer.Person.DateOfBirth; + hi.CustomerDebitorNummer = cb2sc.SupportConcept.Customer.DebitorNumber; + hi.Aktenzeichen = cb2sc.CustomerReferenceNumber; + + if (hi.Start.HasValue && hi.Ende.HasValue && !String.IsNullOrEmpty(hi.CustomerDebitorNummer)) + { + liste.Add(hi); + } + } + } + + return liste; + } + } +} diff --git a/ReportImp/Alloheim/Import/HilfeplanInfo.cs b/ReportImp/Alloheim/Import/HilfeplanInfo.cs new file mode 100644 index 000000000..c7f23baa4 --- /dev/null +++ b/ReportImp/Alloheim/Import/HilfeplanInfo.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BeWo.Data.Entities; + +namespace Alloheim.Import +{ + public class HilfeplanInfo + { + //Auftragskonto; Buchungstag; Valutadatum; Buchungstext; Verwendungszweck; Glaeubiger ID; Mandatsreferenz; Kundenreferenz(End - to - End); Sammlerreferenz; Lastschrift Ursprungsbetrag; Auslagenersatz Ruecklastschrift; + //Beguenstigter / Zahlungspflichtiger; Kontonummer / IBAN; BIC(SWIFT - Code); Betrag; Waehrung; Info + + public String CustomerFirstName { get; set; } + public String CustomerLastName { get; set; } + public DateTime? CustomerBirthday { get; set; } + public String CustomerDebitorNummer { get; set; } + public DateTime? Start { get; set; } + public DateTime? Ende { get; set; } + public DateTime? BescheidVom { get; set; } + public String Aktenzeichen { get; set; } + + public CostBearer2SupportConcept CostBearer2SupportConcept { get; set; } + } +}