public PurchasePolicyData ToPurchasePolicyData(PurchasePolicy policyData) { if (policyData.GetType() == typeof(ProductPurchasePolicy)) { int policyProdutId = ((ProductPurchasePolicy)policyData).ProductId; int preCondition = ((ProductPurchasePolicy)policyData).PreCondition.PreConditionNumber; return(new PurchasePolicyProductData(preCondition, policyProdutId)); } else if (policyData.GetType() == typeof(BasketPurchasePolicy)) { int preCondition = ((BasketPurchasePolicy)policyData).PreCondition.PreConditionNumber; return(new PurchasePolicyBasketData(preCondition)); } else if (policyData.GetType() == typeof(SystemPurchasePolicy)) { int storeId = ((SystemPurchasePolicy)policyData).StoreId; int preCondition = ((SystemPurchasePolicy)policyData).PreCondition.PreConditionNumber; return(new PurchasePolicySystemData(preCondition, storeId)); } else if (policyData.GetType() == typeof(UserPurchasePolicy)) { int preCondition = ((UserPurchasePolicy)policyData).PreCondition.PreConditionNumber; return(new PurchasePolicyUserData(preCondition)); } else if (policyData.GetType() == typeof(CompundPurchasePolicy)) { int mergetype = ((CompundPurchasePolicy)policyData).mergeType; List <PurchasePolicy> policies = ((CompundPurchasePolicy)policyData).getChildren(); List <PurchasePolicyData> retList = new List <PurchasePolicyData>(); foreach (PurchasePolicy policy in policies) { PurchasePolicyData newPolicyData = ToPurchasePolicyData(policy); retList.Add(newPolicyData); } return(new CompoundPurchasePolicyData(mergetype, retList)); } return(new PurchasePolicyData()); // not reached }
private Tuple <bool, string> IsValidPurchasePolicy(PurchasePolicy purchasePolicy) { if (purchasePolicy.GetType() == typeof(ProductPurchasePolicy)) { int policyProdutId = ((ProductPurchasePolicy)purchasePolicy).ProductId; if (!Inventory.InvProducts.ContainsKey(policyProdutId)) { return(new Tuple <bool, string>(false, CommonStr.InventoryErrorMessage.ProductNotExistErrMsg)); } int preCondition = ((ProductPurchasePolicy)purchasePolicy).PreCondition.PreConditionNumber; if (!(CommonStr.PurchasePreCondition.pre_min <= preCondition && preCondition <= CommonStr.PurchasePreCondition.pre_max)) { return(new Tuple <bool, string>(false, CommonStr.PoliciesErrors.PreConditionNumberErr)); } return(new Tuple <bool, string>(true, "")); } else if (purchasePolicy.GetType() == typeof(BasketPurchasePolicy)) { int preCondition = ((BasketPurchasePolicy)purchasePolicy).PreCondition.PreConditionNumber; if (!(CommonStr.PurchasePreCondition.pre_min <= preCondition && preCondition <= CommonStr.PurchasePreCondition.pre_max)) { return(new Tuple <bool, string>(false, CommonStr.PoliciesErrors.PreConditionNumberErr)); } return(new Tuple <bool, string>(true, "")); } else if (purchasePolicy.GetType() == typeof(SystemPurchasePolicy)) { int preCondition = ((SystemPurchasePolicy)purchasePolicy).PreCondition.PreConditionNumber; if (!(CommonStr.PurchasePreCondition.pre_min <= preCondition && preCondition <= CommonStr.PurchasePreCondition.pre_max)) { return(new Tuple <bool, string>(false, CommonStr.PoliciesErrors.PreConditionNumberErr)); } return(new Tuple <bool, string>(true, "")); } else if (purchasePolicy.GetType() == typeof(UserPurchasePolicy)) { int preCondition = ((UserPurchasePolicy)purchasePolicy).PreCondition.PreConditionNumber; if (!(CommonStr.PurchasePreCondition.pre_min <= preCondition && preCondition <= CommonStr.PurchasePreCondition.pre_max)) { return(new Tuple <bool, string>(false, CommonStr.PoliciesErrors.PreConditionNumberErr)); } return(new Tuple <bool, string>(true, "")); } else if (purchasePolicy.GetType() == typeof(CompundPurchasePolicy)) { int mergetype = ((CompundPurchasePolicy)purchasePolicy).mergeType; if (!(0 <= mergetype && mergetype <= 2)) { return(new Tuple <bool, string>(false, CommonStr.PoliciesErrors.MergeTypeErr)); } List <PurchasePolicy> policies = ((CompundPurchasePolicy)purchasePolicy).getChildren(); foreach (PurchasePolicy children in policies) { Tuple <bool, string> isChildrenValid = IsValidPurchasePolicy(children); if (!isChildrenValid.Item1) { return(isChildrenValid); } } return(new Tuple <bool, string>(true, "")); } return(null); // not reached }