private PatientSearchResultDto GetPatientSearchResultDto(MailAttachment mailAttachment) { var patientSearchResultDto = new PatientSearchResultDto(); var queryCriteria = new PatientQueryCriteria(); var contentBytes = mailAttachment.ContentBytes; var fileName = mailAttachment.FileName; if (fileName.ToLower().EndsWith(".zip")) { queryCriteria = GetQueryCriteriaFromXDM(contentBytes); } else if (fileName.ToLower().EndsWith(".xml")) { queryCriteria = GetQueryCriteriaFromC32(contentBytes); } else { throw new ApplicationException("Unsupported file type :" + fileName); } if (queryCriteria.IsNullCriteria()) { return(patientSearchResultDto); } var result = _patientRepository.FindPatientsByAdvancedSearch( queryCriteria.FirstName, queryCriteria.MiddleName, queryCriteria.LastName, queryCriteria.GenderWellKnownName, queryCriteria.BirthDate, null, null, null, null, null, null, null, null, null, 0, 100); var patientSearchResultDtos = Mapper.Map <IList <Patient>, IList <PatientSearchResultDto> > (result.Item3); var firstOrDefault = patientSearchResultDtos.FirstOrDefault(); if (firstOrDefault != null) { patientSearchResultDto = firstOrDefault; } else { patientSearchResultDto = CreatePatientSearchResultDtoFromQueryCriteria(queryCriteria); } return(patientSearchResultDto); }
private PatientQueryCriteria GetQueryCriteriaFromC32(byte[] contentBytes) { var patientQueryCriteria = new PatientQueryCriteria(); var contentString = Encoding.UTF8.GetString(contentBytes); patientQueryCriteria = GetQueryCriteriaFromC32(contentString); return(patientQueryCriteria); }
private PatientQueryCriteria GetQueryCriteriaFromXDM(byte[] contentBytes) { var patientQueryCriteria = new PatientQueryCriteria(); var packager = XDMZipPackager.Default; var xdmFile = ZipFile.Read(contentBytes, null, Encoding.UTF8); var documentPackage = packager.Unpackage(xdmFile); if (documentPackage == null || documentPackage.Documents == null || documentPackage.Documents.FirstOrDefault() == null) { return(patientQueryCriteria); } patientQueryCriteria = GetQueryCriteriaFromC32(documentPackage.Documents.FirstOrDefault().DocumentString); return(patientQueryCriteria); }
private PatientSearchResultDto CreatePatientSearchResultDtoFromQueryCriteria(PatientQueryCriteria queryCriteria) { var patientSearchResultDto = new PatientSearchResultDto { Addresses = new SoftDeleteObservableCollection <PatientAddressDto> (), PhoneNumbers = new SoftDeleteObservableCollection <PatientPhoneDto> (), FirstName = queryCriteria.FirstName, LastName = queryCriteria.LastName, MiddleName = queryCriteria.MiddleName, BirthDate = queryCriteria.BirthDate }; if (!string.IsNullOrEmpty(queryCriteria.GenderWellKnownName)) { var patientGender = _lookupValueRepository.GetLookupByWellKnownName <PatientGender> (queryCriteria.GenderWellKnownName); if (patientGender != null) { patientSearchResultDto.PatientGender = Mapper.Map <LookupBase, LookupValueDto> (patientGender); } } if (!string.IsNullOrEmpty(queryCriteria.Phone)) { var patientPhoneType = _lookupValueRepository.GetLookupByWellKnownName <PatientPhoneType> (WellKnownNames.PatientModule.PatientPhoneType.Other); var patietnPhoneTypeDto = Mapper.Map <LookupBase, LookupValueDto> (patientPhoneType); var patientPhoneDto = new PatientPhoneDto { PatientPhoneType = patietnPhoneTypeDto, PhoneNumber = queryCriteria.Phone }; patientSearchResultDto.PhoneNumbers.Add(patientPhoneDto); } if (!string.IsNullOrEmpty(queryCriteria.AddressLineOne) || !string.IsNullOrEmpty(queryCriteria.City) || !string.IsNullOrEmpty(queryCriteria.StateWellKnownName) || !string.IsNullOrEmpty(queryCriteria.ZipCode)) { var patientAddressType = _lookupValueRepository.GetLookupByWellKnownName <PatientAddressType> (WellKnownNames.PatientModule.PatientAddressType.Other); var patientAddressTypeDto = Mapper.Map <LookupBase, LookupValueDto> (patientAddressType); var patientAddressDto = new PatientAddressDto { FirstStreetAddress = queryCriteria.AddressLineOne, PostalCode = queryCriteria.ZipCode, CityName = queryCriteria.City, PatientAddressType = patientAddressTypeDto }; if (!string.IsNullOrEmpty(queryCriteria.StateWellKnownName)) { var state = _lookupValueRepository.GetLookupByWellKnownName <StateProvince> (queryCriteria.StateWellKnownName); if (state != null) { patientAddressDto.StateProvince = Mapper.Map <LookupBase, LookupValueDto> (state); } } patientSearchResultDto.Addresses.Add(patientAddressDto); } return(patientSearchResultDto); }
private PatientQueryCriteria GetQueryCriteriaFromC32(string content) { var patientQueryCriteria = new PatientQueryCriteria(); if (string.IsNullOrEmpty(content)) { return(patientQueryCriteria); } var c32Dto = _c32Builder.BuildC32Dto(content); if (c32Dto == null || c32Dto.Header == null || c32Dto.Header.PersonalInfo == null || c32Dto.Header.PersonalInfo.PatientInfo == null || c32Dto.Header.PersonalInfo.PatientInfo.PersonInfo == null) { return(patientQueryCriteria); } var personAddress = c32Dto.Header.PersonalInfo.PatientInfo.PersonAddress; if (personAddress != null) { patientQueryCriteria.City = personAddress.City; patientQueryCriteria.AddressLineOne = personAddress.StreetAddressLines == null ? null : personAddress.StreetAddressLines.FirstOrDefault(); patientQueryCriteria.ZipCode = personAddress.PostalCode; patientQueryCriteria.StateWellKnownName = personAddress.State; } var personPhone = c32Dto.Header.PersonalInfo.PatientInfo.PersonPhone; if (personPhone != null) { patientQueryCriteria.Phone = personPhone.Value; } var personInfo = c32Dto.Header.PersonalInfo.PatientInfo.PersonInfo; if (personInfo.PersonName != null) { patientQueryCriteria.FirstName = personInfo.PersonName.Given; patientQueryCriteria.LastName = personInfo.PersonName.Family; } if (personInfo.Gender != null && !string.IsNullOrEmpty(personInfo.Gender.Code)) { var lookup = _codedConceptLookupBaseRepository.GetLookupByCodedConceptCode(typeof(AdministrativeGender), personInfo.Gender.Code); if (lookup != null) { patientQueryCriteria.GenderWellKnownName = lookup.WellKnownName; } } if (personInfo.PersonDateOfBirth != null && !string.IsNullOrEmpty(personInfo.PersonDateOfBirth.Value)) { var birthDate = DateTime.MinValue; DateTime.TryParseExact( personInfo.PersonDateOfBirth.Value, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out birthDate); if (birthDate != DateTime.MinValue) { patientQueryCriteria.BirthDate = birthDate; } } return(patientQueryCriteria); }