Files
BeWoPlaner/ReportImp/Mittelpunkt/Service/CustomEmployeeService.cs

85 lines
4.2 KiB
C#

using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.Core;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BS.Shared.DataContracts;
using System;
namespace Mittelpunkt.Service
{
public class CustomEmployeeService : EmployeeService
{
public override EmployeeDC LoadEmployee(long eOid)
{
var employee = DAOFactory.GenericDAO.LoadByID<Employee>(eOid);
Contract currentContract = employee.GetValidContractForDate(DateTime.Now);
if (currentContract != null)
{
// falls Stundensatz noch leer aus Bruttogehalt und Wochenstunden berechnen (durchschn. 4,33 Wochen pro Monat)
if (!currentContract.HourlyRate.HasValue)
{
if (currentContract.GrossSalary.HasValue && currentContract.WeeklyTotalHours.HasValue)
{
decimal? stundensatz = currentContract.GrossSalary / currentContract.WeeklyTotalHours / (decimal)4.33;
currentContract.HourlyRate = Math.Round((decimal)stundensatz, 2, MidpointRounding.AwayFromZero);
DAOFactory.GenericDAO.Update(employee);
SettingsLogic.AddToUsersHistory<Employee>(eOid);
}
}
// das gleiche fuer den Zuschlaege-Arbeit-Stundensatz, aus Zuschlaege-Arbeit-Bruttogehalt
decimal? bruttogehaltFuerArbeitszuschlaege = null;
decimal? stundensatzFuerArbeitszuschlaege = null;
foreach (var vv in employee.VarFieldValueList)
{
if (vv.VarFieldDefOid == 3)
{
var varFieldValue = BS.Shared.Core.Utils.XMLDeserializeFromString(vv.SerializedValue, Type.GetType(vv.TypeName));
decimal dec = 0;
if (varFieldValue != null && Decimal.TryParse(varFieldValue.ToString(), out dec))
{
if (dec > 0)
{
bruttogehaltFuerArbeitszuschlaege = dec;
}
}
}
else if (vv.VarFieldDefOid == 4)
{
var varFieldValue = BS.Shared.Core.Utils.XMLDeserializeFromString(vv.SerializedValue, Type.GetType(vv.TypeName));
decimal dec = 0;
if (varFieldValue != null && Decimal.TryParse(varFieldValue.ToString(), out dec))
{
//if (dec > 0) //CB: Wenn die dort eine 0 eintragen, wird unten ein doppeltes Varfieldvalue angelegt und dann kommt ein Fehler später beim Laden des Employees
//{
stundensatzFuerArbeitszuschlaege = dec;
//}
}
}
}
if (bruttogehaltFuerArbeitszuschlaege != null && stundensatzFuerArbeitszuschlaege is null && currentContract.WeeklyTotalHours.HasValue && currentContract.WeeklyTotalHours > 0)
{
stundensatzFuerArbeitszuschlaege = bruttogehaltFuerArbeitszuschlaege / currentContract.WeeklyTotalHours / (decimal)4.33;
stundensatzFuerArbeitszuschlaege = Math.Round((decimal)stundensatzFuerArbeitszuschlaege, 2, MidpointRounding.AwayFromZero);
var serializedValue = BS.Shared.Core.Utils.XMLSerializeToString(stundensatzFuerArbeitszuschlaege);
VarFieldValue varFieldValue =
new VarFieldValue { SerializedValue = serializedValue, TypeName = "System.Decimal", VarFieldDefOid = 4, ObjectOid = employee.Oid, ObjectTid = BS.Shared.TableID.Employee };
employee.VarFieldValueList.Add(varFieldValue);
DAOFactory.GenericDAO.Update(employee);
}
}
var employeeDc = MapperFactory.EmployeeDC_Employee.MapToNewDC(employee);
return employeeDc;
}
}
}