public virtual async Task <RecurringOrderCartsRescheduleResultViewModel> UpdateRecurringOrderCartNextOccurenceAsync(UpdateRecurringOrderCartNextOccurenceParam param) { if (!RecurringOrdersSettings.Enabled) { return(new RecurringOrderCartsRescheduleResultViewModel()); } if (param == null) { throw new ArgumentNullException(nameof(param), ArgumentNullMessageFormatter.FormatErrorMessage(nameof(param))); } //get customer cart var cart = await CartRepository.GetCartAsync(new GetCartParam { CartName = param.CartName, CultureInfo = param.CultureInfo, CustomerId = param.CustomerId, Scope = param.Scope, ExecuteWorkflow = false }).ConfigureAwait(false); var originalCartName = param.CartName; //get customer recurring lineitems var listOfRecurringLineItems = await RecurringOrdersRepository.GetRecurringOrderTemplates(param.Scope, param.CustomerId); if (listOfRecurringLineItems == null) { throw new InvalidOperationException($"Recurring lineItems for customer {param.CustomerId} not found"); } var recurringLineItem = new RecurringOrderLineItem(); var continueShipment = true; //We need to conserve the same time foreach (var shipment in cart.Shipments) { foreach (var lineitem in shipment.LineItems) { if (RecurringOrderCartHelper.IsRecurringOrderLineItemValid(lineitem)) { var recurringOrderLineitem = listOfRecurringLineItems.RecurringOrderLineItems?.FirstOrDefault(l => RecurringOrderTemplateHelper.IsLineItemAndRecurringTemplateLineItemSameProduct(lineitem, l)); if (recurringOrderLineitem != null) { recurringLineItem = recurringOrderLineitem; continueShipment = false; break; } } } if (!continueShipment) { break; } } var newDate = param.NextOccurence; if (Guid.Empty != recurringLineItem.RecurringOrderLineItemId) { var nextOccurenceWithTime = recurringLineItem.NextOccurence; newDate = new DateTime(param.NextOccurence.Year, param.NextOccurence.Month, param.NextOccurence.Day, nextOccurenceWithTime.Hour, nextOccurenceWithTime.Minute, nextOccurenceWithTime.Second, DateTimeKind.Utc); } var listOfRecurringOrderLineItemsUpdated = await CartRepository.RescheduleRecurringCartAsync(new RescheduleRecurringCartParam() { CustomerId = param.CustomerId, NextOccurence = newDate, Scope = param.Scope, CartName = param.CartName }); var vm = new RecurringOrderCartsRescheduleResultViewModel(); var carts = await CartRepository.GetRecurringCartsAsync(new GetRecurringOrderCartsViewModelParam { BaseUrl = param.BaseUrl, Scope = param.Scope, CustomerId = param.CustomerId, CultureInfo = param.CultureInfo }); vm.RescheduledCartHasMerged = !carts.Any(rc => string.Compare(rc.Name, originalCartName, StringComparison.OrdinalIgnoreCase) == 0); var cartsVm = await GetRecurringOrderCartListViewModelFromCartsAsync(new GetRecurringOrderCartsViewModelFromCartsParam { Carts = carts, BaseUrl = param.BaseUrl, CultureInfo = param.CultureInfo }); vm.RecurringOrderCartsViewModel = cartsVm; var url = RecurringCartUrlProvider.GetRecurringCartsUrl(new GetRecurringCartsUrlParam { CultureInfo = param.CultureInfo }); vm.RecurringCartsUrl = url; return(vm); }
public virtual Task <List <ProductMainImage> > GetImageUrlsAsync(RecurringOrderLineItem lineItem) { return(GetImageUrlsAsync(new[] { (lineItem.ProductId, lineItem.VariantId) }));
public static bool IsLineItemAndRecurringTemplateLineItemSameProduct(LineItem lineItem, RecurringOrderLineItem recurringOrderLineItem) { return(IsLineItemAndRecurringTemplateLineItemSameProduct(lineItem.ProductId, lineItem.VariantId, recurringOrderLineItem.ProductId, recurringOrderLineItem.VariantId)); }