/// <summary> /// Map to Model /// </summary> protected override Core.Model.Entities.Organization MapToModel(SanteDB.Messaging.FHIR.Resources.Organization resource, RestOperationContext webOperationContext) { // Organization var retVal = new Core.Model.Entities.Organization() { TypeConcept = DataTypeConverter.ToConcept(resource.Type), Addresses = resource.Address.Select(DataTypeConverter.ToEntityAddress).ToList(), CreationTime = DateTimeOffset.Now, // TODO: Extensions Extensions = resource.Extension.Select(DataTypeConverter.ToEntityExtension).OfType <EntityExtension>().ToList(), Identifiers = resource.Identifier.Select(DataTypeConverter.ToEntityIdentifier).ToList(), Key = Guid.NewGuid(), Names = new List <EntityName>() { new EntityName(NameUseKeys.OfficialRecord, resource.Name) }, StatusConceptKey = resource.Active?.Value == true ? StatusKeys.Active : StatusKeys.Obsolete, Telecoms = resource.Telecom.Select(DataTypeConverter.ToEntityTelecomAddress).ToList() }; Guid key; if (!Guid.TryParse(resource.Id, out key)) { key = Guid.NewGuid(); } retVal.Key = key; return(retVal); }
/// <summary> /// Map to FHIR /// </summary> protected override Hl7.Fhir.Model.Organization MapToFhir(Core.Model.Entities.Organization model) { var retVal = DataTypeConverter.CreateResource <Hl7.Fhir.Model.Organization>(model); retVal.Identifier = model.LoadCollection(o => o.Identifiers).Select(o => DataTypeConverter.ToFhirIdentifier(o)).ToList(); retVal.Active = StatusKeys.ActiveStates.Contains(model.StatusConceptKey.Value); retVal.Telecom = model.LoadCollection(o => o.Telecoms).Select(DataTypeConverter.ToFhirTelecom).ToList(); retVal.Address = model.LoadCollection(o => o.Addresses).Select(DataTypeConverter.ToFhirAddress).ToList(); retVal.Name = model.LoadCollection(o => o.Names).FirstOrDefault(o => o.NameUseKey == NameUseKeys.OfficialRecord)?.ToDisplay(); retVal.Alias = model.LoadCollection(o => o.Names).Where(o => o.NameUseKey == NameUseKeys.Pseudonym).Select(o => o.ToDisplay()); var parent = model.LoadCollection(o => o.Relationships).FirstOrDefault(o => o.RelationshipTypeKey == EntityRelationshipTypeKeys.Parent); if (parent != null) { retVal.PartOf = DataTypeConverter.CreateNonVersionedReference <Hl7.Fhir.Model.Organization>(parent.TargetEntityKey); } return(retVal); }
/// <summary> /// Map to FHIR /// </summary> protected override SanteDB.Messaging.FHIR.Resources.Organization MapToFhir(Core.Model.Entities.Organization model, RestOperationContext webOperationContext) { return(DataTypeConverter.CreateResource <SanteDB.Messaging.FHIR.Resources.Organization>(model)); }
/// <summary> /// Get reverse included resources /// </summary> protected override IEnumerable <Resource> GetReverseIncludes(Core.Model.Entities.Organization resource, IEnumerable <IncludeInstruction> reverseIncludePaths) { throw new NotImplementedException(m_localizationService.GetString("error.type.NotImplementedException")); }
/// <summary> /// Map to Model /// </summary> protected override Core.Model.Entities.Organization MapToModel(Hl7.Fhir.Model.Organization resource) { Core.Model.Entities.Organization retVal = null; if (Guid.TryParse(resource.Id, out Guid key)) { retVal = this.m_repository.Get(key); } else if (resource.Identifier?.Count > 0) { foreach (var ii in resource.Identifier.Select(DataTypeConverter.ToEntityIdentifier)) { if (ii.LoadProperty(o => o.Authority).IsUnique) { retVal = this.m_repository.Find(o => o.Identifiers.Where(i => i.AuthorityKey == ii.AuthorityKey).Any(i => i.Value == ii.Value)).FirstOrDefault(); } if (retVal != null) { break; } } } if (retVal == null) { retVal = new Core.Model.Entities.Organization() { Key = Guid.NewGuid() }; } // Organization retVal.TypeConcept = resource.Type.Select(o => DataTypeConverter.ToConcept(o)).OfType <Concept>().FirstOrDefault(); retVal.Addresses = resource.Address.Select(DataTypeConverter.ToEntityAddress).ToList(); // TODO: Extensions retVal.Identifiers = resource.Identifier.Select(DataTypeConverter.ToEntityIdentifier).ToList(); retVal.Names = new List <EntityName>() { new EntityName(NameUseKeys.OfficialRecord, resource.Name) }; retVal.Names.AddRange(resource.Alias.Select(o => new EntityName(NameUseKeys.Pseudonym, o))); retVal.StatusConceptKey = !resource.Active.HasValue || resource.Active == true ? StatusKeys.Active : StatusKeys.Inactive; retVal.Telecoms = resource.Telecom.Select(DataTypeConverter.ToEntityTelecomAddress).OfType <EntityTelecomAddress>().ToList(); if (resource.PartOf != null) { var reference = DataTypeConverter.ResolveEntity <Core.Model.Entities.Organization>(resource.PartOf, resource); if (reference == null) { this.m_tracer.TraceError($"Could not resolve {resource.PartOf.Reference}"); throw new KeyNotFoundException(m_localizationService.FormatString("error.type.KeyNotFoundException.couldNotResolve", new { param = resource.PartOf.Reference })); } // point the child organization entity at the target organization entity with a relationship of parent retVal.Relationships.Add(new EntityRelationship(EntityRelationshipTypeKeys.Parent, reference)); } retVal.Extensions = resource.Extension.Select(o => DataTypeConverter.ToEntityExtension(o, retVal)).OfType <EntityExtension>().ToList(); return(retVal); }