private void browser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
        {
            //e.Cancel = true;
            string urlString = e.Url.ToString();
            int    i         = urlString.IndexOf("#link");

            if (i >= 0)
            {
                string link = urlString.Substring(i);
                Console.WriteLine(link);
                e.Cancel = true;

                RuleValue       rv            = links[link];
                DPModifyControl modifyControl = rv.DataProvider.GetModifyUserInterface();
                var             form          = DPControlContainerModifyForm.CreateForm(modifyControl);

                WinForms.SetFormRelativePosition(form, this, FormRelativePosition.LEFT);
                DialogResult dialogResult = form.ShowDialog(this);

                if (dialogResult == DialogResult.OK)
                {
                    rv.DataProvider.UpdateProviderFromPropertyValues();
                    DisplayTradeDescription();
                }
            }
        }
예제 #2
0
 public bool CompareTo(RuleValue value1, RuleValue value2)
 {
     if (value1.IsNumeric && value2.IsNumeric)
     {
         return((double)value1 < (double)value2);
     }
     else if (value1.IsText && value2.IsText)
     {
         return(value1.ToString().CompareTo(value2.ToString()) < 0);
     }
     else if (value1.IsTime && value2.IsTime)
     {
         return(((DateTime)value1).CompareTo((DateTime)value2) < 0);
     }
     else if (value1.IsTimeSpan && value2.IsTimeSpan)
     {
         TimeSpan ts1 = (TimeSpan)value1;
         TimeSpan ts2 = (TimeSpan)value2;
         return(ts1.CompareTo(ts2) < 0);
     }
     else
     {
         throw new ArgumentException("CompareTo does not work with the value types provided.");
     }
 }
예제 #3
0
        public static TradeRule LoadRule(string ruleFileName)
        {
            TradeRule rule = null;

            try
            {
                XmlSaveRule xsr = (XmlSaveRule)EZAPI.Toolbox.Serialization.Xml.Deserialize(typeof(XmlSaveRule), ruleFileName);

                rule        = new TradeRule(xsr.Name, xsr.RuleCombination, xsr.RuleType);
                rule.Active = xsr.Active;

                foreach (var xsrc in xsr.RuleConditions)
                {
                    IDataProvider dataProvider1 = MonkeyFactory.CreateDataProviderInstance(xsrc.Value1.Name);
                    IDataProvider dataProvider2 = MonkeyFactory.CreateDataProviderInstance(xsrc.Value2.Name);
                    dataProvider1.SaveData = xsrc.Value1;
                    dataProvider2.SaveData = xsrc.Value2;

                    RuleValue       value1    = new RuleValue(dataProvider1);
                    RuleValue       value2    = new RuleValue(dataProvider2);
                    IRuleComparison compare   = MonkeyFactory.CreateRuleComparisonInstance(xsrc.Compare.Name);
                    RuleCondition   condition = new RuleCondition(value1, compare, value2);

                    rule.AddRuleCondition(condition);
                }
            }
            catch (Exception ex)
            {
                // If there is a problem loading the rule, then we return null (not some partial rule).
                rule = null;
                ExceptionHandler.TraceException(ex);
            }

            return(rule);
        }
예제 #4
0
        public double?GetNumericValue(string name, SearchOptions searchOptions)
        {
            var    v = new RuleValue(GetValue(name, searchOptions));
            double?nv;

            v.TryGetNumericValue(out nv);
            return(nv);
        }
예제 #5
0
        public List <RuleValue> GetDiscount(QuoteParameter quoteParameter)
        {
            //decimal totalDiscount = 0;
            var quoteItems = new List <RuleValue>();

            var employeeQuoteItem = new RuleValue()
            {
                ParameterValue = quoteParameter.EmployeeName,
                Description    = _discountName,
                Cost           = _baseAnnualCostPerEmployee,
                DiscountAmount = 0
            };

            // 10% discount rule
            if (quoteParameter.EmployeeName.Trim().ToLower().StartsWith("a"))
            {
                decimal discountAmount = _baseAnnualCostPerEmployee * _discountPercent;
                //totalDiscount += discountAmount;

                employeeQuoteItem.IsDiscountApplied = true;
                employeeQuoteItem.DiscountAmount    = discountAmount;
            }
            quoteItems.Add(employeeQuoteItem);

            if (quoteParameter.Dependents != null)
            {
                foreach (string name in quoteParameter.Dependents)
                {
                    var quoteItem = new RuleValue()
                    {
                        ParameterValue = name,
                        Description    = _discountName,
                        Cost           = _annualCostPerDependent,
                        DiscountAmount = 0
                    };

                    if (name.Trim().ToLower().StartsWith("a"))
                    {
                        decimal discountAmount = _annualCostPerDependent * _discountPercent;
                        //totalDiscount += discountAmount;

                        quoteItem.IsDiscountApplied = true;
                        quoteItem.DiscountAmount    = discountAmount;
                    }

                    quoteItems.Add(quoteItem);
                }

                //                var numberOfDependentsEligibleForDiscount = quoteParameter.Dependents
                //                    .Count(name => name.Trim().ToLower().StartsWith("a"));
                //
                //                totalDiscount += (_annualCostPerDependent * _discountPercent) * (decimal) numberOfDependentsEligibleForDiscount;
            }

            return(quoteItems);
        }
