using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Models; 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; using System.Linq; namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Controllers { [AutoValidateAntiforgeryToken] [AuthorizeAdmin] [Area(AreaNames.ADMIN)] public class AnnouncementController : BasePluginController { #region Field private readonly IAnnouncementService _announcementService; private IHubContext _announcementHubContext; private readonly ILogger _logger; #endregion #region Ctr public AnnouncementController( IAnnouncementService announcementService, IHubContext announcementHubContext, ILogger logger) { _announcementService = announcementService; _announcementHubContext = announcementHubContext; _logger = logger; } #endregion #region Methods public IActionResult GetAnnouncementViewModel() { var model = new AnnouncementViewModel(); return View("~/Plugins/Misc.AuctionPlugin/Areas/Admin/Views/Announcement.cshtml", model); } [HttpPost] public async Task GetAnnouncementViewModel(AnnouncementViewModel viewModel) { Announcement objOfAnnouncementDomain = new Announcement(); objOfAnnouncementDomain.Name = viewModel.Name; objOfAnnouncementDomain.Body = viewModel.Body; objOfAnnouncementDomain.IsActive = viewModel.IsActive; objOfAnnouncementDomain.Created = DateTime.UtcNow; await _announcementService.InsertAsync(objOfAnnouncementDomain); if (viewModel.IsActive == true) { await _logger.InformationAsync($"sending announcements"); await _announcementHubContext.Clients.All.SendAsync("send", viewModel.Body.ToString()); } return RedirectToAction("AnnouncementList"); } [HttpPost] public async Task Edit(Announcement model) { var entity = await _announcementService.GetAnnouncementByIdAsync(model.Id); entity.Name = model.Name; entity.Body = model.Body; entity.IsActive = model.IsActive; entity.Created = DateTime.UtcNow; await _announcementService.UpdateAsync(entity); if (model.IsActive == true) { await _announcementHubContext.Clients.All.SendAsync("send", model.Body.ToString()); } return RedirectToAction("AnnouncementList"); } public async Task Edit(int Id) { var singleAnnouncement = await _announcementService.GetAnnouncementByIdAsync(Id); var model = new Announcement(); model.Id = singleAnnouncement.Id; model.Name = singleAnnouncement.Name; model.Body = singleAnnouncement.Body; model.IsActive = singleAnnouncement.IsActive; return View("~/Plugins/Misc.AuctionPlugin/Areas/Admin/Views/Announcement.cshtml", model); } public async Task Delete(int Id) { var singleAnnouncement = await _announcementService.GetAnnouncementByIdAsync(Id); await _announcementService.DeleteAsync(singleAnnouncement); return new NullJsonResult(); } 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 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 //}); try { return Ok(new DataTablesModel { Data = await _announcementService.GetAnnouncementsAsync() }); } catch (Exception ex) { return BadRequest(ex); } } #endregion } }