public async Task <Response> Save(AnalysisRequestModel request) { _logger.LogDebug($"Analysis Request received from Billing.\n{JsonConvert.SerializeObject(request, Formatting.Indented)}"); //check for the presence of VALID userid of the user who accepted the sample if (request.Request.SampleReceivedBy == 0 || request.Request.SampleReceivedBy == 1 || request.Request.SampleReceivedBy == 2 || request.Request.SampleReceivedBy == 3) { return(new Response() { Status = 304, Message = "Required parameter not provided or invalid. [SampleReceivedBy:int]" }); } _logger.LogDebug("Building Analysis Request"); var insertAR = new AnalysisRequestDataModel() { EpisodeNumber = request.Request.MemoNumber, Cin = DeriveSampleNo(request.Patient), SiteId = request.Request.SiteId, SampleCollectionDate = GetDatetimeFromTicks(request.Request.SampleCollectedAt), SampleReceivedDate = GetDatetimeFromTicks(request.Request.SampleReceivedAt), NationalIdPassport = request.Patient.NidPp, Fullname = request.Patient.Fullname, Birthdate = GetDatetimeFromTicks(request.Patient.Birthdate), Age = request.Patient.Age, AtollId = request.Patient.AtollId, Address = request.Patient.Address, GenderId = request.Patient.GenderId, PhoneNumber = request.Patient.PhoneNumber, CountryId = request.Patient.NationalityId, Tests = new List <TestsModel>(), ClinicalDetails = new List <ClinicalDetailsSelectionModel>() }; //try parsing patient Id var isPatientIdLong = long.TryParse(request.Patient.PatientId, out var longPatientId); if (isPatientIdLong) { insertAR.InstituteAssignedPatientId = longPatientId; _logger.LogInformation($"Patient Id successfully parsed as long. Patient Id: {longPatientId}"); } if (!isPatientIdLong) { _logger.LogError($"Invalid patient Id. Expected to be numeric long. Actual: {request.Patient.PatientId}"); } var UnmappedTestCodesExist = false; _logger.LogDebug("Mapping analyses"); foreach (var item in request.Analyses.RequestedTests) { var cd4Tests = GetTestIdFromBillingCode(item); if (cd4Tests is null) { _logger.LogWarning($"Billing TestCode: {item} not mapped to any CD4 TestCodes"); UnmappedTestCodesExist = true; continue; } if (cd4Tests.Count == 0) { _logger.LogWarning($"Billing TestCode: {item} not mapped to any CD4 TestCodes"); UnmappedTestCodesExist = true; continue; } insertAR.Tests.AddRange(cd4Tests); _logger.LogDebug($"Billing TestCode: {item} mapped to test(s): {JsonConvert.SerializeObject(cd4Tests)}"); } _logger.LogDebug("Mapping analyses completed"); if (request.Analyses.RequestedTests.Count > 0 && insertAR.Tests.Count == 0) { _logger.LogInformation("Response code 500 with message None of the test codes are mapped. Analysis request not inserted to CD4"); return(new Response() { Status = 500, Message = "None of the test codes are mapped. Analysis request not inserted to CD4" }); } try { _logger.LogDebug("Calling datalayer for inserting/updating analysis request"); await _analysisRequestDataAccess.ConfirmRequestAsync(insertAR, 2); //ToDo: insert the person who received / accepted the sample await _ndaTrackingDataAccess.UpsertSampleReceivedUserIdAsync(insertAR.Cin, request.Request.SampleReceivedBy, 2); //insert the sample accepted date and time if required. if (DecideToMarkSampleAsAccepted(insertAR)) { _logger.LogInformation("Inserting sample accepted date and time"); await _statusDataAccess.SetSampleAcceptedTimeReceivedFromBilling (insertAR.Cin, insertAR.SampleReceivedDate.Value.ToString("yyyy-MM-dd HH:mm:ss")); } if (UnmappedTestCodesExist) { _logger.LogDebug("Response code 201 with message Some unmapped tests / profiles not inserted to CD4."); return(new Response() { Status = 201, Message = "Some unmapped tests / profiles not inserted to CD4." }); } _logger.LogDebug("Response code 200 with message success."); return(new Response() { Status = 200, Message = "Success" }); } catch (Exception ex) { _logger.LogDebug($"Response code 500 with message {ex.Message}."); return(new Response() { Status = 500, Message = ex.Message }); } }
public override async Task <Response> Save(AnalysisRequestModel request, ServerCallContext context) { _logger.LogDebug($"Analysis Request received from Billing.\n{JsonConvert.SerializeObject(request, Formatting.Indented)}"); _logger.LogDebug("Building Analysis Request"); var insertAR = new AnalysisRequestDataModel() { EpisodeNumber = request.Request.MemoNumber, Cin = request.Request.SampleId, SiteId = request.Request.SiteId, SampleCollectionDate = GetDatetimeFromTicks(request.Request.SampleCollectedDateTime), SampleReceivedDate = GetDatetimeFromTicks(request.Request.SampleReceivedDateTime), NationalIdPassport = request.Patient.NidPp, Fullname = request.Patient.Fullname, Birthdate = GetDatetimeFromTicks(request.Patient.Birthdate), Age = request.Patient.Age, AtollId = request.Patient.AtollId, Address = request.Patient.Address, GenderId = request.Patient.GenderId, PhoneNumber = request.Patient.PhoneNumber, CountryId = request.Patient.Nationality, Tests = new List <TestsModel>(), ClinicalDetails = new List <ClinicalDetailsSelectionModel>() }; var UnmappedTestCodesExist = false; _logger.LogDebug("Mapping analyses"); foreach (var item in request.Tests.AnalysisId) { var cd4Tests = GetTestIdFromBillingCode(item); if (cd4Tests is null) { _logger.LogWarning($"Billing TestCode: {item} not mapped to any CD4 TestCodes"); UnmappedTestCodesExist = true; continue; } if (cd4Tests.Count == 0) { _logger.LogWarning($"Billing TestCode: {item} not mapped to any CD4 TestCodes"); UnmappedTestCodesExist = true; continue; } insertAR.Tests.AddRange(cd4Tests); _logger.LogDebug($"Billing TestCode: {item} mapped to test(s): {JsonConvert.SerializeObject(cd4Tests)}"); } _logger.LogDebug("Mapping analyses completed"); if (request.Tests.AnalysisId.Count > 0 && insertAR.Tests.Count == 0) { _logger.LogInformation("Response code 500 with message None of the test codes are mapped. Analysis request not inserted to CD4"); return(new Response() { Status = 500, Message = "None of the test codes are mapped. Analysis request not inserted to CD4" }); } try { _logger.LogDebug("Calling datalayer for inserting/updating analysis request"); await _analysisRequestDataAccess.ConfirmRequestAsync(insertAR, 1); //insert the sample accepted date and time if required. if (DecideToMarkSampleAsAccepted(insertAR)) { _logger.LogInformation("Inserting sample accepted date and time"); await _statusDataAccess.SetSampleAcceptedTimeReceivedFromBilling (insertAR.Cin, insertAR.SampleReceivedDate.Value.ToString("yyyy-MM-dd HH:mm:ss")); } if (UnmappedTestCodesExist) { _logger.LogDebug("Response code 201 with message Some unmapped tests / profiles not inserted to CD4."); return(new Response() { Status = 201, Message = "Some unmapped tests / profiles not inserted to CD4." }); } _logger.LogDebug("Response code 200 with message success."); return(new Response() { Status = 200, Message = "Success" }); } catch (Exception ex) { _logger.LogDebug($"Response code 500 with message {ex.Message}."); return(new Response() { Status = 500, Message = ex.Message }); } }