Merge branch 'master' of ssh://float.beyondsoft.de/git/beyondSoft/BeWo

This commit is contained in:
Christian
2025-02-20 00:34:55 +01:00
177 changed files with 14595 additions and 30758 deletions

View File

@@ -26,13 +26,9 @@ namespace BeWo.Report.ReportObjects
public virtual void CreateReport(MitarbeiterauslastungRO ro)
{
CreateEmployeeDetails(ro);
CreateEmployeeTotals(ro);
CreateTeamDetails(ro);
CreateTotals(ro);
}
private void CreateEmployeeTotals(MitarbeiterauslastungRO ro)
@@ -131,7 +127,6 @@ namespace BeWo.Report.ReportObjects
}
public virtual void CreateEmployeeDetails(MitarbeiterauslastungRO ro)
{
foreach (var empDetail in ro.EmployeeDetailList)
@@ -158,7 +153,6 @@ namespace BeWo.Report.ReportObjects
b.Customer.Person.LastName + ", " + b.Customer.Person.FirstName);
});
}
}
public virtual bool CreateIst()
@@ -171,15 +165,11 @@ namespace BeWo.Report.ReportObjects
var span = new DateTimeSpan();
span.StartDateTime = ro.ReportStartDate;
span.EndDateTime = ro.ReportEndDate;
//supportconcepts by SupportConceptApprovalPeriodOid
Dictionary<long, MitarbeiterauslastungRO.SupportConceptDetail> supportConceptByScapDict = new Dictionary<long, MitarbeiterauslastungRO.SupportConceptDetail>();
foreach (var sc in empDetail.Customer.SupportConcepts)
{
if (sc.IsActive != ActivationTypeId.Deleted && sc.CostBearer2SupportConceptList != null)
{
foreach (CostBearer2SupportConcept c2s in sc.CostBearer2SupportConceptList)
@@ -188,14 +178,9 @@ namespace BeWo.Report.ReportObjects
{
//scDC.ApprovedHoursPerWeek -= stundenVerbraucht;
//scDC.ApprovedHoursPerWeekWithRateFactor -= stundenVerbraucht;
if (!supportConceptByScapDict.ContainsKey(scap.Oid.Value))
{
MitarbeiterauslastungRO.SupportConceptDetail scDc =
GetOrCreateSupportConceptDetail(null, sc.Customer, scap, c2s,
ro.ReportStartDate, ro.ReportEndDate, null, false);
MitarbeiterauslastungRO.SupportConceptDetail scDc = GetOrCreateSupportConceptDetail(null, sc.Customer, scap, c2s, ro.ReportStartDate, ro.ReportEndDate, null, false);
if (scDc != null)
{
if (!CheckIfApprovedGreaterZero() || scDc.ApprovedHoursPerWeek > 0 || scDc.ApprovedHoursPerWeekWithRateFactor > 0)
@@ -207,15 +192,12 @@ namespace BeWo.Report.ReportObjects
}
}
}
}
}
private void CreateSupportConceptsForEmployee(MitarbeiterauslastungRO ro, MitarbeiterauslastungRO.EmployeeDetail empDetail)
{
var emp = empDetail.Employee;
DateTime start = ro.ReportStartDate;
Contract contract = emp.GetValidContractForDate(ro.ReportStartDate);
while (contract == null && start < ro.ReportEndDate)
@@ -236,25 +218,20 @@ namespace BeWo.Report.ReportObjects
if (emp.AbsenceTimes != null)
{
var sb = new StringBuilder();
var count = 1;
foreach (var at in emp.AbsenceTimes)
{
if (at.AbsenceSpan != null)
{
bool cont = true;
if (at.Start != null && at.Start >= ro.ReportEndDate)
{
cont = false;
}
if (cont && at.End != null && at.End < ro.ReportStartDate)
{
cont = false;
}
if (cont)
{
if (sb.Length > 0)
@@ -264,7 +241,6 @@ namespace BeWo.Report.ReportObjects
if (at.Start.HasValue)
{
sb.Append(string.Format("{0:00}", at.Start.Value.Day));
sb.Append(".");
sb.Append(string.Format("{0:00}", at.Start.Value.Month));
@@ -280,9 +256,7 @@ namespace BeWo.Report.ReportObjects
sb.Append(".");
sb.Append(at.End.Value.Year.ToString().Substring(2));
}
}
sb.Append(" ");
sb.Append(at.AbsenceReason.Description);
@@ -297,7 +271,6 @@ namespace BeWo.Report.ReportObjects
}
Dictionary<long, MitarbeiterauslastungRO.SupportConceptDetail> supportConceptByScapDict = new Dictionary<long, MitarbeiterauslastungRO.SupportConceptDetail>();
var anteile = CreateAuslastungAnteilig(emp);
foreach (var anteil in anteile)
@@ -305,12 +278,9 @@ namespace BeWo.Report.ReportObjects
var scap = anteil.SupportConceptApprovalPeriod;
var cb2sc = anteil.CostBearer2SupportConcept;
var sc = cb2sc.SupportConcept;
if (sc.IsActive != ActivationTypeId.Deleted && !supportConceptByScapDict.ContainsKey(scap.Oid.Value))
{
MitarbeiterauslastungRO.SupportConceptDetail scDc = GetOrCreateSupportConceptDetail(emp, sc.Customer, scap, cb2sc, ro.ReportStartDate, ro.ReportEndDate, anteil, false);
if (scDc != null)
{
supportConceptByScapDict.Add(scap.Oid.Value, scDc);
@@ -318,11 +288,7 @@ namespace BeWo.Report.ReportObjects
empDetail.SupportConceptDetailList.Add(scDc);
}
}
}
if (emp.Employee2CustomerList != null)
{
foreach (Employee2Customer e2c in emp.Employee2CustomerList)
@@ -351,14 +317,10 @@ namespace BeWo.Report.ReportObjects
if (!supportConceptByScapDict.ContainsKey(scap.Oid.Value))
{
MitarbeiterauslastungRO.SupportConceptDetail scDc = GetOrCreateSupportConceptDetail(emp, e2c.Customer, scap, c2s, ro.ReportStartDate, ro.ReportEndDate, null, true);
if (scDc != null)
{
if (scDc.ApprovedHoursPerWeek > 0.00001m ||
scDc.ApprovedHoursPerWeekWithRateFactor > 0.00001m ||
!CheckIfApprovedGreaterZero())
if (scDc.ApprovedHoursPerWeek > 0.00001m || scDc.ApprovedHoursPerWeekWithRateFactor > 0.00001m || !CheckIfApprovedGreaterZero())
{
empDetail.SupportConceptDetailList.Add(scDc);
}
@@ -389,11 +351,9 @@ namespace BeWo.Report.ReportObjects
int test = 0;
}
//Prüfe ob vorher abgemeldet
if (customer.TerminationDate.HasValue &&
customer.TerminationDate.Value < realEnd)
if (customer.TerminationDate.HasValue && customer.TerminationDate.Value < realEnd)
{
realEnd = customer.TerminationDate.Value;
}
if (scap.StartDate.HasValue && realEnd.HasValue)
@@ -408,7 +368,6 @@ namespace BeWo.Report.ReportObjects
if (inTimeRange)
{
String key = "";
if (emp != null)
{
key = String.Format("e{0}_{1}", emp.Oid.Value, scap.Oid.Value);
@@ -426,9 +385,11 @@ namespace BeWo.Report.ReportObjects
return betreuungDict[key];
}
var scDC = new MitarbeiterauslastungRO.SupportConceptDetail();
scDC.Customer = customer;
if (customer.Person.FirstName == "Martin")
{
int test = 0;
}
scDC.SupportConceptApprovalPeriod = scap;
scDC.CostBearer2SupportConcept = DAOFactory.GenericDAO.Unproxy(cb2sc);
@@ -440,7 +401,6 @@ namespace BeWo.Report.ReportObjects
scDC.FreiProMonat = scDC.FreiProWoche * 52 / 12;
// eigentlich CreateSupportConceptStatisticsImpl ändern und FreiProMonat ergänzen
}
// Prozentwert aus der Bewilligung einbeziehen
if (anteil != null)
{
@@ -452,7 +412,6 @@ namespace BeWo.Report.ReportObjects
// Minutenwert aus der Bewilligung einbeziehen
else
{
var minProWoche = stats.PeriodStatistics.Sum(s => s.MinutesApprovedPerWeek); // MinutesApprovedPerWeek ist 0, ich muss durch die einzelnen stats laufen uns selber hochrechnen
if (minProWoche != 0)
{
@@ -461,19 +420,15 @@ namespace BeWo.Report.ReportObjects
}
}
}
DateTime end = ende;
if (realEnd.HasValue && realEnd.Value < end)
{
end = realEnd.Value;
}
CalculateSoll(scDC, end);
if (ausHauptbetreuung)
{
var anteileAndererEmps = CreateAuslastungAnteilig(scap);
foreach (var ant in anteileAndererEmps)
{
var scDcAnteil =
@@ -487,7 +442,6 @@ namespace BeWo.Report.ReportObjects
scDC.ApprovedHoursPerMonthWithRateFactor -= scDcAnteil.ApprovedHoursPerMonthWithRateFactor;
}
}
}
else
{
@@ -547,13 +501,10 @@ namespace BeWo.Report.ReportObjects
public virtual IList<AuslastungBerechnungHelper> CreateAuslastungAnteilig(Employee emp)
{
var anteile = new List<AuslastungBerechnungHelper>();
var sp2eList = DAOFactory.SearchDAO.FindSupportConceptApprovalPeriod2Employees(emp);
foreach (var sp2e in sp2eList)
{
var helper = new AuslastungBerechnungHelper();
helper.SupportConceptApprovalPeriod = DAOFactory.GenericDAO.Unproxy(sp2e.SupportConceptApprovalPeriod);
helper.CostBearer2SupportConcept = DAOFactory.GenericDAO.Unproxy(helper.SupportConceptApprovalPeriod.CostBearer2SupportConcept);
helper.AnteilAnBetreuung = sp2e.Betreuungsschluessel;
@@ -561,14 +512,12 @@ namespace BeWo.Report.ReportObjects
anteile.Add(helper);
}
return anteile;
}
public virtual IList<AuslastungBerechnungHelper> CreateAuslastungAnteilig(SupportConceptApprovalPeriod scap)
{
var anteile = new List<AuslastungBerechnungHelper>();
var sp2eList = DAOFactory.SearchDAO.FindSupportConceptApprovalPeriod2Employees(scap);
foreach (var sp2e in sp2eList)
@@ -593,8 +542,6 @@ namespace BeWo.Report.ReportObjects
var span = new DateTimeSpan();
span.StartDateTime = ro.ReportStartDate;
span.EndDateTime = ro.ReportEndDate.AddTicks(-1);
if (empDetail.Employee != null)
{
records = DAOFactory.SearchDAO.FindEmployeeServiceRecords(empDetail.Employee.Oid.Value, span, null, null);
@@ -624,8 +571,6 @@ namespace BeWo.Report.ReportObjects
AddServiceRecord(ro, scd, sr);
}
if (sr.GroupOid != null)
{
//groupBookingDict.Add(sr.GroupOid.Value, sr);
@@ -697,8 +642,6 @@ namespace BeWo.Report.ReportObjects
}
SupportConceptApprovalPeriod scap = GetSupportConceptApprovalPeriodForServiceRecord(sr);
if (scap != null)
{
foreach (var scdi in empDetail.SupportConceptDetailList)
@@ -708,7 +651,6 @@ namespace BeWo.Report.ReportObjects
return scdi;
}
}
}
if (sr.ServiceDescription != null &&
@@ -771,18 +713,15 @@ namespace BeWo.Report.ReportObjects
public virtual void AddServiceRecord(MitarbeiterauslastungRO ro, MitarbeiterauslastungRO.SupportConceptDetail scDC, ServiceRecord sr)
{
var minutes = GetBillableDurationInMinutes(sr);
if (sr.ServiceDescription != null &&
sr.ServiceDescription.ServiceCategory != null &&
sr.ServiceDescription.ServiceCategory.IsBillable)
if (sr.ServiceDescription != null && sr.ServiceDescription.ServiceCategory != null && sr.ServiceDescription.ServiceCategory.IsBillable)
{
scDC.DirectIst += minutes;
AddToIstForKw(minutes, sr.Start.Value, ro.ReportStartDate, ro.ReportEndDate, scDC);
}
else
{
scDC.MittelbarIst += minutes;
}
}
private void AddToIstForKw(decimal minutes, DateTime datum, DateTime reportStart, DateTime reportEnd, MitarbeiterauslastungRO.SupportConceptDetail scDC)
@@ -855,31 +794,30 @@ namespace BeWo.Report.ReportObjects
{
var minutes = GetBillableDurationInMinutes(sr);
if (sr.ServiceDescription != null &&
sr.ServiceDescription.ServiceCategory != null &&
sr.ServiceDescription.ServiceCategory.IsBillable)
if (sr.ServiceDescription != null && sr.ServiceDescription.ServiceCategory != null && sr.ServiceDescription.ServiceCategory.IsBillable)
{
scDC.DirectIst += minutes;
}
else
{
scDC.MittelbarIst += minutes;
}
}
public virtual decimal GetBillableDurationInMinutes(ServiceRecord record)
{
decimal rdMinutes = record.RoundedDuration;
var prozent = record.ServiceDescription.ServiceCategory.ProzentAbrechnung;
if (record.ServiceDescription.ProzentAbrechnung.HasValue)
{
prozent = record.ServiceDescription.ProzentAbrechnung.Value;
}
rdMinutes *= prozent / 100;
if (record.GroupEmployeeCount.HasValue)
rdMinutes /= record.GroupEmployeeCount.Value;
if (record.GroupEmployeeCount.HasValue)
{
rdMinutes /= record.GroupEmployeeCount.Value;
}
return rdMinutes;
}

View File

@@ -1936,16 +1936,23 @@ namespace BeWo.Report.ReportObjects
{
decimal wth = 0;
int apw = ANZ_WOCHENTAGE;
if (c.WeeklyTotalHours.HasValue)
{
wth = c.WeeklyTotalHours.Value;
}
if (c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0)
{
apw = c.WeeklyDays.Value;
}
if (c.WeeklyTotalHours.HasValue)
{
wth = c.WeeklyTotalHours.Value;
}
else if (c.MonthlyTotalHours.HasValue)
{
sollDiesenTag = c.MonthlyTotalHours.Value / ed.ArbeitstageImBerichtszeitraum;
wth = sollDiesenTag * apw;
}
sollDiesenTag = wth / apw;
}
}