public override ServiceChannelEmail TranslateVmToEntity(VmEmailData vModel) { if (vModel == null) { return(null); } bool existsById = vModel.Id.IsAssigned(); var existsByOwnerReference = !vModel.Id.IsAssigned() && vModel.OwnerReferenceId.IsAssigned(); Guid languageId = vModel.LanguageId.IsAssigned() ? vModel.LanguageId.Value : languageCache.Get(RequestLanguageCode.ToString()); var translation = CreateViewModelEntityDefinition(vModel) .UseDataContextCreate(input => !existsById && !existsByOwnerReference) .UseDataContextUpdate(input => existsById || existsByOwnerReference, input => output => (!input.Id.IsAssigned() || input.Id == output.EmailId) && (!input.OwnerReferenceId.IsAssigned() || output.ServiceChannelVersionedId == input.OwnerReferenceId) && (languageId == output.Email.LocalizationId), create => create.UseDataContextCreate(c => true) ); if (existsByOwnerReference) { var serviceChannelEmail = translation.GetFinal(); if (serviceChannelEmail.Created > DateTime.MinValue) { vModel.Id = serviceChannelEmail.EmailId; } } return(translation .AddNavigation(input => input, output => output.Email) .GetFinal()); }
public override ServiceChannelPhone TranslateVmToEntity(VmPhone vModel) { if (vModel == null) { return(null); } bool exists = vModel.Id.IsAssigned(); bool updateWithLanguage = vModel.OwnerReferenceId.IsAssigned() && vModel.LanguageId.IsAssigned(); Guid?languageId = vModel.LanguageId ?? languageCache.Get(RequestLanguageCode.ToString()); var translation = CreateViewModelEntityDefinition(vModel) .UseDataContextCreate(input => !exists && !updateWithLanguage) .UseDataContextUpdate(input => exists || updateWithLanguage, input => output => (!input.Id.IsAssigned() || input.Id == output.PhoneId) && (languageId == output.Phone.LocalizationId) && (!input.OwnerReferenceId.IsAssigned() || output.ServiceChannelVersionedId == vModel.OwnerReferenceId), e => e.UseDataContextCreate(x => true)); if (!exists && updateWithLanguage) { var serviceChannelPhone = translation.GetFinal(); if (serviceChannelPhone.Created > DateTime.MinValue) { vModel.Id = serviceChannelPhone.PhoneId; } } return(translation .AddNavigation(input => input, output => output.Phone) .GetFinal()); }
public override ServiceChannelAttachment TranslateVmToEntity(VmChannelAttachment vModel) { if (vModel.LocalizationId.IsAssigned()) { SetLanguage(vModel.LocalizationId.Value); } var transaltionDefinition = CreateViewModelEntityDefinition <ServiceChannelAttachment>(vModel) .UseDataContextUpdate( i => i.OwnerReferenceId.IsAssigned() && i.Id.IsAssigned(), i => o => (i.OwnerReferenceId == o.ServiceChannelVersionedId && o.AttachmentId == i.Id) && (languageCache.Get(RequestLanguageCode.ToString()) == o.Attachment.LocalizationId) ) .AddNavigation(input => input, output => output.Attachment); var entity = transaltionDefinition.GetFinal(); return(entity); }
public override StatutoryServiceGeneralDescriptionVersioned TranslateVmToEntity(VmGeneralDescriptionBase vModel) { var names = new List <VmName>(); names.AddNullRange(vModel.Name?.Select(pair => CreateName(pair.Key, pair.Value, vModel, NameTypeEnum.Name))); var serviceTypeService = typesCache.Get <ServiceType>(ServiceTypeEnum.Service.ToString()); var descriptions = new List <VmDescription>(); descriptions.AddNullRange(vModel.ShortDescription?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.ShortDescription))); descriptions.AddNullRange(vModel.Description?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.Description))); descriptions.AddNullRange(vModel.BackgroundDescription?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.BackgroundDescription))); descriptions.AddNullRange(vModel.DeadLineInformation?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.DeadLineAdditionalInfo, serviceTypeService == vModel.ServiceType))); descriptions.AddNullRange(vModel.ProcessingTimeInformation?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.ProcessingTimeAdditionalInfo, serviceTypeService == vModel.ServiceType))); descriptions.AddNullRange(vModel.ValidityTimeInformation?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.ValidityTimeAdditionalInfo, serviceTypeService == vModel.ServiceType))); descriptions.AddNullRange(vModel.UserInstruction?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.ServiceUserInstruction))); descriptions.AddNullRange(vModel.ChargeType?.AdditionalInformation?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.ChargeTypeAdditionalInfo))); var definition = CreateViewModelEntityDefinition(vModel) .DisableAutoTranslation() .AddSimple(i => i?.ChargeType.ChargeType, o => o.ChargeTypeId) .AddSimple(i => i.ServiceType.HasValue ? i.ServiceType.Value : throw new PtvArgumentException("Service type has to be provided"), o => o.TypeId) .AddLanguageAvailability(i => i, o => o) .AddCollection(i => names, o => o.Names, true) .AddCollection(i => descriptions, o => o.Descriptions, true) .AddCollection(i => i.ConditionOfServiceUsage?.Select( pair => new VmServiceRequirement() { Id = i.Id, Requirement = pair.Value, LocalizationId = languageCache.Get(pair.Key) }), o => o.StatutoryServiceRequirements, true) .AddCollectionWithKeep(i => (i.Laws?.Where(x => !string.IsNullOrEmpty(x.UrlAddress.TryGet(RequestLanguageCode.ToString()))) ?? new List <VmLaw>()).Select( l => { l.OwnerReferenceId = i.Id; return(l); }), output => output.StatutoryServiceLaws, c => { c.Check(h => h.Law).Check(h => h.Names).Any(); c.Check(h => h.Law).Check(h => h.WebPages).Any(); c.Check(h => h.Law).Check(h => h.WebPages).Check(h => h.WebPage).Check(h => h.LocalizationId).Not(RequestLanguageId); }) .AddCollectionWithRemove(i => (i.TargetGroups?.Select(x => new VmTargetGroupListItem { Id = x, OwnerReferenceId = i.Id }) ?? new List <VmTargetGroupListItem>()), o => o.TargetGroups, x => true); return(definition.GetFinal()); }
public override StatutoryServiceGeneralDescriptionVersioned TranslateVmToEntity(VmGeneralDescription vModel) { var translationDefinition = CreateViewModelEntityDefinition <StatutoryServiceGeneralDescriptionVersioned>(vModel) .DisableAutoTranslation() .UseDataContextCreate(input => !input.Id.HasValue, output => output.Id, input => Guid.NewGuid()) .UseDataContextLocalizedUpdate(input => input.Id.HasValue, input => output => input.Id.Value == output.Id) .UseVersioning <StatutoryServiceGeneralDescriptionVersioned, StatutoryServiceGeneralDescription>(o => o) .AddLanguageAvailability(o => o); var order = 1; vModel.Laws?.ForEach(i => { i.OrderNumber = order++; i.OwnerReferenceId = vModel.Id; }); vModel.ServiceClasses?.ForEach(i => i.OwnerReferenceId = vModel.Id); vModel.OntologyTerms?.ForEach(i => i.OwnerReferenceId = vModel.Id); vModel.LifeEvents?.ForEach(i => i.OwnerReferenceId = vModel.Id); vModel.IndustrialClasses?.ForEach(i => i.OwnerReferenceId = vModel.Id); var names = new List <VmName>() { new VmName { Name = vModel.Name.TryGet(RequestLanguageCode.ToString()), TypeId = typesCache.Get <NameType>(NameTypeEnum.Name.ToString()), OwnerReferenceId = vModel.Id } }; var descriptions = new List <VmDescription>() { new VmDescription { Description = vModel.ShortDescription.TryGet(RequestLanguageCode.ToString()), TypeId = typesCache.Get <DescriptionType>(DescriptionTypeEnum.ShortDescription.ToString()), OwnerReferenceId = vModel.Id }, new VmDescription { Description = vModel.Description.TryGet(RequestLanguageCode.ToString()), TypeId = typesCache.Get <DescriptionType>(DescriptionTypeEnum.Description.ToString()), OwnerReferenceId = vModel.Id }, new VmDescription { Description = vModel.BackgroundDescription.TryGet(RequestLanguageCode.ToString()), TypeId = typesCache.Get <DescriptionType>(DescriptionTypeEnum.BackgroundDescription.ToString()), OwnerReferenceId = vModel.Id }, new VmDescription { Description = vModel.UserInstruction.TryGet(RequestLanguageCode.ToString()), TypeId = typesCache.Get <DescriptionType>(DescriptionTypeEnum.ServiceUserInstruction.ToString()), OwnerReferenceId = vModel.Id }, new VmDescription { Description = vModel.AdditionalInformation.TryGet(RequestLanguageCode.ToString()), TypeId = typesCache.Get <DescriptionType>(DescriptionTypeEnum.ChargeTypeAdditionalInfo.ToString()), OwnerReferenceId = vModel.Id } }; if (!typesCache.Compare <ServiceType>(vModel.TypeId, ServiceTypeEnum.Service.ToString())) { descriptions.Add(new VmDescription { Description = vModel.AdditionalInformationDeadLine.TryGet(RequestLanguageCode.ToString()), TypeId = typesCache.Get <DescriptionType>(DescriptionTypeEnum.DeadLineAdditionalInfo.ToString()), OwnerReferenceId = vModel.Id }); descriptions.Add(new VmDescription { Description = vModel.AdditionalInformationProcessingTime.TryGet(RequestLanguageCode.ToString()), TypeId = typesCache.Get <DescriptionType>(DescriptionTypeEnum.ProcessingTimeAdditionalInfo.ToString()), OwnerReferenceId = vModel.Id }); descriptions.Add(new VmDescription { Description = vModel.AdditionalInformationValidityTime.TryGet(RequestLanguageCode.ToString()), TypeId = typesCache.Get <DescriptionType>(DescriptionTypeEnum.ValidityTimeAdditionalInfo.ToString()), OwnerReferenceId = vModel.Id }); } else { if (vModel.Id.IsAssigned()) { descriptions.Add(new VmDescription { TypeId = typesCache.Get <DescriptionType>(DescriptionTypeEnum.DeadLineAdditionalInfo.ToString()), OwnerReferenceId = vModel.Id }); descriptions.Add(new VmDescription { TypeId = typesCache.Get <DescriptionType>(DescriptionTypeEnum.ProcessingTimeAdditionalInfo.ToString()), OwnerReferenceId = vModel.Id }); descriptions.Add(new VmDescription { TypeId = typesCache.Get <DescriptionType>(DescriptionTypeEnum.ValidityTimeAdditionalInfo.ToString()), OwnerReferenceId = vModel.Id }); } } translationDefinition .AddSimple(i => i.TypeId, o => o.TypeId) .AddSimple(i => i.ChargeTypeId, o => o.ChargeTypeId) .AddCollection(i => names, o => o.Names) .AddCollection(i => descriptions, o => o.Descriptions) .AddCollection(i => new List <VmServiceRequirement> { new VmServiceRequirement { Requirement = vModel.ServiceUsage.TryGet(RequestLanguageCode.ToString()), Id = vModel.Id } }, o => o.StatutoryServiceRequirements) .AddCollection(i => i.TargetGroups.Select(x => new VmTargetGroupListItem { Id = x, OwnerReferenceId = vModel.Id }), o => o.TargetGroups) .AddCollection(i => i.ServiceClasses, o => o.ServiceClasses) .AddCollectionWithKeep(i => i.Laws.Where(x => !string.IsNullOrEmpty(x.UrlAddress.TryGet(RequestLanguageCode.ToString()))), o => o.StatutoryServiceLaws, x => true) .AddCollection(i => i.IndustrialClasses, o => o.IndustrialClasses) .AddCollection(i => i.LifeEvents, o => o.LifeEvents) .AddCollection(i => i.OntologyTerms, o => o.OntologyTerms); var entity = translationDefinition.GetFinal(); return(entity); }
public override ServiceVersioned TranslateVmToEntity(VmServiceBase vModel) { var names = new List <VmName>(); names.AddNullRange(CreateNames(vModel, vModel.Name, NameTypeEnum.Name)); names.AddNullRange(CreateNames(vModel, vModel.AlternateName, NameTypeEnum.AlternateName)); var serviceType = typesCache.Get <ServiceType>(ServiceTypeEnum.Service.ToString()); var vmServiceType = vModel.GeneralDescriptionServiceTypeId.IsAssigned() ? vModel.GeneralDescriptionServiceTypeId : vModel.ServiceType; var descriptions = new List <VmDescription>(); descriptions.AddNullRange(vModel.ShortDescription?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.ShortDescription))); descriptions.AddNullRange(vModel.Description?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.Description))); descriptions.AddNullRange(vModel.DeadLineInformation?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.DeadLineAdditionalInfo, serviceType == vmServiceType))); descriptions.AddNullRange(vModel.ProcessingTimeInformation?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.ProcessingTimeAdditionalInfo, serviceType == vmServiceType))); descriptions.AddNullRange(vModel.ValidityTimeInformation?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.ValidityTimeAdditionalInfo, serviceType == vmServiceType))); descriptions.AddNullRange(vModel.UserInstruction?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.ServiceUserInstruction))); descriptions.AddNullRange(vModel.ChargeType?.AdditionalInformation?.Select(pair => CreateDescription(pair.Key, pair.Value, vModel, DescriptionTypeEnum.ChargeTypeAdditionalInfo))); var languageCount = 0; var lawCount = 0; var definition = CreateViewModelEntityDefinition(vModel) .DisableAutoTranslation() .AddLanguageAvailability(i => i, o => o) .AddCollectionWithRemove(i => i.ResponsibleOrganizations?.Select(x => new VmTreeItem { Id = x, OwnerReferenceId = i.Id }), o => o.OrganizationServices, r => true) .AddSimple(i => i.Organization ?? throw new ArgumentNullException("Organization cannot be empty"), o => o.OrganizationId) .AddSimple(i => i.FundingType, o => o.FundingTypeId) .AddCollection(i => names, o => o.ServiceNames, true) .AddCollection(i => descriptions, o => o.ServiceDescriptions, true) .AddSimple(i => i.GeneralDescriptionId, o => o.StatutoryServiceGeneralDescriptionId) .AddCollection(i => i.ConditionOfServiceUsage?.Select( pair => new VmServiceRequirement() { Id = i.Id, Requirement = pair.Value, LocalizationId = languageCache.Get(pair.Key) }), o => o.ServiceRequirements, true) .AddPartial(i => { i.AreaInformation.OwnerReferenceId = i.Id; return(i.AreaInformation); }) .AddCollectionWithKeep(i => i.ServiceVouchers.SelectMany(pair => { var localizationId = languageCache.Get(pair.Key); return(pair.Value.Select(sv => { sv.OwnerReferenceId = i.Id; sv.LocalizationId = localizationId; return sv; })); }), o => o.ServiceWebPages, c => c.Check(h => h.WebPage).Check(h => h.LocalizationId).Not(RequestLanguageId)) .AddCollectionWithKeep(i => (i.Laws?.Where(x => !string.IsNullOrEmpty(x.UrlAddress.TryGet(RequestLanguageCode.ToString())) || !string.IsNullOrEmpty(x.Name.TryGet(RequestLanguageCode.ToString()))) ?? new List <VmLaw>()).Select( l => { l.OwnerReferenceId = i.Id; l.OrderNumber = lawCount++; return(l); }), output => output.ServiceLaws, c => { c.Check(h => h.Law).Check(h => h.Names).Any(); c.Check(h => h.Law).Check(h => h.WebPages).Any(); c.Check(h => h.Law).Check(h => h.WebPages).Check(h => h.WebPage).Check(h => h.LocalizationId).Not(RequestLanguageId); }) .AddCollectionWithRemove(i => i.Languages.Select(x => new VmListItem { Id = x, OrderNumber = languageCount++, OwnerReferenceId = i.Id }), o => o.ServiceLanguages, r => true) .AddCollectionWithRemove(i => (i.TargetGroups?.Select(x => new VmTargetGroupListItem { Id = x, OwnerReferenceId = i.Id }) ?? new List <VmTargetGroupListItem>()).Concat( i.OverrideTargetGroups?.Select(x => new VmTargetGroupListItem { Id = x, Override = true, OwnerReferenceId = i.Id }) ?? new List <VmTargetGroupListItem>()), o => o.ServiceTargetGroups, x => true) .AddCollectionWithRemove(i => { var number = 1; i.ServiceProducers.ForEach(p => { p.Order = number++; p.OwnerReferenceId = i.Id; }); return(i.ServiceProducers); }, o => o.ServiceProducers, r => true); return(definition.GetFinal()); }