public void SendLabResult(LabResultViewModel labResult) { var observation = CreateLabResultResource(labResult); var result = FhirClientObj.Create <Observation>(observation); UpdateProcedureByProcedureId(labResult.ProcedureId); }
void DeleteLabResultExecute(LabResultViewModel resultVM) { if (LabResultCollection == null) { return; } string caseGuid = resultVM.CaseRecordGuid; string labGuid = resultVM.RecordId; LabResultCollection.Remove(resultVM); Query deleteQuery = Database.CreateQuery("DELETE * FROM " + LabForm.TableName + " WHERE GlobalRecordId = @GUID"); if (Database.ToString().ToLower().Contains("sql")) { deleteQuery = Database.CreateQuery("DELETE FROM " + LabForm.TableName + " WHERE GlobalRecordId = @GUID"); } deleteQuery.Parameters.Add(new QueryParameter("@GUID", DbType.String, labGuid)); Database.ExecuteNonQuery(deleteQuery); foreach (Epi.Page page in LabForm.Pages) { deleteQuery = Database.CreateQuery("DELETE * FROM " + page.TableName + " WHERE GlobalRecordId = @GUID"); if (Database.ToString().ToLower().Contains("sql")) { deleteQuery = Database.CreateQuery("DELETE FROM " + page.TableName + " WHERE GlobalRecordId = @GUID"); } deleteQuery.Parameters.Add(new QueryParameter("@GUID", DbType.String, labGuid)); Database.ExecuteNonQuery(deleteQuery); } Query selectQuery = Database.CreateQuery("SELECT FKEY FROM " + LabForm.TableName + " WHERE FKEY = @GUID"); selectQuery.Parameters.Add(new QueryParameter("@GUID", DbType.String, caseGuid)); DataTable dt = Database.Select(selectQuery); if (dt.Rows.Count == 0) { deleteQuery = Database.CreateQuery("DELETE * FROM " + CaseForm.TableName + " WHERE GlobalRecordId = @GUID"); if (Database.ToString().ToLower().Contains("sql")) { deleteQuery = Database.CreateQuery("DELETE FROM " + CaseForm.TableName + " WHERE GlobalRecordId = @GUID"); } deleteQuery.Parameters.Add(new QueryParameter("@GUID", DbType.String, caseGuid)); Database.ExecuteNonQuery(deleteQuery); foreach (Epi.Page page in CaseForm.Pages) { deleteQuery = Database.CreateQuery("DELETE * FROM " + page.TableName + " WHERE GlobalRecordId = @GUID"); if (Database.ToString().ToLower().Contains("sql")) { deleteQuery = Database.CreateQuery("DELETE FROM " + page.TableName + " WHERE GlobalRecordId = @GUID"); } deleteQuery.Parameters.Add(new QueryParameter("@GUID", DbType.String, caseGuid)); Database.ExecuteNonQuery(deleteQuery); } } }
/// <summary> /// To get lab result details based on procedure id /// </summary> /// <param name="procedureId"></param> /// <returns></returns> public LabResultViewModel GetLabResultByRequestId(string procedureId) { LabResultViewModel labresult = new LabResultViewModel(); try { string[] criteria = new string[] { "based-on:ProcedureRequest=" + procedureId }; var labResultResponse = FhirClientObj.Search <Observation>(criteria); //Serializing the data to json string string labResultJson = fhirJsonSerializer.SerializeToString(labResultResponse); //Parsing the json string Bundle labResults = (Bundle)fhirJsonParser.Parse(labResultJson, typeof(Bundle)); //Parsing the data to the procedure request list Observation observation; observation = labResults.Entry.Select(Resource => (Observation)Resource.Resource).ToList().FirstOrDefault(); labresult.Category = observation.Code.Coding.FirstOrDefault().Display; labresult.PatientId = observation.Subject.Reference; labresult.ResultGlucoseLevel = ((Quantity)observation.Value).Value.ToString(); labresult.IssuedDate = observation.Issued.ToString(); labresult.Status = observation.Status.ToString(); labresult.FhirResource = JValue.Parse(labResultJson).ToString(); } catch (Exception ex) { var response = new StreamReader(ex.Message).ReadToEnd(); var error = JsonConvert.DeserializeObject(response); labresult.Error = error.ToString(); } return(labresult); }
public ActionResult SendReport(LabResultViewModel modal) { LabService lab = new LabService(); lab.SendLabResult(modal); return(RedirectToAction("List", "LabList")); }
public ActionResult Report(LabResultViewModel modal) { if (TempData.ContainsKey("LabResult")) { modal = (LabResultViewModel)TempData["LabResult"]; } return(View(modal)); }
void UpdateOrAddLabResultExecute(string labGuid) { if (LabResultCollection == null) { return; } LabResultViewModel newResultVM = CreateLabResultFromGuid(labGuid); if (newResultVM != null) { bool found = false; foreach (var iResult in LabResultCollection) { if (iResult.RecordId == labGuid) { iResult.Copy.Execute(newResultVM); RaisePropertyChanged("LabResultCollection"); found = true; if (newResultVM.CaseID != newResultVM.LabCaseID) { // Cascade update all lab records with new ID RenderableField idField = LabForm.Fields["ID"] as RenderableField; if (idField != null) { Query updateQuery = Database.CreateQuery("UPDATE " + LabForm.TableName + " lf INNER JOIN " + idField.Page.TableName + " lf1 ON lf.GlobalRecordId = lf1.GlobalRecordId " + " SET [ID] = @ID " + " WHERE lf.FKEY = @FKEY"); updateQuery.Parameters.Add(new QueryParameter("@ID", DbType.String, newResultVM.CaseID)); updateQuery.Parameters.Add(new QueryParameter("@FKEY", DbType.String, newResultVM.CaseRecordGuid)); int rowsUpdated = Database.ExecuteNonQuery(updateQuery); newResultVM.LabCaseID = newResultVM.CaseID; } else { throw new InvalidOperationException("Field ID is missing on case report form."); } } break; } } if (!found) { AddResult(newResultVM); RaisePropertyChanged("LabResultCollection"); } SortCases(); UpdateResultNumbers(); } }
public RedirectToRouteResult Labtest(string procedureId, string status, string patientId, string practitionerId, string patientName) { LabResultViewModel labresult = new LabResultViewModel(); labresult.ProcedureId = procedureId; labresult.Status = status; labresult.PatientId = patientId; labresult.Performer = practitionerId; labresult.Category = "Glucose measurement, blood (procedure)"; labresult.PatientName = patientName; TempData["LabResult"] = labresult; return(RedirectToAction("Report", "LabResult")); }
private void AddResult(LabResultViewModel newResult) { if (LabResultCollection == null) { return; } LabResultCollection.Add(newResult); //int SUDV = 0; //int BDBV = 0; //int EBOV = 0; //int MARV = 0; //foreach (LabResultViewModel labResultVM in LabResultCollection) //{ // if (!String.IsNullOrEmpty(labResultVM.MARVPCR)) MARV++; // if (!String.IsNullOrEmpty(labResultVM.EBOVPCR)) EBOV++; // if (!String.IsNullOrEmpty(labResultVM.BDBVPCR)) BDBV++; // if (!String.IsNullOrEmpty(labResultVM.SUDVPCR)) SUDV++; //} //VirusTestTypes virusTestType = Core.VirusTestTypes.Sudan; //if (SUDV > BDBV && SUDV > EBOV && SUDV > MARV) //{ // virusTestType = Core.VirusTestTypes.Sudan; //} //if (MARV > SUDV && MARV > EBOV && MARV > BDBV) //{ // virusTestType = Core.VirusTestTypes.Marburg; //} //if (EBOV > MARV && EBOV > SUDV && EBOV > BDBV) //{ // virusTestType = Core.VirusTestTypes.Ebola; //} //if (BDBV > MARV && BDBV > EBOV && BDBV > SUDV) //{ // virusTestType = Core.VirusTestTypes.Bundibugyo; //} if (LabRecordAdded != null) { LabRecordAdded(this, new CaseDataPopulatedArgs(VirusTestType, false)); } }
public JsonResult GetLabResultsListAjax() { Profile p = _profileRepo.GetByUserId(User.Identity.GetUserId()); if (p == null) { return(Json(null, JsonRequestBehavior.AllowGet)); } IEnumerable <Donation> donationList = _donationService.GetDonationsForProfile(p.Id); if (donationList == null) { return(Json(null, JsonRequestBehavior.AllowGet)); } List <LabResultViewModel> labResults = new List <LabResultViewModel>(); foreach (var donation in donationList) { IEnumerable <LabResult> results = _labResultService.GetByDonationId(donation.Id); if (results == null) { continue; } foreach (var labResult in results) { LabResultViewModel labResultView = new LabResultViewModel() { Date = donation.DonationDate.ToString("yyyy MMMM dd"), Hepatitis = labResult.Hepatitis == false ? "Negative" : "Positive", HIV = labResult.HIV == false ? "Negative" : "Positive", HTLV = labResult.HTLV == false ? "Negative" : "Positive", Syphilis = labResult.Syphilis == false ? "Negative" : "Positive", Other = labResult.ALT == true ? labResult.Notes : "" }; labResults.Add(labResultView); } } return(Json(labResults, JsonRequestBehavior.AllowGet)); }
protected override bool PopulateCollections(bool initialLoad = false) { LabDataHelper.SampleInterpretConfirmedAcute = Properties.Resources.AnalysisClassConfirmedAcute; LabDataHelper.SampleInterpretConfirmedConvalescent = Properties.Resources.AnalysisClassConfirmedConvalescent; LabDataHelper.SampleInterpretNotCase = Properties.Resources.AnalysisClassNotCase; LabDataHelper.SampleInterpretIndeterminate = Properties.Resources.AnalysisClassIndeterminate; LabDataHelper.SampleInterpretNegativeNeedsFollowUp = Properties.Resources.AnalysisClassNegativeNeedsFollowUp; LabDataHelper.PCRPositive = Properties.Resources.Positive; LabDataHelper.PCRNegative = Properties.Resources.Negative; LabDataHelper.PCRIndeterminate = Properties.Resources.AnalysisClassIndeterminate; LabDataHelper.PCRNotAvailable = "n/a"; LabDataHelper.SampleTypeWholeBlood = Properties.Resources.SampleTypeWholeBlood; LabDataHelper.SampleTypeSerum = Properties.Resources.SampleTypeSerum; LabDataHelper.SampleTypeHeartBlood = Properties.Resources.SampleTypeHeartBlood; LabDataHelper.SampleTypeSkin = Properties.Resources.SampleTypeSkin; LabDataHelper.SampleTypeOther = Properties.Resources.SampleTypeOther; // ********************************************************************************* // Following code shows virus tests depending on what's in the database. // ********************************************************************************* DataTable CaseTable = GetCasesTable(); DataView CaseView = new DataView(CaseTable, String.Empty, String.Empty, DataViewRowState.CurrentRows); DataTable LabTable = GetLabTable(); DataView LabView = new DataView(LabTable, String.Empty, String.Empty, DataViewRowState.CurrentRows); SudanTestsDetected = false; EbolaTestsDetected = false; BundibugyoTestsDetected = false; MarburgTestsDetected = false; CCHFTestsDetected = false; RiftTestsDetected = false; LassaTestsDetected = false; foreach (DataRowView rowView in LabView) { LabResultViewModel labResultVM = new LabResultViewModel(LabForm); LoadResultData(rowView.Row, labResultVM, CaseView); LabResultCollection.Add(labResultVM); if (!String.IsNullOrEmpty(labResultVM.MARVPCR)) { MarburgTestsDetected = true; } if (!String.IsNullOrEmpty(labResultVM.EBOVPCR)) { EbolaTestsDetected = true; } if (!String.IsNullOrEmpty(labResultVM.BDBVPCR)) { BundibugyoTestsDetected = true; } if (!String.IsNullOrEmpty(labResultVM.SUDVPCR)) { SudanTestsDetected = true; } if (!String.IsNullOrEmpty(labResultVM.CCHFPCR)) { CCHFTestsDetected = true; } if (!String.IsNullOrEmpty(labResultVM.RVFPCR)) { RiftTestsDetected = true; } if (!String.IsNullOrEmpty(labResultVM.LHFPCR)) { LassaTestsDetected = true; } } // ********************************************************************************* // Following (uncommented) code shows virus tests depending on what the user entered on the initial app setup // ********************************************************************************* Query selectQuery = Database.CreateQuery("SELECT * FROM metaDbInfo"); DataTable dt = Database.Select(selectQuery); OutbreakName = dt.Rows[0]["OutbreakName"].ToString(); if (!String.IsNullOrEmpty(dt.Rows[0]["OutbreakDate"].ToString())) { OutbreakDate = (DateTime)dt.Rows[0]["OutbreakDate"]; } IDPrefix = dt.Rows[0]["IDPrefix"].ToString(); IDSeparator = dt.Rows[0]["IDSeparator"].ToString(); IDPattern = dt.Rows[0]["IDPattern"].ToString(); Country = dt.Rows[0]["PrimaryCountry"].ToString(); switch (dt.Rows[0]["Virus"].ToString()) { case "Sudan": VirusTestType = Core.Enums.VirusTestTypes.Sudan; SudanTestsDetected = true; break; case "Ebola": VirusTestType = Core.Enums.VirusTestTypes.Ebola; EbolaTestsDetected = true; break; case "Marburg": VirusTestType = Core.Enums.VirusTestTypes.Marburg; MarburgTestsDetected = true; break; case "Bundibugyo": VirusTestType = Core.Enums.VirusTestTypes.Bundibugyo; BundibugyoTestsDetected = true; break; case "CCHF": VirusTestType = Core.Enums.VirusTestTypes.CCHF; CCHFTestsDetected = true; break; case "Rift": VirusTestType = Core.Enums.VirusTestTypes.Rift; RiftTestsDetected = true; break; case "Lassa": VirusTestType = Core.Enums.VirusTestTypes.Lassa; LassaTestsDetected = true; break; } SortCases(); UpdateResultNumbers(); LabResultCollectionView = System.Windows.Data.CollectionViewSource.GetDefaultView(LabResultCollection); RaisePropertyChanged("LabResultCollectionView"); if (CaseDataPopulated != null) { CaseDataPopulated(this, new CaseDataPopulatedArgs(VirusTestType, false)); } TaskbarProgressState = System.Windows.Shell.TaskbarItemProgressState.None; return(true); }
private Observation CreateLabResultResource(LabResultViewModel labResult) { string identifier = "CTOBS-123"; Observation observation = new Observation(); observation.Identifier = new List <Identifier> { new Identifier() { Value = identifier, System = SystemName } }; string procedureRequestRef = "ProcedureRequest/" + labResult.ProcedureId; observation.BasedOn = new List <ResourceReference>() { new ResourceReference(procedureRequestRef) }; observation.Status = ObservationStatus.Final; string observationCode = "15074-8"; string observationSystem = "http://loinc.org"; string observationDisplay = "Glucose [Moles/volume] in Blood"; observation.Code = new CodeableConcept { Coding = new List <Coding> { new Coding(observationSystem, observationCode, observationDisplay) } }; string subjectRef = labResult.PatientId; observation.Subject = new ResourceReference(subjectRef); string performer = "CTlab"; string performerRef = "Organization/" + performer; observation.Performer = new List <ResourceReference>() { new ResourceReference(performerRef) }; string obsValueCodeSystem = "http://unitsofmeasure.org"; decimal obsValue = Convert.ToDecimal(labResult.ResultGlucoseLevel); string obsValueUnity = labResult.ResultUnit; observation.Value = new Quantity(obsValue, obsValueUnity, obsValueCodeSystem); string methodSystem = "http://snomed.info/sct"; string methodCode = "707692008"; string methodDisplay = "Corrected for glucose technique"; observation.Method = new CodeableConcept(methodSystem, methodCode, methodDisplay); observation.Issued = Convert.ToDateTime(labResult.IssuedDate); return(observation); }
private void LabResultActionsRowControl_DeleteRequested(object sender, EventArgs e) { MessageBoxResult result = MessageBox.Show("Are you sure you want to delete this lab record?", "Confirm deletion", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { Dialogs.AuthCodeDialog authDialog = new Dialogs.AuthCodeDialog(ContactTracing.Core.Constants.AUTH_CODE); System.Windows.Forms.DialogResult authResult = authDialog.ShowDialog(); if (authResult == System.Windows.Forms.DialogResult.OK) { if (authDialog.IsAuthorized) { try { if (this.DataContext != null) { EpiDataHelper DataHelper = this.DataContext as EpiDataHelper; if (DataHelper != null) { LabResultViewModel r = dg.SelectedItem as LabResultViewModel; if (r != null) { string guid = r.RecordId; IDbDriver db = DataHelper.Project.CollectedData.GetDatabase(); #region Soft deletion code (Unused) /* SOFT DELETE */ //int rows = 0; //string querySyntax = "UPDATE [" + DataHelper.LabForm.TableName + "] SET RecStatus = 0 WHERE [GlobalRecordId] = @GlobalRecordId"; //Query labUpdateQuery = db.CreateQuery(querySyntax); //labUpdateQuery.Parameters.Add(new QueryParameter("@GlobalRecordId", System.Data.DbType.String, guid)); //rows = db.ExecuteNonQuery(labUpdateQuery); //CaseViewModel c = DataHelper.GetCaseVM(r.CaseRecordGuid); //if (rows == 1) //{ // Core.DbLogger.Log(String.Format( // "Soft-deleted lab : Case ID = {0}, Case EpiCaseDef = {1}, FLSID = {2}, Lab GUID = {3}", // c.ID, c.EpiCaseDef, r.FieldLabSpecimenID, r.RecordId)); //} //else if (rows == 0) //{ // Core.DbLogger.Log(String.Format( // "Lab soft-deletion attempted but no lab record found in database : GUID = {0}", // guid)); //} //else if (rows > 1) //{ // Core.DbLogger.Log(String.Format( // "Lab soft-deletion affected {0} records for GUID {1}. Duplicate labs may be present.", // rows.ToString(), guid)); //} #endregion Soft deletion code /* HARD DELETE */ using (IDbTransaction transaction = db.OpenTransaction()) { Query deleteQuery = db.CreateQuery("DELETE FROM " + DataHelper.LabForm.TableName + " WHERE GlobalRecordId = @GlobalRecordId"); deleteQuery.Parameters.Add(new QueryParameter("@GlobalRecordId", System.Data.DbType.String, guid)); int rows = db.ExecuteNonQuery(deleteQuery, transaction); foreach (Epi.Page page in DataHelper.LabForm.Pages) { deleteQuery = db.CreateQuery("DELETE FROM " + page.TableName + " WHERE GlobalRecordId = @GlobalRecordId"); deleteQuery.Parameters.Add(new QueryParameter("@GlobalRecordId", System.Data.DbType.String, guid)); db.ExecuteNonQuery(deleteQuery, transaction); } try { transaction.Commit(); } catch (Exception ex0) { ContactTracing.Core.DbLogger.Log("Lab record deletion failed on commit. Transaction rolled back. Exception: " + ex0.Message); try { transaction.Rollback(); } catch (Exception ex1) { ContactTracing.Core.DbLogger.Log("Lab record deletion failed on commit rollback. Transaction rolled back. Exception: " + ex1.Message); } } CaseViewModel c = DataHelper.GetCaseVM(r.CaseRecordGuid); DataHelper.PopulateLabRecordsForCase.Execute(c); db.CloseTransaction(transaction); } } } } } catch (Exception ex) { MessageBox.Show(String.Format("An exception occurred while trying to delete a lab record. Message: {0}", ex.Message));//. Case ID: {0}. Please give this message to the application developer.\n{1}", caseVM.ID, ex.Message)); ContactTracing.Core.DbLogger.Log("Lab record deletion failed. Exception: " + ex.Message); } } } } }