Files
BeWoPlaner/Service/DCEntityMapper/ServiceRecordDC_ServiceRecord.cs
Christian 4ddee24914 cb
2022-11-09 09:44:24 +01:00

270 lines
13 KiB
C#

using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BS.Shared;
using BS.Shared.DataContracts;
namespace BeWo.Service.DCEntityMapper
{
public class ServiceRecordDC_ServiceRecord : AbstractIDCEntityMapper<ServiceRecord, ServiceRecordDC>
{
public override ServiceRecordDC MergeWithDC(ServiceRecord pEntity, ServiceRecordDC pDataContract)
{
pDataContract.ServiceRecordOid = pEntity.Oid;
pDataContract.ServiceRecordVersion = pEntity.Version;
pDataContract.Start = pEntity.Start;
pDataContract.End = pEntity.End;
pDataContract.Notice = pEntity.Notice;
pDataContract.Notice2 = pEntity.Notice2;
pDataContract.Notice3 = pEntity.Notice3;
pDataContract.Notice4 = pEntity.Notice4;
pDataContract.Notice5 = pEntity.Notice5;
pDataContract.RTFNotice1 = pEntity.RTFNotice1;
pDataContract.RTFNotice2 = pEntity.RTFNotice2;
pDataContract.RTFNotice3 = pEntity.RTFNotice3;
pDataContract.RTFNotice4 = pEntity.RTFNotice4;
pDataContract.RTFNotice5 = pEntity.RTFNotice5;
pDataContract.DistanceInMeter = (int?)pEntity.DistanceInMeter;
pDataContract.DistanceInMeterDecimal = pEntity.DistanceInMeter;
pDataContract.Relevance = pEntity.Relevance;
pDataContract.SignatureOid = pEntity.SignatureOid;
pDataContract.ServiceRecordType = pEntity.ServiceRecordType ?? ServiceRecordTypeId.DefaultActivity;
pDataContract.Betrag = pEntity.Betrag;
if (pEntity.DurationInStunden != null)
{
pDataContract.DurationInStunden = pEntity.DurationInStunden;
}
else
{
pDataContract.DurationInStunden = ZeiterfassungsDauer.Minuten;
}
if (pEntity.ServiceRecordFormat != null)
{
pDataContract.ServiceRecordFormat = pEntity.ServiceRecordFormat;
}
else
{
pDataContract.ServiceRecordFormat = ServiceRecordFormate.OriginaleZeiterfassung;
}
if (pEntity.ServiceDescription != null)
{
pDataContract.ServiceDescription = MapperFactory.ServiceDescriptionDC_ServiceDescription.MapToNewDC(pEntity.ServiceDescription);
}
pDataContract.RoundedDuration = pEntity.RoundedDuration;
pDataContract.InsertedOn = pEntity.InsTs;
pDataContract.InsUser = pEntity.InsUser;
pDataContract.WohnheimbuchungsOid = pEntity.WohnheimbuchungsOid;
if (pEntity.Customer != null)
{
pDataContract.Customer = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(pEntity.Customer);
}
if (pEntity.Employee != null)
{
pDataContract.Employee = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(pEntity.Employee);
}
if (pEntity.SupportConcept != null)
{
pDataContract.SupportConcept = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDC(pEntity.SupportConcept);
}
if (pEntity.CostBearer2SupportConcept != null)
{
pDataContract.CostBearer2SupportConceptOid = pEntity.CostBearer2SupportConcept.Oid.Value;
if (pEntity.CostBearer2SupportConcept.CostBearer.Organisation != null)
{
pDataContract.CostBearer = MapperFactory.CompactOrganisationDC_Organisation.MapToNewDC(pEntity.CostBearer2SupportConcept.CostBearer.Organisation);
}
}
var list = new List<ValueListEntryType>();
list.Add(ValueListEntryType.SupportConceptGoalType);
list.Add(ValueListEntryType.SupportConceptGoalCategoryType);
list.Add(ValueListEntryType.SupportConceptIndividualGoalCategoryType);
list.Add(ValueListEntryType.SupportConceptIndividualGoalType);
pDataContract.Goals = new List<ValueListEntryDC>();
foreach (var v2o in pEntity.ValueList.FindByTypes(list))
{
var entryDc = MapperFactory.ValueListEntryDC_ValueListEntry.MapToNewDC(v2o.Entry);
entryDc.RatingTypeOid = v2o.RatingTypeOid;
pDataContract.Goals.Add(entryDc);
}
//pDataContract.Goals = MapperFactory.ValueListEntryDC_ValueListEntry.MapToNewDCs(pEntity.ValueList.FindByTypes(list).Select(e2o => e2o.Entry));
pDataContract.GroupEmployeeCount = pEntity.GroupEmployeeCount;
pDataContract.GroupPersonCount = pEntity.GroupPersonCount;
pDataContract.GroupRoundedDuration = pEntity.GroupRoundedDuration;
pDataContract.GroupOid = pEntity.GroupOid;
if (!pEntity.GroupOid.HasValue && pEntity.GroupPersonCount.HasValue && pEntity.GroupEmployeeCount.HasValue &&
pEntity.GroupPersonCount.Value == 1 && pEntity.GroupEmployeeCount.Value == 1)
{
pDataContract.GroupEmployeeCount = null;
pDataContract.GroupPersonCount = null;
pDataContract.GroupRoundedDuration = null;
}
pDataContract.IP = pEntity.IP;
pDataContract.IsCreatedInMobileClient = pEntity.IsCreatedInMobileClient;
if (pEntity.GroupOid.HasValue)
{
pDataContract.BackgroundColor = "#FFFDC784";
}
if (pEntity.ServiceRecordType.HasValue && pEntity.ServiceRecordType.Value == ServiceRecordTypeId.Content)
{
pDataContract.BackgroundColor = "#FF78BFFF";
}
return pDataContract;
}
public override ServiceRecord MergeWithEntity(ServiceRecordDC pDataContract, ServiceRecord pEntity)
{
ConcurrencyCheck(pDataContract.ServiceRecordVersion, pEntity);
pEntity.Oid = pDataContract.ServiceRecordOid;
pEntity.SignatureOid = pDataContract.SignatureOid;
pEntity.Notice = pDataContract.Notice;
pEntity.Notice2 = pDataContract.Notice2;
pEntity.Notice3 = pDataContract.Notice3;
pEntity.Notice4 = pDataContract.Notice4;
pEntity.Notice5 = pDataContract.Notice5;
pEntity.RTFNotice1 = pDataContract.RTFNotice1;
pEntity.RTFNotice2 = pDataContract.RTFNotice2;
pEntity.RTFNotice3 = pDataContract.RTFNotice3;
pEntity.RTFNotice4 = pDataContract.RTFNotice4;
pEntity.RTFNotice5 = pDataContract.RTFNotice5;
pEntity.Start = pDataContract.Start;
pEntity.End = pDataContract.End;
pEntity.RoundedDuration = pDataContract.RoundedDuration;
if (pDataContract.DistanceInMeter.HasValue)
{
//Um alte Versionen zu unterstützen. In neuen Client Versionen ist DistanceInMeter null;
pEntity.DistanceInMeter = pDataContract.DistanceInMeter;
}
else
{
pEntity.DistanceInMeter = pDataContract.DistanceInMeterDecimal;
}
pEntity.Relevance = pDataContract.Relevance;
pEntity.WohnheimbuchungsOid = pDataContract.WohnheimbuchungsOid;
pEntity.GroupEmployeeCount = pDataContract.GroupEmployeeCount;
pEntity.GroupPersonCount = pDataContract.GroupPersonCount;
pEntity.GroupRoundedDuration = pDataContract.GroupRoundedDuration;
pEntity.ServiceRecordType = pDataContract.ServiceRecordType;
pEntity.DurationInStunden = pDataContract.DurationInStunden;
pEntity.ServiceRecordFormat = pDataContract.ServiceRecordFormat;
pEntity.IP = pDataContract.IP;
if (pEntity.ServiceDescription == null || pEntity.ServiceDescription.Oid != pDataContract.ServiceDescription.ServiceDescriptionOid)
{
pEntity.ServiceDescription = DAOFactory.GenericDAO.LoadByID<ServiceDescription>(pDataContract.ServiceDescription.ServiceDescriptionOid.Value);
}
if (pEntity.Employee == null || pEntity.Employee.Oid != pDataContract.Employee.EmployeeOid)
{
pEntity.Employee = DAOFactory.GenericDAO.LoadByID<Employee>(pDataContract.Employee.EmployeeOid);
}
if (pDataContract.Customer == null)
{
pEntity.Customer = null;
}
else if (pEntity.Customer == null || pEntity.Customer.Oid != pDataContract.Customer.CustomerOid)
{
pEntity.Customer = DAOFactory.GenericDAO.LoadByID<Customer>(pDataContract.Customer.CustomerOid);
}
if (pDataContract.SupportConcept == null)
{
pEntity.SupportConcept = null;
}
else if (pEntity.SupportConcept == null || pEntity.SupportConcept.Oid != pDataContract.SupportConcept.SupportConceptOid)
{
pEntity.SupportConcept = DAOFactory.GenericDAO.LoadByID<SupportConcept>(pDataContract.SupportConcept.SupportConceptOid);
}
if (pDataContract.CostBearer == null)
{
pEntity.CostBearer2SupportConcept = null;
}
else if (pEntity.CostBearer2SupportConcept == null || pEntity.CostBearer2SupportConcept.CostBearer.Oid != pDataContract.CostBearer.CostBearerOid.Value)
{
pEntity.CostBearer2SupportConcept = pEntity.SupportConcept.CostBearer2SupportConceptList.Single(cb2sc => cb2sc.CostBearer.Oid == pDataContract.CostBearer.CostBearerOid);
}
else if (pEntity.CostBearer2SupportConceptOid != null && pDataContract.CostBearer2SupportConceptOid != null && pEntity.CostBearer2SupportConceptOid != pDataContract.CostBearer2SupportConceptOid)
{
pEntity.CostBearer2SupportConcept = DAOFactory.GenericDAO.LoadByID<CostBearer2SupportConcept>(pDataContract.CostBearer2SupportConceptOid.Value);
}
if (pDataContract.Goals == null)
{
pDataContract.Goals = new List<ValueListEntryDC>();
}
foreach (var v2o in pEntity.ValueList)
{
foreach (var entryDc in pDataContract.Goals)
{
if (entryDc.ValueListEntryOid.HasValue && entryDc.ValueListEntryOid == v2o.Entry.Oid)
{
v2o.RatingTypeOid = entryDc.RatingTypeOid;
}
}
}
pEntity.IsCreatedInMobileClient = pDataContract.IsCreatedInMobileClient;
pEntity.Betrag = pDataContract.Betrag;
var globalGoalCats =
pDataContract.Goals.Where(g => g.Type == ValueListEntryType.SupportConceptGoalCategoryType).ToList();
var globalGoals =
pDataContract.Goals.Where(g => g.Type == ValueListEntryType.SupportConceptGoalType).ToList();
var individualGoalCats =
pDataContract.Goals.Where(g => g.Type == ValueListEntryType.SupportConceptIndividualGoalCategoryType).ToList();
var individualGoals =
pDataContract.Goals.Where(g => g.Type == ValueListEntryType.SupportConceptIndividualGoalType).ToList();
MapperFactory.ValueListEntryDC_ValueListEntry.MapValueEntryListBack2Entity(globalGoalCats, pEntity.ValueList, ValueListEntryType.SupportConceptGoalCategoryType, TableID.ServiceRecord, false);
//if (globalGoals.Count > 0)
MapperFactory.ValueListEntryDC_ValueListEntry.MapValueEntryListBack2Entity(globalGoals, pEntity.ValueList, ValueListEntryType.SupportConceptGoalType, TableID.ServiceRecord, false);
MapperFactory.ValueListEntryDC_ValueListEntry.MapValueEntryListBack2Entity(individualGoalCats, pEntity.ValueList, ValueListEntryType.SupportConceptIndividualGoalCategoryType, TableID.ServiceRecord, false);
//if (individualGoals.Count > 0)
MapperFactory.ValueListEntryDC_ValueListEntry.MapValueEntryListBack2Entity(individualGoals, pEntity.ValueList, ValueListEntryType.SupportConceptIndividualGoalType, TableID.ServiceRecord, false);
return pEntity;
}
protected override bool AreDCAndEntityEqual(ServiceRecordDC pDC, ServiceRecord pEntity)
{
if (pDC.ServiceRecordOid == null)
{
return false;
}
return pDC.ServiceRecordOid == pEntity.Oid;
}
}
}