예제 #6
0
        public bool IsValid(RuleValue value1, RuleValue value2)
        {
            bool result = false;

            if (value1.IsTime && value2.IsTimeRange)
            {
                result = true;
            }

            return(result);
        }
예제 #7
0
 public bool CompareTo(RuleValue value1, RuleValue value2)
 {
     if (value1.IsTime && value2.IsTimeRange)
     {
         ITimeRange tr = value2.Value as ITimeRange;
         DateTime   dt = Convert.ToDateTime(value1.Value);
         SimpleTime st = SimpleTime.FromDateTime(dt);
         return(tr.ContainsTime(st));
     }
     else
     {
         throw new ArgumentException("CompareTo does not work with the value types provided.");
     }
 }
예제 #8
0
 public bool TryGetValue(string name, SearchOptions searchOptions, out RuleValue value, out string error)
 {
     error = "";
     try
     {
         value = new RuleValue(GetAttributeValue(name, searchOptions));
     }
     catch (Exception e)
     {
         value = null;
         error = e.Message;
         return(false);
     }
     return(true);
 }
        public RuleConditionForm(RuleCondition condition) : this()
        {
            this.condition = condition;

            RuleValue       v1      = condition.Value1;
            RuleValue       v2      = condition.Value2;
            IRuleComparison compare = condition.Comparison;

            throw new NotImplementedException();

            /*if (v1.IsNumeric)
             * {
             *  comboValue1.SelectedItem = "USER_NUMBER";
             *  numericValue1.Value = v1;
             * }
             * else if (v1.ValueType == RuleValueType.TEXT)
             * {
             *  comboValue1.SelectedItem = "USER_TEXT";
             *  textValue1.Text = v1;
             * }
             *
             * if (v2.IsNumeric)
             * {
             *  comboValue2.SelectedItem = "USER_NUMBER";
             *  numericValue2.Value = v2;
             * }
             * else if (v2.ValueType == RuleValueType.TEXT)
             * {
             *  comboValue2.SelectedItem = "USER_TEXT";
             *  textValue2.Text = v2;
             * }
             *
             * for (int i=0; i<comboCompare.Items.Count; i++)
             * {
             *  if (comboCompare.Items[i].ToString().StartsWith(compare.Name))
             *  {
             *      comboCompare.SelectedIndex = i;
             *      break;
             *  }
             * }*/
        }
예제 #10
0
        public bool IsValid(RuleValue value1, RuleValue value2)
        {
            bool result = false;

            if (value1.IsNumeric && value2.IsNumeric)
            {
                result = true;
            }
            else if (value1.IsText && value2.IsText)
            {
                result = true;
            }
            else if (value1.IsTime && value2.IsTime)
            {
                result = true;
            }
            else if (value1.IsTimeSpan && value2.IsTimeSpan)
            {
                result = true;
            }

            return(result);
        }
        public static FilterRule CreateFilterRule(FieldConfig parentFieldConfig, string cultureCode, string field, OperatorEnum fieldOperator, RuleValue lowerValue, RuleValue upperValue)
        {
            var fieldConfig   = GetField(parentFieldConfig, field);
            var cultureSuffix = fieldConfig != null && fieldConfig.MultiLanguage ? "." + cultureCode : string.Empty;
            var indexType     = GetFieldType(fieldConfig != null ? fieldConfig.IndexType : string.Empty);

            if (fieldConfig == null || fieldConfig.Index == false)
            {
                // throw new Exception($"You want me to search in field {field} but it is not indexed. Please fix your index.json.");
            }
            var rule = new FilterRule()
            {
                Field         = field + cultureSuffix,
                FieldOperator = fieldOperator,
                FieldType     = indexType,
                LowerValue    = lowerValue,
                UpperValue    = upperValue
            };

            return(rule);
        }
