private void ApplyButton_Click(object sender, EventArgs e) { int age = int.Parse(AgeTextBox.Text); bool isStudent = StudentCheckBox.Checked; int income = int.Parse(IncomeTextBox.Text); BundleItem bundleItem = (BundleItem)BundleSelection.SelectedItem; if (!RulesValidator.Validate(_config.Bundles[bundleItem.BundleID].Rules, age, isStudent, income, null)) { Bundle bundle = _config.Bundles[bundleItem.BundleID]; string errorMessage = GetErrorMessage(bundle.Rules, string.Format(BUNDLE_SENDER_FORMAT, bundle.Name)); MessageBox.Show(errorMessage, ERROR_CAPTION, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } else { List <string> selectedProducts = new List <string>(); for (int i = 0; i < AccountsContainer.Controls.Count; ++i) { RadioButton radioButton = (RadioButton)AccountsContainer.Controls[i]; if (radioButton.Checked) { ProductItem productItem = (ProductItem)radioButton.Tag; selectedProducts.Add(productItem.ProductID); break; } } var checkedItems = ProductList.CheckedItems.GetEnumerator(); while (checkedItems.MoveNext()) { ProductItem productItem = (ProductItem)checkedItems.Current; selectedProducts.Add(productItem.ProductID); } for (int i = 0; i < selectedProducts.Count; ++i) { Product product = _config.Products[selectedProducts[i]]; if (!RulesValidator.Validate(product.Rules, age, isStudent, income, selectedProducts)) { string errorMessage = GetErrorMessage(product.Rules, string.Format(PRODUCT_SENDER_FORMAT, product.Name)); MessageBox.Show(errorMessage, ERROR_CAPTION, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } } UpdateCurrentBundle(); }
public string Evaluate(int age, bool isStudent, int income) { var enumerator = _config.Bundles.GetEnumerator(); List <string> eligibleBundles = new List <string>(); while (enumerator.MoveNext()) { Bundle bundle = enumerator.Current.Value; if (RulesValidator.Validate(bundle.Rules, age, isStudent, income, null)) { eligibleBundles.Add(enumerator.Current.Key); } } if (eligibleBundles.Count > 1) { return(GetBestValueBundle(eligibleBundles)); } else if (eligibleBundles.Count == 1) { return(eligibleBundles[0]); } return(string.Empty); }