using Microsoft.AspNetCore.Mvc; using Nop.Plugin.Misc.AuctionPlugin; using Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Models; using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities; using Nop.Plugin.Misc.AuctionPlugin.Services; using Nop.Services.Catalog; using Nop.Services.Cms; using Nop.Services.Common; using Nop.Services.Logging; using Nop.Web.Areas.Admin.Components; using Nop.Web.Areas.Admin.Models.Catalog; using Nop.Web.Areas.Admin.Models.Orders; using Nop.Web.Framework.Components; using Nop.Web.Framework.Factories; using Nop.Web.Framework.Infrastructure; using Nop.Web.Models.Catalog; using System.Linq.Expressions; namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Components { [ViewComponent(Name = "AuctionAdmin")] public class AuctionAdminViewComponent : AdminWidgetViewComponent { #region Fields protected readonly ILogger _logger; protected readonly IProductAttributeService _productAttributeService; protected readonly IWidgetPluginManager _widgetPluginManager; protected readonly AuctionSettings _auctionSettings; protected readonly AuctionService _auctionService; protected readonly MyProductModelFactory _productModelFactory; #endregion #region Ctor public AuctionAdminViewComponent( IWidgetModelFactory widgetModelFactory, ILogger logger, IProductAttributeService productAttributeService, IWidgetPluginManager widgetPluginManager, AuctionSettings auctionSettings, AuctionService auctionService, MyProductModelFactory productModelFactory) : base(widgetModelFactory) { _logger = logger; _productAttributeService = productAttributeService; _widgetPluginManager = widgetPluginManager; _auctionSettings = auctionSettings; _auctionService = auctionService; _productModelFactory = productModelFactory; } #endregion #region Methods /// /// Invoke the widget view component /// /// Widget zone /// Additional parameters /// /// A task that represents the asynchronous operation /// The task result contains the view component result /// public override async Task InvokeAsync(string widgetZone, object additionalData) { //await base.InvokeAsync(widgetZone, additionalData); //await _logger.InformationAsync($"AuctionAdminViewComponent.InvokeAsync(); Admin auction widget called from {widgetZone}!"); if (!await _widgetPluginManager.IsPluginActiveAsync(AuctionDefaults.SystemName)) return Content(string.Empty); //if (!_auctionSettings.Enabled) // return Content(string.Empty); //if (additionalData is not ProductDetailsModel model) // return Content(string.Empty); var productId = 0; if (!widgetZone.Equals(AdminWidgetZones.ProductDetailsButtons)) { await _logger.InformationAsync($"AuctionAdminViewComponent.InvokeAsync(); Admin auction widget not in the right widgetzone {widgetZone}!"); return Content(string.Empty); } //ProductDetailsModel detailsModel = await _productModelFactory.PrepareProductDetailsModelAsync(product.Price); if (additionalData is not ProductModel productModel) { await _logger.ErrorAsync($"AuctionAdminViewComponent.InvokeAsync(); (productModel == null); widgetZone: {widgetZone};"); return Content(string.Empty); } productId = productModel.Id; var auctions = await _auctionService.GetAllAuctionsAsync() ?? []; // Assign the auctions to the ViewBag ViewBag.Auctions = auctions; var viewModel = new ProductAssignToAuctionViewModel(); viewModel.ProductId = productId; viewModel.StartingPrice = productModel.OldPrice; viewModel.BidPrice = productModel.OldPrice; viewModel.SortIndex = 0; //viewModel.InAuctions = await _auctionService.GetAllAuctionsAsync() viewModel.InAuctions = []; //await _logger.InformationAsync($"AuctionAdminViewComponent.InvokeAsync(); Admin auction widget called from {widgetZone}! II. "); return View("~/Plugins/Misc.AuctionPlugin/Areas/Admin/Views/AdminProductAuctionSettingsBox.cshtml", viewModel); } #endregion } }