예제 #12
0
		private void SolveOverlapValue(RuleSet rule, RuleValue value)
		{
			if (value.IsSolved())
				return;

			int range = (value.maxIndex - value.minIndex) + 1;
			if (range < value.mValue * 2) // we have some overlap, and therefore some guaranteed squares
			{
				int offset = range - value.mValue;
				for (int idx = offset; idx < value.mValue; ++idx)
				{
					if (rule.mID == RuleID.RI_ROW)
						SetBoardValue(idx + value.minIndex, rule.mIndex, SquareType.ST_BLACK);
					else
						SetBoardValue(rule.mIndex, idx + value.minIndex, SquareType.ST_BLACK);
				}
			}
		}
        private void comboValue2_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (settingComboValue == true)
            {
                return;
            }

            ShowTrueFalseBox(false);

            string dataProviderName = comboValue2.Text;

            dataProvider2 = (IDataProvider)Activator.CreateInstance(dataProviders[dataProviderName]);

            txtDescription.Text = dataProvider2.Name + ": " + dataProvider2.Description;

            DialogResult dialogResult = System.Windows.Forms.DialogResult.Cancel;

            // See if we need to display a UI for this data provider.
            if (dataProvider2.GetModifyUserInterface() != null)
            {
                DPModifyControl modifyControl = dataProvider2.GetModifyUserInterface();
                Size            controlSize   = modifyControl.Size;
                var             dpModifyForm  = new DPControlContainerModifyForm();
                dpModifyForm.Width  = controlSize.Width + 16;
                dpModifyForm.Height = controlSize.Height + 112;
                Panel panel = dpModifyForm.Controls["panelControl"] as Panel;
                panel.Controls.Add(modifyControl);
                modifyControl.Dock = DockStyle.Fill;

                WinForms.SetFormRelativePosition(dpModifyForm, this, FormRelativePosition.RIGHT);
                dialogResult = dpModifyForm.ShowDialog(this);

                if (dialogResult == DialogResult.OK)
                {
                    dataProvider2.UpdateProviderFromPropertyValues();
                }
                else
                {
                    ResetComboValue2();
                }
            }

            if (dataProvider2.GetModifyUserInterface() == null || dialogResult == System.Windows.Forms.DialogResult.OK)
            {
                previousComboValue2      = comboValue2.SelectedIndex;
                ruleValue2               = new RuleValue(dataProvider2);
                ruleValue2.ValueUpdated += ruleValue_ValueUpdated;
                DPDisplayControl displayControl = ruleValue2.DataProvider.GetDisplayUserInterface();
                panelValue2UI.Controls.Clear();
                panelValue2UI.Controls.Add(displayControl);
                displayControl.Dock = DockStyle.Fill;

                dataProvider2.UpdateProviderFromPropertyValues();

                if (dataProvider2.GetModifyUserInterface() == null)
                {
                    displayControl.Cursor = Cursors.Default;
                }
                else
                {
                    displayControl.Cursor = Cursors.Hand;
                    displayControl.Click += displayControl2_Click;
                }

                CheckConditionEnableTest();
            }
        }
예제 #14
0
        public static FilterRule CreateFilterRule(FieldConfig config, string cultureCode, string field, OperatorEnum fieldOperator, RuleValue lowerValue, RuleValue upperValue)
        {
            var fieldConfig   = GetField(config, field);
            var cultureSuffix = fieldConfig != null && fieldConfig.MultiLanguage ? "." + cultureCode : string.Empty;
            var indexType     = GetFieldType(fieldConfig != null ? fieldConfig.IndexType : string.Empty);
            var rule          = new FilterRule()
            {
                Field         = field + cultureSuffix,
                FieldOperator = fieldOperator,
                FieldType     = indexType,
                LowerValue    = lowerValue,
                UpperValue    = upperValue
            };

            return(rule);
        }
예제 #15
0
 public bool TryGetValue(string name, SearchOptions searchOptions, out RuleValue value, out string error)
 {
     throw new NotImplementedException();
 }
예제 #16
0
		private void RedeuceValues(RuleSet rule, RuleValue value, Direction dir)
		{
		}
예제 #17
0
		private void RedeuceValuesMinMax(RuleSet rule, RuleValue value)
		{
			int x, y;
			//if (rule.mID == RuleID.RI_ROW)
			//{
			//	RedeuceValues
			//	x = direction == Direction.RIGHT ? value.minIndex : value.maxIndex;
			//	y = rule.mIndex;
			//}
			//else
			//{
			//	x = rule.mIndex;
			//	y = direction == Direction.DOWN ? value.minIndex : value.maxIndex;
			//}
			//int idx = GetIndex(x, y);
		}
