using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Metadata;
using Microsoft.Xrm.Sdk.Query;
using PaRTSIntegrationService;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;
namespace PaRTSIntegrationPlugin
{
public static class Extensions
{
private static readonly Dictionary<TransactionTypeEnum, string[]> CompletedStatusMappings = new Dictionary<TransactionTypeEnum, string[]>();
static Extensions()
{
CompletedStatusMappings.Add(TransactionTypeEnum.ADMISSION, new string[] { "Admitted" });
CompletedStatusMappings.Add(TransactionTypeEnum.DAY_TRIP, new string[] { "Scheduled" });
CompletedStatusMappings.Add(TransactionTypeEnum.DISCHARGE, new string[] { "Discharged" });
CompletedStatusMappings.Add(TransactionTypeEnum.HOUSING, new string[] { "Admitted" });
CompletedStatusMappings.Add(TransactionTypeEnum.RETURN_FROM_COURT, new string[] { "Scheduled" });
CompletedStatusMappings.Add(TransactionTypeEnum.TEMP_OUT_MEDICAL, new string[] { "Scheduled" });
CompletedStatusMappings.Add(TransactionTypeEnum.TEMP_OUT_COURT, new string[] { "Scheduled" });
CompletedStatusMappings.Add(TransactionTypeEnum.TRANSFER_HOSP_EXIT, new string[] { "Discharged" });
CompletedStatusMappings.Add(TransactionTypeEnum.TRANSFER_HOSP_IN, new string[] { "Admitted" });
}
//"Admitted", "Discharged"/*, "Scheduled", "Canceled", "Initiated", "In-Process", "Pending Re-Schedule", "Pending Scheduling", "Permanently Deferred"*/ };
public static string ToXml(this BedActivityDTO metadata)
{
var lateBoundSerializer = new XmlSerializer(metadata.GetType(), new XmlRootAttribute("Data"));
var ns = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
var settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
string xml;
using (var stream = new StringWriter())
using (var writer = XmlWriter.Create(stream, settings))
{
lateBoundSerializer.Serialize(writer, metadata, ns);
xml = stream.ToString();
return xml;
}
}
public static void SetActivity(this BedActivityDTO dto, IOrganizationService _service, Entity scheduling, Entity person, Entity bed, TransactionTypeEnum transactionType)
{
dto.TransactionType = transactionType.ToString();
if (person != null)
{
dto.Dob = person.Contains("parts_dob") && person["parts_dob"] != null ? ((DateTime)person["parts_dob"]).ToString("MM/dd/yyyy") : "";
dto.PersonId = person.Contains("parts_personid") ? person["parts_personid"].ToString() : "";
dto.FirstHospitalCaseNumber = person.Contains("parts_firsthospitalcasenumberadt") ? (string)person["parts_firsthospitalcasenumberadt"] : "";
dto.FirstHospitalNumber = scheduling.Contains("parts_hospital") ? GetHospitalNumberByCaseNumber(_service, dto.FirstHospitalCaseNumber) : 0;
dto.SSN = person.Contains("parts_ssn") ? Convert.ToInt32(((string)person["parts_ssn"]).Replace("-", "")) : 0;
dto.Dob = person.Contains("parts_dob") && person["parts_dob"] != null ? ((DateTime)person["parts_dob"]).ToString("yyyy-MM-dd") : "";
dto.FirstName = person.Contains("parts_firstname") ? (string)person["parts_firstname"] : "";
dto.MiddleInitial = person.Contains("parts_middleinitial") ? (string)person["parts_middleinitial"] : "";
dto.LastName = person.Contains("parts_lastname") ? (string)person["parts_lastname"] : "";
dto.Gender = person.Contains("parts_gender") ? GetOptionSetLabel(_service, person, "parts_gender") : "";
dto.CurrentHospitalCaseNumber = person.Contains("parts_currenthospitalcasenumber") ? (string)person["parts_currenthospitalcasenumber"] : "";
dto.Race = person.Contains("parts_race") ? (string)GetEntityValueByProperty(_service, "parts_ethnicity", "parts_name", GetOptionSetLabel(_service, person, "parts_race"), "parts_adtcode") : "";
dto.Narcotics = person.Contains("parts_narcotics") ? FormatBoolean(person["parts_narcotics"]) : "";
dto.Registrant = person.Contains("parts_registrant") ? FormatBoolean(person["parts_registrant"]) : "";
dto.MaritalStatus = person.Contains("parts_maritalstatus") ? GetOptionSetLabel(_service, person, "parts_maritalstatus") : "";
dto.Religion = person.Contains("parts_religion") ? GetOptionSetLabel(_service, person, "parts_religion") : "";
dto.Citizenship = person.Contains("parts_citizenship") ? GetOptionSetLabel(_service, person, "parts_citizenship") : "";
dto.VeteranStatus = person.Contains("parts_veteranstatus") ? FormatBoolean(person["parts_veteranstatus"]) : "";
dto.CountryOfCitizenship = person.Contains("parts_countryofcitizenship") ? (string)GetEnityAttributeValueByEntityReference(_service, person["parts_countryofcitizenship"], "parts_code") : "";
dto.CDCNumber = person.Contains("parts_cdcnumber") ? (string)person["parts_cdcnumber"] : "";
dto.CIINumber = person.Contains("parts_ciinumber") ? (string)person["parts_ciinumber"] : "";
dto.State = person.Contains("parts_state") ? GetOptionSetLabel(_service, person, "parts_state") : "";
dto.Zip = person.Contains("parts_zip") ? (string)person["parts_zip"] : "";
dto.PhoneNumber = person.Contains("parts_phonenumber") ? (string)person["parts_phonenumber"] : "";
string unknown = person.Contains("parts_phunknown") ? GetOptionSetLabel(_service, person, "parts_phunknown") : "";
//dto.PriorHospHist = person.Contains("") ? FormatPriorHosp(person, unknown) : ""; //TODO
}
if (scheduling != null)
{
dto.Schedulingid = scheduling.Contains("parts_schedulingid") ? scheduling["parts_schedulingid"].ToString() : "";
dto.SchedulingStatus = scheduling.Contains("parts_schedulingstatusid") ? ((EntityReference)scheduling["parts_schedulingstatusid"]).Name : "";
dto.SchedulingType = scheduling.Contains("parts_schedulingtypeid") ? ((EntityReference)scheduling["parts_schedulingtypeid"]).Name : "";
dto.Id = scheduling.Contains("parts_id") ? scheduling["parts_id"].ToString() : "";
dto.HospitalCaseNumber = scheduling.Contains("parts_hospitalcasenumber") ? scheduling["parts_hospitalcasenumber"].ToString() : "";
dto.LevelofCare = scheduling.Contains("parts_levelofcare") ? scheduling["parts_levelofcare"].ToString() : "";
dto.ReferringSourceId = scheduling.Contains("parts_referringsourceid") ? ((EntityReference)scheduling["parts_referringsourceid"]).Id.ToString() : "";
dto.ReferringSourceCode = scheduling.Contains("parts_referringsourceid") ? (string)GetEnityAttributeValueByEntityReference(_service, scheduling["parts_referringsourceid"], "parts_code") : null;
dto.AdmissionDatetime = scheduling.Contains("parts_admissiondatetime") ? ((DateTime)scheduling["parts_admissiondatetime"]).ToString("yyyy-MM-dd HH:mm:ss") : DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
dto.CountyAuthEffectiveDate = scheduling.Contains("parts_countyautheffectivedate") ? ((DateTime)scheduling["parts_countyautheffectivedate"]).ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") : "";
dto.BillingCounty = scheduling.Contains("parts_billingcounty") ? ((EntityReference)scheduling["parts_billingcounty"]).Id.ToString() : "";
dto.BillingCountyADTId = scheduling.Contains("parts_billingcounty") ? ((int)GetEnityAttributeValueByEntityReference(_service, scheduling["parts_billingcounty"], "parts_adtid")).ToString("D2") : "";
dto.BillingCountyADTCode = scheduling.Contains("parts_billingcounty") ? (string)GetEnityAttributeValueByEntityReference(_service, scheduling["parts_billingcounty"], "parts_abbreviation") : "";
dto.BillToCounty = scheduling.Contains("parts_billtocounty") ? FormatBoolean(scheduling["parts_billtocounty"]) : "";
//dto.LegalStatus = scheduling.Contains("parts_legalclassid")? (string)GetEnityReferenceValue(_service, scheduling["parts_legalclassid"], "parts_codesection") : "";
dto.LegalStatusEffDateTime = scheduling.Contains("parts_legalstatuseffectivedate") ? ((DateTime)scheduling["parts_legalstatuseffectivedate"]).ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") : "";
dto.LegalStatusEndDate = scheduling.Contains("parts_legalstatusenddate") ? ((DateTime)scheduling["parts_legalstatusenddate"]).ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") : "";
dto.CommitingCountyADTId = scheduling.Contains("parts_committingcountyadtid") ? scheduling["parts_committingcountyadtid"].ToString() : "";
dto.LegalStatus = scheduling.Contains("parts_legalclassid") ? (string)GetEnityAttributeValueByEntityReference(_service, scheduling["parts_legalclassid"], "parts_codesection") : "";
dto.LegalStatusEffDateTime = scheduling.Contains("parts_legalstatuseffectivedate") ? ((DateTime)scheduling["parts_legalstatuseffectivedate"]).ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") : "";
dto.LegalStatusEndDate = scheduling.Contains("parts_legalstatusenddate") ? ((DateTime)scheduling["parts_legalstatusenddate"]).ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") : "";
dto.TransFromHospNbr = scheduling.Contains("parts_transferfromhospital") ? scheduling["parts_transferfromhospital"].ToString() : "";
dto.CommitingCountyADTId = scheduling.Contains("parts_committingcounty_countyid") ? ((int)GetEnityAttributeValueByEntityReference(_service, scheduling["parts_committingcounty_countyid"], "parts_adtid")).ToString("D2") : "";
dto.CommittingCountyCountyId = scheduling.Contains("parts_committingcounty_countyid") ? ((EntityReference)scheduling["parts_committingcounty_countyid"]).Id.ToString() : "";
dto.CountyOfCommitment = scheduling.Contains("parts_committingcounty_countyid") ? (string)GetEnityAttributeValueByEntityReference(_service, scheduling["parts_committingcounty_countyid"], "parts_abbreviation") : "";
dto.MHRegionAdmitCounty = scheduling.Contains("parts_mhregionadmitcounty") ? scheduling["parts_mhregionadmitcounty"].ToString() : "";
dto.LAMentalHealthRegion = scheduling.Contains("pars_lamentalhealthregion") ? scheduling["pars_lamentalhealthregion"].ToString() : "";
dto.RightsRead = scheduling.Contains("parts_rightsread") ? FormatBoolean(scheduling["parts_rightsread"]) : "";
dto.LegalStatusLsType = scheduling.Contains("parts_legalclassid") ? (string)GetEnityAttributeValueByEntityReference(_service, scheduling["parts_legalclassid"], "parts_ods_legal_class_code") : "";
dto.LegalStatusFundingSource = scheduling.Contains("parts_legalclassid") ? (string)GetEnityAttributeValueByEntityReference(_service, scheduling["parts_legalclassid"], "parts_fundingsource") : "";
dto.HospitalId = scheduling.Contains("parts_hospital") ? ((EntityReference)scheduling["parts_hospital"]).Id.ToString() : "";
dto.CurrentHospitalNumber = scheduling.Contains("parts_hospital") ? Convert.ToInt32(GetEntityValueByProperty(_service, "ttg_hospital", "ttg_siteid", ((EntityReference)scheduling["parts_hospital"]).Id, "ttg_adtid")) : 0;
dto.DischargeDate = scheduling.Contains("parts_dischargedate") ? ((DateTime)scheduling["parts_dischargedate"]).ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") : "";
}
if (bed != null)
{
dto.BedNumber = bed.Contains("ttg_actualbednumber") ? Convert.ToInt32(bed["ttg_actualbednumber"]) : 0;
dto.UnitName = bed.Contains("ttg_unitid") ? (string)GetEnityAttributeValueByEntityId(_service, "ttg_unit", ((EntityReference)bed["ttg_unitid"]).Id, "ttg_actualunitnumber") : "";
dto.Program = bed.Contains("ttg_unitid") ? (string)GetEnityAttributeValueByEntityId(_service, "ttg_unit", ((EntityReference)bed["ttg_unitid"]).Id, "ttg_program") : "";
}
}
public static void SetPatientCase(this Entity PatientCase, IOrganizationService orgSvc, TransactionTypeEnum transactionType, BedActivityDTO dto)
{
PatientCase["parts_hospitalcasenumber"] = dto.HospitalCaseNumber;
PatientCase["parts_personid"] = new EntityReference("parts_person", new Guid(dto.PersonId));
PatientCase["parts_hospital"] = new EntityReference("site", new Guid(dto.HospitalId));
PatientCase["parts_committingcounty_countyid"] = string.IsNullOrEmpty(dto.CommittingCountyCountyId) ? null : new EntityReference("parts_county", new Guid(dto.CommittingCountyCountyId));
PatientCase["parts_billingcounty"] = string.IsNullOrEmpty(dto.BillingCounty) ? null : new EntityReference("parts_county", new Guid(dto.BillingCounty));
PatientCase["parts_billtocounty"] = dto.BillToCounty == "Y" ? true : false;
PatientCase["parts_cdcnumber"] = dto.CDCNumber;
PatientCase["parts_ciinumber"] = dto.CIINumber;
switch (transactionType)
{
case TransactionTypeEnum.ADMISSION:
PatientCase["parts_admissiondatetime"] = string.IsNullOrEmpty(dto.AdmissionDatetime) ? (DateTime?)null : DateTime.SpecifyKind(Convert.ToDateTime(dto.AdmissionDatetime), DateTimeKind.Utc);
PatientCase["parts_locationstatus"] = GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "RES. ON UNIT");
break;
case TransactionTypeEnum.DAY_TRIP:
break;
case TransactionTypeEnum.DISCHARGE:
PatientCase["parts_dischargedate"] = string.IsNullOrEmpty(dto.DischargeDate) ? (DateTime?)null : DateTime.SpecifyKind(Convert.ToDateTime(dto.DischargeDate), DateTimeKind.Utc);
PatientCase["parts_locationstatus"] = GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "DISCHARGED");
break;
case TransactionTypeEnum.HOUSING:
PatientCase["parts_admissiondatetime"] = string.IsNullOrEmpty(dto.AdmissionDatetime) ? (DateTime?)null : DateTime.SpecifyKind(Convert.ToDateTime(dto.AdmissionDatetime), DateTimeKind.Utc);
PatientCase["parts_locationstatus"] = GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "RES. ON UNIT");
break;
case TransactionTypeEnum.RETURN_FROM_COURT:
PatientCase["parts_admissiondatetime"] = string.IsNullOrEmpty(dto.AdmissionDatetime) ? (DateTime?)null : DateTime.SpecifyKind(Convert.ToDateTime(dto.AdmissionDatetime), DateTimeKind.Utc);
PatientCase["parts_locationstatus"] = GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "RES. ON UNIT");
break;
case TransactionTypeEnum.TEMP_OUT_MEDICAL:
PatientCase["parts_dischargedate"] = string.IsNullOrEmpty(dto.DischargeDate) ? (DateTime?)null : DateTime.SpecifyKind(Convert.ToDateTime(dto.DischargeDate), DateTimeKind.Utc);
PatientCase["parts_locationstatus"] = GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "OUTPATIENT");
break;
case TransactionTypeEnum.TEMP_OUT_COURT:
PatientCase["parts_dischargedate"] = string.IsNullOrEmpty(dto.DischargeDate) ? (DateTime?)null : DateTime.SpecifyKind(Convert.ToDateTime(dto.DischargeDate), DateTimeKind.Utc);
PatientCase["parts_locationstatus"] = GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "COURT LEAVE");
break;
case TransactionTypeEnum.TRANSFER_HOSP_EXIT:
PatientCase["parts_dischargedate"] = string.IsNullOrEmpty(dto.DischargeDate) ? (DateTime?)null : DateTime.SpecifyKind(Convert.ToDateTime(dto.DischargeDate), DateTimeKind.Utc);
PatientCase["parts_locationstatus"] = GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "DISCHARGED");
break;
case TransactionTypeEnum.TRANSFER_HOSP_IN:
PatientCase["parts_admissiondatetime"] = string.IsNullOrEmpty(dto.AdmissionDatetime) ? (DateTime?)null : DateTime.SpecifyKind(Convert.ToDateTime(dto.AdmissionDatetime), DateTimeKind.Utc);
PatientCase["parts_locationstatus"] = GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "RES. ON UNIT");
break;
default:
break;
}
}
public static TransactionTypeEnum GetTransactionType(this Entity scheduling)
{
var schedulingType = ((EntityReference)scheduling["parts_schedulingtypeid"]).Name;
TransactionTypeEnum TransactionType;
switch (schedulingType)
{
case "Admission":
TransactionType = TransactionTypeEnum.ADMISSION;
break;
case "Day Trip":
TransactionType = TransactionTypeEnum.DAY_TRIP;
break;
case "Discharge":
TransactionType = TransactionTypeEnum.DISCHARGE;
break;
case "Housing":
TransactionType = TransactionTypeEnum.HOUSING;
break;
case "Return from Court":
TransactionType = TransactionTypeEnum.RETURN_FROM_COURT;
break;
case "Return from Medical":
TransactionType = TransactionTypeEnum.RETURN_FROM_MEDICAL;
break;
case "Temporary out on Medical":
TransactionType = TransactionTypeEnum.TEMP_OUT_MEDICAL;
break;
case "Temporary out to Court":
TransactionType = TransactionTypeEnum.TEMP_OUT_COURT;
break;
case "Transfer State Hospital: Exit":
TransactionType = TransactionTypeEnum.TRANSFER_HOSP_EXIT;
break;
case "Transfer State Hospital: In":
TransactionType = TransactionTypeEnum.TRANSFER_HOSP_IN;
break;
case "UNAUTH. ABS.":
TransactionType = TransactionTypeEnum.AWOL;
break;
default:
TransactionType = TransactionTypeEnum.UNKNOWN;
break;
}
return TransactionType;
}
public static bool IsSchedulingComplete(this Entity scheduling, TransactionTypeEnum transactionType)
{
if (scheduling.Contains("parts_schedulingstatusid") && CompletedStatusMappings.ContainsKey(transactionType))
{
var status = ((EntityReference)scheduling["parts_schedulingstatusid"]).Name;
if (CompletedStatusMappings[transactionType].Contains(status))
return true;
else
return false;
}
return false;
}
public static Entity GetActiveHospitalCase(this Entity scheduling, IOrganizationService orgSvc)
{
QueryByAttribute query = new QueryByAttribute("parts_patientcase");
query.AddAttributeValue("parts_personid", ((EntityReference)scheduling["parts_personid"]).Id);
query.ColumnSet = new ColumnSet("parts_hospitalcasenumber", "parts_hospital");
EntityCollection retrieved = orgSvc.RetrieveMultiple(query);
if (retrieved.Entities.Count == 1)
{
return retrieved.Entities[0];
}
return null;
}
public static EntityReference GetLocationStatusByTransactionType(this TransactionTypeEnum transactionType, IOrganizationService orgSvc)
{
switch(transactionType)
{
case TransactionTypeEnum.ADMISSION:
return Extensions.GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "RES. ON UNIT");
case TransactionTypeEnum.DAY_TRIP:
return Extensions.GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "RES. ON UNIT");
case TransactionTypeEnum.DISCHARGE:
return Extensions.GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "DISCHARGED");
case TransactionTypeEnum.HOUSING:
return Extensions.GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "RES. ON UNIT");
case TransactionTypeEnum.INTERNAL_TRANSFER:
return Extensions.GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "RES. ON UNIT");
case TransactionTypeEnum.RETURN_FROM_COURT:
return Extensions.GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "RES. ON UNIT");
case TransactionTypeEnum.RETURN_FROM_MEDICAL:
return Extensions.GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "RES. ON UNIT");
case TransactionTypeEnum.TEMP_OUT_COURT:
return Extensions.GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "COURT LEAVE");
case TransactionTypeEnum.TEMP_OUT_MEDICAL:
return Extensions.GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "OUTPATIENT");
case TransactionTypeEnum.TRANSFER_HOSP_EXIT:
return Extensions.GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "TRSF ST.HOSP");
case TransactionTypeEnum.TRANSFER_HOSP_IN:
return Extensions.GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "RES. ON UNIT");
case TransactionTypeEnum.AWOL:
return Extensions.GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "UNAUTH. ABS.");
default:
return Extensions.GetEnityReferenceByPorperty(orgSvc, "parts_locationstatus", "parts_name", "RES. ON UNIT");
}
}
private static string FormatBoolean(object value)
{
if (value != null)
{
if (Convert.ToBoolean(value))
return "Y";
else
return "N";
}
return null;
}
private static string FormatPriorHosp(Entity person, string unknownval)
{
string str = String.Empty;
string calstate = person.Contains("parts_PHCalState") ? FormatBoolean(person["parts_PHCalState"]) : "";
string opi = person.Contains("parts_PHOPI") ? FormatBoolean(person["parts_PHOPI"]) : "";
string cpi = person.Contains("parts_PHCPI") ? FormatBoolean(person["parts_PHCPI"]) : "";
string va = person.Contains("parts_PHVA") ? FormatBoolean(person["parts_PHVA"]) : "";
string unknown = unknownval;
string otherstate = person.Contains("parts_PHOtherState") ? FormatBoolean(person["parts_PHOtherState"]) : "";
string other = person.Contains("parts_PHOther") ? FormatBoolean(person["parts_PHOther"]) : "";
string noprior = person.Contains("parts_PHNoPrior") ? FormatBoolean(person["parts_PHNoPrior"]) : "";
noprior = (noprior == "Y") ? "Y" : "N";
calstate = (calstate == "Y") ? "Y" : "N";
opi = (opi == "Y") ? "Y" : "N";
cpi = (cpi == "Y") ? "Y" : "N";
va = (va == "Y") ? "Y" : "N";
otherstate = (otherstate == "Y") ? "Y" : "N";
other = (other == "Y") ? "Y" : "N";
str = noprior + calstate + otherstate + va + cpi + opi + other + unknown;
if (unknown == "Y")
{
str = "NNNNNNNY";
}
else if (noprior == "Y")
{
str = "NNNNNNNY";
}
return str;
}
private static object GetEnityAttributeValueByEntityReference(IOrganizationService _service, object _entityRef, string attributeName)
{
var entityRef = (EntityReference)_entityRef;
return GetEnityAttributeValueByEntityId(_service, entityRef.LogicalName, entityRef.Id, attributeName);
}
private static object GetEnityAttributeValueByEntityId(IOrganizationService _service, string entityLogicalName, Guid entityId, string attributeName)
{
Entity entity = _service.Retrieve(entityLogicalName, entityId, new ColumnSet(new string[] { attributeName }));
if (entity.Attributes.Contains(attributeName))
{
return entity[attributeName];
}
return null;
}
public static EntityReference GetEnityReferenceByPorperty(IOrganizationService orgSvc, string entityLogicName, string attributeName, string attributeValue)
{
QueryByAttribute query = new QueryByAttribute(entityLogicName);
query.AddAttributeValue(attributeName, attributeValue);
query.ColumnSet = new ColumnSet(attributeName);
//query passed to the service proxy
EntityCollection retrieved = orgSvc.RetrieveMultiple(query);
if (retrieved.Entities.Count == 1)
{
return new EntityReference(entityLogicName, retrieved.Entities[0].Id);
}
return null;
}
private static object GetEntityValueByProperty(IOrganizationService orgSvc, string entityLogicalName, string srcAttributeName, object srcAttributeValue, string tgtAttributeName)
{
QueryByAttribute query = new QueryByAttribute(entityLogicalName);
query.AddAttributeValue(srcAttributeName, srcAttributeValue);
query.ColumnSet = new ColumnSet(tgtAttributeName);
//query passed to the service proxy
EntityCollection retrieved = orgSvc.RetrieveMultiple(query);
if (retrieved.Entities.Count == 1 && retrieved.Entities[0].Contains(tgtAttributeName))
{
return retrieved.Entities[0][tgtAttributeName];
}
return null;
}
private static string GetOptionSetLabel(IOrganizationService _service, Entity entity, string attributeName)
{
string label = null;
if (entity.FormattedValues.Contains(attributeName))
{
label = entity.FormattedValues[attributeName];
}
else if (entity.Contains(attributeName))
{
var p = (OptionSetValue)entity[attributeName];
var attReq = new RetrieveAttributeRequest();
attReq.EntityLogicalName = entity.LogicalName;
attReq.LogicalName = attributeName;
attReq.RetrieveAsIfPublished = true;
var attResponse = (RetrieveAttributeResponse)_service.Execute(attReq);
var attMetadata = (EnumAttributeMetadata)attResponse.AttributeMetadata;
return attMetadata.OptionSet.Options.Where(x => x.Value == p.Value).FirstOrDefault().Label.UserLocalizedLabel.Label;
}
return label;
}
private static int GetHospitalNumberByCaseNumber(IOrganizationService _service, string hospitalCaseNumber)
{
string pattern = @"(?<facility>\S+-\S+)-(\d+)-(\d+)";
Regex r = new Regex(pattern);
Match match = r.Match(hospitalCaseNumber);
if (match.Success)
{
string facility = match.Groups["facility"].Value;
return Convert.ToInt32(GetEntityValueByProperty(_service, "ttg_hospital", "ttg_abbreviation", facility, "ttg_adtid"));
}
return 0;
}
}
}
*This post is locked for comments