150 lines
5.3 KiB
C#
150 lines
5.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.IO;
|
|
using System.Text;
|
|
using BeWo.Data.Access;
|
|
using BeWo.Data.Entities;
|
|
using BeWo.Report.ReportObjects;
|
|
using BeWo.Service.DCEntityMapper;
|
|
using BS.Shared;
|
|
using BS.Shared.DataContracts;
|
|
using BS.Shared.Extensions;
|
|
|
|
namespace BeWo.ChristopherusHaus.Export
|
|
{
|
|
public class LohnExporter
|
|
{
|
|
|
|
public static QueryDC CreateQuery(QueryDC query)
|
|
{
|
|
DateTime dt = DateTime.Now;
|
|
DateTime.TryParse(query.Parameter[0].Value.ToString(), out dt);
|
|
query.FileName = String.Format("ZeitzuschlägePEP{0:yyyy-MM}.txt", dt);
|
|
query.QueryResult = GetSchnittstellenString(dt);
|
|
|
|
return query;
|
|
}
|
|
|
|
public static String GetSchnittstellenString(DateTime monat)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
var ro = MitarbeiterstundenkontoRO.Create(null, null, monat, monat.AddMonths(1), null);
|
|
var msb = new CHMitarbeiterstundenkontoBerechnung();
|
|
msb.CreateReport(ro);
|
|
|
|
var sro = new SchnittstellendruckRo();
|
|
sro.Monat = monat; //Monat in der Datei ist zwei Monate später als Auswertung (wegen Auszahlung!?)
|
|
sro.EmployeeDaten = new List<EmployeeDaten>();
|
|
|
|
foreach (var edt in ro.EmployeeDetailList)
|
|
{
|
|
EmployeeDaten edat = new EmployeeDaten();
|
|
edat.Daten = new List<SchnittstellenDaten>();
|
|
edat.Personalnr = edt.Employee.PersonnelNumber;
|
|
edat.Vorname = edt.FirstName;
|
|
edat.Nachname = edt.LastName;
|
|
var contract = edt.Employee.GetValidContractForDate(monat);
|
|
bool fachkraft = true;
|
|
if (contract != null && contract.ContractTypeValueListEntry != null && contract.ContractTypeValueListEntry.Type == ValueListEntryType.ContractType
|
|
&& contract.ContractTypeValueListEntry.Value.ToLower().Contains("gfb-assistenz"))
|
|
{
|
|
fachkraft = false;
|
|
}
|
|
|
|
decimal nachtarbeit = 0;
|
|
decimal sonntag = 0;
|
|
decimal feiertag = 0;
|
|
|
|
if (edt.Days != null && fachkraft)
|
|
{
|
|
foreach (var dd in edt.Days)
|
|
{
|
|
nachtarbeit += dd.SpecialHours;
|
|
sonntag += dd.HoursSunday;
|
|
feiertag += dd.HoursHoliday;
|
|
}
|
|
}
|
|
|
|
if (nachtarbeit > 0)
|
|
{
|
|
AddSchnittstellenDaten(edat, nachtarbeit, "1078", "Nacht");
|
|
}
|
|
if (feiertag > 0)
|
|
{
|
|
AddSchnittstellenDaten(edat, feiertag, "1079", "Feiertag");
|
|
}
|
|
if (sonntag > 0)
|
|
{
|
|
AddSchnittstellenDaten(edat, sonntag, "1080", "Sonntag");
|
|
}
|
|
//AddSchnittstellenDaten(edat, edt.Ueberstunden ?? 0, "3300", "Überstd");
|
|
//AddSchnittstellenDaten(edat, edt.TageUrlaub ?? 0, "181", "Urlaub");
|
|
|
|
if (edat.Daten.Count > 0)
|
|
{
|
|
sro.EmployeeDaten.Add(edat);
|
|
}
|
|
}
|
|
|
|
foreach (var ed in sro.EmployeeDaten)
|
|
{
|
|
foreach (var sd in ed.Daten)
|
|
{
|
|
sb.AppendLine(CreateString(ed, sd, monat));
|
|
}
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
|
|
private static string CreateString(EmployeeDaten ed, SchnittstellenDaten sd, DateTime monat)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
DateTime dt = new DateTime(monat.Year, monat.Month, 1);
|
|
dt = dt.AddMonths(2); //Monat in der Datei ist zwei Monate später als Auswertung (wegen Auszahlung!?)
|
|
sb.Append(String.Format("1;"));
|
|
sb.Append(String.Format("{0};", dt.Month));
|
|
sb.Append(String.Format("{0:yyyy};", dt));
|
|
sb.Append(String.Format("{0};", ed.Personalnr));
|
|
sb.Append(String.Format("{0};", sd.Konto));
|
|
sb.Append(";;;;");
|
|
sb.Append(String.Format("{0:0.00};;;;", sd.Wert));
|
|
return sb.ToString();
|
|
}
|
|
|
|
private static void AddSchnittstellenDaten(EmployeeDaten edat, decimal wert, string konto, string art)
|
|
{
|
|
if (wert != 0)
|
|
{
|
|
var sd = new SchnittstellenDaten()
|
|
{
|
|
Wert = wert,
|
|
Konto = konto,
|
|
Art = art
|
|
};
|
|
edat.Daten.Add(sd);
|
|
}
|
|
}
|
|
}
|
|
public class SchnittstellendruckRo
|
|
{
|
|
public DateTime Monat { get; set; }
|
|
public IList<EmployeeDaten> EmployeeDaten { get; set; }
|
|
}
|
|
|
|
|
|
public class EmployeeDaten
|
|
{
|
|
public String Personalnr { get; set; }
|
|
public String Vorname { get; set; }
|
|
public String Nachname { get; set; }
|
|
public IList<SchnittstellenDaten> Daten { get; set; }
|
|
}
|
|
|
|
public class SchnittstellenDaten
|
|
{
|
|
public decimal Wert { get; set; }
|
|
public String Konto { get; set; }
|
|
public String Art { get; set; }
|
|
}
|
|
} |