From ae6f4bc7e836c3d6db551bbe0a56f679306d0e2c Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 13 Nov 2024 20:59:27 +0100 Subject: [PATCH 1/3] widgets basic setup --- .../Controllers/AnnouncementController.cs | 4 +- .../AuctionDefaults.cs | 2 +- .../AuctionPlugin.cs | 10 ++--- .../Components/AuctionPublicViewComponent.cs | 42 ++++++++++++++----- .../Components/AuctionViewComponent.cs | 14 +++---- .../Views/PublicInfo.cshtml | 7 ++-- .../Views/PublicProductBidBox.cshtml | 5 ++- 7 files changed, 53 insertions(+), 31 deletions(-) diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AnnouncementController.cs b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AnnouncementController.cs index 1c18d03..105b709 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AnnouncementController.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AnnouncementController.cs @@ -92,7 +92,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Controllers model.Body = singleAnnouncement.Body; model.IsActive = singleAnnouncement.IsActive; - return View("~/Plugins/Widget.LiveAnnouncement/Views/LiveAnnouncementView/Announcement.cshtml", model); + return View("~/Plugins/Misc.AuctionPlugin/Areas/Admin/Views/Announcement.cshtml", model); } @@ -107,7 +107,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Controllers public IActionResult AnnouncementList() { var model = new AnnouncementViewModel(); - return View("~/Plugins/Misc.Auction/Areas/Admin/Views/AnnouncementList.cshtml", model); + return View("~/Plugins/Misc.AuctionPlugin/Areas/Admin/Views/AnnouncementList.cshtml", model); } //[HttpPost] diff --git a/Nop.Plugin.Misc.AuctionPlugin/AuctionDefaults.cs b/Nop.Plugin.Misc.AuctionPlugin/AuctionDefaults.cs index c6ef71c..4ecd9a7 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/AuctionDefaults.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/AuctionDefaults.cs @@ -10,7 +10,7 @@ public static class AuctionDefaults /// /// Gets the system name /// - public static string SystemName => "Misc.AuctionPlugin"; + public static string SystemName => "AuctionPlugin"; /// /// Gets the user agent used to request third-party services diff --git a/Nop.Plugin.Misc.AuctionPlugin/AuctionPlugin.cs b/Nop.Plugin.Misc.AuctionPlugin/AuctionPlugin.cs index 438ed17..6f151cf 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/AuctionPlugin.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/AuctionPlugin.cs @@ -99,7 +99,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin { ArgumentNullException.ThrowIfNull(widgetZone); - if (widgetZone.Equals(PublicWidgetZones.ProductDetailsOverviewTop)) + if (widgetZone.Equals(PublicWidgetZones.ProductPriceTop)) { return typeof(AuctionPublicViewComponent); } @@ -116,11 +116,11 @@ namespace Nop.Plugin.Misc.AuctionPlugin { return Task.FromResult>(new List { - PublicWidgetZones.ProductDetailsOverviewTop, - PublicWidgetZones.OrderSummaryBillingAddress, + PublicWidgetZones.ProductPriceTop, + PublicWidgetZones.ProductDetailsBottom, - AdminWidgetZones.OrderBillingAddressDetailsBottom, - AdminWidgetZones.OrderShippingAddressDetailsBottom + //AdminWidgetZones.OrderBillingAddressDetailsBottom, + //AdminWidgetZones.OrderShippingAddressDetailsBottom }); } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionPublicViewComponent.cs b/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionPublicViewComponent.cs index e4b7f36..284f3a2 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionPublicViewComponent.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionPublicViewComponent.cs @@ -3,6 +3,7 @@ using Nop.Core; using Nop.Plugin.Misc.AuctionPlugin; using Nop.Services.Cms; using Nop.Services.Common; +using Nop.Services.Logging; using Nop.Web.Framework.Components; using Nop.Web.Framework.Infrastructure; using Nop.Web.Models.Catalog; @@ -20,6 +21,7 @@ public class AuctionPublicViewComponent : NopViewComponent protected readonly IWidgetPluginManager _widgetPluginManager; protected readonly IWorkContext _workContext; protected readonly AuctionSettings _auctionSettings; + protected readonly ILogger _logger; #endregion @@ -29,13 +31,15 @@ public class AuctionPublicViewComponent : NopViewComponent IGenericAttributeService genericAttributeService, IWidgetPluginManager widgetPluginManager, IWorkContext workContext, - AuctionSettings auctionSettings) + AuctionSettings auctionSettings, + ILogger logger) { _addressService = addressService; _genericAttributeService = genericAttributeService; _widgetPluginManager = widgetPluginManager; _workContext = workContext; _auctionSettings = auctionSettings; + _logger = logger; } #endregion @@ -53,25 +57,41 @@ public class AuctionPublicViewComponent : NopViewComponent /// public async Task InvokeAsync(string widgetZone, object additionalData) { + await _logger.InformationAsync("WidgetViewComponent called"); + //ensure that what3words 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); - if (!_auctionSettings.Enabled) - return Content(string.Empty); + await _logger.InformationAsync("WidgetViewComponent widget active"); + + //if (!_auctionSettings.Enabled) + // return Content(string.Empty); var productDetailsModel = additionalData as ProductDetailsModel; - - if (productDetailsModel is null) - return Content(string.Empty); - var productId = 0; - if (widgetZone.Equals(PublicWidgetZones.ProductDetailsTop)) - productId = productDetailsModel.Id; - + await _logger.InformationAsync($"WidgetViewComponent product: {productDetailsModel.Name}"); - return View("~/Plugins/Widgets.What3words/Views/PublicProductBidBox.cshtml", productId.ToString()); + //if (productDetailsModel is null) + //{ + + // await _logger.InformationAsync("WidgetViewComponent productdetailsmodel is null"); + // return Content(string.Empty); + //} + + if (!widgetZone.Equals(PublicWidgetZones.ProductPriceTop)) + { + await _logger.InformationAsync($"WidgetViewComponent is NOT in ProductDetailsTop now {widgetZone}"); + return Content(string.Empty); + } + + await _logger.InformationAsync("WidgetViewComponent called II"); + + + return View("~/Plugins/Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml", productDetailsModel.Id.ToString()); } #endregion diff --git a/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionViewComponent.cs b/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionViewComponent.cs index db365ca..e6b4e22 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionViewComponent.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Components/AuctionViewComponent.cs @@ -49,16 +49,16 @@ public class AuctionViewComponent : NopViewComponent /// public async Task InvokeAsync(string widgetZone, object additionalData) { - + await _logger.InformationAsync("Auction widget called"); //ensure that a widget is active and enabled var customer = await _workContext.GetCurrentCustomerAsync(); - if (!await _widgetPluginManager.IsPluginActiveAsync(AuctionDefaults.SystemName, customer)) - return Content(string.Empty); + //if (!await _widgetPluginManager.IsPluginActiveAsync(AuctionDefaults.SystemName, customer)) + // return Content(string.Empty); - if (!_auctionSettings.Enabled) - return Content(string.Empty); + //if (!_auctionSettings.Enabled) + // return Content(string.Empty); if (string.IsNullOrEmpty(_auctionSettings.SomeText)) { @@ -74,7 +74,7 @@ public class AuctionViewComponent : NopViewComponent //} var model = new AuctionPublicInfoModel(); - if (!widgetZone.Equals(PublicWidgetZones.ProductDetailsTop)) + if (widgetZone.Equals(PublicWidgetZones.ProductDetailsBottom)) { model.Message = $"Auction plugin is active, setting = {_auctionSettings.SomeText}, productId = {((ProductDetailsModel)additionalData).Name}"; @@ -87,7 +87,7 @@ public class AuctionViewComponent : NopViewComponent } - return View("~/Plugins/Widgets.AuctionPlugin/Views/PublicInfo.cshtml", model); + return View("~/Plugins/Misc.AuctionPlugin/Views/PublicInfo.cshtml", model); } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Views/PublicInfo.cshtml b/Nop.Plugin.Misc.AuctionPlugin/Views/PublicInfo.cshtml index c74648c..90d678d 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Views/PublicInfo.cshtml +++ b/Nop.Plugin.Misc.AuctionPlugin/Views/PublicInfo.cshtml @@ -1,8 +1,9 @@ @model AuctionPublicInfoModel -
- +
+

