diff --git a/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionPublicViewComponent.cs b/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionPublicViewComponent.cs index 1981dad..0407c07 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionPublicViewComponent.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionPublicViewComponent.cs @@ -1,10 +1,7 @@ -using ExCSS; -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc; using Nop.Core; using Nop.Core.Domain.Catalog; using Nop.Plugin.Misc.AuctionPlugin.Domains.Dtos; -using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities; -using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums; using Nop.Plugin.Misc.AuctionPlugin.Models; using Nop.Plugin.Misc.AuctionPlugin.Services; using Nop.Services.Cms; @@ -15,196 +12,198 @@ using Nop.Web.Framework.Components; using Nop.Web.Framework.Infrastructure; using Nop.Web.Models.Catalog; using Nop.Web.Framework.Mvc.Routing; -using DocumentFormat.OpenXml.EMMA; using Nop.Services.Catalog; namespace Nop.Plugin.Misc.AuctionPlugin.Components; public class AuctionPublicViewComponent : NopViewComponent { - #region Fields + #region Fields - protected readonly IAddressService _addressService; - protected readonly IGenericAttributeService _genericAttributeService; - protected readonly IWidgetPluginManager _widgetPluginManager; - protected readonly IWorkContext _workContext; - protected readonly AuctionService _auctionService; - protected readonly AuctionSettings _auctionSettings; - protected readonly ICustomerService _customerService; - protected readonly IWebHelper _webHelper; - protected readonly IProductService _productService; - protected readonly ILogger _logger; - protected readonly MyProductModelFactory _myProductModelFactory; + //private readonly IAddressService _addressService; + //private readonly IGenericAttributeService _genericAttributeService; + private readonly IWidgetPluginManager _widgetPluginManager; + private readonly IWorkContext _workContext; + private readonly AuctionService _auctionService; + //private readonly AuctionSettings _auctionSettings; + private readonly ICustomerService _customerService; + private readonly IWebHelper _webHelper; + private readonly IProductService _productService; + private readonly ILogger _logger; + private readonly MyProductModelFactory _myProductModelFactory; - #endregion + #endregion - #region Ctor + #region Ctor - public AuctionPublicViewComponent(IAddressService addressService, - IGenericAttributeService genericAttributeService, - IWidgetPluginManager widgetPluginManager, - IWorkContext workContext, - AuctionService auctionService, - AuctionSettings auctionSettings, - ICustomerService customerService, - IWebHelper webHelper, - IProductService productService, - MyProductModelFactory myProductModelFactory, - ILogger logger) - { - _addressService = addressService; - _genericAttributeService = genericAttributeService; - _widgetPluginManager = widgetPluginManager; - _workContext = workContext; - _auctionService = auctionService; - _auctionSettings = auctionSettings; - _customerService = customerService; - _webHelper = webHelper; - _productService = productService; - _myProductModelFactory = myProductModelFactory; - _logger = logger; - } + public AuctionPublicViewComponent( + //IAddressService addressService, + //IGenericAttributeService genericAttributeService, + IWidgetPluginManager widgetPluginManager, + IWorkContext workContext, + AuctionService auctionService, + //AuctionSettings auctionSettings, + ICustomerService customerService, + IWebHelper webHelper, + IProductService productService, + MyProductModelFactory myProductModelFactory, + ILogger logger) + { + //_addressService = addressService; + //_genericAttributeService = genericAttributeService; + _widgetPluginManager = widgetPluginManager; + _workContext = workContext; + _auctionService = auctionService; + //_auctionSettings = auctionSettings; + _customerService = customerService; + _webHelper = webHelper; + _productService = productService; + _myProductModelFactory = myProductModelFactory; + _logger = logger; + } - #endregion + #endregion - #region Methods + #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 async Task InvokeAsync(string widgetZone, object additionalData) - { - - - await _logger.InformationAsync("WidgetViewComponent called"); - - //ensure that widget is active and enabled - var customer = await _workContext.GetCurrentCustomerAsync(); - await _logger.InformationAsync($"WidgetViewComponent customer: {customer.Email}"); - - if (!await _widgetPluginManager.IsPluginActiveAsync(AuctionDefaults.SystemName, customer)) - return Content(string.Empty); - - await _logger.InformationAsync("WidgetViewComponent widget active"); - - //if (!_auctionSettings.Enabled) - // return Content(string.Empty); - - var productDetailsModel = additionalData as ProductDetailsModel; - - await _logger.InformationAsync($"WidgetViewComponent product: {productDetailsModel.Name}"); - - //if (productDetailsModel is null) - //{ - - // await _logger.InformationAsync("WidgetViewComponent productdetailsmodel is null"); - // return Content(string.Empty); - //} - - if (!widgetZone.Equals(PublicWidgetZones.ProductDetailsOverviewTop)) - { - await _logger.InformationAsync($"WidgetViewComponent is NOT in ProductDetailsTop now {widgetZone}"); - return Content(string.Empty); - } - - await _logger.InformationAsync("WidgetViewComponent called II"); - - //is it under Auction? - - var productId = productDetailsModel.Id; - - var productToAuction = (await _auctionService.GetProductToAuctionDtosByProductIdAsync(productId)).FirstOrDefault(); - - if (productToAuction == null) - { - return Content(string.Empty); - } - - var auctionDto = (await _auctionService.GetAuctionDtoByIdAsync(productToAuction.AuctionId, false, false)); - auctionDto.ProductToAuctionDtos.Add(productToAuction); - - var productBidBoxViewModel = new ProductBidBoxViewModel(auctionDto); - //List productToAuctionId = await _auctionService.GetProductToAuctionByAuctionIdAndProductIdAsync(auctionId, productDetailsModel.Id); - - AuctionStatus status = productToAuction.AuctionStatus; - //bool isActive = status == AuctionStatus.Active || status == AuctionStatus.FirstWarning || status == AuctionStatus.SecondWarning; - //bool isFirstWarning = status == AuctionStatus.FirstWarning; - - var detailedAuctionDto = (await _auctionService.GetAuctionDtoByIdAsync(productToAuction.AuctionId, true, false)); - - ProductToAuctionDto nextProductToAuction; - ProductToAuctionDto lastProductToAuction; - string nextUrl = ""; - string lastUrl = ""; - string nextImageUrl = ""; - string lastImageUrl = ""; - string nextProductName = ""; - string lastProductName = ""; - - if (productToAuction.SortIndex < detailedAuctionDto.ProductToAuctionDtos.Count) - { - nextProductToAuction = detailedAuctionDto.ProductToAuctionDtos.Where(x => x.SortIndex == productToAuction.SortIndex + 1).FirstOrDefault(); - var nextProductId = nextProductToAuction.ProductId; - var nextProduct = await _productService.GetProductByIdAsync(nextProductId); - var nextDetails = await _myProductModelFactory.PrepareProductDetailsModelAsync(nextProduct); - nextUrl = Url.RouteUrl(new { nextDetails.SeName }, _webHelper.GetCurrentRequestProtocol()).ToLowerInvariant(); - nextImageUrl = nextDetails.DefaultPictureModel.FullSizeImageUrl; - nextProductName = nextDetails.SeName; - - } - else - { - nextProductToAuction = null; - } - - if (productToAuction.SortIndex > 1) - { - lastProductToAuction = detailedAuctionDto.ProductToAuctionDtos.Where(x => x.SortIndex == productToAuction.SortIndex - 1).FirstOrDefault(); - var lastProductId = lastProductToAuction.ProductId; - var lastProduct = await _productService.GetProductByIdAsync(lastProductId); - var lastDetails = await _myProductModelFactory.PrepareProductDetailsModelAsync(lastProduct); - lastUrl = Url.RouteUrl(new { lastDetails.SeName }, _webHelper.GetCurrentRequestProtocol()).ToLowerInvariant(); - lastImageUrl = lastDetails.DefaultPictureModel.FullSizeImageUrl; - lastProductName = lastDetails.SeName; - } - else - { - lastProductToAuction = null; - } - - + /// + /// 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 async Task InvokeAsync(string widgetZone, object additionalData) + { - productBidBoxViewModel.IsAdmin = await _customerService.IsAdminAsync(customer); - productBidBoxViewModel.IsGuest = await _customerService.IsGuestAsync(customer); - productBidBoxViewModel.AuctionClosed = auctionDto.Closed; - productBidBoxViewModel.AuctionStatus = status; - productBidBoxViewModel.WidgetZone = widgetZone; - productBidBoxViewModel.BasePrice = productDetailsModel.ProductPrice.OldPriceValue; - productBidBoxViewModel.CurrentPrice = productDetailsModel.ProductPrice.PriceValue; - //productBidBoxViewModel.ProductToAuctionId = productToAuctionId.FirstOrDefault().Id; - //productBidBoxViewModel.AuctionId = auctionId; - productBidBoxViewModel.CustomerId = customer.Id; - productBidBoxViewModel.ProductId = productDetailsModel.Id; - //productBidBoxViewModel.NextProductUrl = Url.RouteUrl("Product", productDetailsModel.SeName); - productBidBoxViewModel.NextProductUrl = nextUrl; - productBidBoxViewModel.LastProductUrl = lastUrl; - productBidBoxViewModel.LastProductImageUrl = lastImageUrl; - productBidBoxViewModel.NextProductImageUrl = nextImageUrl; - productBidBoxViewModel.LastProductName = lastProductName; - productBidBoxViewModel.NextProductName = nextProductName; - productBidBoxViewModel.LicitStep = AuctionService.GetStepAmount(productToAuction.CurrentPrice); //add calculation - productBidBoxViewModel.NextBidPrice = productToAuction.CurrentPrice + productBidBoxViewModel.LicitStep; + await _logger.InformationAsync("WidgetViewComponent called"); + + //ensure that widget is active and enabled + var customer = await _workContext.GetCurrentCustomerAsync(); + await _logger.InformationAsync($"WidgetViewComponent customer: {customer.Email}"); + + if (!await _widgetPluginManager.IsPluginActiveAsync(AuctionDefaults.SystemName, customer)) + return Content(string.Empty); + + await _logger.InformationAsync("WidgetViewComponent widget active"); + + //if (!_auctionSettings.Enabled) + // return Content(string.Empty); + + var productDetailsModel = (additionalData as ProductDetailsModel)!; + + await _logger.InformationAsync($"WidgetViewComponent product: {productDetailsModel.Name}"); + + //if (productDetailsModel is null) + //{ + + // await _logger.InformationAsync("WidgetViewComponent productdetailsmodel is null"); + // return Content(string.Empty); + //} + + if (!widgetZone.Equals(PublicWidgetZones.ProductDetailsOverviewTop)) + { + await _logger.InformationAsync($"WidgetViewComponent is NOT in ProductDetailsTop now {widgetZone}"); + return Content(string.Empty); + } + + await _logger.InformationAsync("WidgetViewComponent called II"); + + //is it under Auction? + + var productId = productDetailsModel.Id; + + var productToAuction = (await _auctionService.GetProductToAuctionDtosByProductIdAsync(productId)).FirstOrDefault(); + + if (productToAuction == null) + { + return Content(string.Empty); + } + + var auctionDto = (await _auctionService.GetAuctionDtoByIdAsync(productToAuction.AuctionId, false, false)); + auctionDto.ProductToAuctionDtos.Add(productToAuction); + + var productBidBoxViewModel = new ProductBidBoxViewModel(auctionDto); + //List productToAuctionId = await _auctionService.GetProductToAuctionByAuctionIdAndProductIdAsync(auctionId, productDetailsModel.Id); + + var status = productToAuction.AuctionStatus; + //bool isActive = status == AuctionStatus.Active || status == AuctionStatus.FirstWarning || status == AuctionStatus.SecondWarning; + //bool isFirstWarning = status == AuctionStatus.FirstWarning; + + var detailedAuctionDto = (await _auctionService.GetAuctionDtoByIdAsync(productToAuction.AuctionId, true, false)); + + ProductToAuctionDto nextProductToAuction; + ProductToAuctionDto lastProductToAuction; + var nextUrl = ""; + var lastUrl = ""; + var nextImageUrl = ""; + var lastImageUrl = ""; + var nextProductName = ""; + var lastProductName = ""; + + if (productToAuction.SortIndex < detailedAuctionDto.ProductToAuctionDtos.Count) + { + nextProductToAuction = detailedAuctionDto.ProductToAuctionDtos.FirstOrDefault(x => x.SortIndex == productToAuction.SortIndex + 1); + if (nextProductToAuction != null) + { + var nextProductId = nextProductToAuction.ProductId; + var nextProduct = await _productService.GetProductByIdAsync(nextProductId); + var nextDetails = await _myProductModelFactory.PrepareProductDetailsModelAsync(nextProduct); + nextUrl = Url.RouteUrl(new { nextDetails.SeName }, _webHelper.GetCurrentRequestProtocol()).ToLowerInvariant(); + nextImageUrl = nextDetails.DefaultPictureModel.FullSizeImageUrl; + nextProductName = nextDetails.SeName; + } + } + else + { + nextProductToAuction = null; + } + + if (productToAuction.SortIndex > 1) + { + lastProductToAuction = detailedAuctionDto.ProductToAuctionDtos.FirstOrDefault(x => x.SortIndex == productToAuction.SortIndex - 1); + if (lastProductToAuction != null) + { + var lastProductId = lastProductToAuction.ProductId; + var lastProduct = await _productService.GetProductByIdAsync(lastProductId); + var lastDetails = await _myProductModelFactory.PrepareProductDetailsModelAsync(lastProduct); + lastUrl = Url.RouteUrl(new { lastDetails.SeName }, _webHelper.GetCurrentRequestProtocol()).ToLowerInvariant(); + lastImageUrl = lastDetails.DefaultPictureModel.FullSizeImageUrl; + lastProductName = lastDetails.SeName; + } + } + else + { + lastProductToAuction = null; + } + + productBidBoxViewModel.IsAdmin = await _customerService.IsAdminAsync(customer); + productBidBoxViewModel.IsGuest = await _customerService.IsGuestAsync(customer); + productBidBoxViewModel.AuctionClosed = auctionDto.Closed; + productBidBoxViewModel.AuctionStatus = status; + productBidBoxViewModel.WidgetZone = widgetZone; + productBidBoxViewModel.BasePrice = productDetailsModel.ProductPrice.OldPriceValue; + productBidBoxViewModel.CurrentPrice = productDetailsModel.ProductPrice.PriceValue; + //productBidBoxViewModel.ProductToAuctionId = productToAuctionId.FirstOrDefault().Id; + //productBidBoxViewModel.AuctionId = auctionId; + productBidBoxViewModel.CustomerId = customer.Id; + productBidBoxViewModel.ProductId = productDetailsModel.Id; + //productBidBoxViewModel.NextProductUrl = Url.RouteUrl("Product", productDetailsModel.SeName); + productBidBoxViewModel.NextProductUrl = nextUrl; + productBidBoxViewModel.LastProductUrl = lastUrl; + productBidBoxViewModel.LastProductImageUrl = lastImageUrl; + productBidBoxViewModel.NextProductImageUrl = nextImageUrl; + productBidBoxViewModel.LastProductName = lastProductName; + productBidBoxViewModel.NextProductName = nextProductName; + productBidBoxViewModel.LicitStep = AuctionService.GetStepAmount(productToAuction.CurrentPrice); //add calculation + productBidBoxViewModel.NextBidPrice = AuctionService.GetNextBidPrice(productToAuction.CurrentPrice, productBidBoxViewModel.LicitStep); - return View("~/Plugins/Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml", productBidBoxViewModel); - } + return View("~/Plugins/Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml", productBidBoxViewModel); + } - #endregion + #endregion } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs b/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs index 9144612..afc7b06 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs @@ -323,11 +323,8 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs } private static decimal GetStepAmount(decimal currentBidPrice) => AuctionService.GetStepAmount(currentBidPrice); - private static decimal GetNextBidPrice(decimal currentBidPrice) => GetNextBidPrice(currentBidPrice, GetStepAmount(currentBidPrice)); - private static decimal GetNextBidPrice(decimal currentBidPrice, decimal stepAmount) - { - return currentBidPrice + stepAmount; - } + private static decimal GetNextBidPrice(decimal currentBidPrice) => AuctionService.GetNextBidPrice(currentBidPrice, GetStepAmount(currentBidPrice)); + private static decimal GetNextBidPrice(decimal currentBidPrice, decimal stepAmount) => AuctionService.GetNextBidPrice(currentBidPrice, stepAmount); private static bool IsValidRequestAuctionStatus(AuctionStatus newStatus, AuctionStatus oldStatus) { diff --git a/Nop.Plugin.Misc.AuctionPlugin/Models/AuctionPublicInfoModel.cs b/Nop.Plugin.Misc.AuctionPlugin/Models/AuctionPublicInfoModel.cs index 86c63c8..dc2197a 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Models/AuctionPublicInfoModel.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Models/AuctionPublicInfoModel.cs @@ -1,7 +1,6 @@ using Newtonsoft.Json; using Nop.Plugin.Misc.AuctionPlugin.Domains.Dtos; using Nop.Web.Framework.Models; -using Nop.Web.Framework.Mvc.ModelBinding; namespace Nop.Plugin.Misc.AuctionPlugin.Models { @@ -29,11 +28,14 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Models public AuctionPublicInfoModel(AuctionDto auctionDto) : this() { AuctionDto = auctionDto; - FirstProductToAuction = AuctionDto.ProductToAuctionDtos.First(); + + StartDate = AuctionDto.StartDateUtc; + + FirstProductToAuction = AuctionDto.ProductToAuctionDtos.FirstOrDefault(); + if (FirstProductToAuction == null) return; ProductId = FirstProductToAuction.ProductId; ProductToAuctionMappingId = FirstProductToAuction.Id; - StartDate = AuctionDto.StartDateUtc; IsActive = FirstProductToAuction.IsActiveItem; } } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Models/ProductBidBoxViewModel.cs b/Nop.Plugin.Misc.AuctionPlugin/Models/ProductBidBoxViewModel.cs index 763a7a0..4da5749 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Models/ProductBidBoxViewModel.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Models/ProductBidBoxViewModel.cs @@ -27,7 +27,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Models public int AuctionId { get; set; } public bool AuctionClosed { get; set; } - public bool IsItemActive => FirstProductToAuction.IsActiveItem; + public bool IsItemActive => FirstProductToAuction?.IsActiveItem ?? false; public AuctionStatus AuctionStatus { get; set; } public int ProductId { get; set; } @@ -62,9 +62,11 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Models public ProductBidBoxViewModel(AuctionDto auctionDto) : this() { AuctionDto = auctionDto; - FirstProductToAuction = AuctionDto.ProductToAuctionDtos.First(); - AuctionId = auctionDto.Id; + + FirstProductToAuction = AuctionDto.ProductToAuctionDtos.FirstOrDefault(); + if (FirstProductToAuction == null) return; + ProductId = FirstProductToAuction.ProductId; ProductToAuctionId = FirstProductToAuction.Id; } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs b/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs index 4401d9e..7fa636f 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs @@ -95,6 +95,12 @@ public class AuctionService : IAuctionService //200 000 000 Ft fölött 20 000 000 Ft-tal } + public static decimal GetNextBidPrice(decimal currentBidPrice) => GetNextBidPrice(currentBidPrice, GetStepAmount(currentBidPrice)); + public static decimal GetNextBidPrice(decimal currentBidPrice, decimal stepAmount) + { + return currentBidPrice + stepAmount; + } + public async Task ResetProductToAuctionByProductId(int productId) => await ResetProductToAuctionAsync(await _ctx.ProductToAuctions.GetByProductId(productId).FirstOrDefaultAsync()); diff --git a/Nop.Plugin.Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml b/Nop.Plugin.Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml index 881ec01..c098d3e 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml +++ b/Nop.Plugin.Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml @@ -7,518 +7,519 @@ @{ - if (!Model.IsGuest) - { - var bgClass = Model.AuctionDto.ProductToAuctionDtos.FirstOrDefault().WinnerCustomerId == Model.CustomerId ? "bg-success" : "bg-primary"; - bool bidButtonActive = Model.IsItemActive && (Model.AuctionDto.ProductToAuctionDtos.FirstOrDefault().WinnerCustomerId == Model.CustomerId && !Model.IsAdmin) ? true : false; - string title = Model.AuctionDto.ProductToAuctionDtos.FirstOrDefault().WinnerCustomerId == Model.CustomerId ? "Your bid is leading" : "Place a bid!"; - -
-

@title

-
-
- Base Price: - - @($"{Model.BasePrice:c}") - @* @(decimal?.Round(Model.BasePrice, 2, MidpointRounding.AwayFromZero)) *@ - -
-
- Bid Step: - @($"{Model.LicitStep:c}") -
-
- - @* *@ -
-
- - - @* *@ - -
-
- - - if (Model.IsAdmin) - { -
-

Manage auction!

-
- - -
- - - - -
-
- - - -
- - -
-
- } - else - { -

No access to admin level buttons

- } - - - } - else - { -
-

This item is under auction!

-
- -

Please log in or register to participate!

-
-
- } -} - - \ No newline at end of file + if (productAuctionMappingId == bidBoxPageViewModel.ProductToAuctionId) { + console.log("THIS IS FOR US! SORRY FOR SHOUTING"); + + widgetPriceElement.textContent = HUFFormatter.format(data.currentPrice); // Update the price + licitStepElement.textContent = HUFFormatter.format(data.nextStepAmount); + bidBoxPageViewModel.NextBidPrice = Number(data.nextBidPrice); + budButtonElement.disabled = false; + if (isMyBid) { + console.log("This is my bid"); + const list = bidBox.classList; + list.add("bg-success"); + list.remove("bg-primary"); + budButtonElement.textContent = "Good job"; + bidBoxTitle.textContent = "Your bid is leading!" + if (bidBoxPageViewModel.IsAdmin) { + console.log("I AM WEASEL!!! " + bidBoxPageViewModel.IsAdmin); + budButtonElement.disabled = false; + } + else { + console.log("I AM NOT WEASEL!!! " + bidBoxPageViewModel.IsAdmin); + budButtonElement.disabled = true; + } + } + else { + const list = bidBox.classList; + list.add("bg-primary"); + list.remove("bg-success"); + bidBoxTitle.textContent = "Place a bid!" + budButtonElement.textContent = "Bid " + HUFFormatter.format(bidBoxPageViewModel.NextBidPrice); + + } + + console.log(`WidgetPrice updated to: ${data.currentPrice}, next bid is ${bidBoxPageViewModel.NextBidPrice}`); + //budButtonElement.disabled = false; + + } + + else { + console.log("Not for this product"); + } + + + } else { + console.warn("Element with ID 'WidgetPrice' not found in the DOM."); + } + } + + function handleAuctionUpdate(data) { + var widgetPriceElement = document.getElementById("price-value-" + bidBoxPageViewModel.ProductId); + var bidBoxTitle = document.getElementById("bidBoxTitle"); + var productAuctionMappingId = data.auctionDto.productToAuctionDtos[0].id; + + //TODO: TESZT STATUS!!! - JTEST. + var itemStatus = data.auctionDto.productToAuctionDtos[0].auctionStatus; + //var itemStatus = AuctionStatus.TEST; + + console.log("handle auction update called" + productAuctionMappingId); + console.log("auction status:" + itemStatus); + if (widgetPriceElement) { + + if (productAuctionMappingId == bidBoxPageViewModel.ProductToAuctionId) { + console.log("THIS IS FOR US! SORRY FOR SHOUTING"); + + if (itemStatus == AuctionStatus.None) { + bidBoxTitle.textContent = "The auction has not started yet"; + } + else if (itemStatus == AuctionStatus.Pause) { + bidBoxTitle.textContent = "The auction is paused! Please hold on..."; + } + else if (itemStatus == AuctionStatus.FirstWarning) { + bidBoxTitle.textContent = "First warning!"; + } + else if (itemStatus == AuctionStatus.SecondWarning) { + bidBoxTitle.textContent = "Secnod warning! Hurry up!"; + } + + setButtons(itemStatus); + + console.log(`WidgetPrice updated to: ${data.currentPrice}, next bid is ${bidBoxPageViewModel.NextBidPrice}`); + + + } + + else { + console.log("Not for this product"); + } + + + } else { + console.warn("Element with ID 'WidgetPrice' not found in the DOM."); + } + } + + + function setButtons(auctionStatus) { + console.log("SetButtons called: " + auctionStatus); + + // Button IDs and their default states for each AuctionStatus + //true = disabled + const buttonStates = { + [AuctionStatus.None]: { + signalRBidButton: true, + signalRFirstWarningButton: true, + signalRSecondWarningButton: true, + signalROpenItemButton: false, + signalRCloseItemButton: true, + signalRPauseItemButton: true, + signalRRevertBidButton: true, + signalRResetItemButton: true, + }, + [AuctionStatus.Active]: { + signalRBidButton: false, + signalRFirstWarningButton: false, + signalRSecondWarningButton: true, + signalROpenItemButton: true, + signalRCloseItemButton: true, + signalRPauseItemButton: false, + signalRRevertBidButton: true, + signalRResetItemButton: true, + }, + [AuctionStatus.FirstWarning]: { + signalRBidButton: false, + signalRFirstWarningButton: true, + signalRSecondWarningButton: false, + signalROpenItemButton: true, + signalRCloseItemButton: true, + signalRPauseItemButton: false, + signalRRevertBidButton: true, + signalRResetItemButton: true, + }, + [AuctionStatus.SecondWarning]: { + signalRBidButton: false, + signalRFirstWarningButton: true, + signalRSecondWarningButton: true, + signalROpenItemButton: true, + signalRCloseItemButton: false, + signalRPauseItemButton: false, + signalRRevertBidButton: true, + signalRResetItemButton: true, + }, + [AuctionStatus.Pause]: { + signalRBidButton: true, + signalRFirstWarningButton: true, + signalRSecondWarningButton: true, + signalROpenItemButton: false, + signalRCloseItemButton: true, + signalRPauseItemButton: true, + signalRRevertBidButton: false, + signalRResetItemButton: false, + }, + [AuctionStatus.Sold]: { + signalRBidButton: true, + signalRFirstWarningButton: true, + signalRSecondWarningButton: true, + signalROpenItemButton: true, + signalRCloseItemButton: true, + signalRPauseItemButton: true, + signalRRevertBidButton: true, + signalRResetItemButton: true, + }, + [AuctionStatus.NotSold]: { + signalRBidButton: true, + signalRFirstWarningButton: true, + signalRSecondWarningButton: true, + signalROpenItemButton: true, + signalRCloseItemButton: true, + signalRPauseItemButton: true, + signalRRevertBidButton: false, + signalRResetItemButton: false, + }, + [AuctionStatus.TEST]: { + signalRBidButton: false, + signalRFirstWarningButton: false, + signalRSecondWarningButton: false, + signalROpenItemButton: false, + signalRCloseItemButton: false, + signalRPauseItemButton: false, + signalRRevertBidButton: false, + signalRResetItemButton: false, + }, + + }; + + // Get the states for the given auctionStatus + const states = buttonStates[auctionStatus]; + if (!states) { + console.error("Unknown AuctionStatus: ", auctionStatus); + return; + } + + // Apply the states to each button + Object.keys(states).forEach((buttonId) => { + const button = document.getElementById(buttonId); + if (button) { + button.disabled = states[buttonId]; + button.hidden = states[buttonId]; + } else { + console.warn(`Button with ID ${buttonId} not found.`); + } + }); + } + + + \ No newline at end of file