MH: ExportAndPrintHelper um Employee erweitert und Druck auf 10 Spalten beschränkt

This commit is contained in:
2025-12-22 10:13:07 +01:00
parent cafde4a35f
commit ba3cdeac2c
3 changed files with 379 additions and 362 deletions

View File

@@ -1845,40 +1845,28 @@ namespace BeWo.Report
public override XtraReport CreateEmployeeListReport(List<long> oids)
{
var queryReport = FindReportImp<QueryRO>(null, "Mitarbeiter");
var employees = DAOFactory.GenericDAO.LoadByIDs<Employee>(oids);
var helper = PluginLoader.FindClass<ExportAndPrintHelper>();
string[] lHeaderCaption = helper.PrepareHeaderArrayForEmployeeExport();
string[][] lContent = helper.PrepareContentArrayForEmployeeExport(oids.ToArray());
DataTable table = new DataTable();
string[] spalten = new string[] { "Name", "Personalnummer", "Kürzel", "Anschrift", "Mobil", "Telefon", "Mail" };
for (int i = 0; i < spalten.Length; i++)
table.Columns.Add(spalten[i], typeof(string));
int columnNumber = lHeaderCaption.Count();
// Spalten nur bis zur 10., da sonst der Druck nicht lesbar ist und weil in den ersten 9 die Kerninfos stehen
for (int i = 0; i < 10; i++)
table.Columns.Add(lHeaderCaption[i], typeof(string));
for (int i = 0; i < employees.Count; i++)
int rowNumber = lContent.GetLength(0);
for (int i = 0; i < rowNumber; i++)
{
DataRow row = table.NewRow();
Employee employee = employees[i];
row[1] = employee.PersonnelNumber;
Person person = employee.Person;
if (person != null)
// Spalten nur bis zur 10., da sonst der Druck nicht lesbar ist und weil in den ersten 9 die Kerninfos stehen
for (int j = 0; j < 10; j++)
{
row[0] = person.LastNameFirstName;
row[2] = person.Abbreviation;
var address = person.Address;
if (address != null)
{
row[3] = address.Street + ", " + address.PostalCode + " " + address.Town;
}
var contacts = person.Contacts;
if (contacts != null)
{
row[4] = contacts.FirstOrDefault(c => c.Type == BS.Shared.ContactType.business_MobilePhone)?.Value;
row[5] = contacts.FirstOrDefault(c => c.Type == BS.Shared.ContactType.business_Phone)?.Value;
row[6] = contacts.FirstOrDefault(c => c.Type == BS.Shared.ContactType.business_Mail)?.Value;
}
row[j] = lContent[i][j];
}
table.Rows.Add(row);
}

View File

@@ -1,5 +1,7 @@
using BeWo.Data.Access;
using BeWo.Data;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.Core;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BeWo.Service.ServiceUtils;
@@ -491,5 +493,361 @@ namespace BeWo.Service.Reporting
return lContent;
}
public virtual string[] PrepareHeaderArrayForEmployeeExport()
{
bool darfVertragSehen = true;
int arrayCount = 37;
string[] lHeaderCaption;
if (!Utils.UserHasRight(GetLoggedInUser(), UserRightType.Employee_AllowEditContracts))
{
arrayCount = 26;
darfVertragSehen = false;
}
if (darfVertragSehen)
{
lHeaderCaption = new string[37]
{
"Nachname", // 0
"Vorname", // 1
"Personalnummer", // 2
"Geburtsdatum", // 3
"Beruf", // 4
"Geschlecht", // 5
"Familienstand", // 6
"Krankenkasse", // 7
"Steuernummer", // 8
"beschäftigt als", // 9
"Probezeit (Tage)", // 10
"Kündigungsfrist (Tage)", // 11
"Urlaubstage", // 12
"FLS/Woche", // 13
"Gesamtstunden/Woche", // 14
"Arbeitstage pro Woche", // 15
"Eintrittsdatum", // 16
"Enddatum", // 17
"Versicherungsnummer",
"Stundensatz",
"Telefon",
"Mobil", // 21
"Mail",
"private Mail",
"Fax",
"Strasse",
"PLZ", // 26
"Ort", // 27
"Kontonummer",
"Bankleitzahl",
"Bank",
"BIC", // 31
"IBAN",
"Bemerkung", // 33
"Fachkraft",
"Qualifikation",
"Arbeitsschwerpunkte",
};
}
else
{
lHeaderCaption = new string[25]
{
"Nachname", // 0
"Vorname", // 1
"Personalnummer", // 2
"Geburtsdatum", // 3
"Beruf", // 4
"Geschlecht", // 5
"Familienstand", // 6
"Krankenkasse", // 7
"Steuernummer", // 8
"Telefon",
"Mobil", // 20
"Mail",
"private Mail",
"Fax",
"Strasse",
"PLZ", // 25
"Ort", // 26
"Kontonummer",
"Bankleitzahl",
"Bank",
"BIC", // 30
"IBAN",
"Fachkraft",
"Qualifikation",
"Arbeitsschwerpunkte",
};
}
return lHeaderCaption;
}
public virtual string[][] PrepareContentArrayForEmployeeExport(long[] pSortedOids)
{
bool darfVertragSehen = true;
string[] lHeaderCaption;
if (!Utils.UserHasRight(GetLoggedInUser(), UserRightType.Employee_AllowEditContracts))
{
darfVertragSehen = false;
}
var lEmployees = DAOFactory.GenericDAO.LoadByIDs<Employee>(pSortedOids);
string[][] lContent = new string[lEmployees.Count][];
for (int iRowCount = 0; iRowCount < lEmployees.Count; iRowCount++)
{
lContent[iRowCount] = new string[PrepareHeaderArrayForEmployeeExport().Count()];
lContent[iRowCount][0] = lEmployees[iRowCount].Person.LastName;
lContent[iRowCount][1] = lEmployees[iRowCount].Person.FirstName;
lContent[iRowCount][2] = lEmployees[iRowCount].PersonnelNumber;
lContent[iRowCount][3] = lEmployees[iRowCount].Person.DateOfBirth.DoIfNotNull(d => d.ToShortDateString());
lContent[iRowCount][4] = lEmployees[iRowCount].Person.Profession;
lContent[iRowCount][5] = lEmployees[iRowCount].Person.Sex == Sex.Male
? "männlich"
: "weiblich";
if (lEmployees[iRowCount].Person.FamilyStatus != null)
{
switch (lEmployees[iRowCount].Person.FamilyStatus.Value)
{
case FamilyStatus.Divorced:
lContent[iRowCount][6] = "geschieden";
break;
case FamilyStatus.Married:
lContent[iRowCount][6] = "verheiratet";
break;
case FamilyStatus.Single:
lContent[iRowCount][6] = "ledig";
break;
case FamilyStatus.Widowed:
lContent[iRowCount][6] = "verwitwet";
break;
case FamilyStatus.Partner:
lContent[iRowCount][6] = "in Partnerschaft";
break;
case FamilyStatus.PartnerDivorced:
lContent[iRowCount][6] = "getrennt lebend";
break;
case FamilyStatus.PartnerDead:
lContent[iRowCount][5] = "partnerhinterblieben";
break;
case FamilyStatus.PartnerMarried:
lContent[iRowCount][5] = "verpartnert";
break;
case FamilyStatus.Entpartnert:
lContent[iRowCount][5] = "entpartnert";
break;
}
}
lContent[iRowCount][7] = lEmployees[iRowCount].HealthInsurance;
lContent[iRowCount][8] = lEmployees[iRowCount].TaxNumber;
if (darfVertragSehen)
{
if (lEmployees[iRowCount].Person.LastName.StartsWith("Ber"))
{
int test = 0;
}
Contract lastContract = lEmployees[iRowCount].LastContract;
if (lastContract != null)
{
if (lastContract.EmploymentType != null)
{
lContent[iRowCount][9] = lastContract.EmploymentType.Name;
}
lContent[iRowCount][10] = lastContract.ProbationPeriod.ToString();
lContent[iRowCount][11] = lastContract.CancellationPeriod.ToString();
decimal? urlaubstage = null;
if (lastContract.EmploymentType != null && lastContract.EmploymentType.LeaveDays.HasValue)
{
urlaubstage = lastContract.EmploymentType.LeaveDays;
}
else
{
urlaubstage = lastContract.LeaveDays;
}
if (urlaubstage.HasValue)
{
lContent[iRowCount][12] = urlaubstage.Value.ToStringNullCheck();
}
if (lastContract.WeeklyFLS.HasValue)
{
lContent[iRowCount][13] = lastContract.WeeklyFLS.Value.ToStringNullCheck();
}
if (lastContract.WeeklyTotalHours.HasValue)
{
lContent[iRowCount][14] = lastContract.WeeklyTotalHours.Value.ToStringNullCheck();
}
var wd = lastContract.WeeklyDays ?? 5;
if (wd == 0)
wd = 5;
lContent[iRowCount][15] = String.Format("{0}", wd);
if (!lastContract.ContractEndDate.HasValue)
{
lContent[iRowCount][17] = "unbefristet";
}
else
{
lContent[iRowCount][17] = lastContract.ContractEndDate.DoIfNotNull(d => d.ToShortDateString());
}
}
var firstContract = lEmployees[iRowCount].FirstContract;
if (firstContract != null)
{
lContent[iRowCount][16] = firstContract.EntryDate.DoIfNotNull(d => d.ToShortDateString());
}
lContent[iRowCount][18] = lEmployees[iRowCount].InsuranceNumber;
if (lastContract != null)
{
if (lastContract.HourlyRate.HasValue)
{
lContent[iRowCount][19] = lastContract.HourlyRate.Value.ToStringNullCheck();
}
lContent[iRowCount][33] = lastContract.Notice;
}
}
int index = 9;
if (darfVertragSehen)
{
index = 20;
}
foreach (var iContact in lEmployees[iRowCount].Person.Contacts)
{
switch (iContact.Type)
{
case ContactType.business_Phone:
lContent[iRowCount][index] = iContact.Value;
break;
case ContactType.business_MobilePhone:
lContent[iRowCount][index + 1] = iContact.Value;
break;
case ContactType.business_Mail:
lContent[iRowCount][index + 2] = iContact.Value;
break;
case ContactType.private_Mail:
lContent[iRowCount][index + 3] = iContact.Value;
break;
case ContactType.business_Fax:
lContent[iRowCount][index + 4] = iContact.Value;
break;
}
}
if (lEmployees[iRowCount].Person.Address != null)
{
lContent[iRowCount][index + 5] = lEmployees[iRowCount].Person.Address.Street;
lContent[iRowCount][index + 6] = lEmployees[iRowCount].Person.Address.PostalCode;
lContent[iRowCount][index + 7] = lEmployees[iRowCount].Person.Address.Town;
}
if (lEmployees[iRowCount].Person.BankAccount != null)
{
lContent[iRowCount][index + 8] = lEmployees[iRowCount].Person.BankAccount.AccountNumber;
lContent[iRowCount][index + 9] = lEmployees[iRowCount].Person.BankAccount.BankCode;
lContent[iRowCount][index + 10] = lEmployees[iRowCount].Person.BankAccount.BankName;
lContent[iRowCount][index + 11] = lEmployees[iRowCount].Person.BankAccount.Bic;
lContent[iRowCount][index + 12] = lEmployees[iRowCount].Person.BankAccount.IBAN;
}
if (darfVertragSehen)
{
index += 1;
}
if (lEmployees[iRowCount].IsQualified.HasValue)
{
lContent[iRowCount][index + 13] = lEmployees[iRowCount].IsQualified.Value ? "Ja" : "Nein";
}
var qualis = lEmployees[iRowCount].ValueList.FindByType(ValueListEntryType.StaffQualificationsType)
.Select(e2o => e2o.Entry);
if (qualis != null && qualis.Count() > 0)
{
StringBuilder sb = new StringBuilder();
foreach (var entry in qualis)
{
if (sb.Length > 0)
{
sb.Append(", ");
}
sb.Append(entry.Value);
}
lContent[iRowCount][index + 14] = sb.ToString();
}
var focuses = lEmployees[iRowCount].ValueList.FindByType(ValueListEntryType.StaffActivityFocusType)
.Select(e2o => e2o.Entry);
if (focuses != null && focuses.Count() > 0)
{
StringBuilder sb = new StringBuilder();
foreach (var entry in focuses)
{
if (sb.Length > 0)
{
sb.Append(", ");
}
sb.Append(entry.Value);
}
lContent[iRowCount][index + 15] = sb.ToString();
}
}
return lContent;
}
public static ApplicationUser GetLoggedInUser()
{
ApplicationUser loggedInUser;
if (LoggedInUserOperationContextExt.Current != null &&
LoggedInUserOperationContextExt.Current.User != null)
{
loggedInUser = LoggedInUserOperationContextExt.Current.User;
}
else
{
loggedInUser = SessionFacade.LoggedInUser;
}
return loggedInUser;
}
}
}

