diff --git a/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionViewComponent.cs b/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionViewComponent.cs index cd6f9cb..f94eba3 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionViewComponent.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionViewComponent.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Mvc; using Nop.Core; +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; @@ -76,29 +77,35 @@ public class AuctionViewComponent : NopViewComponent //{ // return Content(string.Empty); //} - var model = new AuctionPublicInfoModel(); - + if (!widgetZone.Equals(PublicWidgetZones.ProductBoxAddinfoBefore)) { return Content(string.Empty); } var productId = ((ProductOverviewModel)additionalData).Id; - model.ProductId = productId; - var productToAuctionMapping = (await _auctionService.GetProductToAuctionsByProductIdAsync(productId)).FirstOrDefault(); - if (productToAuctionMapping == null) + + //model.ProductId = productId; + + var productToAuctionDtoMappings = await _auctionService.GetProductToAuctionDtosByProductIdAsync(productId); + if (productToAuctionDtoMappings.Count == 0) { return Content(string.Empty); } - model.ProductToAuctionMappingId = productToAuctionMapping.Id; - var auction = await _auctionService.GetAuctionDtoByProductToAuctionIdAsync(productToAuctionMapping.Id); - model.StartDate = auction.StartDateUtc; - AuctionStatus status = productToAuctionMapping.AuctionStatus; - model.IsActive = status.HasFlag(AuctionStatus.Active); + var auctionDto = (await _auctionService.GetAuctionDtoByIdAsync(productToAuctionDtoMappings.FirstOrDefault()!.AuctionId)); + auctionDto.ProductToAuctionDtos.AddRange(productToAuctionDtoMappings); - bool isFirstWarning = status.HasFlag(AuctionStatus.FirstWarning); + var model = new AuctionPublicInfoModel(auctionDto); + + //model.ProductToAuctionMappingId = productToAuctionMapping.Id; + //var auction = await _auctionService.GetAuctionDtoByProductToAuctionIdAsync(productToAuctionMapping.Id); + //model.StartDate = auction.StartDateUtc; + //AuctionStatus status = productToAuctionMapping.AuctionStatus; + //model.IsActive = status.HasFlag(AuctionStatus.Active); + + //bool isFirstWarning = status.HasFlag(AuctionStatus.FirstWarning); return View("~/Plugins/Misc.AuctionPlugin/Views/PublicInfo.cshtml", model); diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/Interfaces/IProductToAuctionDtoBase.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/Interfaces/IProductToAuctionDtoBase.cs index cb474f8..c70f720 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/Interfaces/IProductToAuctionDtoBase.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/Interfaces/IProductToAuctionDtoBase.cs @@ -8,6 +8,7 @@ public interface IProductToAuctionDtoBase : IMgModelDtoBase public int ProductId { get; set; } public int AuctionId { get; set; } + public int WinnerCustomerId { get; set; } public AuctionStatus AuctionStatus { get; set; } public decimal StartingPrice { get; set; } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/ProductToAuctionDto.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/ProductToAuctionDto.cs index 346d48a..ed1a210 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/ProductToAuctionDto.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/ProductToAuctionDto.cs @@ -9,6 +9,7 @@ public class ProductToAuctionDto : IProductToAuctionDto public int Id { get; set; } public int ProductId { get; set; } public int AuctionId { get; set; } + public int WinnerCustomerId { get; set; } public AuctionStatus AuctionStatus { get; set; } public decimal StartingPrice { get; set; } public decimal BidPrice { get; set; } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/ProductToAuctionMapping.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/ProductToAuctionMapping.cs index 698a227..cac9494 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/ProductToAuctionMapping.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/ProductToAuctionMapping.cs @@ -12,6 +12,7 @@ public partial class ProductToAuctionMapping : MgEntityBase, IProductToAuctionMa { public int ProductId { get; set; } public int AuctionId { get; set; } + public int WinnerCustomerId { get; set; } [NotMapped] [NotColumn] diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/Enums/AuctionStatus.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/Enums/AuctionStatus.cs index 6d846aa..3e3cf4b 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/Enums/AuctionStatus.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/Enums/AuctionStatus.cs @@ -10,7 +10,7 @@ // NotSold = 25 //} -[Flags] +//[Flags] public enum AuctionStatus : byte { None = 0, diff --git a/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs b/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs index 6c2e99b..bb9c6a9 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs @@ -50,7 +50,6 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs return; } - //TODO: A MessageWrapper-ben kéne küldözgetni a UserId (CustomerId-t) - J. if (message.SenderId <= 0 || message.SenderId != (await _workContext.GetCurrentCustomerAsync()).Id) { _logger.Error($"SignalRMessageHandler.HandleMessage(); message.SenderId <= 0 || message.SenderId != (await _workContext.GetCurrentCustomerAsync()).Id"); @@ -214,6 +213,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs ProductName = auctionBid.ProductId.ToString(), BidPrice = auctionBid.BidPrice.ToString(CultureInfo.InvariantCulture), NextStepAmount = "50000", //TODO: - J. + ToasterMessage = string.Empty, //TODO: - J. }.ToJson() }; diff --git a/Nop.Plugin.Misc.AuctionPlugin/Models/AuctionPublicInfoModel.cs b/Nop.Plugin.Misc.AuctionPlugin/Models/AuctionPublicInfoModel.cs index f4a55b7..86c63c8 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Models/AuctionPublicInfoModel.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Models/AuctionPublicInfoModel.cs @@ -1,18 +1,40 @@ -using Nop.Web.Framework.Models; +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 { public record AuctionPublicInfoModel : BaseNopModel { + [JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public AuctionDto AuctionDto { get; set; } - public int ProductId { get; set; } + [JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public ProductToAuctionDto FirstProductToAuction { get; set; } - public int ProductToAuctionMappingId { get; set; } + public int ProductId { get; set; } + + public int ProductToAuctionMappingId { get; set; } public DateTime StartDate { get; set; } public bool IsActive { get; set; } + + public AuctionPublicInfoModel() {} + + public AuctionPublicInfoModel(AuctionDto auctionDto) : this() + { + AuctionDto = auctionDto; + FirstProductToAuction = AuctionDto.ProductToAuctionDtos.First(); + + ProductId = FirstProductToAuction.ProductId; + ProductToAuctionMappingId = FirstProductToAuction.Id; + StartDate = AuctionDto.StartDateUtc; + IsActive = FirstProductToAuction.IsActiveItem; + } } } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs b/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs index 8e1a50a..bc8eb88 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs @@ -197,6 +197,11 @@ public class AuctionService : IAuctionService return auctionDto; } + public async Task> GetProductToAuctionDtosByProductIdAsync(int productId) + { + return [..await _ctx.ProductToAuctions.GetByProductId(productId).Select(x=>new ProductToAuctionDto(x)).ToListAsync()]; + } + public async Task GetAuctionBidDtoByIdAsync(int auctionBidId) { var auctionBid = await _ctx.AuctionBids.GetByIdAsync(auctionBidId); diff --git a/Nop.Plugin.Misc.AuctionPlugin/Services/EventConsumer.cs b/Nop.Plugin.Misc.AuctionPlugin/Services/EventConsumer.cs index 7f73ca4..b3c6a55 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Services/EventConsumer.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Services/EventConsumer.cs @@ -129,6 +129,7 @@ public class EventConsumer : public async Task HandleEventAsync(EntityUpdatedEvent eventMessage) { + //eventMessage. //send notification on SignalR } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Views/PublicInfo.cshtml b/Nop.Plugin.Misc.AuctionPlugin/Views/PublicInfo.cshtml index de46a6f..51e9801 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Views/PublicInfo.cshtml +++ b/Nop.Plugin.Misc.AuctionPlugin/Views/PublicInfo.cshtml @@ -37,7 +37,7 @@ function refreshPublicInfo@(Model.ProductId)(data) { - console.log('function called: refreshPublicInfo'+@(Model.ProductId)) + console.log('function called: refreshPublicInfo' + @(Model.ProductId)); }