public MAlertRule[] GetRules(bool reload)
        {
            if (m_rules != null && !reload)
            {
                return(m_rules);
            }
            String sql = "SELECT * FROM AD_AlertRule "
                         + "WHERE isactive='Y' AND AD_Alert_ID=" + GetAD_Alert_ID();
            List <MAlertRule> list = new List <MAlertRule>();

            DataSet ds = DB.ExecuteDataset(sql);

            try
            {
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    MAlertRule mAlertRule = new MAlertRule(GetCtx(), dr, null);
                    ValidateAlertRuleCondition(mAlertRule);
                    list.Add(mAlertRule);
                }
            }
            catch (Exception e)
            {
                log.Log(Level.SEVERE, sql, e);
            }
            //
            m_rules = new MAlertRule[list.Count()];
            m_rules = list.ToArray();
            return(m_rules);
        }       //	getRules
        /**
         *  Alert Condition
         *	@param alert alert
         *	@return true if processed
         */
        public bool ValidateAlertRuleCondition(MAlertRule AlertRule)
        {
            bool   returnConditionValue = true;
            int    errorType            = 0;
            string Sql        = "SELECT object_name FROM all_objects WHERE object_type IN ('TABLE','VIEW') AND (object_name)  = UPPER('AD_ALERTRULECONDITION') AND OWNER LIKE '" + DB.GetSchema() + "'";
            string ObjectName = Convert.ToString(DB.ExecuteScalar(Sql));

            if (ObjectName != "")
            {
                //Fetch All Alert Condition Against AlertID.............
                DataSet dsAlertCondition = DB.ExecuteDataset("select ad_alertRulecondition_id from ad_alertRulecondition where ad_alertrule_ID=" + AlertRule.GetAD_AlertRule_ID() + " and isactive='Y' order by sequence,ad_alertrulecondition_id");
                //IF No Alert Condition Find then return true otherwise Follow further Condition............
                if (dsAlertCondition != null && dsAlertCondition.Tables[0].Rows.Count > 0)
                {
                    for (int i = 0; i < dsAlertCondition.Tables[0].Rows.Count; i++)
                    {
                        decimal  numericValue   = 0;
                        string   stringValue    = "";
                        DateTime dateValue      = new DateTime();
                        bool     validateResult = false;
                        errorType = 0;
                        int alertConditionID = Convert.ToInt32(dsAlertCondition.Tables[0].Rows[i]["ad_alertRulecondition_id"]);

                        X_AD_AlertRuleCondition alertCondition = new X_AD_AlertRuleCondition(AlertRule.GetCtx(), alertConditionID, null);
                        string sqlQuery = alertCondition.GetSqlQuery();

                        try
                        {
                            if (alertCondition.GetSqlQuery().ToLower().Trim().StartsWith("select"))
                            {
                                //Check What is the return type of Query. if Query retrun more than one record than throw error............
                                if (alertCondition.GetReturnValueType() == X_AD_AlertRuleCondition.RETURNVALUETYPE_Number) //Numeric Value
                                {
                                    errorType = 1;                                                                         //if error occured in following query than used in catch
                                    if (DB.ExecuteScalar(sqlQuery) == DBNull.Value || DB.ExecuteScalar(sqlQuery) == null)
                                    {
                                        numericValue = Convert.ToDecimal(0);
                                    }
                                    else
                                    {
                                        numericValue = Convert.ToDecimal(DB.ExecuteScalar(sqlQuery));
                                    }
                                    errorType = 2;//if error occured in following comparison then used in catch
                                    //This function Match condition on Query Return Value and User's enterd Value based on users Selected Operator...........
                                    validateResult = EvaluateNumaricLogic(numericValue, Convert.ToDecimal(alertCondition.GetAlphaNumValue()), alertCondition.GetOperator());
                                }
                                else if (alertCondition.GetReturnValueType() == X_AD_AlertRuleCondition.RETURNVALUETYPE_String) //String Value
                                {
                                    errorType = 1;                                                                              //if error occured in following query than used in catch
                                    if (DB.ExecuteScalar(sqlQuery) == DBNull.Value || DB.ExecuteScalar(sqlQuery) == null)
                                    {
                                        stringValue = "";
                                    }
                                    else
                                    {
                                        stringValue = Convert.ToString(DB.ExecuteScalar(sqlQuery));
                                    }
                                    errorType = 2;//if error occured in following comparison then used in catch
                                    //This function Match condition on Query Return Value and User's enterd Value based on users Selected Operator...........
                                    validateResult = EvaluateStringLogic(stringValue, alertCondition.GetAlphaNumValue(), alertCondition.GetOperator());
                                }
                                else if (alertCondition.GetReturnValueType() == X_AD_AlertRuleCondition.RETURNVALUETYPE_Date)// Date Value
                                {
                                    // this Date Section is not implemented in Alert Return Value Type List.......................

                                    errorType = 1; //if error occured in following query than used in catch
                                    dateValue = Convert.ToDateTime(DB.ExecuteScalar(sqlQuery));
                                    errorType = 2; //if error occured in following comparison then used in catch
                                    //This function Match condition on Query Return Value and User's enterd Value based on users Selected Operator...........
                                    validateResult = EvaluateDateLogic(dateValue, Convert.ToDateTime(alertCondition.GetDateValue()), alertCondition.GetOperator(), alertCondition.IsDynamic(), alertCondition.GetDateOperation(), alertCondition.GetDay(), alertCondition.GetMONTH(), alertCondition.GetYEAR());
                                }
                                //if we Find multiple condition against same alert then we have to find on the basis of And OR
                                if (i != 0)
                                {
                                    if (X_AD_AlertRuleCondition.ANDOR_Or.Equals(alertCondition.GetAndOr()))
                                    {
                                        returnConditionValue = returnConditionValue || validateResult;
                                    }
                                    else
                                    {
                                        returnConditionValue = returnConditionValue && validateResult;
                                    }
                                }
                                else
                                {
                                    returnConditionValue = validateResult;
                                }
                            }
                            else
                            {
                                returnConditionValue = false;
                                AlertRule.SetErrorMsg("Conditional Sequence Number " + alertCondition.GetSequence() + " Error= Only Execute Select Query");
                                AlertRule.SetIsValid(false);
                                AlertRule.Save();
                                return(false);
                            }
                        }
                        catch (Exception e)
                        {
                            returnConditionValue = false;
                            if (errorType == 1)
                            {
                                AlertRule.SetErrorMsg("Conditional Sequence Number " + alertCondition.GetSequence() + " Select Error=" + e.Message);
                            }
                            else
                            {
                                AlertRule.SetErrorMsg("Conditional Sequence Number " + alertCondition.GetSequence() + " Comparison Error=" + e.Message);
                            }
                            AlertRule.SetIsValid(false);
                            AlertRule.Save();
                            return(false);
                        }
                    }
                }
                else
                {
                    returnConditionValue = true;
                }
            }
            else
            {
                returnConditionValue = true;
            }
            if (AlertRule.GetErrorMsg() == null || AlertRule.GetErrorMsg() == string.Empty)
            {
                AlertRule.SetIsValid(returnConditionValue);
                AlertRule.Save();
            }
            return(returnConditionValue);
        }