Esempio n. 1
0
        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();
             }
         }
     }
 }
Esempio n. 3
0
        /// <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:&nbsp;&nbsp;" + invalidFormException.Message;
            }
        }