using framework_business; using framework_library; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Telerik.Web.UI; public partial class controls_module_medicalHistory : UserControl, ISurfaceControlBase { #region methods /// /// Reload Control /// /// public void ReloadControl(oSurfaceFieldData controlFieldData, bool alternateView = false, bool readOnly = false) { try { oMedicalPatientHistory medicalPatientHistory = new oMedicalPatientHistory(); medicalPatientHistory.surfaceItemId = controlFieldData.surfaceItemId; //CVH 2018-07-06 Only get saved history if the item ID isn't 0 (there seems to be history saved against item 0 ) if (controlFieldData.surfaceItemId != 0) { foreach (oMedicalPatientHistory currentMPH in xData.GetTypedByCriteriaSpecific("recId", typeof(oMedicalPatientHistory), "surfaceItemId", controlFieldData.surfaceItemId.ToString())) { medicalPatientHistory = currentMPH; } } this.MedicalPatientHistory = medicalPatientHistory; SetupControl(MedicalPatientHistory); } catch (Exception ex) { exception.HandleException("medicalHistory:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Save Control Data /// /// public void SaveControlData(ref oSurfaceFieldData _surfaceFieldData) { try { SetHfSpefiedConditions(); SetHfFamily(); SetHfTreated(); SetHfPastCurrentData(); SetHfSocial(); MedicalPatientHistory.specifiedConditions = hfSpecifiedConditions.Text; MedicalPatientHistory.seriousConditions = txtHistorySeriousConditions.Value; MedicalPatientHistory.familyConditions = hfFamily.Text; MedicalPatientHistory.familyTreated = hfTreated.Text; MedicalPatientHistory.hereditaryConditions = txtHistoryHereditaryConditions.Value; MedicalPatientHistory.pastCurrentConditions = hfPastCurrentData.Text; MedicalPatientHistory.socialConditions = hfSocial.Text; MedicalPatientHistory.surfaceItemId = _surfaceFieldData.surfaceItemId; if (MedicalPatientHistory.recId > 0) xData.UpdateTyped("recId", MedicalPatientHistory.recId.ToString(), typeof(oMedicalPatientHistory), MedicalPatientHistory); else { MedicalPatientHistory.recId = xData.SaveTyped("recId", typeof(oMedicalPatientHistory), MedicalPatientHistory); //CVH 2018-07-06 If surface item hasn't been saved yet, need to update surfaceItemId after it has been saved. Cater for multiple Medical History controls on one page, so rather create arraylist than object direct in session ArrayList list = new ArrayList(); if (utils.verifySession("SurfaceItemMedicalHistoryNotLinked")) { list = (ArrayList)Session["SurfaceItemMedicalHistoryNotLinked"]; } list.Add(MedicalPatientHistory); Session["SurfaceItemMedicalHistoryNotLinked"] = list; } _surfaceFieldData.surfaceFieldLookupID = MedicalPatientHistory.recId; } catch (Exception ex) { exception.HandleException("medicalHistory:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Set Control /// /// private void SetupControl(oMedicalPatientHistory mph) { try { if (utils.verifySession("PatientType")) { PatientType = (pNums.PatientType)Convert.ToInt32(Session["PatientType"].ToString()); } BindPatientHistory(mph); if (PatientType == pNums.PatientType.Paediatric) { lblConditions.Text = "Has your child ever been diagnosed with any of the following conditions below (click on the tick to select):"; lblCurrent.Text = "Indicate ALL PAST and CURRENT conditions you feel may be contributing to your child's present problem:"; divSocialHistory.Visible = false; } else { lblConditions.Text = "Have you ever been diagnosed with any of the following conditions below (click on the tick to select):"; lblCurrent.Text = "Indicate ALL PAST and CURRENT conditions you feel may be contributing to your present problem:"; divSocialHistory.Visible = true; } upMedicalHistory.Update(); } catch (Exception ex) { exception.HandleException("medicalHistory:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Bind Patient History /// /// private void BindPatientHistory(oMedicalPatientHistory mph) { //Todo: find way to identify patient type //if (ppc.PatientType == PatientPersonType.Adult) //{ // txtHistoryJobs.Text = phc.HealthJobs; // hfSocial.Text = phc.SocialPastCurrentActivities; //} try { hfSpecifiedConditions.Text = mph.specifiedConditions; txtHistorySeriousConditions.Value = mph.seriousConditions; hfFamily.Text = mph.familyConditions; hfTreated.Text = mph.familyTreated; txtHistoryHereditaryConditions.Value = mph.hereditaryConditions; hfPastCurrentData.Text = mph.pastCurrentConditions; hfSocial.Text = mph.socialConditions; BindStaticControls(); ClearGrids(); BindDataGrids(); } catch (Exception ex) { exception.HandleException("medicalHistory:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Clear Grids /// private void ClearGrids() { grdPastCurrentConditions.DataSource = null; grdSocialHistory.DataSource = null; grdSpecifiedConditions.DataSource = null; } /// /// Bind Controls /// private void BindStaticControls() { try { foreach (ListItem item in familyConditions.Items) { item.Selected = false; } foreach (ListItem item in familyTreated.Items) { item.Selected = false; } foreach (string familyMember in hfFamily.Text.Split(';')) { if (familyConditions.Items.FindByValue(familyMember) != null) familyConditions.Items.FindByValue(familyMember).Selected = true; } if (familyTreated.Items.FindByValue(hfTreated.Text) != null) familyTreated.Items.FindByValue(hfTreated.Text).Selected = true; } catch (Exception ex) { exception.HandleException("medicalHistory:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Bind Data Grids /// private void BindDataGrids() { try { DataTable dtSpecifiedConditions = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oMedicalCondition), "isActive,conditionType,patientType", "1," + pNums.ConditionType.HealthSpecifiedConditions.GetHashCode()+","+ PatientType.GetHashCode(), "sequence"); grdSpecifiedConditions.DataSource = dtSpecifiedConditions; grdSpecifiedConditions.DataBind(); DataTable dtPastCurrentConditions = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oMedicalCondition), "isActive,conditionType,patientType", "1," + pNums.ConditionType.PastCurrentConditions.GetHashCode() + "," + PatientType.GetHashCode(), "sequence"); grdPastCurrentConditions.DataSource = dtPastCurrentConditions; grdPastCurrentConditions.DataBind(); DataTable dtSocialActivities = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oMedicalCondition), "isActive,conditionType,patientType", "1," + pNums.ConditionType.SocialActivities.GetHashCode() + "," + PatientType.GetHashCode(), "sequence"); grdSocialHistory.DataSource = dtSocialActivities; grdSocialHistory.DataBind(); } catch (Exception ex) { exception.HandleException("medicalHistory:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Set Social value /// private void SetHfSocial() { try { bool firstItem = true; foreach (GridViewRow row in grdSocialHistory.Rows) { if (row.RowType == DataControlRowType.DataRow) { Label lblId = (Label)row.FindControl("lblId"); RadioButton optDaily = (RadioButton)row.FindControl("optDaily"); RadioButton optWeekends = (RadioButton)row.FindControl("optWeekends"); RadioButton optOccassionally = (RadioButton)row.FindControl("optOccassionally"); RadioButton optNever = (RadioButton)row.FindControl("optNever"); CheckBox chkCigarettes = (CheckBox)row.FindControl("chkCigarettes"); CheckBox chkCigars = (CheckBox)row.FindControl("chkCigars"); CheckBox chkPipe = (CheckBox)row.FindControl("chkPipe"); string iValue = string.Empty; if (chkCigarettes.Checked) iValue += string.Format("SCT_{0};", lblId.Text); if (chkCigars.Checked) iValue += string.Format("SCG_{0};", lblId.Text); if (chkPipe.Checked) iValue += string.Format("SP_{0};", lblId.Text); if (optDaily.Checked) iValue += string.Format("D_{0}", lblId.Text); if (optWeekends.Checked) iValue += string.Format("W_{0}", lblId.Text); if (optOccassionally.Checked) iValue += string.Format("O_{0}", lblId.Text); if (optNever.Checked) iValue += string.Format("N_{0}", lblId.Text); if (firstItem) { hfSocial.Text = iValue; firstItem = false; } else hfSocial.Text += ";" + iValue; } } } catch (Exception ex) { exception.HandleException("medicalHistory:", MethodBase.GetCurrentMethod().Name, ex, this.MedicalPatientHistory); Response.Redirect("/error", false); } } /// /// Set Specified Conditions value /// private void SetHfSpefiedConditions() { try { bool firstItem = true; foreach (GridViewRow row in grdSpecifiedConditions.Rows) { if (row.RowType == DataControlRowType.DataRow) { DataRowView rowView = (DataRowView)row.DataItem; Label lblId = (Label)row.FindControl("lblId"); RadioButton optPast = (RadioButton)row.FindControl("optPast"); RadioButton optCurrent = (RadioButton)row.FindControl("optCurrent"); RadioButton optNever = (RadioButton)row.FindControl("optNever"); string iValue = string.Empty; if (optPast.Checked) iValue = string.Format("P_{0}", lblId.Text); if (optCurrent.Checked) iValue = string.Format("C_{0}", lblId.Text); if (optNever.Checked) iValue = string.Format("N_{0}", lblId.Text); if (firstItem) { hfSpecifiedConditions.Text = iValue; firstItem = false; } else hfSpecifiedConditions.Text += ";" + iValue; } } } catch (Exception ex) { exception.HandleException("medicalHistory:", MethodBase.GetCurrentMethod().Name, ex, this.MedicalPatientHistory); Response.Redirect("/error", false); } } /// /// Set Family Values /// private void SetHfFamily() { try { hfFamily.Text = ""; bool firstItem = true; foreach (ListItem item in familyConditions.Items) { if (item.Selected) { if (firstItem) { hfFamily.Text += item.Value; firstItem = false; } else hfFamily.Text += ";" + item.Value; } } } catch (Exception ex) { exception.HandleException("medicalHistory:", MethodBase.GetCurrentMethod().Name, ex, this.MedicalPatientHistory); Response.Redirect("/error", false); } } /// /// Set Treated Values /// public void SetHfTreated() { try { hfTreated.Text = ""; bool firstItem = true; foreach (ListItem item in familyTreated.Items) { if (item.Selected) { if (firstItem) { hfTreated.Text += item.Value; firstItem = false; } else hfTreated.Text += ";" + item.Value; } } } catch (Exception ex) { exception.HandleException("medicalHistory:", MethodBase.GetCurrentMethod().Name, ex, this.MedicalPatientHistory); Response.Redirect("/error", false); } } /// /// Set Past/Current Values /// private void SetHfPastCurrentData() { try { bool firstItem = true; foreach (GridViewRow row in grdPastCurrentConditions.Rows) { if (row.RowType == DataControlRowType.DataRow) { DataRowView rowView = (DataRowView)row.DataItem; Label lblId = (Label)row.FindControl("lblId"); TextBox txtTreatmentAge = (TextBox)row.FindControl("txtTreatmentAge"); TextBox txtCareType = (TextBox)row.FindControl("txtCareType"); TextBox txtCareGiver = (TextBox)row.FindControl("txtCareGiver"); string TA = string.Format("TA_{0}${1}", lblId.Text, txtTreatmentAge.Text); string CT = string.Format("CT_{0}${1}", lblId.Text, txtCareType.Text); string CG = string.Format("CG_{0}${1}", lblId.Text, txtCareGiver.Text); if (firstItem) { hfPastCurrentData.Text = TA + "|" + CT + "|" + CG; firstItem = false; } else hfPastCurrentData.Text += "|" + TA + "|" + CT + "|" + CG; } } } catch (Exception ex) { exception.HandleException("medicalHistory:", MethodBase.GetCurrentMethod().Name, ex, this.MedicalPatientHistory); Response.Redirect("/error", false); } } /// /// Get Past/Current item Value /// /// /// private string GetPCItemValue(string iInputID) { string[] tVals = hfPastCurrentData.Text.Split('|'); foreach (string innerValue in tVals) { string[] pVals = innerValue.Split('$'); if (iInputID == pVals[0]) return pVals[1]; } return ""; } #endregion #region events /// /// Page Init /// /// /// protected void Page_Init(object sender, EventArgs e) { } /// /// Page Load /// /// /// protected void Page_Load(object sender, EventArgs e) { try { if (!Page.IsPostBack) { } } catch (Exception ex) { exception.HandleException("medicalHistory:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// grdPastCurrentConditions RowDataBound /// /// /// protected void grdPastCurrentConditions_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { DataRowView rowView = (DataRowView)e.Row.DataItem; Label lblId = (Label)e.Row.FindControl("lblId"); lblId.Text = rowView["recId"].ToString(); TextBox txtTreatmentAge = (TextBox)e.Row.FindControl("txtTreatmentAge"); txtTreatmentAge.Text = GetPCItemValue(string.Format("TA_{0}", rowView["recId"])); TextBox txtCareType = (TextBox)e.Row.FindControl("txtCareType"); txtCareType.Text = GetPCItemValue(string.Format("CT_{0}", rowView["recId"])); TextBox txtCareGiver = (TextBox)e.Row.FindControl("txtCareGiver"); txtCareGiver.Text = GetPCItemValue(string.Format("CG_{0}", rowView["recId"])); } } /// /// grdSpecifiedConditions RowDataBound /// /// /// protected void grdSpecifiedConditions_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { DataRowView rowView = (DataRowView)e.Row.DataItem; Label lblId = (Label)e.Row.FindControl("lblId"); lblId.Text = rowView["recId"].ToString(); string[] scArray = hfSpecifiedConditions.Text.Split(';'); string iValue = string.Format("N_{0}", lblId.Text); RadioButton optNever = (RadioButton)e.Row.FindControl("optNever"); optNever.Checked = (hfSpecifiedConditions.Text.Split(';').Contains(iValue)); optNever.GroupName = string.Format("SpecifiedConditions_{0}", lblId.Text); iValue = string.Format("P_{0}", lblId.Text); RadioButton optPast = (RadioButton)e.Row.FindControl("optPast"); optPast.Checked = (hfSpecifiedConditions.Text.Split(';').Contains(iValue)); optPast.GroupName = string.Format("SpecifiedConditions_{0}", lblId.Text); iValue = string.Format("C_{0}", lblId.Text); RadioButton optCurrent = (RadioButton)e.Row.FindControl("optCurrent"); optCurrent.Checked = (hfSpecifiedConditions.Text.Split(';').Contains(iValue)); optCurrent.GroupName = string.Format("SpecifiedConditions_{0}", lblId.Text); } } /// /// grdSocialHistory RowDataBound /// /// /// protected void grdSocialHistory_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { DataRowView rowView = (DataRowView)e.Row.DataItem; Label lblId = (Label)e.Row.FindControl("lblId"); lblId.Text = rowView["recId"].ToString(); string iValue = string.Format("D_{0}", lblId.Text); RadioButton optDaily = (RadioButton)e.Row.FindControl("optDaily"); optDaily.GroupName = string.Format("SocialHistory_{0}", lblId.Text); optDaily.Checked = (hfSocial.Text.Contains(iValue)); iValue = string.Format("W_{0}", lblId.Text); RadioButton optWeekends = (RadioButton)e.Row.FindControl("optWeekends"); optWeekends.GroupName = string.Format("SocialHistory_{0}", lblId.Text); optWeekends.Checked = (hfSocial.Text.Contains(iValue)); iValue = string.Format("O_{0}", lblId.Text); RadioButton optOccassionally = (RadioButton)e.Row.FindControl("optOccassionally"); optOccassionally.GroupName = string.Format("SocialHistory_{0}", lblId.Text); optOccassionally.Checked = (hfSocial.Text.Contains(iValue)); iValue = string.Format("N_{0}", lblId.Text); RadioButton optNever = (RadioButton)e.Row.FindControl("optNever"); optNever.GroupName = string.Format("SocialHistory_{0}", lblId.Text); optNever.Checked = (hfSocial.Text.Contains(iValue)); //Do the conditional items. CheckBox chkCigarettes = (CheckBox)e.Row.FindControl("chkCigarettes"); CheckBox chkCigars = (CheckBox)e.Row.FindControl("chkCigars"); CheckBox chkPipe = (CheckBox)e.Row.FindControl("chkPipe"); if (rowView["condition"].ToString().ToLower() == "smoking") { //Cigarettes iValue = string.Format("SCT_{0}", lblId.Text); chkCigarettes.Checked = hfSocial.Text.Contains(iValue); //Cigars iValue = string.Format("SCG_{0}", lblId.Text); chkCigars.Checked = hfSocial.Text.Contains(iValue); //Pipe iValue = string.Format("SP_{0}", lblId.Text); chkPipe.Checked = hfSocial.Text.Contains(iValue); } else { Control divCigarettes = e.Row.FindControl("divCigarettes"); if (divCigarettes != null) divCigarettes.Visible = false; Control divCigars = e.Row.FindControl("divCigars"); if (divCigars != null) divCigars.Visible = false; Control divPipe = e.Row.FindControl("divPipe"); if (divPipe != null) divPipe.Visible = false; } } } #endregion #region properties /// /// MPH getter and setter /// public oMedicalPatientHistory MedicalPatientHistory { get { if (ViewState["medicalPatientHistory"] == null) return null; else return (oMedicalPatientHistory)ViewState["medicalPatientHistory"]; } set { ViewState["medicalPatientHistory"] = value; } } public pNums.PatientType PatientType { get { pNums.PatientType patientType = pNums.PatientType.Adult; //CVH 2018-06-04 First get patient type from View State, then surface, else default Adult if (ViewState["patientType"] != null) patientType = (pNums.PatientType)ViewState["patientType"]; else if (utils.verifySession("SurfaceAppItem")) { oSurfaceItem surfaceItem = (oSurfaceItem)Session["SurfaceAppItem"]; foreach (oSurfaceField field in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,surfaceFieldName", surfaceItem.surfaceId.ToString() + ",PatientType_PatientType_PatientType")) { foreach (oSurfaceFieldData data in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceFieldData), "surfaceFieldId,surfaceItemId,surfaceId", field.recId.ToString() + "," + surfaceItem.recId.ToString() + "," + surfaceItem.surfaceId.ToString())) { foreach (oSurfaceLookup lookup in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "recId", data.surfaceFieldLookupID.ToString())) { patientType = (pNums.PatientType)Enum.Parse(typeof(pNums.PatientType), lookup.display.Substring(0, lookup.display.IndexOf(' '))); } } } } return patientType; } set { ViewState["patientType"] = value; } } #endregion }