Auction viewcomponent

+
-

@Model.Message

+

General widget info: @Model.Message

diff --git a/Nop.Plugin.Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml b/Nop.Plugin.Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml index 6b71c09..67e5ac5 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml +++ b/Nop.Plugin.Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml @@ -1,11 +1,12 @@ @model string -
  • +
    +

    Auction Public Viewcomponent

    @T("Plugins.Misc.AuctionPlugin.BidBox.Field.Label"): @(Model) -
  • +
    From b4e8b975048791ea050264f0e4a63303e9cd6c5d Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 14 Nov 2024 10:33:59 +0100 Subject: [PATCH 2/3] Add and view announcements --- .../Controllers/AnnouncementController.cs | 38 +++++-- .../Admin/Models/KendoGridRequestModel.cs | 21 ++++ .../Areas/Admin/Views/AnnouncementList.cshtml | 103 ++++-------------- .../Areas/Admin/Views/_ViewImports.cshtml | 4 +- 4 files changed, 76 insertions(+), 90 deletions(-) create mode 100644 Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/KendoGridRequestModel.cs diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AnnouncementController.cs b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AnnouncementController.cs index 105b709..7c17820 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AnnouncementController.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AnnouncementController.cs @@ -5,8 +5,10 @@ using Nop.Plugin.Misc.AuctionPlugin.Domains; using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities; using Nop.Plugin.Misc.AuctionPlugin.Hubs; using Nop.Plugin.Misc.AuctionPlugin.Services; +using Nop.Services.Logging; using Nop.Web.Framework; using Nop.Web.Framework.Controllers; +using Nop.Web.Framework.Models.DataTables; using Nop.Web.Framework.Mvc; using Nop.Web.Framework.Mvc.Filters; using System; @@ -24,6 +26,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Controllers private readonly IAnnouncementService _announcementService; private IHubContext _announcementHubContext; + private readonly ILogger _logger; #endregion @@ -31,10 +34,12 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Controllers public AnnouncementController( IAnnouncementService announcementService, - IHubContext announcementHubContext) + IHubContext announcementHubContext, + ILogger logger) { _announcementService = announcementService; _announcementHubContext = announcementHubContext; + _logger = logger; } #endregion @@ -104,21 +109,36 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Controllers } - public IActionResult AnnouncementList() + public async Task AnnouncementList() { + await _logger.InformationAsync("AnnouncementList called!"); var model = new AnnouncementViewModel(); return View("~/Plugins/Misc.AuctionPlugin/Areas/Admin/Views/AnnouncementList.cshtml", model); } - //[HttpPost] - //public IActionResult AnnouncementList() - //{ + [HttpPost] + //public async Task GetAnnouncementList([FromBody] KendoGridRequestModel request) + public async Task GetAnnouncementList() + { + //await _logger.InformationAsync("GetAnnouncementList called!"); + //var total = (await _announcementService.GetAnnouncementsAsync()).Count(); + //var result = await _announcementService.GetAnnouncementsAsync(request.Page, request.PageSize); + //return Json(new + //{ + // Data = result, + // Total = total + //}); - - // return View(); - - //} + try + { + return Ok(new DataTablesModel { Data = await _announcementService.GetAnnouncementsAsync() }); + } + catch (Exception ex) + { + return BadRequest(ex); + } + } #endregion diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/KendoGridRequestModel.cs b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/KendoGridRequestModel.cs new file mode 100644 index 0000000..d130d8c --- /dev/null +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/KendoGridRequestModel.cs @@ -0,0 +1,21 @@ +namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Models +{ + public class KendoGridRequestModel + { + // Page number + public int Page { get; set; } = 1; + + // Page size (number of items per page) + public int PageSize { get; set; } = 10; + + // Field to sort by + public string SortField { get; set; } + + // Sort direction (e.g., "asc" or "desc") + public string SortDirection { get; set; } + + // Optional: Filtering parameters, can be customized to fit your needs + public string FilterField { get; set; } + public string FilterValue { get; set; } + } +} diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/AnnouncementList.cshtml b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/AnnouncementList.cshtml index d3a5b24..29dd9a6 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/AnnouncementList.cshtml +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/AnnouncementList.cshtml @@ -2,6 +2,7 @@ @using Nop.Core.Infrastructure @using Nop.Web.Framework + @{ var defaultGridPageSize = EngineContext.Current.Resolve().DefaultGridPageSize; var gridPageSizes = EngineContext.Current.Resolve().GridPageSizes; @@ -13,7 +14,7 @@
    - + Add @@ -25,87 +26,29 @@
    -
    - + +
    diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/_ViewImports.cshtml b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/_ViewImports.cshtml index 65e616a..57ae384 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/_ViewImports.cshtml +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/_ViewImports.cshtml @@ -12,4 +12,6 @@ @using Nop.Web.Framework.Events @using Nop.Core.Infrastructure @using Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Models; -@using Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Controllers; \ No newline at end of file +@using Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Controllers; +@using Nop.Web.Framework.Models.DataTables +@using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities \ No newline at end of file From e76764a08da8448f28efad9a2afeab167af6a995 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 14 Nov 2024 12:51:33 +0100 Subject: [PATCH 3/3] AuctionPage --- .../AuctionPluginAdminController.cs | 39 +++++++- .../Areas/Admin/Models/AuctionViewModel.cs | 22 +++++ .../Admin/Models/KendoGridRequestModel.cs | 21 ----- .../Areas/Admin/Models/TestPageViewModel.cs | 17 ++++ .../Areas/Admin/Views/Announcement.cshtml | 2 +- .../Areas/Admin/Views/Auction.cshtml | 90 +++++++++++++++++++ .../AuctionDefaults.cs | 1 + .../AuctionPlugin.cs | 10 +++ .../Infrastructure/RouteProvider.cs | 4 + .../Nop.Plugin.Misc.AuctionPlugin.csproj | 4 + .../Services/AuctionService.cs | 14 ++- .../Services/IAuctionService.cs | 6 +- 12 files changed, 202 insertions(+), 28 deletions(-) create mode 100644 Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/AuctionViewModel.cs delete mode 100644 Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/KendoGridRequestModel.cs create mode 100644 Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/TestPageViewModel.cs create mode 100644 Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/Auction.cshtml diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AuctionPluginAdminController.cs b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AuctionPluginAdminController.cs index 14a0b1c..d51d248 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AuctionPluginAdminController.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AuctionPluginAdminController.cs @@ -8,6 +8,8 @@ using Nop.Plugin.Misc.AuctionPlugin; using Nop.Services.Messages; using Nop.Services.Localization; using Nop.Services.Logging; +using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities; +using Nop.Plugin.Misc.AuctionPlugin.Services; namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Controllers; @@ -21,16 +23,18 @@ public class AuctionPluginAdminController : BasePluginController private readonly INotificationService _notificationService; private readonly ISettingService _settingService; private readonly AuctionSettings _auctionSettings; + private readonly IAuctionService _auctionService; private readonly ILogger _logger; //public AuctionPluginAdminController(SignalRservice signalRservice) - public AuctionPluginAdminController(ILocalizationService localizationService, INotificationService notificationService, ISettingService settingService, AuctionSettings auctionSettings, ILogger logger) + public AuctionPluginAdminController(ILocalizationService localizationService, INotificationService notificationService, ISettingService settingService, AuctionSettings auctionSettings, ILogger logger, IAuctionService auctionService) { _localizationService = localizationService; _notificationService = notificationService; _settingService = settingService; _auctionSettings = auctionSettings; //_signalRservice = signalRservice; + _auctionService = auctionService; _logger = logger; } @@ -79,4 +83,37 @@ public class AuctionPluginAdminController : BasePluginController // return Json(new { success = false, message = $"Error: {ex.Message}" }); // } //} + + public IActionResult GetAuctionViewModel() + { + var model = new AuctionViewModel(); + return View("~/Plugins/Misc.AuctionPlugin/Areas/Admin/Views/Auction.cshtml", model); + } + + [HttpPost] + public async Task GetAuctionViewModel(AuctionViewModel viewModel) + { + Auction objOfAuctionDomain = new Auction(); + objOfAuctionDomain.AuctionName = viewModel.AuctionName; + objOfAuctionDomain.AuctionType = viewModel.AuctionType; + objOfAuctionDomain.StartDateUtc = viewModel.StartDateUtc; + objOfAuctionDomain.EndDateUtc = viewModel.EndDateUtc; + objOfAuctionDomain.Closed = viewModel.Closed; + objOfAuctionDomain.Created = DateTime.UtcNow; + await _auctionService.InsertAuctionAsync(objOfAuctionDomain); + + //if (viewModel.IsActive == true) + //{ + // await _announcementHubContext.Clients.All.SendAsync("send", viewModel.Body.ToString()); + //} + return RedirectToAction("AuctionList"); + + } + + public IActionResult TestPage() + { + var model = new TestPageViewModel(); + return View("~/Plugins/Misc.AuctionPlugin/Areas/Admin/Views/Auction.cshtml", model); + } + } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/AuctionViewModel.cs b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/AuctionViewModel.cs new file mode 100644 index 0000000..739bd91 --- /dev/null +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/AuctionViewModel.cs @@ -0,0 +1,22 @@ +using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums; +using Nop.Web.Framework.Models; +using Nop.Web.Framework.Mvc.ModelBinding; + +namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Models +{ + public record AuctionViewModel : BaseNopModel + { + public string PageTitle { get; set; } + + [NopResourceDisplayName("Name")] + public string AuctionName { get; set; } + public AuctionType AuctionType { get; set; } + + public DateTime StartDateUtc { get; set; } + public DateTime? EndDateUtc { get; set; } + + public bool Closed { get; set; } + + } + +} diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/KendoGridRequestModel.cs b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/KendoGridRequestModel.cs deleted file mode 100644 index d130d8c..0000000 --- a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/KendoGridRequestModel.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Models -{ - public class KendoGridRequestModel - { - // Page number - public int Page { get; set; } = 1; - - // Page size (number of items per page) - public int PageSize { get; set; } = 10; - - // Field to sort by - public string SortField { get; set; } - - // Sort direction (e.g., "asc" or "desc") - public string SortDirection { get; set; } - - // Optional: Filtering parameters, can be customized to fit your needs - public string FilterField { get; set; } - public string FilterValue { get; set; } - } -} diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/TestPageViewModel.cs b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/TestPageViewModel.cs new file mode 100644 index 0000000..3f9586d --- /dev/null +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/TestPageViewModel.cs @@ -0,0 +1,17 @@ +using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities; +using Nop.Web.Framework.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Models +{ + public record TestPageViewModel : BaseNopModel + { + public string Title { get; set; } + public string Message { get; set; } + public Auction TestAuction { get; set; } + } +} diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/Announcement.cshtml b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/Announcement.cshtml index d6fbf17..a9f42ee 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/Announcement.cshtml +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/Announcement.cshtml @@ -23,7 +23,7 @@ Create Announcement - LiveAnnouncement + Announcements
    diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/Auction.cshtml b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/Auction.cshtml new file mode 100644 index 0000000..96ffc39 --- /dev/null +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/Auction.cshtml @@ -0,0 +1,90 @@ +@model AuctionViewModel +@using Nop.Core.Infrastructure +@using Nop.Web.Framework + +@{ + var defaultGridPageSize = EngineContext.Current.Resolve().DefaultGridPageSize; + var gridPageSizes = EngineContext.Current.Resolve().GridPageSizes; + Layout = "_AdminLayout"; + //page title + Model.PageTitle = "Auctions page"; + ViewBag.Title = Model.PageTitle; +} + +@using (Html.BeginForm()) +{ +
    +

    + Create Auction +

    + +
    + + + Auctions +
    +
    + +
    +
    +
    + +
    +
    +
    + +} \ No newline at end of file diff --git a/Nop.Plugin.Misc.AuctionPlugin/AuctionDefaults.cs b/Nop.Plugin.Misc.AuctionPlugin/AuctionDefaults.cs index 4ecd9a7..00a35c2 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/AuctionDefaults.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/AuctionDefaults.cs @@ -27,6 +27,7 @@ public static class AuctionDefaults ///
    public static string AnnouncementRouteName => "Plugin.Misc.AuctionPlugin.Announcement"; public static string AnnouncementListRouteName => "Plugin.Misc.AuctionPlugin.AnnouncementList"; + public static string AuctionRouteName => "Plugin.Misc.AuctionPlugin.Auction"; /// /// Gets the name of autosuggest component diff --git a/Nop.Plugin.Misc.AuctionPlugin/AuctionPlugin.cs b/Nop.Plugin.Misc.AuctionPlugin/AuctionPlugin.cs index 6f151cf..77b75c4 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/AuctionPlugin.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/AuctionPlugin.cs @@ -140,6 +140,8 @@ namespace Nop.Plugin.Misc.AuctionPlugin rootNode.ChildNodes.Add(liveAnnouncementPluginNode); } + + liveAnnouncementPluginNode.ChildNodes.Add(new SiteMapNode() { Title = await _localizationService.GetResourceAsync("Plugins.Configure"), @@ -149,6 +151,14 @@ namespace Nop.Plugin.Misc.AuctionPlugin }); + liveAnnouncementPluginNode.ChildNodes.Add(new SiteMapNode() + { + Title = await _localizationService.GetResourceAsync("Misc.Auction"), + Visible = true, + IconClass = "fa-dot-circle-o", + Url = "~/Admin/AuctionPluginAdmin/GetAuctionViewModel" + }); + liveAnnouncementPluginNode.ChildNodes.Add(new SiteMapNode() { Title = await _localizationService.GetResourceAsync("Misc.Announcement"), diff --git a/Nop.Plugin.Misc.AuctionPlugin/Infrastructure/RouteProvider.cs b/Nop.Plugin.Misc.AuctionPlugin/Infrastructure/RouteProvider.cs index 1b72eb8..4f0e4a4 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Infrastructure/RouteProvider.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Infrastructure/RouteProvider.cs @@ -29,6 +29,10 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Infrastructure endpointRouteBuilder.MapControllerRoute(name: AuctionDefaults.AnnouncementListRouteName, pattern: "Admin/Announcement/AnnouncementList", defaults: new { controller = "Announcement", action = "AnnouncementList"}); + + endpointRouteBuilder.MapControllerRoute(name: AuctionDefaults.AuctionRouteName, + pattern: "Admin/AuctionPlugin/GetAuctionViewModel", + defaults: new { controller = "AuctionPluginAdmin", action = "GetAuctionViewModel" }); } /// diff --git a/Nop.Plugin.Misc.AuctionPlugin/Nop.Plugin.Misc.AuctionPlugin.csproj b/Nop.Plugin.Misc.AuctionPlugin/Nop.Plugin.Misc.AuctionPlugin.csproj index bd40a99..611c054 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Nop.Plugin.Misc.AuctionPlugin.csproj +++ b/Nop.Plugin.Misc.AuctionPlugin/Nop.Plugin.Misc.AuctionPlugin.csproj @@ -13,6 +13,7 @@ + @@ -27,6 +28,9 @@ + + Always + PreserveNewest diff --git a/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs b/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs index 3209522..7beeb68 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs @@ -27,6 +27,7 @@ public class AuctionService : IAuctionService #region Fields protected readonly IRepository _customerBidRepository; + protected readonly IRepository _auctionRepository; protected readonly IShortTermCacheManager _shortTermCacheManager; protected readonly IStaticCacheManager _staticCacheManager; @@ -40,11 +41,14 @@ public class AuctionService : IAuctionService /// Store pickup point repository /// Short term cache manager /// Cache manager - public AuctionService(IRepository customerBidRepository, + public AuctionService( + IRepository customerBidRepository, + IRepository auctionRepository, IShortTermCacheManager shortTermCacheManager, IStaticCacheManager staticCacheManager) { _customerBidRepository = customerBidRepository; + _auctionRepository = auctionRepository; _shortTermCacheManager = shortTermCacheManager; _staticCacheManager = staticCacheManager; } @@ -106,5 +110,13 @@ public class AuctionService : IAuctionService await _staticCacheManager.RemoveByPrefixAsync(AUCTION_PATTERN_KEY); } + #region auctions + public virtual async Task InsertAuctionAsync(Auction auction) + { + await _auctionRepository.InsertAsync(auction, false); + await _staticCacheManager.RemoveByPrefixAsync(AUCTION_PATTERN_KEY); + } + #endregion + #endregion } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs b/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs index e0a2393..eecc414 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs @@ -20,16 +20,14 @@ public interface IAuctionService /// The task result contains the bids /// Task> GetAllBidsAsync(int customerId = 0, int pageIndex = 0, int pageSize = int.MaxValue); - Task GetBidByIdAsync(int bidId); - Task InsertBidAsync(AuctionBid auctionBid); - Task UpdateBidAsync(AuctionBid auctionBid); - Task DeleteBidAsync(AuctionBid pickupPoint); + + Task InsertAuctionAsync(Auction auction); } \ No newline at end of file