///// <summary> ///// Copy QPD segment ///// </summary> //internal static void CopyQPD(NHapi.Model.V25.Segment.QPD dest, NHapi.Model.V25.Segment.QPD source, QueryData queryParms) //{ // dest.MessageQueryName.Identifier.Value = source.MessageQueryName.Identifier.Value; // dest.MessageQueryName.Text.Value = source.MessageQueryName.Text.Value; // dest.QueryTag.Value = source.QueryTag.Value; // var qps = source.GetField(3); // // Create the actual qparms // Dictionary<String, Object> actualQParms = new Dictionary<string, object>(); // var qPerson = queryParms.QueryRequest.FindComponent(SVC.Core.ComponentModel.HealthServiceRecordSiteRoleType.SubjectOf); // if (qPerson == null) // return; // //dest.UserParametersInsuccessivefields.Data = source.UserParametersInsuccessivefields.Data; //} /// <summary> /// XTN from telephone number /// </summary> public static void XTNFromTel(Everest.DataTypes.TEL tel, NHapi.Model.V231.Datatype.XTN instance) { NHapi.Model.V25.Datatype.XTN v25instance = new NHapi.Model.V25.Datatype.XTN(instance.Message); XTNFromTel(tel, v25instance); for (int i = 0; i < v25instance.Components.Length; i++) { if (v25instance.Components[i] is AbstractPrimitive && i < instance.Components.Length) { (instance.Components[i] as AbstractPrimitive).Value = (v25instance.Components[i] as AbstractPrimitive).Value; } } }
/// <summary> /// Converts an <see cref="EntityTelecomAddress"/> instance to an <see cref="NHapi.Model.V231.Datatype.XTN"/> instance. /// </summary> /// <param name="tel">The entity telecom address instance to be converted.</param> /// <param name="instance">The converted XTN instance.</param> public static void XTNFromTel(EntityTelecomAddress tel, NHapi.Model.V231.Datatype.XTN instance) { var v25Instance = new NHapi.Model.V25.Datatype.XTN(instance.Message); XTNFromTel(tel, v25Instance); for (var i = 0; i < v25Instance.Components.Length; i++) { if (v25Instance.Components[i] is AbstractPrimitive && i < instance.Components.Length) { (instance.Components[i] as AbstractPrimitive).Value = (v25Instance.Components[i] as AbstractPrimitive).Value; } } }
/// <summary> /// XTN from telephone number /// </summary> /// <param name="tel"></param> /// <param name="instance"></param> public static void XTNFromTel(MARC.Everest.DataTypes.TEL tel, NHapi.Model.V25.Datatype.XTN instance) { Regex re = new Regex(@"^(?<s1>(?<s0>[^:/\?#]+):)?(?<a1>//(?<a0>[^/\;#]*))?(?<p0>[^\;#]*)(?<q1>\;(?<q0>[^#]*))?(?<f1>#(?<f0>.*))?"); // Match var match = re.Match(tel.Value); if (match.Groups[1].Value != "tel:") { instance.AnyText.Value = tel.Value; //instance.TelephoneNumber.Value = tel.Value; return; } // Telephone string[] comps = match.Groups[5].Value.Split('-'); StringBuilder sb = new StringBuilder(), phone = new StringBuilder(); for (int i = 0; i < comps.Length; i++) { if (i == 0 && comps[i].Contains("+")) { sb.Append(comps[i]); instance.CountryCode.Value = comps[i]; } else if (sb.Length == 0 && comps.Length == 3 || comps.Length == 4 && i == 1) // area code? { sb.AppendFormat("({0})", comps[i]); instance.AreaCityCode.Value = comps[i]; } else if (i != comps.Length - 1) { sb.AppendFormat("{0}-", comps[i]); phone.AppendFormat("{0}", comps[i]); } else { sb.Append(comps[i]); phone.Append(comps[i]); } } instance.LocalNumber.Value = phone.ToString().Replace("-", ""); // Extension? string[] parms = match.Groups[7].Value.Split(';'); foreach (var parm in parms) { string[] pData = parm.Split('='); if (pData[0] == "extension" || pData[0] == "ext" || pData[0] == "postd") { sb.AppendFormat("X{0}", pData[1]); instance.Extension.Value = pData[1]; } } instance.TelephoneNumber.Value = sb.ToString(); // Tel use if (tel.Use != null) { foreach (var tcu in s_v2TelUseConvert) { if (tcu.Value.Value == tel.Use.First.Code) { instance.TelecommunicationUseCode.Value = tcu.Key; } } } if (tel.Capabilities != null) { String cap = Util.ToWireFormat(tel.Capabilities); if (cap.Contains("sms")) { instance.TelecommunicationEquipmentType.Value = "CP"; } else if (cap.Contains("voice")) { instance.TelecommunicationEquipmentType.Value = "PH"; } } }
/// <summary> /// Converts an <see cref="EntityTelecomAddress"/> instance to an <see cref="NHapi.Model.V25.Datatype.XTN"/> instance. /// </summary> /// <param name="tel">The entity telecom address instance to be converted.</param> /// <param name="instance">The converted XTN instance.</param> public static void XTNFromTel(EntityTelecomAddress tel, NHapi.Model.V25.Datatype.XTN instance) { Regex re = new Regex(@"^(?<s1>(?<s0>[^:/\?#]+):)?(?<a1>//(?<a0>[^/\;#]*))?(?<p0>[^\;#]*)(?<q1>\;(?<q0>[^#]*))?(?<f1>#(?<f0>.*))?"); // Match var match = re.Match(tel.Value); if (match.Groups[1].Value != "tel:") { instance.AnyText.Value = tel.Value; return; } // Telephone string[] comps = match.Groups[5].Value.Split('-'); StringBuilder sb = new StringBuilder(), phone = new StringBuilder(); for (int i = 0; i < comps.Length; i++) { if (i == 0 && comps[i].Contains("+")) { sb.Append(comps[i]); instance.CountryCode.Value = comps[i]; } else if (sb.Length == 0 && comps.Length == 3 || comps.Length == 4 && i == 1) // area code? { sb.AppendFormat("({0})", comps[i]); instance.AreaCityCode.Value = comps[i]; } else if (i != comps.Length - 1) { sb.AppendFormat("{0}-", comps[i]); phone.AppendFormat("{0}", comps[i]); } else { sb.Append(comps[i]); phone.Append(comps[i]); } } instance.LocalNumber.Value = phone.ToString().Replace("-", ""); // Extension? string[] parms = match.Groups[7].Value.Split(';'); foreach (var parm in parms) { string[] pData = parm.Split('='); if (pData[0] == "extension" || pData[0] == "ext" || pData[0] == "postd") { sb.AppendFormat("X{0}", pData[1]); instance.Extension.Value = pData[1]; } } instance.TelephoneNumber.Value = sb.ToString(); // Tel use if (tel.AddressUseKey != null) { var concept = GetConcept(instance.TelecommunicationUseCode.Value, "urn:oid:2.16.840.1.113883.5.1011"); // TODO: cleanup if (concept == null) { throw new ArgumentException("Code not known"); } instance.TelecommunicationUseCode.Value = concept.Mnemonic; } }