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 { 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 = 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(); list.Add(ValueListEntryType.SupportConceptGoalType); list.Add(ValueListEntryType.SupportConceptGoalCategoryType); list.Add(ValueListEntryType.SupportConceptIndividualGoalCategoryType); list.Add(ValueListEntryType.SupportConceptIndividualGoalType); pDataContract.Goals = new List(); 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; pEntity.DistanceInMeter = pDataContract.DistanceInMeter; 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(pDataContract.ServiceDescription.ServiceDescriptionOid.Value); } if (pEntity.Employee == null || pEntity.Employee.Oid != pDataContract.Employee.EmployeeOid) { pEntity.Employee = DAOFactory.GenericDAO.LoadByID(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(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(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(pDataContract.CostBearer2SupportConceptOid.Value); } if (pDataContract.Goals == null) { pDataContract.Goals = new List(); } 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; } } }