protected void onBtn_Click(object sender, CommandEventArgs e) { if (PermissionManager.HasPermission("AddPatient")) { bool validDates = this.ValidateApptDateTime(); if (validDates) { // load the hashtable with values Hashtable apptParams = new Hashtable(); apptParams["ApptMRN"] = PtMRN.Value; apptParams["ApptFirstName"] = PtFirstName.Value; apptParams["ApptLastName"] = PtLastName.Value; apptParams["ApptPhysician"] = ApptPhysician.Value;// Request.Form[ApptPhysician.ID]; apptParams["ApptDept"] = Request.Form[ApptDept.ID]; apptParams["ApptVisitType"] = Request.Form[ApptVisitType.ID]; apptParams["ApptNotes"] = ApptNotes.Value; apptParams["ApptClinicDate"] = DateTime.Parse(AppointmentDate.Value); apptParams["ApptTime"] = DateTime.Parse(AppointmentDate.Value + " " + AppointmentTime.Value); PatientDa pda = new PatientDa(); DataTable pdt = pda.GetPatientByMRN(PtMRN.Value); PatientAppointmentController apct = new PatientAppointmentController(); // verify new MRN /* if (pdt.Rows.Count == 0) * { * // insert new patient record and the appointment * BusinessObject bz = GetParams(); * DataSet ds = apct.InsertPatientAndAppointmentRecord(bz, (int) Session[SessionKey.DatasetId], apptParams); * UpdateSession(ds.Tables[0].Rows[0]); * * // reload page - can we pass a confirmation message to the page? * Response.Redirect("AddNewPatientAndAppt.aspx?confirm=addnew"); * * } */ // verify new MRN if (pdt.Rows.Count == 0) { // insert new patient record and the appointment Patient bz = GetParams(); DataSet ds = apct.InsertNewPatientRecord(bz, (int)Session[SessionKey.DatasetId]); apct.InsertAppointmentRecord(apptParams, int.Parse(bz[Patient.PatientId].ToString())); // UpdateSession(ds.Tables[0].Rows[0]); // reload page - can we pass a confirmation message to the page? Response.Redirect("AddNewPatientAndAppt.aspx?confirm=addnew"); } else // mrn is already in database { // mrn already exists.. is the last name a match? if (PtLastName.Value != "" && pdt.Rows[0][Patient.PtLastName].ToString().ToUpper().Equals(PtLastName.Value.ToUpper())) { int pid = Convert.ToInt32(pdt.Rows[0][Patient.PatientId]); // use first name from database if it was not provided if (PtFirstName.Value.Equals("")) { apptParams["ApptFirstName"] = pdt.Rows[0][Patient.PtFirstName].ToString(); } // last name and MRN are a match, add patient to appointments table apct.InsertAppointmentRecord(apptParams, pid); UpdateSession(pid); // reload page and display confirmation message Response.Redirect("AddNewPatientAndAppt.aspx?confirm=addold"); } else if (PtLastName.Value == "") { // last name was blanks so lets find out if this is the right patient errMsg.Message = "Please enter the patients last name and MRN."; } else // tell user they can't use this combination of last name and mrn { errMsg.Message = "This MRN is already in use by patient " + pdt.Rows[0][Patient.PtFirstName].ToString() + " " + pdt.Rows[0][Patient.PtLastName].ToString() + "."; } } } } }
private DataTable SetFollowUpLetterList() { // need to validate string is actual date DateTime processDate = Convert.ToDateTime(ProcessDate.Text); // procedure can be entered from UI too string procedureType = ProcedureType.Text; _redirectPath += "&proc=" + procedureType + "&processDate=" + processDate.ToShortDateString(); FollowUpDA da = new FollowUpDA(); DataTable lastSurveyPatientsDt = new DataTable(); lastSurveyPatientsDt = da.GetPatientsLastSurveySentList(procedureType, FollowUpUtil.GetSurveyShortName(ddlSurveyType.SelectedValue)); DataTable fuLetterPatientsDt = new DataTable(); DataColumn dc0 = new DataColumn("PatientId"); DataColumn dc1 = new DataColumn("PtName"); DataColumn dc2 = new DataColumn("PtMRN"); DataColumn dc3 = new DataColumn("Surgeon"); DataColumn dc4 = new DataColumn("FUMonth"); DataColumn dc5 = new DataColumn("SurveyName"); DataColumn dc6 = new DataColumn("SentDate"); DataColumn dc7 = new DataColumn("Address1"); DataColumn dc8 = new DataColumn("Address2"); DataColumn dc9 = new DataColumn("City"); DataColumn dc10 = new DataColumn("State"); DataColumn dc11 = new DataColumn("Zip"); DataColumn dc12 = new DataColumn("LastName"); DataColumn dc13 = new DataColumn("FirstName"); fuLetterPatientsDt.Columns.Add(dc12); fuLetterPatientsDt.Columns.Add(dc13); fuLetterPatientsDt.Columns.Add(dc0); fuLetterPatientsDt.Columns.Add(dc1); fuLetterPatientsDt.Columns.Add(dc2); fuLetterPatientsDt.Columns.Add(dc3); fuLetterPatientsDt.Columns.Add(dc4); fuLetterPatientsDt.Columns.Add(dc5); fuLetterPatientsDt.Columns.Add(dc6); fuLetterPatientsDt.Columns.Add(dc7); fuLetterPatientsDt.Columns.Add(dc8); fuLetterPatientsDt.Columns.Add(dc9); fuLetterPatientsDt.Columns.Add(dc10); fuLetterPatientsDt.Columns.Add(dc11); // HERE: remove patients who have completed the survey within 20 days after it was sent to them foreach (DataRow dr in lastSurveyPatientsDt.Rows) { int pId = Int32.Parse(dr[Patient.PatientId].ToString()); DateTime surveySentDate = Convert.ToDateTime(dr[Caisis.BOL.Action.ActionDate].ToString()); // we have the surveySent actionItem is "NAME x Month Sent" string surveySentActionItem = dr[Caisis.BOL.Action.ActionItem].ToString(); string surveyType = FollowUpUtil.GetSurveyNameFromActionItem(surveySentActionItem); string month = FollowUpUtil.GetSurveyMonthNoFromActionItem(surveySentActionItem); // and want to get the equivalent letterSent ActionItem: for now it is "NAME x Month Letter Sent" string letterSentActionItem = FollowUpUtil.GetActionItemToLog(pId, month, surveyType, false); if (processDate > surveySentDate.AddDays(20)) //expected to receive survey within 20 days of processdate { // if expected survey was not received, send letter to patient only if not already sent before if (da.GetSurveyByActionItem(pId, surveySentActionItem).Rows.Count == 0 && da.LetterAlreadySent(pId, letterSentActionItem) == false) { // get the (full) survey name to display in the list of results string selectedSurvey = ddlSurveyType.SelectedValue; string surveyFullName = FollowUpUtil.GetSurveyFullName(int.Parse(month), selectedSurvey); // patient is due for a follow up letter DataRow fuRow = fuLetterPatientsDt.NewRow(); fuRow["PatientId"] = pId.ToString(); fuRow["LastName"] = dr[Patient.PtLastName].ToString(); fuRow["FirstName"] = dr[Patient.PtFirstName].ToString(); fuRow["PtName"] = dr[Patient.PtLastName].ToString() + ", " + dr[Patient.PtFirstName].ToString(); fuRow["PtMRN"] = dr[Patient.PtMRN].ToString(); fuRow["Surgeon"] = da.GetMostRecentTreatingPhysician(pId); fuRow["FUMonth"] = month.ToString(); fuRow["SurveyName"] = surveyFullName; DateTime dt; dt = Convert.ToDateTime(dr[Caisis.BOL.Action.ActionDate].ToString()); fuRow["SentDate"] = dt.ToShortDateString(); //last survey sent date //fuRow["SentDate"] = dr[Caisis.BOL.Action.ActionDate].ToString(); //last survey sent date if (string.IsNullOrEmpty(letterSentActionItem)) { fuRow["SurveyName"] = fuRow["SurveyName"].ToString() + "<BR>Invalid Action Name"; } // retrieve additional patient data if (!String.IsNullOrEmpty(dr[Patient.PtMRN].ToString())) { PatientDa ptDa = new PatientDa(); DataTable ptInfoDt = ptDa.GetPatientByMRN(dr[Patient.PtMRN].ToString()); if (ptInfoDt.Rows.Count > 0) { fuRow["Address1"] = ptInfoDt.Rows[0][Patient.PtAddress1].ToString(); fuRow["Address2"] = ptInfoDt.Rows[0][Patient.PtAddress2].ToString(); fuRow["City"] = ptInfoDt.Rows[0][Patient.PtCity].ToString(); fuRow["State"] = ptInfoDt.Rows[0][Patient.PtState].ToString(); fuRow["Zip"] = ptInfoDt.Rows[0][Patient.PtPostalCode].ToString(); } } fuLetterPatientsDt.Rows.Add(fuRow); // NOTE: all patients get the same follow up letter, but this could change? _redirectPath += "&" + dr[Patient.PatientId].ToString() + "=" + month + "_Follow Up Letter"; } } CreateBatchButton.Attributes.Add("onclick", "window.location.href='" + _redirectPath + "'"); } return(fuLetterPatientsDt); }
/// <summary> /// Return patient record using MRN /// </summary> /// <param name="mrn"></param> /// <returns></returns> public DataTable GetPatientByMRN(string mrn) { return(_pda.GetPatientByMRN(mrn)); }
private DataTable SetFollowUpList() { // get user input DateTime processDate = Convert.ToDateTime(ProcessDate.Text); string selectedSurvey = ddlSurveyType.SelectedValue; string procedureType = ddlProcedure.Text; _redirectPath += "&proc=" + procedureType + "&processDate=" + processDate.ToShortDateString(); FollowUpDA da = new FollowUpDA(); DataTable surgPatientsDt = new DataTable(); // return all patients with PtContactStatus as selected surgPatientsDt = da.GetActivePatientsForQOLFollowUp(processDate.ToShortDateString(), procedureType, selectedSurvey); DataTable fuPatientsDt = new DataTable(); DataColumn dc0 = new DataColumn("PatientId"); DataColumn dc1 = new DataColumn("PtName"); DataColumn dc2 = new DataColumn("PtMRN"); DataColumn dc3 = new DataColumn("DueDate"); DataColumn dc4 = new DataColumn("FUMonth"); DataColumn dc5 = new DataColumn("ProcName"); DataColumn dc6 = new DataColumn("ProcDate"); DataColumn dc7 = new DataColumn("Surgeon"); DataColumn dc8 = new DataColumn("SurveyName"); DataColumn dc9 = new DataColumn("Address1"); DataColumn dc10 = new DataColumn("Address2"); DataColumn dc11 = new DataColumn("City"); DataColumn dc12 = new DataColumn("State"); DataColumn dc13 = new DataColumn("Zip"); DataColumn dc14 = new DataColumn("LastName"); DataColumn dc15 = new DataColumn("FirstName"); fuPatientsDt.Columns.Add(dc14); fuPatientsDt.Columns.Add(dc15); fuPatientsDt.Columns.Add(dc0); fuPatientsDt.Columns.Add(dc1); fuPatientsDt.Columns.Add(dc2); fuPatientsDt.Columns.Add(dc3); fuPatientsDt.Columns.Add(dc4); fuPatientsDt.Columns.Add(dc5); fuPatientsDt.Columns.Add(dc6); fuPatientsDt.Columns.Add(dc7); fuPatientsDt.Columns.Add(dc8); fuPatientsDt.Columns.Add(dc9); fuPatientsDt.Columns.Add(dc10); fuPatientsDt.Columns.Add(dc11); fuPatientsDt.Columns.Add(dc12); fuPatientsDt.Columns.Add(dc13); // remove patients who don't belong; foreach (DataRow dr in surgPatientsDt.Rows) { DateTime surgDate = (DateTime)dr[Procedure.ProcDate]; int daysPriorToDueDate = -15; int daysAfterDueDate; int month, previousMonth; bool breakLoop = false; // TODO: HANDLE PRE_TREATMENT SURVEY //-- processingdate < scheduledSurgeryDate //-- AND PreOP has not been sent before //-- AND processDate is no earlier than 30 days before due date //-- AND IF it was sent before, make sure it was not 14 days or less ago //-- THEN Send PreOp if (processDate < surgDate) //means PRE-OP { DateTime dueDate = surgDate.AddDays(-14); string surveyShortType = FollowUpUtil.GetSurveyFullName(-1, ddlSurveyType.SelectedValue); //month is -1 since pre-op int pId = Int32.Parse(dr[Patient.PatientId].ToString()); DataTable dt = GetThisLastSurveySentRecord(surveyShortType, 0, pId); //1. survey has not been sent before and processdate is no earlier than 30 days before duedate //2. survey was sent before, we will send again if it was sent out more than 14 days ago and has not been received yet if ((SurveyAlreadySent(surveyShortType, 0, pId) == false && processDate > dueDate.AddDays(-30)) || (dt.Rows.Count > 0 && da.GetSurveyByActionItem(pId, dt.Rows[0][Caisis.BOL.Action.ActionItem].ToString()).Rows.Count == 0 && DateTime.Parse(dt.Rows[0][Caisis.BOL.Action.ActionDate].ToString()) < processDate.AddDays(-14))) { string surveyName = FollowUpUtil.GetSurveyFullName(0, surveyShortType); DataRow fuRow = fuPatientsDt.NewRow(); fuRow["PatientId"] = pId.ToString(); fuRow["LastName"] = dr[Patient.PtLastName].ToString(); fuRow["FirstName"] = dr[Patient.PtFirstName].ToString(); fuRow["PtName"] = dr[Patient.PtLastName].ToString() + ", " + dr[Patient.PtFirstName].ToString(); fuRow["PtMRN"] = dr[Patient.PtMRN].ToString(); fuRow["DueDate"] = dueDate.ToShortDateString(); fuRow["FUMonth"] = "Pre-Op"; fuRow["ProcName"] = dr[Procedure.ProcName].ToString(); fuRow["ProcDate"] = surgDate.ToShortDateString(); fuRow["Surgeon"] = da.GetMostRecentTreatingPhysician(pId); fuRow["SurveyName"] = surveyName; // retrieve additional patient data if (!String.IsNullOrEmpty(dr[Patient.PtMRN].ToString())) { PatientDa ptDa = new PatientDa(); DataTable ptInfoDt = ptDa.GetPatientByMRN(dr[Patient.PtMRN].ToString()); if (ptInfoDt.Rows.Count > 0) { fuRow["Address1"] = ptInfoDt.Rows[0][Patient.PtAddress1].ToString(); fuRow["Address2"] = ptInfoDt.Rows[0][Patient.PtAddress2].ToString(); fuRow["City"] = ptInfoDt.Rows[0][Patient.PtCity].ToString(); fuRow["State"] = ptInfoDt.Rows[0][Patient.PtState].ToString(); fuRow["Zip"] = ptInfoDt.Rows[0][Patient.PtPostalCode].ToString(); } } fuPatientsDt.Rows.Add(fuRow); // 0 used for PreTx surveys // _redirectPath += "&" + dr[Patient.PatientId].ToString() + "=0_" + surveyName.Replace(" ", ""); _redirectPath += "&" + dr[Patient.PatientId].ToString() + "=0_" + surveyName; } } // rules for distribution: 1 dimension contains send month; 2 dimension contains number of days before due date in which survey should be received //int[,] surveyMonths = { { 1, 21 }, { 3, 30 }, { 6, 45 }, { 12, 60 }, { 18, 75 }, { 24, 75 }, { 30, 75 }, { 36, 75 }, { 48, 75 }, { 60, 75 } }; // rules for new distribution: 1 dimension contains send month; 2 dimension contains number of days before due date in which survey should be received int[,] surveyMonths = { { 1, 21 }, { 3, 21 }, { 6, 21 }, { 12, 21 }, { 18, 30 }, { 24, 30 }, { 30, 30 }, { 36, 30 }, { 48, 30 }, { 60, 30 } }; for (int i = 0; i < 10; i++) { // retrieve send month month = surveyMonths[i, 0]; daysAfterDueDate = surveyMonths[i, 1]; DateTime dueDate = surgDate.AddMonths(month); if (dueDate >= processDate.AddDays(daysPriorToDueDate) && dueDate <= processDate.AddDays(daysAfterDueDate)) { breakLoop = true; string currentSurveyDueName = FollowUpUtil.GetSurveyFullName(month, selectedSurvey); //string previousSurveyName = FollowUpUtil.GetSurveyFullName(previousMonth, selectedSurvey); // if 1) current survey was not already sent AND 2) At least 1 of the previous 3 surveys have been sent AND received if (!SurveyAlreadySent(currentSurveyDueName, month, Int32.Parse(dr[Patient.PatientId].ToString())) && PassesSurveyReceivedRule(surveyMonths, i, dr[Patient.PatientId].ToString(), selectedSurvey)) { // patient is due for a month survey DataRow fuRow = fuPatientsDt.NewRow(); string pId = dr[Patient.PatientId].ToString(); fuRow["PatientId"] = pId; fuRow["LastName"] = dr[Patient.PtLastName].ToString(); fuRow["FirstName"] = dr[Patient.PtFirstName].ToString(); fuRow["PtName"] = dr[Patient.PtLastName].ToString() + ", " + dr[Patient.PtFirstName].ToString(); fuRow["PtMRN"] = dr[Patient.PtMRN].ToString(); fuRow["DueDate"] = dueDate.ToShortDateString(); fuRow["FUMonth"] = month.ToString(); fuRow["ProcName"] = dr[Procedure.ProcName].ToString(); fuRow["ProcDate"] = surgDate.ToShortDateString(); fuRow["Surgeon"] = da.GetMostRecentTreatingPhysician(Int32.Parse(pId)); fuRow["SurveyName"] = currentSurveyDueName; // retrieve additional patient data if (!String.IsNullOrEmpty(dr[Patient.PtMRN].ToString())) { PatientDa ptDa = new PatientDa(); DataTable ptInfoDt = ptDa.GetPatientByMRN(dr[Patient.PtMRN].ToString()); if (ptInfoDt.Rows.Count > 0) { fuRow["Address1"] = ptInfoDt.Rows[0][Patient.PtAddress1].ToString(); fuRow["Address2"] = ptInfoDt.Rows[0][Patient.PtAddress2].ToString(); fuRow["City"] = ptInfoDt.Rows[0][Patient.PtCity].ToString(); fuRow["State"] = ptInfoDt.Rows[0][Patient.PtState].ToString(); fuRow["Zip"] = ptInfoDt.Rows[0][Patient.PtPostalCode].ToString(); } } fuPatientsDt.Rows.Add(fuRow); _redirectPath += "&" + dr[Patient.PatientId].ToString() + "=" + month + "_" + currentSurveyDueName; } } if (breakLoop) { break; } } } CreateBatchButton.Attributes.Add("onclick", "window.location.href='" + _redirectPath + "'"); return(fuPatientsDt); }