예제 #18
0
		private bool BleedValue(RuleSet rule, RuleValue value, Direction direction)
		{
			int x, y;
			if(rule.mID == RuleID.RI_ROW)
			{
				x = direction == Direction.RIGHT ? value.minIndex : value.maxIndex;
				y = rule.mIndex;
			}
			else
			{
				x = rule.mIndex;
				y = direction == Direction.DOWN ? value.minIndex : value.maxIndex;
			}
			int idx = GetIndex(x, y);

			// Have we already found our start position?
			if (mBoard[idx] == SquareType.ST_BLACK)
			{
				bool canContinue = false;
				for (int i = 0; i < value.mValue; ++i)
				{
					SetBoardValue(idx, SquareType.ST_BLACK);
					value.AddIndex(idx);
					canContinue = ShiftIndex(ref idx, direction);
				}
				if (canContinue)
					SetBoardValue(idx, SquareType.ST_WHITE);

				value.ClampMinMax(rule.GetBleedValue(x, y), value.mValue - 1, direction);

				return true;
			}

			bool foundPortion = false;
			bool isValid = false;
			for (int i = 0; i < value.mValue; ++i)
			{
				if (mBoard[idx] == SquareType.ST_UNKNOWN)
				{
					if (foundPortion) // If we already found a portion of ourselves, it's impossible for this to not be black
					{
						SetBoardValue(idx, SquareType.ST_BLACK);
						//if (direction == Direction.RIGHT || direction == Direction.DOWN)
						//value.ClampMinMax(i + (value.mValue - 1));
						value.ClampMinMax(rule.GetBleedValue(x, y),  i + (value.mValue - 1), direction);
						//else
						//	value.ClampMinMax(value.maxIndex - i - (value.mValue - 1));
					}
					isValid = ShiftIndex(ref idx, direction);

					continue;
				}

				if (mBoard[idx] == SquareType.ST_WHITE) // It's not possible to fit in this space. Blank it out, and move ourselves forward
				{
					Debug.Assert(foundPortion == false); // It shouldn't be possible to have found a portion of ourselves, and then run out of room.

					int initIdx = GetIndex(x, y);
					for (int j = 0; j < i; ++j)
					{
						SetBoardValue(initIdx, SquareType.ST_WHITE);
						ShiftIndex(ref initIdx, direction);
					}

					if (direction == Direction.RIGHT || direction == Direction.DOWN)
						value.minIndex += (i + 1);
					else
						value.maxIndex -= (i+1);

					return BleedValue(rule, value, direction);
				}

				if (mBoard[idx] == SquareType.ST_BLACK)
				{
					if (!foundPortion) // special case. We can sometimes reduce our max range by 1 if this would make two black runs collide
					{
						int p;
						if (GetIndexOffset(idx, value.mValue, direction, rule, out p))
						{
							if (mBoard[p] == SquareType.ST_BLACK)
							{
								value.ClampMinMax(rule.GetBleedValue(x, y), i + (value.mValue - 2), direction);
							}
						}
					}

					foundPortion = true;
					//if (direction == Direction.RIGHT || direction == Direction.DOWN)
					//	value.SetMaxIndex(value.minIndex + i + (value.mValue - 1));
					//else
					//	value.SetMinIndex(value.maxIndex - i - (value.mValue - 1));
					value.ClampMinMax(rule.GetBleedValue(x, y), i + (value.mValue - 1), direction);
				}

				isValid = ShiftIndex(ref idx, direction);
			}

			if (isValid)
			{
				if (foundPortion && mBoard[idx] == SquareType.ST_WHITE)
				{
					SetBoardValue(x, y, SquareType.ST_BLACK);
					BleedValue(rule, value, direction);
				}
				else if (mBoard[idx] == SquareType.ST_BLACK)
				{
					int initIdx = GetIndex(x, y);
					while (isValid && mBoard[idx] == SquareType.ST_BLACK)
					{
						SetBoardValue(initIdx, SquareType.ST_WHITE);
						if (direction == Direction.RIGHT || direction == Direction.DOWN)
							++value.minIndex;
						else
							--value.maxIndex;

						ShiftIndex(ref initIdx, direction);
						isValid = ShiftIndex(ref idx, direction);
					}
				}
			}

			return false;
		}