public async Task <Result <PersonMaritalStatus> > Handle(UpdatePersonMaritalStatusCommand request, CancellationToken cancellationToken) { using (_unitOfWork) { try { PersonMaritalStatus personMaritalStatus = new PersonMaritalStatus(); RegisterPersonService registerPersonService = new RegisterPersonService(_unitOfWork); var maritalStatusList = await registerPersonService.GetPersonMaritalStatus(request.PersonId); if (maritalStatusList.Count > 0) { personMaritalStatus = await registerPersonService.UpdateMaritalStatus(request.PersonId, request.MaritalStatusId); } else { personMaritalStatus = await registerPersonService.AddMaritalStatus(request.PersonId, request.MaritalStatusId, request.UserId); } return(Result <PersonMaritalStatus> .Valid(personMaritalStatus)); } catch (Exception e) { Log.Error(e.Message); return(Result <PersonMaritalStatus> .Invalid(e.Message)); } } }
public async Task <Result <string> > Handle(AfyaMobileFamilyDemographicsCommand request, CancellationToken cancellationToken) { string afyaMobileId = string.Empty; string indexClientAfyaMobileId = string.Empty; using (var trans = _unitOfWork.Context.Database.BeginTransaction()) { RegisterPersonService registerPersonService = new RegisterPersonService(_unitOfWork); var facilityId = request.MESSAGE_HEADER.SENDING_FACILITY; try { for (int i = 0; i < request.FAMILY.Count; i++) { for (int j = 0; j < request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID.Count; j++) { if (request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].IDENTIFIER_TYPE == "AFYA_MOBILE_ID") { afyaMobileId = request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].ID; } if (request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].IDENTIFIER_TYPE == "INDEX_CLIENT_AFYAMOBILE_ID") { indexClientAfyaMobileId = request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].ID; } } var afyaMobileMessage = await registerPersonService.AddAfyaMobileInbox(DateTime.Now, request.MESSAGE_HEADER.MESSAGE_TYPE, afyaMobileId, JsonConvert.SerializeObject(request), false); string firstName = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_NAME.FIRST_NAME; string middleName = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_NAME.MIDDLE_NAME; string lastName = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_NAME.LAST_NAME; int sex = request.FAMILY[i].PATIENT_IDENTIFICATION.SEX; DateTime dateOfBirth = DateTime.Now; try { dateOfBirth = DateTime.ParseExact(request.FAMILY[i].PATIENT_IDENTIFICATION.DATE_OF_BIRTH, "yyyyMMdd", null); } catch (Exception e) { Log.Error($"Could not parse family demographics DATE_OF_BIRTH: {request.FAMILY[i].PATIENT_IDENTIFICATION.DATE_OF_BIRTH} as a valid date: Incorrect format, date should be in the following format yyyyMMdd"); throw new Exception($"Could not parse family demographics DATE_OF_BIRTH: {request.FAMILY[i].PATIENT_IDENTIFICATION.DATE_OF_BIRTH} as a valid date: Incorrect format, date should be in the following format yyyyMMdd"); } int providerId = request.FAMILY[i].PATIENT_IDENTIFICATION.USER_ID; int maritalStatusId = request.FAMILY[i].PATIENT_IDENTIFICATION.MARITAL_STATUS; string mobileNumber = request.FAMILY[i].PATIENT_IDENTIFICATION.PHONE_NUMBER; string landmark = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_ADDRESS.PHYSICAL_ADDRESS.LANDMARK; int countyId = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_ADDRESS.PHYSICAL_ADDRESS.COUNTY; int subCountyId = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_ADDRESS.PHYSICAL_ADDRESS.SUB_COUNTY; int wardId = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_ADDRESS.PHYSICAL_ADDRESS.WARD; int relationshipType = request.FAMILY[i].PATIENT_IDENTIFICATION.RELATIONSHIP_TYPE; Facility clientFacility = await _unitOfWork.Repository <Facility>().Get(x => x.PosID == facilityId).FirstOrDefaultAsync(); if (clientFacility == null) { clientFacility = await _unitOfWork.Repository <Facility>().Get(x => x.DeleteFlag == 0).FirstOrDefaultAsync(); } var indexClientIdentifiers = await registerPersonService.getPersonIdentifiers(indexClientAfyaMobileId, 10); if (indexClientIdentifiers.Count > 0) { //Get Index client var indexClient = await registerPersonService.GetPatientByPersonId(indexClientIdentifiers[0].PersonId); var partnetPersonIdentifiers = await registerPersonService.getPersonIdentifiers(afyaMobileId, 10); if (partnetPersonIdentifiers.Count > 0) { await registerPersonService.UpdatePerson(partnetPersonIdentifiers[0].PersonId, firstName, middleName, lastName, sex, dateOfBirth, clientFacility.FacilityID); //update maritalstatus id await registerPersonService.UpdateMaritalStatus(partnetPersonIdentifiers[0].PersonId, maritalStatusId); if (!string.IsNullOrWhiteSpace(mobileNumber)) { await registerPersonService.UpdatePersonContact(partnetPersonIdentifiers[0].PersonId, null, mobileNumber); } if (!string.IsNullOrWhiteSpace(landmark)) { await registerPersonService.UpdatePersonLocation(partnetPersonIdentifiers[0].PersonId, landmark); } var getPersonRelationship = await registerPersonService.GetPersonRelationshipByPatientIdPersonId(indexClient.Id, partnetPersonIdentifiers[0].PersonId); if (getPersonRelationship != null) { getPersonRelationship.RelationshipTypeId = relationshipType; var updatedRelationship = await registerPersonService.UpdatePersonRelationship(getPersonRelationship); } else { //Add PersonRelationship var personRelationship = await registerPersonService.addPersonRelationship(partnetPersonIdentifiers[0].PersonId, indexClient.Id, relationshipType, providerId); } } else { //Register Partner var person = await registerPersonService.RegisterPerson(firstName, middleName, lastName, sex, providerId, clientFacility.FacilityID, dateOfBirth); //Add afyamobile Id as an Id of the partner var personIdentifier = await registerPersonService.addPersonIdentifiers(person.Id, 10, afyaMobileId, providerId); //Add partner marital status var partnerMaritalStatus = await registerPersonService.AddMaritalStatus(person.Id, maritalStatusId, providerId); //add partner contacts if (!string.IsNullOrWhiteSpace(mobileNumber)) { var partnerContacts = await registerPersonService.addPersonContact(person.Id, null, mobileNumber, null, null, providerId); } //add partner location if (!string.IsNullOrWhiteSpace(landmark) || (countyId > 0) || (subCountyId > 0) || (wardId > 0)) { landmark = string.IsNullOrWhiteSpace(landmark) ? "" : landmark; var partnerLocation = await registerPersonService.addPersonLocation(person.Id, countyId, subCountyId, wardId, " ", landmark, providerId); } //Add PersonRelationship var personRelationship = await registerPersonService.addPersonRelationship(person.Id, indexClient.Id, relationshipType, providerId); } } else { //update message has been processed await registerPersonService.UpdateAfyaMobileInbox(afyaMobileMessage.Id, afyaMobileId, true, DateTime.Now, $"Index clientid: {indexClientAfyaMobileId} for familyid: {afyaMobileId} not found", false); return(Result <string> .Invalid($"Index clientid: {indexClientAfyaMobileId} for familyid: {afyaMobileId} not found")); } //update message has been processed await registerPersonService.UpdateAfyaMobileInbox(afyaMobileMessage.Id, afyaMobileId, true, DateTime.Now, "success", true); } trans.Commit(); return(Result <string> .Valid($"Successfully synchronized family: {afyaMobileId}")); } catch (Exception ex) { trans.Rollback(); Log.Error($"Failed to synchronize family: {afyaMobileId} for clientid: {indexClientAfyaMobileId} " + ex.Message + " " + ex.InnerException); return(Result <string> .Invalid($"Failed to synchronize family: {afyaMobileId} for clientid: {indexClientAfyaMobileId} " + ex.Message + " " + ex.InnerException)); } } }
public async Task <Result <string> > Handle(SynchronizePartnersCommand request, CancellationToken cancellationToken) { using (_htsUnitOfWork) using (_unitOfWork) { string afyaMobileId = string.Empty; string indexClientAfyaMobileId = string.Empty; RegisterPersonService registerPersonService = new RegisterPersonService(_unitOfWork); EncounterTestingService encounterTestingService = new EncounterTestingService(_unitOfWork, _htsUnitOfWork); var facilityId = request.MESSAGE_HEADER.SENDING_FACILITY; for (int i = 0; i < request.PARTNERS.Count; i++) { for (int j = 0; j < request.PARTNERS[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID.Count; j++) { if (request.PARTNERS[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].IDENTIFIER_TYPE == "AFYA_MOBILE_ID") { afyaMobileId = request.PARTNERS[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].ID; } if (request.PARTNERS[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].IDENTIFIER_TYPE == "INDEX_CLIENT_AFYAMOBILE_ID") { indexClientAfyaMobileId = request.PARTNERS[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].ID; } } var afyaMobileMessage = await registerPersonService.AddAfyaMobileInbox(DateTime.Now, request.MESSAGE_HEADER.MESSAGE_TYPE, indexClientAfyaMobileId, JsonConvert.SerializeObject(request), false); try { string firstName = request.PARTNERS[i].PATIENT_IDENTIFICATION.PATIENT_NAME.FIRST_NAME; string middleName = request.PARTNERS[i].PATIENT_IDENTIFICATION.PATIENT_NAME.MIDDLE_NAME; string lastName = request.PARTNERS[i].PATIENT_IDENTIFICATION.PATIENT_NAME.LAST_NAME; int sex = request.PARTNERS[i].PATIENT_IDENTIFICATION.SEX; DateTime dateOfBirth = DateTime.ParseExact(request.PARTNERS[i].PATIENT_IDENTIFICATION.DATE_OF_BIRTH, "yyyyMMdd", null); int providerId = request.PARTNERS[i].PATIENT_IDENTIFICATION.USER_ID; int maritalStatusId = request.PARTNERS[i].PATIENT_IDENTIFICATION.MARITAL_STATUS; string mobileNumber = request.PARTNERS[i].PATIENT_IDENTIFICATION.PHONE_NUMBER; string landmark = request.PARTNERS[i].PATIENT_IDENTIFICATION.PATIENT_ADDRESS.PHYSICAL_ADDRESS .LANDMARK; int relationshipType = request.PARTNERS[i].PATIENT_IDENTIFICATION.RELATIONSHIP_TYPE; Facility clientFacility = await _unitOfWork.Repository <Facility>().Get(x => x.PosID == facilityId).FirstOrDefaultAsync(); if (clientFacility == null) { clientFacility = await _unitOfWork.Repository <Facility>().Get(x => x.DeleteFlag == 0).FirstOrDefaultAsync(); } var indexClientIdentifiers = await registerPersonService.getPersonIdentifiers(indexClientAfyaMobileId, 10); if (indexClientIdentifiers.Count > 0) { //Get Index client var indexClient = await registerPersonService.GetPatientByPersonId(indexClientIdentifiers[0].PersonId); var partnetPersonIdentifiers = await registerPersonService.getPersonIdentifiers(afyaMobileId, 10); if (partnetPersonIdentifiers.Count > 0) { await registerPersonService.UpdatePerson(partnetPersonIdentifiers[0].PersonId, firstName, middleName, lastName, sex, dateOfBirth, clientFacility.FacilityID); //update maritalstatus id await registerPersonService.UpdateMaritalStatus(partnetPersonIdentifiers[0].PersonId, maritalStatusId); if (!string.IsNullOrWhiteSpace(mobileNumber)) { await registerPersonService.UpdatePersonContact(partnetPersonIdentifiers[0].PersonId, null, mobileNumber); } if (!string.IsNullOrWhiteSpace(landmark)) { await registerPersonService.UpdatePersonLocation(partnetPersonIdentifiers[0].PersonId, landmark); } var getPersonRelationship = await registerPersonService.GetPersonRelationshipByPatientIdPersonId(indexClient.Id, partnetPersonIdentifiers[0].PersonId); if (getPersonRelationship != null) { getPersonRelationship.RelationshipTypeId = relationshipType; var updatedRelationship = await registerPersonService.UpdatePersonRelationship(getPersonRelationship); } else { //Add PersonRelationship var personRelationship = await registerPersonService.addPersonRelationship(partnetPersonIdentifiers[0].PersonId, indexClient.Id, relationshipType, providerId); } /*** * Encounter */ if (request.PARTNERS[i].ENCOUNTER != null) { if (request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING != null) { int pnsAccepted = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.PNS_ACCEPTED; DateTime screeningDate = DateTime.ParseExact(request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.SCREENING_DATE, "yyyyMMdd", null); int ipvScreeningDone = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.IPV_SCREENING_DONE; int hurtByPartner = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.HURT_BY_PARTNER; int threatByPartner = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.THREAT_BY_PARTNER; int sexualAbuseByPartner = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.SEXUAL_ABUSE_BY_PARTNER; int ipvOutcome = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.IPV_OUTCOME; string partnerOccupation = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.PARTNER_OCCUPATION; int partnerRelationship = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.PARTNER_RELATIONSHIP; int livingWithClient = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.LIVING_WITH_CLIENT; int hivStatus = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.HIV_STATUS; int pnsApproach = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.PNS_APPROACH; int eligibleForHts = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.ELIGIBLE_FOR_HTS; DateTime bookingDate = DateTime.ParseExact(request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.BOOKING_DATE, "yyyyMMdd", null); var pnsScreeningOptions = await _unitOfWork.Repository <LookupItemView>() .Get(x => x.MasterName == "PnsScreening").ToListAsync(); List <Screening> newScreenings = new List <Screening>(); for (int j = 0; j < pnsScreeningOptions.Count; j++) { if (pnsScreeningOptions[j].ItemName == "EligibleTesting") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = eligibleForHts }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "PNSApproach") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = pnsApproach }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "HIVStatus") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = hivStatus }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "LivingWithClient") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = livingWithClient }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "PnsRelationship") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = partnerRelationship }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "IPVOutcome") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = ipvOutcome }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "PnsForcedSexual") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = sexualAbuseByPartner }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "PnsThreatenedHurt") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = threatByPartner }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "PnsPhysicallyHurt") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = hurtByPartner }; newScreenings.Add(screening); } } var patientMasterVisitEntity = await _unitOfWork.Repository <PatientMasterVisit>() .Get(x => x.PatientId == indexClient.Id && x.ServiceId == 2).ToListAsync(); int patientMasterVisitId = patientMasterVisitEntity.OrderBy(x => x.Id).FirstOrDefault().Id; var partnHtsScreenings = await encounterTestingService.AddPartnerScreening(partnetPersonIdentifiers[0].PersonId, indexClient.Id, patientMasterVisitId, partnerOccupation, screeningDate, bookingDate, newScreenings, providerId); } var tracingLookup = await _unitOfWork.Repository <LookupItemView>() .Get(x => x.MasterName == "TracingType" && x.ItemName == "Family").ToListAsync(); int tracingType = tracingLookup.FirstOrDefault().ItemId; for (int j = 0; j < request.PARTNERS[i].ENCOUNTER.TRACING.Count; j++) { DateTime tracingDate = DateTime.ParseExact(request.PARTNERS[i].ENCOUNTER.TRACING[j].TRACING_DATE, "yyyyMMdd", null); int mode = request.PARTNERS[i].ENCOUNTER.TRACING[j].TRACING_MODE; int outcome = request.PARTNERS[i].ENCOUNTER.TRACING[j].TRACING_OUTCOME; int consent = request.PARTNERS[i].ENCOUNTER.TRACING[j].CONSENT; DateTime?tracingBookingDate = null; if (!string.IsNullOrWhiteSpace(request.PARTNERS[i].ENCOUNTER.TRACING[j].BOOKING_DATE)) { tracingBookingDate = DateTime.ParseExact(request.PARTNERS[i].ENCOUNTER.TRACING[j].BOOKING_DATE, "yyyyMMdd", null); } int? reasonnotcontacted = request.PARTNERS[i].ENCOUNTER.TRACING[j].REASONNOTCONTACTED; string reasonnotcontactedother = request.PARTNERS[i].ENCOUNTER.TRACING[j].REASONNOTCONTACTEDOTHER; var tracingOutcome = await encounterTestingService.addTracing(partnetPersonIdentifiers[0].PersonId, tracingType, tracingDate, mode, outcome, providerId, null, consent, tracingBookingDate, null, reasonnotcontacted, reasonnotcontactedother); } } // update message as processed await registerPersonService.UpdateAfyaMobileInbox(afyaMobileMessage.Id, indexClientAfyaMobileId, true, DateTime.Now, "success"); } else { //Register Partner var person = await registerPersonService.RegisterPerson(firstName, middleName, lastName, sex, providerId, clientFacility.FacilityID, dateOfBirth); //Add afyamobile Id as an Id of the partner var personIdentifier = await registerPersonService.addPersonIdentifiers(person.Id, 10, afyaMobileId, providerId); //Add partner marital status var partnerMaritalStatus = await registerPersonService.AddMaritalStatus(person.Id, maritalStatusId, providerId); //add partner contacts if (!string.IsNullOrWhiteSpace(mobileNumber)) { var partnerContacts = await registerPersonService.addPersonContact(person.Id, null, mobileNumber, null, null, providerId); } //add partner location if (!string.IsNullOrWhiteSpace(landmark)) { var partnerLocation = await registerPersonService.addPersonLocation(person.Id, 0, 0, 0, " ", landmark, providerId); } //Add PersonRelationship var personRelationship = await registerPersonService.addPersonRelationship(person.Id, indexClient.Id, relationshipType, providerId); /*** * Encounter */ if (request.PARTNERS[i].ENCOUNTER != null) { if (request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING != null) { int pnsAccepted = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.PNS_ACCEPTED; DateTime screeningDate = DateTime.ParseExact(request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.SCREENING_DATE, "yyyyMMdd", null); int ipvScreeningDone = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.IPV_SCREENING_DONE; int hurtByPartner = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.HURT_BY_PARTNER; int threatByPartner = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.THREAT_BY_PARTNER; int sexualAbuseByPartner = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.SEXUAL_ABUSE_BY_PARTNER; int ipvOutcome = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.IPV_OUTCOME; string partnerOccupation = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.PARTNER_OCCUPATION; int partnerRelationship = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.PARTNER_RELATIONSHIP; int livingWithClient = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.LIVING_WITH_CLIENT; int hivStatus = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.HIV_STATUS; int pnsApproach = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.PNS_APPROACH; int eligibleForHts = request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.ELIGIBLE_FOR_HTS; DateTime bookingDate = DateTime.ParseExact(request.PARTNERS[i].ENCOUNTER.PARTNER_SCREENING.BOOKING_DATE, "yyyyMMdd", null); var pnsScreeningOptions = await _unitOfWork.Repository <LookupItemView>() .Get(x => x.MasterName == "PnsScreening").ToListAsync(); List <Screening> newScreenings = new List <Screening>(); for (int j = 0; j < pnsScreeningOptions.Count; j++) { if (pnsScreeningOptions[j].ItemName == "EligibleTesting") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = eligibleForHts }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "PNSApproach") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = pnsApproach }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "HIVStatus") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = hivStatus }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "LivingWithClient") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = livingWithClient }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "PnsRelationship") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = partnerRelationship }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "IPVOutcome") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = ipvOutcome }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "PnsForcedSexual") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = sexualAbuseByPartner }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "PnsThreatenedHurt") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = threatByPartner }; newScreenings.Add(screening); } else if (pnsScreeningOptions[j].ItemName == "PnsPhysicallyHurt") { Screening screening = new Screening() { ScreeningCategoryId = pnsScreeningOptions[j].ItemId, ScreeningTypeId = pnsScreeningOptions[j].MasterId, ScreeningValueId = hurtByPartner }; newScreenings.Add(screening); } } var patientMasterVisitEntity = await _unitOfWork.Repository <PatientMasterVisit>() .Get(x => x.PatientId == indexClient.Id && x.ServiceId == 2).ToListAsync(); int patientMasterVisitId = patientMasterVisitEntity.OrderBy(x => x.Id).FirstOrDefault().Id; var partnHtsScreenings = await encounterTestingService.AddPartnerScreening(person.Id, indexClient.Id, patientMasterVisitId, partnerOccupation, screeningDate, bookingDate, newScreenings, providerId); } var tracingLookup = await _unitOfWork.Repository <LookupItemView>() .Get(x => x.MasterName == "TracingType" && x.ItemName == "Family").ToListAsync(); int tracingType = tracingLookup.FirstOrDefault().ItemId; for (int j = 0; j < request.PARTNERS[i].ENCOUNTER.TRACING.Count; j++) { DateTime tracingDate = DateTime.ParseExact(request.PARTNERS[i].ENCOUNTER.TRACING[j].TRACING_DATE, "yyyyMMdd", null); int mode = request.PARTNERS[i].ENCOUNTER.TRACING[j].TRACING_MODE; int outcome = request.PARTNERS[i].ENCOUNTER.TRACING[j].TRACING_OUTCOME; int consent = request.PARTNERS[i].ENCOUNTER.TRACING[j].CONSENT; DateTime?tracingBookingDate = null; if (!string.IsNullOrWhiteSpace(request.PARTNERS[i].ENCOUNTER.TRACING[j].BOOKING_DATE)) { tracingBookingDate = DateTime.ParseExact(request.PARTNERS[i].ENCOUNTER.TRACING[j].BOOKING_DATE, "yyyyMMdd", null); } int? reasonnotContacted = request.PARTNERS[i].ENCOUNTER.TRACING[j].REASONNOTCONTACTED; string reasonnotContactedOther = request.PARTNERS[i].ENCOUNTER.TRACING[j].REASONNOTCONTACTEDOTHER; var tracingOutcome = await encounterTestingService.addTracing(person.Id, tracingType, tracingDate, mode, outcome, providerId, null, consent, tracingBookingDate, null, reasonnotContacted, reasonnotContactedOther); } } } } // update message as processed await registerPersonService.UpdateAfyaMobileInbox(afyaMobileMessage.Id, indexClientAfyaMobileId, true, DateTime.Now, "success"); return(Result <string> .Valid(afyaMobileId)); } catch (Exception e) { Log.Error(e.Message); Log.Error(e.InnerException.ToString()); // update message as processed await registerPersonService.UpdateAfyaMobileInbox(afyaMobileMessage.Id, indexClientAfyaMobileId, false, DateTime.Now, e.Message + " " + e.InnerException.ToString()); return(Result <string> .Invalid(e.Message)); } } return(Result <string> .Valid(afyaMobileId)); } }
public async Task <Result <string> > Handle(SynchronizeFamilyCommand request, CancellationToken cancellationToken) { using (_htsUnitOfWork) using (_unitOfWork) { string afyaMobileId = string.Empty; string indexClientAfyaMobileId = string.Empty; RegisterPersonService registerPersonService = new RegisterPersonService(_unitOfWork); EncounterTestingService encounterTestingService = new EncounterTestingService(_unitOfWork, _htsUnitOfWork); PersonOccupationService pocc = new PersonOccupationService(_unitOfWork); EducationLevelService educationLevelService = new EducationLevelService(_unitOfWork); var facilityId = request.MESSAGE_HEADER.SENDING_FACILITY; for (int i = 0; i < request.FAMILY.Count; i++) { for (int j = 0; j < request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID.Count; j++) { if (request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].IDENTIFIER_TYPE == "AFYA_MOBILE_ID") { afyaMobileId = request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].ID; } if (request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].IDENTIFIER_TYPE == "INDEX_CLIENT_AFYAMOBILE_ID") { indexClientAfyaMobileId = request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].ID; } } var afyaMobileMessage = await registerPersonService.AddAfyaMobileInbox(DateTime.Now, request.MESSAGE_HEADER.MESSAGE_TYPE, indexClientAfyaMobileId, JsonConvert.SerializeObject(request), false); try { string firstName = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_NAME.FIRST_NAME; string middleName = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_NAME.MIDDLE_NAME; string lastName = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_NAME.LAST_NAME; int sex = request.FAMILY[i].PATIENT_IDENTIFICATION.SEX; string nickName = (request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_NAME.NICK_NAME == null) ? "" : request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_NAME.NICK_NAME.ToString(); int ward = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_ADDRESS.PHYSICAL_ADDRESS.WARD; int county = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_ADDRESS.PHYSICAL_ADDRESS.COUNTY; int subcounty = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_ADDRESS.PHYSICAL_ADDRESS.SUB_COUNTY; string educationlevel = (request.FAMILY[i].PATIENT_IDENTIFICATION.EDUCATIONLEVEL == null) ? "" : request.FAMILY[i].PATIENT_IDENTIFICATION.EDUCATIONLEVEL.ToString(); string educationoutcome = (request.FAMILY[i].PATIENT_IDENTIFICATION.EDUCATIONOUTCOME == null) ? "" : request.FAMILY[i].PATIENT_IDENTIFICATION.EDUCATIONOUTCOME.ToString(); string occupation = (request.FAMILY[i].PATIENT_IDENTIFICATION.OCCUPATION == null) ? "" : request.FAMILY[i].PATIENT_IDENTIFICATION.OCCUPATION.ToString(); DateTime dateOfBirth = DateTime.ParseExact(request.FAMILY[i].PATIENT_IDENTIFICATION.DATE_OF_BIRTH, "yyyyMMdd", null); int providerId = request.FAMILY[i].PATIENT_IDENTIFICATION.USER_ID; int maritalStatusId = request.FAMILY[i].PATIENT_IDENTIFICATION.MARITAL_STATUS; string mobileNumber = request.FAMILY[i].PATIENT_IDENTIFICATION.PHONE_NUMBER; string landmark = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_ADDRESS.PHYSICAL_ADDRESS .LANDMARK; int relationshipType = request.FAMILY[i].PATIENT_IDENTIFICATION.RELATIONSHIP_TYPE; int Userid = request.FAMILY[i].PATIENT_IDENTIFICATION.USER_ID; Facility clientFacility = await _unitOfWork.Repository <Facility>().Get(x => x.PosID == facilityId).FirstOrDefaultAsync(); if (clientFacility == null) { clientFacility = await _unitOfWork.Repository <Facility>().Get(x => x.DeleteFlag == 0).FirstOrDefaultAsync(); } var indexClientIdentifiers = await registerPersonService.getPersonIdentifiers(indexClientAfyaMobileId, 10); if (indexClientIdentifiers.Count > 0) { //Get Index client var indexClient = await registerPersonService.GetPatientByPersonId(indexClientIdentifiers[0].PersonId); var partnetPersonIdentifiers = await registerPersonService.getPersonIdentifiers(afyaMobileId, 10); if (partnetPersonIdentifiers.Count > 0) { await registerPersonService.UpdatePerson(partnetPersonIdentifiers[0].PersonId, firstName, middleName, lastName, sex, dateOfBirth, clientFacility.FacilityID, NickName : nickName); //update maritalstatus id await registerPersonService.UpdateMaritalStatus(partnetPersonIdentifiers[0].PersonId, maritalStatusId); if (!string.IsNullOrWhiteSpace(mobileNumber)) { await registerPersonService.UpdatePersonContact(partnetPersonIdentifiers[0].PersonId, null, mobileNumber); } if (!string.IsNullOrWhiteSpace(landmark) || (county > 0) || (subcounty > 0) || (ward > 0)) { var personlocation = await registerPersonService.UpdatePersonLocation(partnetPersonIdentifiers[0].PersonId, landmark, ward, county, subcounty, Userid); } if (!string.IsNullOrWhiteSpace(educationlevel)) { var personeducation = await educationLevelService.UpdatePersonEducation(partnetPersonIdentifiers[0].PersonId, educationlevel, educationoutcome, Userid); } if (!string.IsNullOrWhiteSpace(occupation)) { var personoccupation = await pocc.Update(partnetPersonIdentifiers[0].PersonId, occupation, Userid); } var getPersonRelationship = await registerPersonService.GetPersonRelationshipByPatientIdPersonId(indexClient.Id, partnetPersonIdentifiers[0].PersonId); if (getPersonRelationship != null) { getPersonRelationship.RelationshipTypeId = relationshipType; var updatedRelationship = await registerPersonService.UpdatePersonRelationship(getPersonRelationship); } else { //Add PersonRelationship var personRelationship = await registerPersonService.addPersonRelationship(partnetPersonIdentifiers[0].PersonId, indexClient.Id, relationshipType, providerId); } /*** * Encounter */ if (request.FAMILY[i].ENCOUNTER != null) { if (request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING != null) { DateTime screeningDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.SCREENING_DATE, "yyyyMMdd", null); int hivStatus = request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.HIV_STATUS; int eligible = request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.ELIGIBLE_FOR_HTS; DateTime bookingDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.BOOKING_DATE, "yyyyMMdd", null); string remarks = request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.REMARKS; var familyScreenings = await _unitOfWork.Repository <LookupItemView>().Get(x => x.MasterName == "FamilyScreening") .ToListAsync(); List <Screening> familyScreeningList = new List <Screening>(); for (int j = 0; j < familyScreenings.Count; j++) { if (familyScreenings[j].ItemName == "EligibleTesting") { Screening screening = new Screening() { ScreeningCategoryId = familyScreenings[j].ItemId, ScreeningTypeId = familyScreenings[j].MasterId, ScreeningValueId = eligible }; familyScreeningList.Add(screening); } else if (familyScreenings[j].ItemName == "ScreeningHivStatus") { Screening screening = new Screening() { ScreeningCategoryId = familyScreenings[j].ItemId, ScreeningTypeId = familyScreenings[j].MasterId, ScreeningValueId = hivStatus }; familyScreeningList.Add(screening); } } var patientMasterVisitEntity = await _unitOfWork.Repository <PatientMasterVisit>() .Get(x => x.PatientId == indexClient.Id && x.ServiceId == 2).ToListAsync(); int patientMasterVisitId = patientMasterVisitEntity.OrderBy(x => x.Id).FirstOrDefault().Id; var familyScreeningReturnValue = await encounterTestingService.AddPartnerScreening(partnetPersonIdentifiers[0].PersonId, indexClient.Id, patientMasterVisitId, null, screeningDate, bookingDate, familyScreeningList, providerId); } for (int j = 0; j < request.FAMILY[i].ENCOUNTER.TRACING.Count; j++) { var lookupitem = await _unitOfWork.Repository <LookupItemView>() .Get(x => x.MasterName == "TracingType" && x.ItemName == "Family").ToListAsync(); int tracingType = lookupitem[0].ItemId; DateTime tracingDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.TRACING[j].TRACING_DATE, "yyyyMMdd", null); int mode = request.FAMILY[i].ENCOUNTER.TRACING[j].TRACING_MODE; int outcome = request.FAMILY[i].ENCOUNTER.TRACING[j].TRACING_OUTCOME; DateTime?reminderDate = null; if (!string.IsNullOrWhiteSpace(request.FAMILY[i].ENCOUNTER.TRACING[j].REMINDER_DATE)) { reminderDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.TRACING[j].REMINDER_DATE, "yyyyMMdd", null); } DateTime?tracingBookingDate = null; if (!string.IsNullOrWhiteSpace(request.FAMILY[i].ENCOUNTER.TRACING[j].BOOKING_DATE)) { tracingBookingDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.TRACING[j].BOOKING_DATE, "yyyyMMdd", null); } int consent = request.FAMILY[i].ENCOUNTER.TRACING[j].CONSENT; int? ReasonNotContacted = request.FAMILY[i].ENCOUNTER.TRACING[j].REASONNOTCONTACTED; string reasonnotcontactedOther = request.FAMILY[i].ENCOUNTER.TRACING[j].REASONNOTCONTACTEDOTHER; var trace = await encounterTestingService.addTracing(partnetPersonIdentifiers[0].PersonId, tracingType, tracingDate, mode, outcome, providerId, null, consent, tracingBookingDate, reminderDate, ReasonNotContacted, reasonnotcontactedOther); } } } else { //Register family var person = await registerPersonService.RegisterPerson(firstName, middleName, lastName, sex, providerId, clientFacility.FacilityID, dateOfBirth, nickName : nickName); //Add afyamobile Id as an Id of the family var personIdentifier = await registerPersonService.addPersonIdentifiers(person.Id, 10, afyaMobileId, providerId); //Add family marital status var partnerMaritalStatus = await registerPersonService.AddMaritalStatus(person.Id, maritalStatusId, providerId); //add family contacts if (string.IsNullOrWhiteSpace(mobileNumber)) { var partnerContacts = await registerPersonService.addPersonContact(person.Id, null, mobileNumber, null, null, providerId); } //add family location /* if (!string.IsNullOrWhiteSpace(landmark)) * { * var partnerLocation = await registerPersonService.addPersonLocation(person.Id, 0, 0, 0, "", landmark, providerId); * }*/ if (!string.IsNullOrWhiteSpace(landmark) || (county > 0) || (subcounty > 0) || (ward > 0)) { var partnerLocation = await registerPersonService.UpdatePersonLocation(person.Id, landmark, ward, county, subcounty, Userid); } if (!string.IsNullOrWhiteSpace(educationlevel)) { var partnereducation = await educationLevelService.UpdatePersonEducation(person.Id, educationlevel, educationoutcome, Userid); } if (!string.IsNullOrWhiteSpace(occupation)) { var partneroccupation = await pocc.Update(person.Id, occupation, Userid); } //Add PersonRelationship var personRelationship = await registerPersonService.addPersonRelationship(person.Id, indexClient.Id, relationshipType, providerId); /*** * Encounter */ if (request.FAMILY[i].ENCOUNTER != null) { if (request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING != null) { DateTime screeningDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.SCREENING_DATE, "yyyyMMdd", null); int hivStatus = request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.HIV_STATUS; int eligible = request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.ELIGIBLE_FOR_HTS; DateTime bookingDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.BOOKING_DATE, "yyyyMMdd", null); string remarks = request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.REMARKS; var familyScreenings = await _unitOfWork.Repository <LookupItemView>().Get(x => x.MasterName == "FamilyScreening") .ToListAsync(); List <Screening> familyScreeningList = new List <Screening>(); for (int j = 0; j < familyScreenings.Count; j++) { if (familyScreenings[j].ItemName == "EligibleTesting") { Screening screening = new Screening() { ScreeningCategoryId = familyScreenings[j].ItemId, ScreeningTypeId = familyScreenings[j].MasterId, ScreeningValueId = eligible }; familyScreeningList.Add(screening); } else if (familyScreenings[j].ItemName == "ScreeningHivStatus") { Screening screening = new Screening() { ScreeningCategoryId = familyScreenings[j].ItemId, ScreeningTypeId = familyScreenings[j].MasterId, ScreeningValueId = hivStatus }; familyScreeningList.Add(screening); } } var patientMasterVisitEntity = await _unitOfWork.Repository <PatientMasterVisit>() .Get(x => x.PatientId == indexClient.Id && x.ServiceId == 2).ToListAsync(); int patientMasterVisitId = patientMasterVisitEntity.OrderBy(x => x.Id).FirstOrDefault().Id; var familyScreeningReturnValue = await encounterTestingService.AddPartnerScreening(person.Id, indexClient.Id, patientMasterVisitId, null, screeningDate, bookingDate, familyScreeningList, providerId); } for (int j = 0; j < request.FAMILY[i].ENCOUNTER.TRACING.Count; j++) { var lookupitem = await _unitOfWork.Repository <LookupItemView>() .Get(x => x.MasterName == "TracingType" && x.ItemName == "Family").ToListAsync(); int tracingType = lookupitem[0].ItemId; DateTime tracingDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.TRACING[j].TRACING_DATE, "yyyyMMdd", null); int mode = request.FAMILY[i].ENCOUNTER.TRACING[j].TRACING_MODE; int outcome = request.FAMILY[i].ENCOUNTER.TRACING[j].TRACING_OUTCOME; DateTime?reminderDate = null; if (!string.IsNullOrWhiteSpace(request.FAMILY[i].ENCOUNTER.TRACING[j].REMINDER_DATE)) { reminderDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.TRACING[j].REMINDER_DATE, "yyyyMMdd", null); } DateTime?tracingBookingDate = null; if (!string.IsNullOrWhiteSpace(request.FAMILY[i].ENCOUNTER.TRACING[j].BOOKING_DATE)) { tracingBookingDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.TRACING[j].BOOKING_DATE, "yyyyMMdd", null); } int consent = request.FAMILY[i].ENCOUNTER.TRACING[j].CONSENT; int? reasonnotcontacted = request.FAMILY[i].ENCOUNTER.TRACING[j].REASONNOTCONTACTED; string reasonnotcontactedother = request.FAMILY[i].ENCOUNTER.TRACING[j].REASONNOTCONTACTEDOTHER; var trace = await encounterTestingService.addTracing(person.Id, tracingType, tracingDate, mode, outcome, providerId, null, consent, tracingBookingDate, reminderDate, reasonnotcontacted, reasonnotcontactedother); } } } } // update message as processed await registerPersonService.UpdateAfyaMobileInbox(afyaMobileMessage.Id, indexClientAfyaMobileId, true, DateTime.Now, "success"); return(Result <string> .Valid(afyaMobileId)); } catch (Exception e) { Log.Error(e.Message); Log.Error(e.InnerException.ToString()); // update message as processed await registerPersonService.UpdateAfyaMobileInbox(afyaMobileMessage.Id, indexClientAfyaMobileId, false, DateTime.Now, e.Message + " " + e.InnerException.ToString()); return(Result <string> .Invalid(e.Message)); } } return(Result <string> .Valid(afyaMobileId)); } }
public async Task <Result <PersonRegistrationResponse> > Handle(PersonRegistrationCommand request, CancellationToken cancellationToken) { try { Client c = new Client(); c.FirstName = request.Person.FirstName; c.LastName = request.Person.LastName; c.MiddleName = request.Person.MiddleName; c.LastName = request.Person.LastName; c.MaritalStatus = request.Person.MaritalStatus; c.Sex = request.Person.Sex; c.PersonId = request.Person.PersonId; c.CreatedBy = request.Person.CreatedBy; c.DateOfBirth = request.Person.DateOfBirth; c.DobPrecision = request.Person.DobPrecision; RegisterPersonService rs = new RegisterPersonService(_unitOfWork); int PerId; if (!String.IsNullOrEmpty(c.PersonId.ToString())) { PerId = Convert.ToInt32(c.PersonId.ToString()); if (PerId > 0) { var result = await Task.Run(() => rs.UpdatePerson(PerId, c.FirstName, c.MiddleName, c.LastName, c.Sex, c.CreatedBy, c.DateOfBirth, c.DobPrecision)); PId = result.Id; msg = String.Format("Person with the PersonId: {0} updated successfully", PId); var _marStatus = await Task.Run(() => rs.GetFirstPatientMaritalStatus(PerId)); if (_marStatus != null && c.MaritalStatus > 0) { //_marStatus.DeleteFlag = true; var maritalStatus = await Task.Run(() => rs.UpdateMaritalStatus(_marStatus)); // var finalupdatestatus = await Task.Run(() => rs.AddMaritalStatus(PerId, c.MaritalStatus, c.CreatedBy)); if (maritalStatus != null) { msg += "PersonMaritalStatus Updated Successfully"; } } else if (_marStatus != null && c.MaritalStatus == 0) { _marStatus.DeleteFlag = true; var maritalStatus = await Task.Run(() => rs.UpdateMaritalStatus(_marStatus)); if (maritalStatus.DeleteFlag == true) { msg += "Person MaritalStatus Updated Successfully"; } } else { if (c.MaritalStatus > 0) { var finalupdatestatus = await Task.Run(() => rs.AddMaritalStatus(PerId, c.MaritalStatus, c.CreatedBy)); if (finalupdatestatus != null) { msg += "PersonMaritalStatus Added Successfully!"; } } } } } else { var reg = rs.RegisterPerson(c.FirstName, c.MiddleName, c.LastName, c.Sex, c.DateOfBirth, c.CreatedBy, c.DobPrecision); if (reg != null && reg.Id > 0) { int perId = reg.Id; PId = reg.Id; msg += String.Format("New Person Added Successsfully:PersonId=>,{0}", reg.Id); if (c.MaritalStatus > 0) { var mar = rs.AddMaritalStatus(perId, c.MaritalStatus, c.CreatedBy); if (mar != null) { msg += "Person Marital Status added successfully"; } } } } _unitOfWork.Dispose(); return(Result <PersonRegistrationResponse> .Valid(new PersonRegistrationResponse { PersonId = PId, Message = msg })); } catch (Exception e) { // msg = e.Message; return(Result <PersonRegistrationResponse> .Invalid(e.Message)); } }
public async Task <Result <string> > Handle(SynchronizeFamilyCommand request, CancellationToken cancellationToken) { using (_htsUnitOfWork) using (_unitOfWork) { try { string afyaMobileId = string.Empty; string indexClientAfyaMobileId = string.Empty; RegisterPersonService registerPersonService = new RegisterPersonService(_unitOfWork); EncounterTestingService encounterTestingService = new EncounterTestingService(_unitOfWork, _htsUnitOfWork); var facilityId = request.MESSAGE_HEADER.SENDING_FACILITY; for (int i = 0; i < request.FAMILY.Count; i++) { for (int j = 0; j < request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID.Count; j++) { if (request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].IDENTIFIER_TYPE == "AFYA_MOBILE_ID") { afyaMobileId = request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].ID; } if (request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].IDENTIFIER_TYPE == "INDEX_CLIENT_AFYAMOBILE_ID") { indexClientAfyaMobileId = request.FAMILY[i].PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID[j].ID; } } string firstName = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_NAME.FIRST_NAME; string middleName = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_NAME.MIDDLE_NAME; string lastName = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_NAME.LAST_NAME; int sex = request.FAMILY[i].PATIENT_IDENTIFICATION.SEX; DateTime dateOfBirth = DateTime.ParseExact(request.FAMILY[i].PATIENT_IDENTIFICATION.DATE_OF_BIRTH, "yyyyMMdd", null); int providerId = request.FAMILY[i].PATIENT_IDENTIFICATION.USER_ID; int maritalStatusId = request.FAMILY[i].PATIENT_IDENTIFICATION.MARITAL_STATUS; string mobileNumber = request.FAMILY[i].PATIENT_IDENTIFICATION.PHONE_NUMBER; string landmark = request.FAMILY[i].PATIENT_IDENTIFICATION.PATIENT_ADDRESS.PHYSICAL_ADDRESS .LANDMARK; int relationshipType = request.FAMILY[i].PATIENT_IDENTIFICATION.RELATIONSHIP_TYPE; var indexClientIdentifiers = await registerPersonService.getPersonIdentifiers(indexClientAfyaMobileId, 10); if (indexClientIdentifiers.Count > 0) { //Get Index client var indexClient = await registerPersonService.GetPatientByPersonId(indexClientIdentifiers[0].PersonId); var partnetPersonIdentifiers = await registerPersonService.getPersonIdentifiers(afyaMobileId, 10); if (partnetPersonIdentifiers.Count > 0) { await registerPersonService.UpdatePerson(partnetPersonIdentifiers[0].PersonId, firstName, middleName, lastName, sex, dateOfBirth); //update maritalstatus id await registerPersonService.UpdateMaritalStatus(partnetPersonIdentifiers[0].PersonId, maritalStatusId); if (!string.IsNullOrWhiteSpace(mobileNumber)) { await registerPersonService.UpdatePersonContact(partnetPersonIdentifiers[0].PersonId, null, mobileNumber); } if (!string.IsNullOrWhiteSpace(landmark)) { await registerPersonService.UpdatePersonLocation(partnetPersonIdentifiers[0].PersonId, landmark); } var getPersonRelationship = await registerPersonService.GetPersonRelationshipByPatientIdPersonId(indexClient.Id, partnetPersonIdentifiers[0].PersonId); if (getPersonRelationship != null) { getPersonRelationship.RelationshipTypeId = relationshipType; var updatedRelationship = await registerPersonService.UpdatePersonRelationship(getPersonRelationship); } else { //Add PersonRelationship var personRelationship = await registerPersonService.addPersonRelationship(partnetPersonIdentifiers[0].PersonId, indexClient.Id, relationshipType, providerId); } /*** * Encounter */ if (request.FAMILY[i].ENCOUNTER != null) { if (request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING != null) { DateTime screeningDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.SCREENING_DATE, "yyyyMMdd", null); int hivStatus = request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.HIV_STATUS; int eligible = request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.ELIGIBLE_FOR_HTS; DateTime bookingDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.BOOKING_DATE, "yyyyMMdd", null); string remarks = request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.REMARKS; var familyScreenings = await _unitOfWork.Repository <LookupItemView>().Get(x => x.MasterName == "FamilyScreening") .ToListAsync(); List <Screening> familyScreeningList = new List <Screening>(); for (int j = 0; j < familyScreenings.Count; j++) { if (familyScreenings[j].ItemName == "EligibleTesting") { Screening screening = new Screening() { ScreeningCategoryId = familyScreenings[j].ItemId, ScreeningTypeId = familyScreenings[j].MasterId, ScreeningValueId = eligible }; familyScreeningList.Add(screening); } else if (familyScreenings[j].ItemName == "ScreeningHivStatus") { Screening screening = new Screening() { ScreeningCategoryId = familyScreenings[j].ItemId, ScreeningTypeId = familyScreenings[j].MasterId, ScreeningValueId = hivStatus }; familyScreeningList.Add(screening); } } var patientMasterVisitEntity = await _unitOfWork.Repository <PatientMasterVisit>() .Get(x => x.PatientId == indexClient.Id && x.ServiceId == 2).ToListAsync(); int patientMasterVisitId = patientMasterVisitEntity.OrderBy(x => x.Id).FirstOrDefault().Id; var familyScreeningReturnValue = await encounterTestingService.AddPartnerScreening(partnetPersonIdentifiers[0].PersonId, indexClient.Id, patientMasterVisitId, null, screeningDate, bookingDate, familyScreeningList, providerId); } for (int j = 0; j < request.FAMILY[i].ENCOUNTER.TRACING.Count; j++) { var lookupitem = await _unitOfWork.Repository <LookupItemView>() .Get(x => x.MasterName == "TracingType" && x.ItemName == "Family").ToListAsync(); int tracingType = lookupitem[0].ItemId; DateTime tracingDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.TRACING[j].TRACING_DATE, "yyyyMMdd", null); int mode = request.FAMILY[i].ENCOUNTER.TRACING[j].TRACING_MODE; int outcome = request.FAMILY[i].ENCOUNTER.TRACING[j].TRACING_OUTCOME; DateTime?reminderDate = null; if (!string.IsNullOrWhiteSpace(request.FAMILY[i].ENCOUNTER.TRACING[j].REMINDER_DATE)) { reminderDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.TRACING[j].REMINDER_DATE, "yyyyMMdd", null); } DateTime?tracingBookingDate = null; if (!string.IsNullOrWhiteSpace(request.FAMILY[i].ENCOUNTER.TRACING[j].BOOKING_DATE)) { tracingBookingDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.TRACING[j].BOOKING_DATE, "yyyyMMdd", null); } int consent = request.FAMILY[i].ENCOUNTER.TRACING[j].CONSENT; var trace = await encounterTestingService.addTracing(partnetPersonIdentifiers[0].PersonId, tracingType, tracingDate, mode, outcome, providerId, null, consent, tracingBookingDate, reminderDate); } } } else { //Register family var person = await registerPersonService.RegisterPerson(firstName, middleName, lastName, sex, dateOfBirth, providerId); //Add afyamobile Id as an Id of the family var personIdentifier = await registerPersonService.addPersonIdentifiers(person.Id, 10, afyaMobileId, providerId); //Add family marital status var partnerMaritalStatus = await registerPersonService.AddMaritalStatus(person.Id, maritalStatusId, providerId); //add family contacts if (string.IsNullOrWhiteSpace(mobileNumber)) { var partnerContacts = await registerPersonService.addPersonContact(person.Id, null, mobileNumber, null, null, providerId); } //add family location if (!string.IsNullOrWhiteSpace(landmark)) { var partnerLocation = await registerPersonService.addPersonLocation(person.Id, 0, 0, 0, null, landmark, providerId); } //Add PersonRelationship var personRelationship = await registerPersonService.addPersonRelationship(person.Id, indexClient.Id, relationshipType, providerId); /*** * Encounter */ if (request.FAMILY[i].ENCOUNTER != null) { if (request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING != null) { DateTime screeningDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.SCREENING_DATE, "yyyyMMdd", null); int hivStatus = request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.HIV_STATUS; int eligible = request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.ELIGIBLE_FOR_HTS; DateTime bookingDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.BOOKING_DATE, "yyyyMMdd", null); string remarks = request.FAMILY[i].ENCOUNTER.FAMILY_SCREENING.REMARKS; var familyScreenings = await _unitOfWork.Repository <LookupItemView>().Get(x => x.MasterName == "FamilyScreening") .ToListAsync(); List <Screening> familyScreeningList = new List <Screening>(); for (int j = 0; j < familyScreenings.Count; j++) { if (familyScreenings[j].ItemName == "EligibleTesting") { Screening screening = new Screening() { ScreeningCategoryId = familyScreenings[j].ItemId, ScreeningTypeId = familyScreenings[j].MasterId, ScreeningValueId = eligible }; familyScreeningList.Add(screening); } else if (familyScreenings[j].ItemName == "ScreeningHivStatus") { Screening screening = new Screening() { ScreeningCategoryId = familyScreenings[j].ItemId, ScreeningTypeId = familyScreenings[j].MasterId, ScreeningValueId = hivStatus }; familyScreeningList.Add(screening); } } var patientMasterVisitEntity = await _unitOfWork.Repository <PatientMasterVisit>() .Get(x => x.PatientId == indexClient.Id && x.ServiceId == 2).ToListAsync(); int patientMasterVisitId = patientMasterVisitEntity.OrderBy(x => x.Id).FirstOrDefault().Id; var familyScreeningReturnValue = await encounterTestingService.AddPartnerScreening(person.Id, indexClient.Id, patientMasterVisitId, null, screeningDate, bookingDate, familyScreeningList, providerId); } for (int j = 0; j < request.FAMILY[i].ENCOUNTER.TRACING.Count; j++) { var lookupitem = await _unitOfWork.Repository <LookupItemView>() .Get(x => x.MasterName == "TracingType" && x.ItemName == "Family").ToListAsync(); int tracingType = lookupitem[0].ItemId; DateTime tracingDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.TRACING[j].TRACING_DATE, "yyyyMMdd", null); int mode = request.FAMILY[i].ENCOUNTER.TRACING[j].TRACING_MODE; int outcome = request.FAMILY[i].ENCOUNTER.TRACING[j].TRACING_OUTCOME; DateTime?reminderDate = null; if (!string.IsNullOrWhiteSpace(request.FAMILY[i].ENCOUNTER.TRACING[j].REMINDER_DATE)) { reminderDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.TRACING[j].REMINDER_DATE, "yyyyMMdd", null); } DateTime?tracingBookingDate = null; if (!string.IsNullOrWhiteSpace(request.FAMILY[i].ENCOUNTER.TRACING[j].BOOKING_DATE)) { tracingBookingDate = DateTime.ParseExact(request.FAMILY[i].ENCOUNTER.TRACING[j].BOOKING_DATE, "yyyyMMdd", null); } int consent = request.FAMILY[i].ENCOUNTER.TRACING[j].CONSENT; var trace = await encounterTestingService.addTracing(person.Id, tracingType, tracingDate, mode, outcome, providerId, null, consent, tracingBookingDate, reminderDate); } } } } } return(Result <string> .Valid(afyaMobileId)); } catch (Exception e) { return(Result <string> .Invalid(e.Message)); } } }