private void CheckPhoneAndAddressRequiredFields(PatientSearchResultDto patientSearchResult)
        {
            var sb = new StringBuilder();

            var phoneRequiredFieldMissing = from p in patientSearchResult.PhoneNumbers
                                            where p.PatientPhoneType == null || string.IsNullOrEmpty(p.PhoneNumber)
                                            select p;

            if (phoneRequiredFieldMissing.Count() > 0)
            {
                sb.Append("Phone Type and Phone Number are all required");
                sb.Append(Environment.NewLine);
            }

            var regex = new Regex(@"^\d{5}(-\d{4})?$");
            var addressRequiredFieldMissing = from a in patientSearchResult.Addresses
                                              where (a.PatientAddressType == null || string.IsNullOrEmpty(a.PostalCode) || a.StateProvince == null || string.IsNullOrEmpty(a.CityName) || string.IsNullOrEmpty(a.FirstStreetAddress)) ||
                                              (!string.IsNullOrEmpty(a.PostalCode) && !regex.IsMatch(a.PostalCode))
                                              select a;

            if (addressRequiredFieldMissing.Count() > 0)
            {
                sb.Append("Address Type, First Street Address, City Name, State Province and PostalCode are all required. And also please make sure the foramt of Post Code is correct.");
                sb.Append(Environment.NewLine);
            }

            var errors = sb.ToString();

            if (!string.IsNullOrEmpty(errors))
            {
                throw new ArgumentException(string.Format("Please fix the following errors before trying to save:{0}{1}", Environment.NewLine, errors));
            }
        }
        private Patient SavePatient(PatientSearchResultDto patientSearchResult, long agencyKey)
        {
            CheckPhoneAndAddressRequiredFields(patientSearchResult);

            var agency = _agencyRepository.GetByKey(agencyKey);

            var personName = new PersonName(
                patientSearchResult.PrefixName,
                patientSearchResult.FirstName,
                patientSearchResult.MiddleName,
                patientSearchResult.LastName,
                patientSearchResult.SuffixName);

            var patientGender = (patientSearchResult.PatientGender == null)
                                    ? null
                                    : _mappingHelper.MapLookupField <PatientGender> (patientSearchResult.PatientGender);
            var patientProfile = new PatientProfileBuilder()
                                 .WithBirthDate(patientSearchResult.BirthDate)
                                 .WithPatientGender(patientGender)
                                 .Build();

            var patient = _patientFactory.CreatePatient(agency, personName, patientProfile);

            PopulatePatientAddresses(patient, patientSearchResult);
            PopulatePatientPhones(patient, patientSearchResult);

            _patientRepository.MakePersistent(patient);

            return(patient);
        }
示例#3
0
        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 void PopulatePatientPhones(Patient patient, PatientSearchResultDto patientSearchResult)
 {
     new AggregateNodeCollectionMapper <PatientPhoneDto, Patient, PatientPhone> (
         new SoftDeleteObservableCollection <PatientPhoneDto> (patientSearchResult.PhoneNumbers), patient, patient.PhoneNumbers)
     .MapRemovedItem(RemovePatientPhone)
     .MapAddedItem(AddPatientPhone)
     .MapChangedItem(ChangePatientPhone)
     .Map();
 }
 private void ExecuteApplyPayment(PatientSearchResultDto patientQuickSearchResultDto)
 {
     _navigationService.Navigate(
         WorkspacesRegion,
         "FrontDeskDashboardView",
         "MakePayment",
         new KeyValuePair <string, string> ("PatientKey", patientQuickSearchResultDto.Key.ToString()),
         new KeyValuePair <string, string> (
             "PatientFullName", string.Format("{0} {1}", patientQuickSearchResultDto.FirstName, patientQuickSearchResultDto.LastName)));
 }
 private void ExecuteCreateNewAppointment(PatientSearchResultDto patientQuickSearchResultDto)
 {
     _navigationService.NavigateToActiveView(
         WorkspacesRegion,
         "CreateAppointment",
         new[]
     {
         new KeyValuePair <string, string> ("PatientKey", patientQuickSearchResultDto.Key.ToString()),
         new KeyValuePair <string, string> ("PatientFirstName", patientQuickSearchResultDto.FirstName),
         new KeyValuePair <string, string> ("PatientLastName", patientQuickSearchResultDto.LastName)
     });
 }
 private void ExecuteViewProfile(PatientSearchResultDto patientQuickSearchResultDto)
 {
     if (patientQuickSearchResultDto != null)
     {
         _navigationService.Navigate(
             WorkspacesRegion,
             PatientWorkspaceView,
             "ViewPatient",
             new[]
         {
             new KeyValuePair <string, string> ("PatientKey", patientQuickSearchResultDto.Key.ToString()),
             new KeyValuePair <string, string> ("FullName", patientQuickSearchResultDto.FullName),
             new KeyValuePair <string, string> ("SubViewName", PatientEditorView)
         });
     }
     else
     {
         _userDialogService.ShowDialog(
             "No patient is selected, couldn't view profile.",
             "Viewing Profile Failed",
             UserDialogServiceOptions.Ok);
     }
 }
示例#8
0
        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);
        }