85 lines
4.2 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|