Пример #1
0
        /// <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();
        }
Пример #2
0
 public bool IsCriteriaMet(Hashtable hashAttributeValue)
 {
     return(_criteria.IsCriteriaMet(hashAttributeValue));
 }