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_medicalSymptoms : UserControl, ISurfaceControlBase
{
#region methods
///
/// Reload Control
///
///
public void ReloadControl(oSurfaceFieldData controlFieldData, bool alternateView = false, bool readOnly = false)
{
try
{
ViewState["patientType"] = null;
oMedicalPatientSymptom medicalPatientSymptom = new oMedicalPatientSymptom();
medicalPatientSymptom.surfaceItemId = controlFieldData.surfaceItemId;
//CVH 2018-07-06 Only get saved symptoms if the item ID isn't 0 (there seems to be symptoms saved against item 0
if (controlFieldData.surfaceItemId != 0)
{
foreach (oMedicalPatientSymptom currentMPS in xData.GetTypedByCriteriaSpecific("recId", typeof(oMedicalPatientSymptom), "surfaceItemId", controlFieldData.surfaceItemId.ToString()))
{
medicalPatientSymptom = currentMPS;
}
}
MedicalPatientSymptom = medicalPatientSymptom;
SetupControl(MedicalPatientSymptom);
}
catch (Exception ex)
{
exception.HandleException("symptoms:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Save Control Data
///
///
public void SaveControlData(ref oSurfaceFieldData _surfaceFieldData)
{
try
{
SetHfSymptoms();
SetHfTrauma();
MedicalPatientSymptom.symptoms = hfSymptoms.Text;
MedicalPatientSymptom.drugsTaken = txtDrugsTaken.Value;
MedicalPatientSymptom.traumaticEvents = hfTrauma.Text;
MedicalPatientSymptom.surfaceItemId = _surfaceFieldData.surfaceItemId;
if (MedicalPatientSymptom.recId > 0)
xData.UpdateTyped("recId", MedicalPatientSymptom.recId.ToString(), typeof(oMedicalPatientSymptom), MedicalPatientSymptom);
else
{
MedicalPatientSymptom.recId = xData.SaveTyped("recId", typeof(oMedicalPatientSymptom), MedicalPatientSymptom);
//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 Symptom controls on one page, so rather create arraylist than object direct in session
ArrayList list = new ArrayList();
if (utils.verifySession("SurfaceItemMedicalSymptomsNotLinked"))
{
list = (ArrayList)Session["SurfaceItemMedicalSymptomsNotLinked"];
}
list.Add(MedicalPatientSymptom);
Session["SurfaceItemMedicalSymptomsNotLinked"] = list;
}
_surfaceFieldData.surfaceFieldLookupID = MedicalPatientSymptom.recId;
}
catch (Exception ex)
{
exception.HandleException("medicalSymptoms:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Set Symtoms Value
///
private void SetHfSymptoms()
{
try
{
bool firstItem = true;
foreach (GridViewRow row in grdSymptoms.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)
{
hfSymptoms.Text = iValue;
firstItem = false;
}
else
hfSymptoms.Text += ";" + iValue;
}
}
}
catch (Exception ex)
{
exception.HandleException("medicalSymptoms:", MethodBase.GetCurrentMethod().Name, ex, this.MedicalPatientSymptom);
Response.Redirect("/error", false);
}
}
///
/// Set Trauma Value
///
private void SetHfTrauma()
{
try
{
bool firstItem = true;
foreach (GridViewRow row in grdTrauma.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
DataRowView rowView = (DataRowView)row.DataItem;
Label lblId = (Label)row.FindControl("lblId");
RadioButton optYes = (RadioButton)row.FindControl("optYes");
RadioButton optNo = (RadioButton)row.FindControl("optNo");
string iValue = string.Empty;
if (optYes.Checked)
iValue = string.Format("Y_{0}", lblId.Text);
if (optNo.Checked)
iValue = string.Format("N_{0}", lblId.Text);
if (firstItem)
{
//CVH 2018-07-06 This should be hfTrauma
//hfSymptoms.Text = iValue;
hfTrauma.Text = iValue;
firstItem = false;
}
else
hfTrauma.Text += ";" + iValue;
//hfSymptoms.Text += ";" + iValue;
}
}
}
catch (Exception ex)
{
exception.HandleException("medicalSymptoms:", MethodBase.GetCurrentMethod().Name, ex, this.MedicalPatientSymptom);
Response.Redirect("/error", false);
}
}
///
/// Setup Control
///
///
private void SetupControl(oMedicalPatientSymptom MPS)
{
try
{
BindPatientSymptom(MPS);
}
catch (Exception ex)
{
exception.HandleException("medicalSymptoms:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Bind Patient History
///
///
private void BindPatientSymptom(oMedicalPatientSymptom MPS)
{
//Todo: find way to identify patient type
//if (ppc.PatientType == PatientPersonType.Adult)
//{
// txtHistoryJobs.Text = phc.HealthJobs;
// hfSocial.Text = phc.SocialPastCurrentActivities;
//}
try
{
hfSymptoms.Text = MPS.symptoms;
hfTrauma.Text = MPS.traumaticEvents;
txtDrugsTaken.Value = MPS.drugsTaken;
BindDataGrids();
}
catch (Exception ex)
{
exception.HandleException("medicalSymptoms:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Bind Data Grids
///
private void BindDataGrids()
{
try
{
if (utils.verifySession("PatientType"))
{
PatientType = (pNums.PatientType)Convert.ToInt32(Session["PatientType"].ToString());
}
DataTable dtGeneralSymptoms = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oMedicalSymptom), "isActive,patientType", "1," + PatientType.GetHashCode());
grdSymptoms.DataSource = dtGeneralSymptoms;
grdSymptoms.DataBind();
if (PatientType == pNums.PatientType.Paediatric)
{
lblSymptomHeading.Text = "Has your child ever or does he/she suffer with any of the following symptoms below (click on the tick to select):";
lblDrugHeading.Text = "Please list Prescription & Non-Prescription drugs your child takes (if applicable):";
divTrauma.Visible = true;
DataTable dtTrauma = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oMedicalTraumaticEvent), "isActive,patientType", "1," + PatientType.GetHashCode());
grdTrauma.DataSource = dtTrauma;
grdTrauma.DataBind();
}
else
{
lblSymptomHeading.Text = "Have you ever or do you suffer with any of the following symptoms below (click on the tick to select):";
lblDrugHeading.Text = "Please list Prescription & Non-Prescription drugs you take (if applicable):";
divTrauma.Visible = false;
}
}
catch (Exception ex)
{
exception.HandleException("medicalSymptoms:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
#endregion
#region events
///
/// Page Load
///
///
///
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!Page.IsPostBack)
{
}
}
catch (Exception ex)
{
exception.HandleException("symptoms:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// grdSymptoms RowDataBound
///
///
///
protected void grdSymptoms_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 = hfSymptoms.Text.Split(';');
string iValue = string.Format("N_{0}", lblId.Text);
RadioButton optNever = (RadioButton)e.Row.FindControl("optNever");
optNever.Checked = (hfSymptoms.Text.Split(';').Contains(iValue));
optNever.GroupName = string.Format("Symptoms_{0}", lblId.Text);
iValue = string.Format("P_{0}", lblId.Text);
RadioButton optPast = (RadioButton)e.Row.FindControl("optPast");
optPast.Checked = (hfSymptoms.Text.Split(';').Contains(iValue));
optPast.GroupName = string.Format("Symptoms_{0}", lblId.Text);
iValue = string.Format("C_{0}", lblId.Text);
RadioButton optCurrent = (RadioButton)e.Row.FindControl("optCurrent");
optCurrent.Checked = (hfSymptoms.Text.Split(';').Contains(iValue));
optCurrent.GroupName = string.Format("Symptoms_{0}", lblId.Text);
}
}
///
/// grdTrauma RowDataBound
///
///
///
protected void grdTrauma_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 = hfTrauma.Text.Split(';');
string iValue = string.Format("N_{0}", lblId.Text);
RadioButton optNo = (RadioButton)e.Row.FindControl("optNo");
optNo.Checked = (hfTrauma.Text.Split(';').Contains(iValue));
optNo.GroupName = string.Format("Trauma_{0}", lblId.Text);
iValue = string.Format("Y_{0}", lblId.Text);
RadioButton optYes = (RadioButton)e.Row.FindControl("optYes");
optYes.Checked = (hfTrauma.Text.Split(';').Contains(iValue));
optYes.GroupName = string.Format("Trauma_{0}", lblId.Text);
}
}
#endregion
#region properties
///
/// MPS getter and setter
///
public oMedicalPatientSymptom MedicalPatientSymptom
{
get
{
if (ViewState["medicalPatientSymptom"] == null)
return null;
else
return (oMedicalPatientSymptom)ViewState["medicalPatientSymptom"];
}
set
{
ViewState["medicalPatientSymptom"] = 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
}