/// <summary> /// Updates summary when necessary /// </summary> private void UpdateSummaryValues() { if (!m_bChange) { return; } labelError.Visible = false; String strTreatment = dgvSummary[1, 1].Value.ToString(); if (strTreatment == m_strCurrentTreatment) { dgvSummary[1, 2].Value = m_strCurrentBudget; dgvSummary[1, 3].Value = m_strCurrentCost; dgvSummary[1, 4].Value = m_strCurrentAny; dgvSummary[1, 5].Value = m_strCurrentSame; dgvAttribute.Rows.Clear(); foreach (String key in m_hashCurrentChange.Keys) { int nRow = dgvAttribute.Rows.Add(key, m_hashCurrentChange[key]); } } else if (m_listFeasibleTreatment.Contains(strTreatment)) { double dArea = 0; String strSelect = "SELECT AREA FROM " + this.ReportTable + " WHERE SECTIONID ='" + this.SectionID + "' AND YEARS='" + this.Year + "'"; try { DataSet ds = DBMgr.ExecuteQuery(strSelect); if (ds.Tables[0].Rows.Count == 1) { DataRow dr = ds.Tables[0].Rows[0]; dArea = double.Parse(dr["AREA"].ToString()); } } catch (Exception exception) { labelError.Visible = true; labelError.Text = "Error retrieving AREA." + exception.Message; } strSelect = "SELECT BUDGET,YEARSANY,YEARSSAME,COST_,CHANGEHASH FROM " + this.BenefitCostTable + " WHERE SECTIONID ='" + this.SectionID + "' AND YEARS='" + this.Year + "' AND TREATMENT='" + strTreatment + "'"; try { DataSet ds = DBMgr.ExecuteQuery(strSelect); if (ds.Tables[0].Rows.Count > 0) { DataRow dr = ds.Tables[0].Rows[0]; double dCost = double.Parse(dr["COST_"].ToString()) * dArea * inflationRate; string budget = dr["BUDGET"].ToString(); if (!budget.Contains("|")) { dgvSummary[1, 2].Value = budget; } dgvSummary[1, 3].Value = Math.Round(dCost, 2).ToString("c"); dgvSummary[1, 4].Value = dr["YEARSANY"].ToString(); dgvSummary[1, 5].Value = dr["YEARSSAME"].ToString(); String strChangeHash = dr["CHANGEHASH"].ToString(); dgvAttribute.Rows.Clear(); string[] pairs = strChangeHash.Split(new string[] { "\n" }, StringSplitOptions.None); for (int i = 0; i < pairs.Length; i++) { if (pairs[i].Contains("\t")) { string[] attributechange = pairs[i].Split(new string[] { "\t" }, StringSplitOptions.None); dgvAttribute.Rows.Add(attributechange[0], attributechange[1]); } } } } catch (Exception exception) { labelError.Visible = true; labelError.Text = "Error: Retrieving default information from the BENEFIT_COST table." + exception.Message; } } else if (m_listTreatments.Contains(strTreatment)) { //Fill with default from Treatment table String strSelect = "SELECT BUDGET, BEFOREANY, BEFORESAME, TREATMENTID FROM TREATMENTS WHERE SIMULATIONID ='" + this.SimulationID + "' AND TREATMENT='" + strTreatment + "'"; String strTreatmentID = ""; try { DataSet ds = DBMgr.ExecuteQuery(strSelect); if (ds.Tables[0].Rows.Count == 1) { DataRow dr = ds.Tables[0].Rows[0]; dgvSummary[1, 2].Value = dr["BUDGET"].ToString(); dgvSummary[1, 4].Value = dr["BEFOREANY"].ToString(); dgvSummary[1, 5].Value = dr["BEFORESAME"].ToString(); strTreatmentID = dr["TREATMENTID"].ToString(); } } catch (Exception exception) { labelError.Visible = true; labelError.Text = "Error: Retrieving default information from the TREATMENTS table." + exception.Message; } //Get Cost information String strCost = "0"; //strSelect = "SELECT COST_ FROM COSTS WHERE TREATMENTID='" + strTreatmentID + "' AND CRITERIA=''"; //inserting '' in oracle inserts a null // TODO: Why not pull the criteria for each cost equation found, and calculate the cost for each and show them in a cost dropdown. strSelect = "SELECT COST_,CRITERIA FROM COSTS WHERE TREATMENTID='" + strTreatmentID + "'"; try { DataSet ds = DBMgr.ExecuteQuery(strSelect); if (ds.Tables[0].Rows.Count == 1) { DataRow dr = ds.Tables[0].Rows[0]; var cost = dr["COST_"]; var criteria = dr["CRITERIA"]; if (criteria == DBNull.Value) { strCost = dr["COST_"].ToString(); } else { var criteriaString = criteria.ToString(); if (String.IsNullOrWhiteSpace(criteriaString)) { strCost = dr["COST_"].ToString(); } else { var criteriaToEvaluate = new Criterias(); criteriaToEvaluate.Criteria = criteriaString; if (criteriaToEvaluate.IsCriteriaMet(m_hashAttributeValue)) { strCost = dr["COST_"].ToString(); } } } strCost = dr["COST_"].ToString(); } } catch (Exception exception) { labelError.Visible = true; labelError.Text = "Error: Retrieving default COST information from the COSTS table." + exception.Message; } List <String> listError; List <String> listAttributesEquation = Global.TryParseAttribute(strCost, out listError); // See if listAttributeEquations is included in dgvDefault CalculateEvaluate.CalculateEvaluate calculate = new CalculateEvaluate.CalculateEvaluate(); calculate.BuildTemporaryClass(strCost, true); CompilerResults m_crEquation = calculate.CompileAssembly(); object[] input = new object[listAttributesEquation.Count]; int i = 0; foreach (String attribute in listAttributesEquation) { input[i] = m_hashAttributeValue[attribute]; i++; } try { object result = calculate.RunMethod(input); dgvSummary[1, 3].Value = result.ToString(); } catch (Exception exc) { Global.WriteOutput("Error running single section. " + exc.Message); } //strSelect = "SELECT ATTRIBUTE_,CHANGE_ FROM CONSEQUENCES WHERE TREATMENTID='" + strTreatmentID + "' AND CRITERIA=''"; //inserting '' in oracle inserts a null strSelect = "SELECT ATTRIBUTE_,CHANGE_, CRITERIA FROM CONSEQUENCES WHERE TREATMENTID='" + strTreatmentID + "'"; dgvAttribute.Rows.Clear(); try { DataSet ds = DBMgr.ExecuteQuery(strSelect); foreach (DataRow dr in ds.Tables[0].Rows) { var attribute = dr["ATTRIBUTE_"]; var change = dr["CHANGE_"]; var criteria = dr["CRITERIA"]; if (criteria == DBNull.Value) { dgvAttribute.Rows.Add(dr["ATTRIBUTE_"].ToString(), dr["CHANGE_"].ToString()); } else { var criteriaString = criteria.ToString(); if (String.IsNullOrWhiteSpace(criteriaString)) { dgvAttribute.Rows.Add(dr["ATTRIBUTE_"].ToString(), dr["CHANGE_"].ToString()); } else { var criteriaToEvaluate = new Criterias(); criteriaToEvaluate.Criteria = criteriaString; if (criteriaToEvaluate.IsCriteriaMet(m_hashAttributeValue)) { dgvAttribute.Rows.Add(dr["ATTRIBUTE_"].ToString(), dr["CHANGE_"].ToString()); } } } } } catch (Exception exception) { labelError.Visible = true; labelError.Text = "Error: Loading Consequences for selected TREATMENT. " + exception.Message; } } else { //User defined treatment. Leave existing as is. } dgvSummary.Update(); dgvAttribute.Update(); }
public bool IsCriteriaMet(Hashtable hashAttributeValue) { return(_criteria.IsCriteriaMet(hashAttributeValue)); }