/// <summary> /// Executes a task /// </summary> public async Task Execute() { var auctionsToEnd = await _auctionService.GetAuctionsToEnd(); foreach (var auctionToEnd in auctionsToEnd) { var bid = (await _auctionService.GetBidsByProductId(auctionToEnd.Id)).OrderByDescending(x => x.Amount).FirstOrDefault(); if (bid == null) { await _auctionService.UpdateAuctionEnded(auctionToEnd, true); await _messageProviderService.SendAuctionEndedStoreOwnerMessage(auctionToEnd, _languageSettings.DefaultAdminLanguageId, null); continue; } var warnings = await _shoppingCartService.AddToCart(await _customerService.GetCustomerById(bid.CustomerId), bid.ProductId, Domain.Orders.ShoppingCartType.Auctions, bid.StoreId, bid.WarehouseId, customerEnteredPrice : bid.Amount, getRequiredProductWarnings : false); if (!warnings.Any()) { bid.Win = true; await _auctionService.UpdateBid(bid); await _messageProviderService.SendAuctionEndedStoreOwnerMessage(auctionToEnd, _languageSettings.DefaultAdminLanguageId, bid); await _messageProviderService.SendAuctionWinEndedCustomerMessage(auctionToEnd, null, bid); await _messageProviderService.SendAuctionEndedLostCustomerMessage(auctionToEnd, null, bid); await _auctionService.UpdateAuctionEnded(auctionToEnd, true); } else { await _logger.InsertLog(Domain.Logging.LogLevel.Error, $"EndAuctionTask - Product {auctionToEnd.Name}", string.Join(",", warnings.ToArray())); } } }