protected void UpdateBtn_Click(object sender, EventArgs e) { foreach (int rowIndex in BulkPatientEdit.DirtyRows) { GridViewRow row = BulkPatientEdit.Rows[rowIndex]; var values = CICHelper.GetCaisisInputControlDictionary(row).ToDictionary(a => a.Key, a => a.Value.Value); string patientIdValue = BulkPatientEdit.DataKeys[rowIndex][Patient.PatientId] + ""; int? patientId = null; // update new Patient Patient patient = UpdateRecord <Patient>(patientIdValue, new Dictionary <string, object> { { Patient.PtRace, values[Patient.PtRace] } }); if (patient.PrimaryKeyHasValue) { patientId = (int)patient[Patient.PatientId]; } if (patientId.HasValue) { // update Registration ID identifier string identifierId = BulkPatientEdit.DataKeys[rowIndex][Identifier.IdentifierId] + ""; string registrationID = values[Identifier.Identifier_Field]; if (!string.IsNullOrEmpty(registrationID)) { Identifier localIdentifier = UpdateRecord <Identifier>(identifierId, new Dictionary <string, object> { { Identifier.PatientId, patientId }, { Identifier.IdType, "Registration ID" }, { Identifier.Identifier_Field, registrationID }, }); } // update PatientProtocol string ptProtocolId = BulkPatientEdit.DataKeys[rowIndex][PatientProtocol.PatientProtocolId] + ""; PatientProtocol ptProtocol = UpdateRecord <PatientProtocol>(ptProtocolId, new Dictionary <string, object> { { PatientProtocol.PatientId, patientId }, { PatientProtocol.ProtocolId, protocolId } }); string statusId = BulkPatientEdit.DataKeys[rowIndex][PatientProtocolStatus.PatientProtocolStatusId] + ""; // update Registration Status if (ptProtocol.PrimaryKeyHasValue) { PatientProtocolStatus status = UpdateRecord <PatientProtocolStatus>(statusId, new Dictionary <string, object> { { PatientProtocolStatus.PatientProtocolId, (int)ptProtocol[PatientProtocol.PatientProtocolId] }, { PatientProtocolStatus.PtProtocolStatus, "Registered" }, { PatientProtocolStatus.PtProtocolStatusDate, values[PatientProtocolStatus.PtProtocolStatusDate] }, { PatientProtocolStatus.PtProtocolStatusDateText, values[PatientProtocolStatus.PtProtocolStatusDateText] } }); } } } // rebuild BuildBulkEdit(); // refresh main list Page.ClientScript.RegisterStartupScript(this.GetType(), "reloadParentPage", "if(parent.reloadListAndCalendar) { parent.reloadListAndCalendar(); }", true); }
/// <summary> /// Populates the header with Patient Name, visits, etc... /// </summary> private void PopulatePatientInfo() { if (PatientPage != null) { // set patient text, based on base page logic (account for permissions) PatientName.Text = PatientPage.PatientLabel; StudyIdField.Text = PatientPage.PatientStudyId; // set start date if (!string.IsNullOrEmpty(PatientPage.PatientProtocolId)) { int patientProtocolId = int.Parse(PatientPage.PatientProtocolId); // set start date based on "On Study" status PatientProtocolStatus onStudyStatus = BusinessObject.GetByFields <PatientProtocolStatus>(new Dictionary <string, object> { { PatientProtocol.PatientProtocolId, patientProtocolId }, { PatientProtocolStatus.PtProtocolStatus, "On Study" } }).FirstOrDefault(); if (onStudyStatus != null && !onStudyStatus.IsNull(PatientProtocolStatus.PtProtocolStatusDate)) { PatientStartDate.Text = ((DateTime)(onStudyStatus[PatientProtocolStatus.PtProtocolStatusDate])).ToShortDateString(); } } } }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void DoSave(object sender, EventArgs e) { try { if (ValidateForm()) { // REQUIRED int protocolId = int.Parse(BaseProtocolId); // STEP 1: Get PatientId Patient patient = new Patient(); int ptId = -1; if (CanViewPatientInfo) { if (AddNewPatient.Checked) { patient[Patient.PtFirstName] = NewFirstName.Value; patient[Patient.PtLastName] = NewLastName.Value; patient[Patient.PtMRN] = NewMRN.Value; // If no name or mrn, enter notes to save record patient[Patient.PtNotes] = "Protocol-Patient"; // insert records using controller PatientController ct = new PatientController(); try { // insert new patient InsertNewPatientRecord(patient); } catch (InvalidScreeningException ex) { throw ex; } // if cannot insert patient, already exits, warn user catch (Exception ex) { throw new InvalidScreeningException("Select a new MRN, another patient with the same MRN already exists in the system."); } //if (patient.RecordCount > 0) if (!patient.IsEmpty) { ptId = int.Parse(patient[Patient.PatientId].ToString()); } } // if using existing patient else if (FindExistingPatient.Checked) { if (!string.IsNullOrEmpty(epid.Value)) { ptId = int.Parse(DecrypyValue(epid.Value)); } } } // if cannnot view PatientInfo, insert blinded info else { patient[Patient.PtFirstName] = string.Empty; patient[Patient.PtLastName] = string.Empty; patient[Patient.PtMRN] = string.Empty; patient[Patient.PtNotes] = "Blinded-Protocol-Patient"; // insert new patient InsertNewPatientRecord(patient); //if (patient.RecordCount > 0) if (!patient.IsEmpty) { ptId = int.Parse(patient[Patient.PatientId].ToString()); } } // STEP 2: Create ParticipantID (if needed) if (ptId != -1) { if (!PatientProtocolController.HasParticipantId(protocolId, ptId)) { PatientProtocolController.CreateParticipantIdIdentifier(protocolId, ptId); } } // VALIDATION: ensure non-duplicate PatientProtocol, via insert new patient int?ptProtocolId = null; var pp = BusinessObject.GetByFields <PatientProtocol>( new Dictionary <string, object> { { PatientProtocol.ProtocolId, protocolId }, { PatientProtocol.PatientId, ptId } } ); if (pp.Count() > 0) { ptProtocolId = (int)pp.First()[PatientProtocol.PatientProtocolId]; } // STEP 3: Determine Pass or Fail, and create relevent records // If screening failed, create empty PatientProtocol record to track screening if (ScreeningFailed.Checked) { PatientProtocol ptProtocol = new PatientProtocol(); if (ptProtocolId.HasValue) { ptProtocol.Get(ptProtocolId.Value); } else { ptProtocol[PatientProtocol.PatientId] = ptId; ptProtocol[PatientProtocol.ProtocolId] = protocolId; ptProtocol[PatientProtocol.PtProtocolScreeningId] = PatientProtocolController.GenerateScreeningId(); ptProtocol.Save(); } PatientProtocolStatus status = new PatientProtocolStatus(); status[PatientProtocolStatus.PatientProtocolId] = ptProtocol[PatientProtocol.PatientProtocolId]; status[PatientProtocolStatus.PtProtocolStatus] = PatientProtocolController.ScreeningFailed; DateTime statusDate = DateTime.Today; if (!string.IsNullOrEmpty(ScreeningDate.Value) && DateTime.TryParse(ScreeningDate.Value, out statusDate)) { status[PatientProtocolStatus.PtProtocolStatusDate] = statusDate; status[PatientProtocolStatus.PtProtocolStatusDateText] = statusDate.ToShortDateString(); } else { status[PatientProtocolStatus.PtProtocolStatusDate] = DateTime.Today; status[PatientProtocolStatus.PtProtocolStatusDateText] = DateTime.Today.ToShortDateString(); } status[PatientProtocolStatus.PtProtocolStatusReason] = ReasonFailed.Value; status[PatientProtocolStatus.PtProtocolStatusNotes] = ReasonFailedNotes.Value; status.Save(); } // If screening passed, create necessary records else if (ScreeningPassed.Checked) { // Create PatientProtocol for Patient PatientProtocol ptProtocol = new PatientProtocol(); if (ptProtocolId.HasValue) { ptProtocol.Get(ptProtocolId.Value); bool doUpdate = false; // update/ insert fields if (ptProtocol.IsNull(PatientProtocol.PtProtocolStudyId)) { ptProtocol[PatientProtocol.PtProtocolStudyId] = StudyID.Value; doUpdate = true; } if (ptProtocol.IsNull(PatientProtocol.PtProtocolScreeningId)) { ptProtocol[PatientProtocol.PtProtocolScreeningId] = PatientProtocolController.GenerateScreeningId(); doUpdate = true; } if (doUpdate) { ptProtocol.Save(); } } else { ptProtocol[PatientProtocol.ProtocolId] = protocolId; ptProtocol[PatientProtocol.PatientId] = ptId; ptProtocol[PatientProtocol.PtProtocolScreeningId] = PatientProtocolController.GenerateScreeningId(); ptProtocol[PatientProtocol.PtProtocolStudyId] = StudyID.Value; ptProtocol.Save(); } // CREATE STUDY ID IDENTIFIER PatientProtocolController.CreateStudyIdIdentifier((int)ptProtocol[ptProtocol.PrimaryKeyName]); // Create Registration Record PatientProtocolRegistration registrationRecord = new PatientProtocolRegistration(); registrationRecord[PatientProtocolRegistration.PatientProtocolId] = ptProtocol[PatientProtocol.PatientProtocolId]; registrationRecord[PatientProtocolRegistration.ConsentedTo] = " "; registrationRecord.Save(); PatientProtocolStatus status = new PatientProtocolStatus(); status[PatientProtocolStatus.PatientProtocolId] = ptProtocol[PatientProtocol.PatientProtocolId]; status[PatientProtocolStatus.PtProtocolStatus] = PatientProtocolController.ScreeningPassed; DateTime statusDate = DateTime.Today; if (!string.IsNullOrEmpty(ScreeningDate.Value) && DateTime.TryParse(ScreeningDate.Value, out statusDate)) { status[PatientProtocolStatus.PtProtocolStatusDate] = statusDate; status[PatientProtocolStatus.PtProtocolStatusDateText] = statusDate.ToShortDateString(); } else { status[PatientProtocolStatus.PtProtocolStatusDate] = DateTime.Today; status[PatientProtocolStatus.PtProtocolStatusDateText] = DateTime.Today.ToShortDateString(); } status[PatientProtocolStatus.PtProtocolStatusNotes] = StudyNodes.Value; status.Save(); } // STEP 4: Register Client Script events // Save and Close if (sender == SaveBtn) { Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "saveAndClose", "saveAndClose();", true); } // Save and Load Registration Interface else if (sender == ContinueBtn) { string script = "if(parent.patientAssigned) { parent.patientAssigned('" + protocolId + "','','" + EncryptValue(ptId.ToString()) + "'); }"; Page.ClientScript.RegisterStartupScript(this.GetType(), "OnPatientAssigned", script, true); } ErrorMessage.Text = ""; } } catch (InvalidScreeningException invalidFormException) { ErrorMessage.Text = "Error: " + invalidFormException.Message; } }