GetRecurringCycleInfo(this IList <ShoppingCartItem> shoppingCart, ILocalizationService localizationService, IProductService productService) { var cycleLength = 0; RecurringProductCyclePeriod cyclePeriod = 0; var totalCycles = 0; int?_cycleLength = null; RecurringProductCyclePeriod?_cyclePeriod = null; int?_totalCycles = null; foreach (var sci in shoppingCart) { var product = await productService.GetProductById(sci.ProductId); if (product == null) { throw new GrandException(string.Format("Product (Id={0}) cannot be loaded", sci.ProductId)); } if (product.IsRecurring) { string conflictError = localizationService.GetResource("ShoppingCart.ConflictingShipmentSchedules"); //cycle length if (_cycleLength.HasValue && _cycleLength.Value != product.RecurringCycleLength) { return(conflictError, cycleLength, cyclePeriod, totalCycles); } _cycleLength = product.RecurringCycleLength; //cycle period if (_cyclePeriod.HasValue && _cyclePeriod.Value != product.RecurringCyclePeriod) { return(conflictError, cycleLength, cyclePeriod, totalCycles); } _cyclePeriod = product.RecurringCyclePeriod; //total cycles if (_totalCycles.HasValue && _totalCycles.Value != product.RecurringTotalCycles) { return(conflictError, cycleLength, cyclePeriod, totalCycles); } _totalCycles = product.RecurringTotalCycles; } } if (_cycleLength.HasValue && _cyclePeriod.HasValue && _totalCycles.HasValue) { cycleLength = _cycleLength.Value; cyclePeriod = _cyclePeriod.Value; totalCycles = _totalCycles.Value; } return("", cycleLength, cyclePeriod, totalCycles); }
/// <summary> /// Get a recurring cycle information /// </summary> /// <param name="shoppingCart">Shopping cart</param> /// <param name="localizationService">Localization service</param> /// <param name="cycleLength">Cycle length</param> /// <param name="cyclePeriod">Cycle period</param> /// <param name="totalCycles">Total cycles</param> /// <returns>Error (if exists); otherwise, empty string</returns> public static string GetRecurringCycleInfo(this IList <ShoppingCartItem> shoppingCart, ILocalizationService localizationService, out int cycleLength, out RecurringProductCyclePeriod cyclePeriod, out int totalCycles) { cycleLength = 0; cyclePeriod = 0; totalCycles = 0; int?_cycleLength = null; RecurringProductCyclePeriod?_cyclePeriod = null; int?_totalCycles = null; foreach (var sci in shoppingCart) { var product = sci.Product; if (product == null) { throw new NopException($"Product (Id={sci.ProductId}) cannot be loaded"); } if (product.IsRecurring) { var conflictError = localizationService.GetResource("ShoppingCart.ConflictingShipmentSchedules"); //cycle length if (_cycleLength.HasValue && _cycleLength.Value != product.RecurringCycleLength) { return(conflictError); } _cycleLength = product.RecurringCycleLength; //cycle period if (_cyclePeriod.HasValue && _cyclePeriod.Value != product.RecurringCyclePeriod) { return(conflictError); } _cyclePeriod = product.RecurringCyclePeriod; //total cycles if (_totalCycles.HasValue && _totalCycles.Value != product.RecurringTotalCycles) { return(conflictError); } _totalCycles = product.RecurringTotalCycles; } } if (_cycleLength.HasValue && _cyclePeriod.HasValue && _totalCycles.HasValue) { cycleLength = _cycleLength.Value; cyclePeriod = _cyclePeriod.Value; totalCycles = _totalCycles.Value; } return(""); }
/// <summary> /// Get a recurring cycle information /// </summary> /// <param name="shoppingCart">Shopping cart</param> /// <param name="localizationService">Localization service</param> /// <param name="cycleLength">Cycle length</param> /// <param name="cyclePeriod">Cycle period</param> /// <param name="totalCycles">Total cycles</param> /// <returns>Error (if exists); otherwise, empty string</returns> public static string GetRecurringCycleInfo(this IList <OrganizedShoppingCartItem> shoppingCart, ILocalizationService localizationService, out int cycleLength, out RecurringProductCyclePeriod cyclePeriod, out int totalCycles) { string error = ""; cycleLength = 0; cyclePeriod = 0; totalCycles = 0; int?_cycleLength = null; RecurringProductCyclePeriod?_cyclePeriod = null; int?_totalCycles = null; foreach (var sci in shoppingCart) { var product = sci.Item.Product; if (product == null) { throw new SmartException(string.Format("Product (Id={0}) cannot be loaded", sci.Item.ProductId)); } string conflictError = localizationService.GetResource("ShoppingCart.ConflictingShipmentSchedules"); if (product.IsRecurring) { // cycle length if (_cycleLength.HasValue && _cycleLength.Value != product.RecurringCycleLength) { error = conflictError; return(error); } else { _cycleLength = product.RecurringCycleLength; } // cycle period if (_cyclePeriod.HasValue && _cyclePeriod.Value != product.RecurringCyclePeriod) { error = conflictError; return(error); } else { _cyclePeriod = product.RecurringCyclePeriod; } // total cycles if (_totalCycles.HasValue && _totalCycles.Value != product.RecurringTotalCycles) { error = conflictError; return(error); } else { _totalCycles = product.RecurringTotalCycles; } } } if (_cycleLength.HasValue && _cyclePeriod.HasValue && _totalCycles.HasValue) { cycleLength = _cycleLength.Value; cyclePeriod = _cyclePeriod.Value; totalCycles = _totalCycles.Value; } return(error); }
/// <summary> /// Get a recurring cycle information /// </summary> /// <param name="shoppingCart">Shopping cart</param> /// <param name="cycleLength">Cycle length</param> /// <param name="cyclePeriod">Cycle period</param> /// <param name="totalCycles">Total cycles</param> /// <returns>Error (if exists); otherwise, empty string</returns> public static string GetRecurringCycleInfo(this IList <ShoppingCartItem> shoppingCart, out int cycleLength, out RecurringProductCyclePeriod cyclePeriod, out int totalCycles) { string error = ""; cycleLength = 0; cyclePeriod = 0; totalCycles = 0; int?_cycleLength = null; RecurringProductCyclePeriod?_cyclePeriod = null; int?_totalCycles = null; foreach (var sci in shoppingCart) { var productVariant = sci.ProductVariant; if (productVariant == null) { throw new NopException(string.Format("Product variant (Id={0}) cannot be loaded", sci.ProductVariantId)); } string conflictError = "Your cart has auto-ship (recurring) items with conflicting shipment schedules. Only one auto-ship schedule is allowed per order."; if (productVariant.IsRecurring) { //cycle length if (_cycleLength.HasValue && _cycleLength.Value != productVariant.RecurringCycleLength) { error = conflictError; return(error); } else { _cycleLength = productVariant.RecurringCycleLength; } //cycle period if (_cyclePeriod.HasValue && _cyclePeriod.Value != productVariant.RecurringCyclePeriod) { error = conflictError; return(error); } else { _cyclePeriod = productVariant.RecurringCyclePeriod; } //total cycles if (_totalCycles.HasValue && _totalCycles.Value != productVariant.RecurringTotalCycles) { error = conflictError; return(error); } else { _totalCycles = productVariant.RecurringTotalCycles; } } } if (!_cycleLength.HasValue || !_cyclePeriod.HasValue || !_totalCycles.HasValue) { error = "No recurring products"; } else { cycleLength = _cycleLength.Value; cyclePeriod = _cyclePeriod.Value; totalCycles = _totalCycles.Value; } return(error); }