View File

@@ -197,346 +197,17 @@ namespace BeWo.Service.ServiceImplementations
}
}
private static ApplicationUser GetLoggedInUser()
{
ApplicationUser loggedInUser;
if (LoggedInUserOperationContextExt.Current != null &&
LoggedInUserOperationContextExt.Current.User != null)
{
loggedInUser = LoggedInUserOperationContextExt.Current.User;
}
else
{
loggedInUser = SessionFacade.LoggedInUser;
}
return loggedInUser;
}
public string PrepareExcelFileEmployeeExport(string pFileID, long[] pSortedOids)
{
try
{
var lEmployees = DAOFactory.GenericDAO.LoadByIDs<Employee>(pSortedOids);
string lPath = BS.Shared.Core.Utils.CreateSavePath(AppDomain.CurrentDomain.BaseDirectory, pFileID + ".tmp");
bool darfVertragSehen = true;
int arrayCount = 37;
string[] lHeaderCaption;
if (!Utils.UserHasRight(GetLoggedInUser(), UserRightType.Employee_AllowEditContracts))
{
arrayCount = 26;
darfVertragSehen = false;
}
if (darfVertragSehen)
{
lHeaderCaption = new string[37]
{
"Nachname", // 0
"Vorname", // 1
"Personalnummer", // 2
"Geburtsdatum", // 3
"Beruf", // 4
"Geschlecht", // 5
"Familienstand", // 6
"Krankenkasse", // 7
"Steuernummer", // 8
"beschäftigt als", // 9
"Probezeit (Tage)", // 10
"Kündigungsfrist (Tage)", // 11
"Urlaubstage", // 12
"FLS/Woche", // 13
"Gesamtstunden/Woche", // 14
"Arbeitstage pro Woche", // 15
"Eintrittsdatum", // 16
"Enddatum", // 17
"Versicherungsnummer",
"Stundensatz",
"Telefon",
"Mobil", // 21
"Mail",
"private Mail",
"Fax",
"Strasse",
"PLZ", // 26
"Ort", // 27
"Kontonummer",
"Bankleitzahl",
"Bank",
"BIC", // 31
"IBAN",
"Bemerkung", // 33
"Fachkraft",
"Qualifikation",
"Arbeitsschwerpunkte",
};
}
else
{
lHeaderCaption = new string[25]
{
"Nachname", // 0
"Vorname", // 1
"Personalnummer", // 2
"Geburtsdatum", // 3
"Beruf", // 4
"Geschlecht", // 5
"Familienstand", // 6
"Krankenkasse", // 7
"Steuernummer", // 8
"Telefon",
"Mobil", // 20
"Mail",
"private Mail",
"Fax",
"Strasse",
"PLZ", // 25
"Ort", // 26
"Kontonummer",
"Bankleitzahl",
"Bank",
"BIC", // 30
"IBAN",
"Fachkraft",
"Qualifikation",
"Arbeitsschwerpunkte",
};
}
string[][] lContent = new string[lEmployees.Count][];
for (int iRowCount = 0; iRowCount < lEmployees.Count; iRowCount++)
{
lContent[iRowCount] = new string[lHeaderCaption.Count()];
lContent[iRowCount][0] = lEmployees[iRowCount].Person.LastName;
lContent[iRowCount][1] = lEmployees[iRowCount].Person.FirstName;
lContent[iRowCount][2] = lEmployees[iRowCount].PersonnelNumber;
lContent[iRowCount][3] = lEmployees[iRowCount].Person.DateOfBirth.DoIfNotNull(d => d.ToShortDateString());
lContent[iRowCount][4] = lEmployees[iRowCount].Person.Profession;
lContent[iRowCount][5] = lEmployees[iRowCount].Person.Sex == Sex.Male
? "männlich"
: "weiblich";
if (lEmployees[iRowCount].Person.FamilyStatus != null)
{
switch (lEmployees[iRowCount].Person.FamilyStatus.Value)
{
case FamilyStatus.Divorced:
lContent[iRowCount][6] = "geschieden";
break;
case FamilyStatus.Married:
lContent[iRowCount][6] = "verheiratet";
break;
case FamilyStatus.Single:
lContent[iRowCount][6] = "ledig";
break;
case FamilyStatus.Widowed:
lContent[iRowCount][6] = "verwitwet";
break;
case FamilyStatus.Partner:
lContent[iRowCount][6] = "in Partnerschaft";
break;
case FamilyStatus.PartnerDivorced:
lContent[iRowCount][6] = "getrennt lebend";
break;
case FamilyStatus.PartnerDead:
lContent[iRowCount][5] = "partnerhinterblieben";
break;
case FamilyStatus.PartnerMarried:
lContent[iRowCount][5] = "verpartnert";
break;
case FamilyStatus.Entpartnert:
lContent[iRowCount][5] = "entpartnert";
break;
}
}
lContent[iRowCount][7] = lEmployees[iRowCount].HealthInsurance;
lContent[iRowCount][8] = lEmployees[iRowCount].TaxNumber;
if (darfVertragSehen)
{
if (lEmployees[iRowCount].Person.LastName.StartsWith("Ber"))
{
int test = 0;
}
Contract lastContract = lEmployees[iRowCount].LastContract;
if (lastContract != null)
{
if (lastContract.EmploymentType != null)
{
lContent[iRowCount][9] = lastContract.EmploymentType.Name;
}
lContent[iRowCount][10] = lastContract.ProbationPeriod.ToString();
lContent[iRowCount][11] = lastContract.CancellationPeriod.ToString();
decimal? urlaubstage = null;
if (lastContract.EmploymentType != null && lastContract.EmploymentType.LeaveDays.HasValue)
{
urlaubstage = lastContract.EmploymentType.LeaveDays;
}
else
{
urlaubstage = lastContract.LeaveDays;
}
if (urlaubstage.HasValue)
{
lContent[iRowCount][12] = urlaubstage.Value.ToStringNullCheck();
}
if (lastContract.WeeklyFLS.HasValue)
{
lContent[iRowCount][13] = lastContract.WeeklyFLS.Value.ToStringNullCheck();
}
if (lastContract.WeeklyTotalHours.HasValue)
{
lContent[iRowCount][14] = lastContract.WeeklyTotalHours.Value.ToStringNullCheck();
}
var wd = lastContract.WeeklyDays ?? 5;
if (wd == 0)
wd = 5;
lContent[iRowCount][15] = String.Format("{0}", wd);
if (!lastContract.ContractEndDate.HasValue)
{
lContent[iRowCount][17] = "unbefristet";
}
else
{
lContent[iRowCount][17] = lastContract.ContractEndDate.DoIfNotNull(d => d.ToShortDateString());
}
}
var firstContract = lEmployees[iRowCount].FirstContract;
if (firstContract != null)
{
lContent[iRowCount][16] = firstContract.EntryDate.DoIfNotNull(d => d.ToShortDateString());
}
lContent[iRowCount][18] = lEmployees[iRowCount].InsuranceNumber;
if (lastContract != null)
{
if (lastContract.HourlyRate.HasValue)
{
lContent[iRowCount][19] = lastContract.HourlyRate.Value.ToStringNullCheck();
}
lContent[iRowCount][33] = lastContract.Notice;
}
}
int index = 9;
if (darfVertragSehen)
{
index = 20;
}
foreach (var iContact in lEmployees[iRowCount].Person.Contacts)
{
switch (iContact.Type)
{
case ContactType.business_Phone:
lContent[iRowCount][index] = iContact.Value;
break;
case ContactType.business_MobilePhone:
lContent[iRowCount][index + 1] = iContact.Value;
break;
case ContactType.business_Mail:
lContent[iRowCount][index + 2] = iContact.Value;
break;
case ContactType.private_Mail:
lContent[iRowCount][index + 3] = iContact.Value;
break;
case ContactType.business_Fax:
lContent[iRowCount][index + 4] = iContact.Value;
break;
}
}
if (lEmployees[iRowCount].Person.Address != null)
{
lContent[iRowCount][index + 5] = lEmployees[iRowCount].Person.Address.Street;
lContent[iRowCount][index + 6] = lEmployees[iRowCount].Person.Address.PostalCode;
lContent[iRowCount][index + 7] = lEmployees[iRowCount].Person.Address.Town;
}
if (lEmployees[iRowCount].Person.BankAccount != null)
{
lContent[iRowCount][index + 8] = lEmployees[iRowCount].Person.BankAccount.AccountNumber;
lContent[iRowCount][index + 9] = lEmployees[iRowCount].Person.BankAccount.BankCode;
lContent[iRowCount][index + 10] = lEmployees[iRowCount].Person.BankAccount.BankName;
lContent[iRowCount][index + 11] = lEmployees[iRowCount].Person.BankAccount.Bic;
lContent[iRowCount][index + 12] = lEmployees[iRowCount].Person.BankAccount.IBAN;
}
if (darfVertragSehen)
{
index += 1;
}
if (lEmployees[iRowCount].IsQualified.HasValue)
{
lContent[iRowCount][index + 13] = lEmployees[iRowCount].IsQualified.Value ? "Ja" : "Nein";
}
var qualis = lEmployees[iRowCount].ValueList.FindByType(ValueListEntryType.StaffQualificationsType)
.Select(e2o => e2o.Entry);
if (qualis != null && qualis.Count() > 0)
{
StringBuilder sb = new StringBuilder();
foreach (var entry in qualis)
{
if (sb.Length > 0)
{
sb.Append(", ");
}
sb.Append(entry.Value);
}
lContent[iRowCount][index + 14] = sb.ToString();
}
var focuses = lEmployees[iRowCount].ValueList.FindByType(ValueListEntryType.StaffActivityFocusType)
.Select(e2o => e2o.Entry);
if (focuses != null && focuses.Count() > 0)
{
StringBuilder sb = new StringBuilder();
foreach (var entry in focuses)
{
if (sb.Length > 0)
{
sb.Append(", ");
}
sb.Append(entry.Value);
}
lContent[iRowCount][index + 15] = sb.ToString();
}
}
var helper = PluginLoader.FindClass<ExportAndPrintHelper>();
var lHeaderCaption = helper.PrepareHeaderArrayForEmployeeExport();
var lContent = helper.PrepareContentArrayForEmployeeExport(pSortedOids);
return WriteHtmlFile(lHeaderCaption, lContent);
}