public async Task <ExecutionResult> Execute(ExecuteContext <ICreateOrderWithMultiItemsArguments> context) { var arguments = context.Arguments; var offers = await _office356DbOfferService.GetOffice365OffersAsync(); var orderwithDetails = new Office365OrderWithDetailsModel { Office365CustomerId = arguments.Office365CustomerId, Office365OrderDetailsModels = offers.Where( o => arguments.CloudPlusProductIdentifiers.Any(x => x.Key == o.CloudPlusProductIdentifier)) .Select(x => new Office365OrderDetailsModel() { FriendlyName = x.OfferName, Office365OfferId = x.Office365Id, Quantity = arguments.CloudPlusProductIdentifiers.Where(c => c.Key == x.CloudPlusProductIdentifier).FirstOrDefault().Value }).ToList() }; var subscriptions = await _office365SubscriptionService.CreateMultiPartnerPlatformSubscriptionsAsync(orderwithDetails); return(context.CompletedWithVariables(new CreateOrderWithMultiItemsLog { Office365CustomerId = arguments.Office365CustomerId, Office365Subscriptions = subscriptions.office365SubscriptionModels.Select(x => x.Office365SubscriptionId).ToList() }, new { Office365Subscriptions = subscriptions.office365SubscriptionModels.Select(x => x.Office365SubscriptionId).ToList(), Office365OrderId = subscriptions.OrderId })); }
public async Task <Office365OrderWithDetailsModel> CreateOrderWithMultiItemsAsync(Office365OrderWithDetailsModel orderModel) { var newOrder = new Order() { ReferenceCustomerId = orderModel.Office365CustomerId, LineItems = orderModel.Office365OrderDetailsModels.Select(x => new OrderLineItem { OfferId = x.Office365OfferId, FriendlyName = x.FriendlyName, Quantity = x.Quantity }) }; var requestSuccess = false; var attempts = 1; do { try { var createdOrder = await _partnerOperations.UserPartnerOperations .Customers.ById(orderModel.Office365CustomerId).Orders.CreateAsync(newOrder); orderModel.OrderId = createdOrder.Id; orderModel.Office365OrderDetailsModels.ForEach(x => { x.SubscriptionId = createdOrder.LineItems.Where(i => i.OfferId == x.Office365OfferId).FirstOrDefault().SubscriptionId; }); requestSuccess = true; await ConfirmCreateOrder(orderModel.Office365CustomerId, orderModel.OrderId); return(orderModel); } catch (Exception ex) { this.Log().Error($"Create order request failed! Attampt: {attempts}", ex); attempts++; await Task.Delay(3000); } } while (!requestSuccess && attempts < _retryAttempts); throw new Exception("Create order with line items request failed!"); }
//TAG public async Task <Office365OrderSubscriptionModel> CreateMultiPartnerPlatformSubscriptionsAsync(Office365OrderWithDetailsModel office365OrderModel) { var placedOrder = await _office365OrderService.CreateOrderWithMultiItemsAsync(office365OrderModel); return(new Office365OrderSubscriptionModel() { OrderId = placedOrder.OrderId, office365SubscriptionModels = placedOrder.Office365OrderDetailsModels.Select(x => new Office365SubscriptionModel { Office365CustomerId = placedOrder.Office365CustomerId, Office365SubscriptionId = x.SubscriptionId, Office365OrderId = placedOrder.OrderId, Office365FriendlyName = x.FriendlyName, Quantity = x.Quantity }).ToList() }); }