assign product to the auction
This commit is contained in:
parent
8577d26812
commit
0dd529e36d
|
|
@ -13,6 +13,8 @@ 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
|
||||
|
|
@ -25,7 +27,8 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Components
|
|||
protected readonly IProductAttributeService _productAttributeService;
|
||||
protected readonly IWidgetPluginManager _widgetPluginManager;
|
||||
protected readonly AuctionSettings _auctionSettings;
|
||||
protected readonly IAuctionService _auctionService;
|
||||
protected readonly AuctionService _auctionService;
|
||||
protected readonly MyProductModelFactory _productModelFactory;
|
||||
|
||||
|
||||
|
||||
|
|
@ -39,13 +42,15 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Components
|
|||
IProductAttributeService productAttributeService,
|
||||
IWidgetPluginManager widgetPluginManager,
|
||||
AuctionSettings auctionSettings,
|
||||
IAuctionService auctionService) : base(widgetModelFactory)
|
||||
AuctionService auctionService,
|
||||
MyProductModelFactory productModelFactory) : base(widgetModelFactory)
|
||||
{
|
||||
_logger = logger;
|
||||
_productAttributeService = productAttributeService;
|
||||
_widgetPluginManager = widgetPluginManager;
|
||||
_auctionSettings = auctionSettings;
|
||||
_auctionService = auctionService;
|
||||
_productModelFactory = productModelFactory;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
@ -83,6 +88,8 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Components
|
|||
}
|
||||
|
||||
var product = (additionalData as ProductModel);
|
||||
//ProductDetailsModel detailsModel = await _productModelFactory.PrepareProductDetailsModelAsync(product.Price);
|
||||
|
||||
productId = product.Id;
|
||||
|
||||
var auctions = await _auctionService.GetAllAuctionsAsync() ?? new List<Auction>();
|
||||
|
|
@ -90,9 +97,14 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Components
|
|||
// Assign the auctions to the ViewBag
|
||||
ViewBag.Auctions = auctions;
|
||||
ProductAssignToAuctionViewModel viewModel = new ProductAssignToAuctionViewModel();
|
||||
viewModel.StartingPrice = product.BasepriceAmount;
|
||||
viewModel.ProductId = productId;
|
||||
viewModel.StartingPrice = product.OldPrice;
|
||||
viewModel.BidPrice = product.OldPrice;
|
||||
//viewModel.InAuctions = await _auctionService.GetAllAuctionsAsync()
|
||||
viewModel.InAuctions = [];
|
||||
|
||||
await _logger.InformationAsync($"Admin auction widget called from {widgetZone}! II. ");
|
||||
return View("~/Plugins/Misc.AuctionPlugin/Areas/Admin/Views/AdminProductAuctionSettingsBox.cshtml", productId.ToString());
|
||||
return View("~/Plugins/Misc.AuctionPlugin/Areas/Admin/Views/AdminProductAuctionSettingsBox.cshtml", viewModel);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
|||
|
|
@ -11,22 +11,24 @@ using Nop.Services.Logging;
|
|||
using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities;
|
||||
using Nop.Plugin.Misc.AuctionPlugin.Services;
|
||||
using Nop.Web.Framework.Models.DataTables;
|
||||
using Nop.Plugin.Misc.AuctionPlugin.Models;
|
||||
using AyCode.Core.Extensions;
|
||||
|
||||
namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Controllers;
|
||||
|
||||
[AutoValidateAntiforgeryToken]
|
||||
[AuthorizeAdmin]
|
||||
//[AutoValidateAntiforgeryToken]
|
||||
//[AuthorizeAdmin]
|
||||
[Area(AreaNames.ADMIN)]
|
||||
public class AuctionPluginAdminController : BasePluginController
|
||||
{
|
||||
//private readonly SignalRservice _signalRservice;
|
||||
private readonly ILocalizationService _localizationService;
|
||||
private readonly INotificationService _notificationService;
|
||||
private readonly ISettingService _settingService;
|
||||
private readonly AuctionSettings _auctionSettings;
|
||||
private readonly AuctionService _auctionService;
|
||||
private readonly ILogger _logger;
|
||||
|
||||
protected readonly ILocalizationService _localizationService;
|
||||
protected readonly INotificationService _notificationService;
|
||||
protected readonly ISettingService _settingService;
|
||||
protected readonly AuctionSettings _auctionSettings;
|
||||
protected readonly AuctionService _auctionService;
|
||||
protected readonly ILogger _logger;
|
||||
|
||||
//public AuctionPluginAdminController(SignalRservice signalRservice)
|
||||
public AuctionPluginAdminController(ILocalizationService localizationService, INotificationService notificationService, ISettingService settingService, AuctionSettings auctionSettings, ILogger logger, AuctionService auctionService)
|
||||
{
|
||||
|
|
@ -155,16 +157,31 @@ public class AuctionPluginAdminController : BasePluginController
|
|||
return View("~/Plugins/Misc.AuctionPlugin/Areas/Admin/Views/TestPage.cshtml", model);
|
||||
}
|
||||
|
||||
|
||||
public async Task<IActionResult> AssignProductToAuction()
|
||||
{
|
||||
_logger.Information("AssignProductToAuction has been called");
|
||||
|
||||
|
||||
|
||||
var result = await _auctionService.GetProductToAuctionsByAuctionIdAsync(1);
|
||||
|
||||
|
||||
return Ok(result.ToJson());
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<IActionResult> AssignProductToAuction(int productId, int auctionId)
|
||||
public async Task<IActionResult> AssignProductToAuction([FromBody] AssignAuctionRequestModel model)
|
||||
{
|
||||
if (productId <= 0 || auctionId <= 0)
|
||||
_logger.Information("AssignProductToAuction has been called");
|
||||
|
||||
if (Convert.ToInt32(model.ProductId) <= 0 || Convert.ToInt32(model.AuctionId) <= 0)
|
||||
return BadRequest();
|
||||
|
||||
var result = await _auctionService.AssignProductToAuctionAsync(productId, auctionId);
|
||||
var result = await _auctionService.AssignProductToAuctionAsync(Convert.ToInt32(model.ProductId),
|
||||
Convert.ToDecimal(model.StartingPrice), Convert.ToDecimal(model.BidPrice), Convert.ToInt32(model.AuctionId));
|
||||
if (result)
|
||||
return Ok();
|
||||
return Ok("Baaaazdmeeeeeeeeg");
|
||||
|
||||
return StatusCode(500, "Error assigning product to auction.");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using Nop.Web.Framework.Models;
|
||||
using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities;
|
||||
using Nop.Web.Framework.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
|
@ -10,7 +11,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Models
|
|||
public record ProductAssignToAuctionViewModel : BaseNopModel
|
||||
{
|
||||
public int ProductId { get; set; }
|
||||
public int AuctionId { get; set; }
|
||||
public List<ProductToAuctionMapping> InAuctions { get; set; }
|
||||
public decimal StartingPrice { get; set; }
|
||||
public decimal BidPrice { get; set; }
|
||||
public decimal BidAmount { get; set; }
|
||||
|
|
|
|||
|
|
@ -2,45 +2,116 @@
|
|||
<div class="auction-settings-box">
|
||||
<h3>@T("Plugins.Misc.AuctionPlugin.AssignToAuction")</h3>
|
||||
|
||||
<form id="assignAuctionForm" method="post" action="@Url.Action("AssignProductToAuction", "AuctionPluginAdmin", new { area = "Admin" })">
|
||||
<input type="hidden" name="productId" value="@Model.ProductId" />
|
||||
<input type="hidden" name="startingPrice" value="@Model.StartingPrice" />
|
||||
@* <input type="hidden" name="bidPrice" value="@Model.StartingPrice" /> *@
|
||||
<div id="assignAuctionContainer">
|
||||
<h3>Assign Product to Auction</h3>
|
||||
<input type="hidden" id="productId" value="@Model.ProductId" />
|
||||
<input type="hidden" id="startingPrice" value="@Model.StartingPrice" />
|
||||
<input type="hidden" id="bidPrice" value="@Model.StartingPrice" />
|
||||
|
||||
<div class="form-group">
|
||||
<label for="auctionSelect">@T("Plugins.Misc.AuctionPlugin.SelectAuction")</label>
|
||||
<select id="auctionSelect" name="auctionId" class="form-control">
|
||||
<option value="">@T("Plugins.Misc.AuctionPlugin.SelectAuctionPlaceholder")</option>
|
||||
@foreach (var auction in ViewBag.Auctions as List<Nop.Plugin.Misc.AuctionPlugin.Domains.Entities.Auction>)
|
||||
{
|
||||
<option value="@auction.Id">@auction.AuctionName</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<label for="auctionDropdown">@T("Plugins.Misc.AuctionPlugin.SelectAuction")</label>
|
||||
<select id="auctionDropdown" class="form-control">
|
||||
<option value="">Select an auction...</option>
|
||||
@foreach (var auction in ViewBag.Auctions as List<Nop.Plugin.Misc.AuctionPlugin.Domains.Entities.Auction>)
|
||||
{
|
||||
<option value="@auction.Id">@auction.AuctionName</option>
|
||||
}
|
||||
</select>
|
||||
|
||||
<button type="submit" class="btn btn-primary">
|
||||
@T("Plugins.Misc.AuctionPlugin.AssignToAuctionButton")
|
||||
</button>
|
||||
</form>
|
||||
<button id="assignAuctionButton" class="btn btn-primary mt-2">@T("Plugins.Misc.AuctionPlugin.AssignToAuctionButton")</button>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$('#assignAuctionForm').on('submit', function (e) {
|
||||
e.preventDefault();
|
||||
var form = $(this);
|
||||
|
||||
$(document).ready(function () {
|
||||
// Handle button click
|
||||
$("#assignAuctionButton").on("click", function () {
|
||||
|
||||
var productId = $("#productId").val();
|
||||
var startingPrice = $("#startingPrice").val();
|
||||
// var bidPrice = $("#bidPrice").val()toFixed(2);
|
||||
var bidPrice = $("#bidPrice").val();
|
||||
var auctionId = $("#auctionDropdown").val();
|
||||
|
||||
if (!auctionId) {
|
||||
alert("Please select an auction.");
|
||||
return;
|
||||
}
|
||||
|
||||
var postData = {
|
||||
|
||||
ProductId: productId,
|
||||
StartingPrice: startingPrice,
|
||||
BidPrice: bidPrice,
|
||||
AuctionId: auctionId
|
||||
|
||||
};
|
||||
addAntiForgeryToken(postData);
|
||||
|
||||
console.log("postData: " + JSON.stringify(postData));
|
||||
|
||||
// Perform AJAX call
|
||||
$.ajax({
|
||||
url: form.attr('action'),
|
||||
type: 'POST',
|
||||
data: form.serialize(),
|
||||
url: "/Admin/AuctionPluginAdmin/AssignProductToAuction", // Update to match your endpoint
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify(postData),
|
||||
traditional: true,
|
||||
success: function (response) {
|
||||
toastr.success("@T("Plugins.Misc.AuctionPlugin.ProductAssignedSuccess")");
|
||||
alert("Product successfully assigned to the auction!");
|
||||
console.log(response); // Optional: Log response for debugging
|
||||
},
|
||||
error: function (error) {
|
||||
toastr.error("@T("Plugins.Misc.AuctionPlugin.ProductAssignedError")");
|
||||
error: function (xhr, status, error) {
|
||||
console.error("Error assigning product to auction:", error);
|
||||
alert("Failed to assign the product to the auction. Please try again.");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
// $("#assignAuctionForm").on("submit", function (event) {
|
||||
// event.preventDefault(); // Prevent the default form submission behavior
|
||||
|
||||
// var productId = $("#productId").val();
|
||||
// var startingPrice = $("startingPrice").val();
|
||||
// var bidPrice = $("bidPrice").val();
|
||||
// var auctionId = $("#auctionDropdown").val();
|
||||
|
||||
// // AJAX call or form submission logic here
|
||||
// $.ajax({
|
||||
// url: "/Admin/Auction/AssignProductToAuction",
|
||||
// type: "POST",
|
||||
// data: { productId: productId, startingPrice: startingPrice, bidPrice: bidPrice, auctionId: auctionId },
|
||||
// success: function (response) {
|
||||
// console.log("Product assigned to auction successfully!");
|
||||
// },
|
||||
// error: function (xhr, status, error) {
|
||||
// console.error("Error assigning product to auction:", error);
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
|
||||
// $(document).ready(function () {
|
||||
// $('#assignAuctionForm').on('submit', function (e) {
|
||||
// e.preventDefault();
|
||||
// var form = $(this);
|
||||
|
||||
// $.ajax({
|
||||
// url: form.attr('action'),
|
||||
// type: 'POST',
|
||||
// data: form.serialize(),
|
||||
// success: function (response) {
|
||||
// toastr.success("@T("Plugins.Misc.AuctionPlugin.ProductAssignedSuccess")");
|
||||
// },
|
||||
// error: function (error) {
|
||||
// toastr.error("@T("Plugins.Misc.AuctionPlugin.ProductAssignedError")");
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ using Nop.Plugin.Misc.AuctionPlugin.Domains;
|
|||
using Nop.Plugin.Misc.AuctionPlugin.Domains.DataLayer;
|
||||
using Nop.Plugin.Misc.AuctionPlugin.Domains.Dtos;
|
||||
using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities;
|
||||
using Nop.Services.Logging;
|
||||
|
||||
namespace Nop.Plugin.Misc.AuctionPlugin.Services;
|
||||
|
||||
|
|
@ -36,6 +37,7 @@ public class AuctionService : IAuctionService
|
|||
protected readonly IShortTermCacheManager _shortTermCacheManager;
|
||||
protected readonly IStaticCacheManager _staticCacheManager;
|
||||
protected readonly IWorkContext _workContext;
|
||||
protected readonly ILogger _logger;
|
||||
#endregion
|
||||
|
||||
#region Ctor
|
||||
|
|
@ -46,7 +48,14 @@ public class AuctionService : IAuctionService
|
|||
/// <param name="ctx"></param>
|
||||
/// <param name="shortTermCacheManager">Short term cache manager</param>
|
||||
/// <param name="staticCacheManager">Cache manager</param>
|
||||
public AuctionService(AuctionDbContext ctx, IRepository<Auction> auctionRepository, IRepository<ProductToAuctionMapping> productToAuctionRepository, IShortTermCacheManager shortTermCacheManager, IStaticCacheManager staticCacheManager, IWorkContext workContext)
|
||||
public AuctionService(
|
||||
AuctionDbContext ctx,
|
||||
IRepository<Auction> auctionRepository,
|
||||
IRepository<ProductToAuctionMapping> productToAuctionRepository,
|
||||
IShortTermCacheManager shortTermCacheManager,
|
||||
IStaticCacheManager staticCacheManager,
|
||||
IWorkContext workContext,
|
||||
ILogger logger)
|
||||
{
|
||||
_ctx = ctx;
|
||||
//_customerBidRepository = customerBidRepository;
|
||||
|
|
@ -55,6 +64,7 @@ public class AuctionService : IAuctionService
|
|||
_shortTermCacheManager = shortTermCacheManager;
|
||||
_staticCacheManager = staticCacheManager;
|
||||
_workContext = workContext;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
@ -171,7 +181,7 @@ public class AuctionService : IAuctionService
|
|||
{
|
||||
return new AuctionBidDto(await _ctx.AuctionBids.GetByIdAsync(auctionBidId));
|
||||
}
|
||||
public async Task<bool> AssignProductToAuctionAsync(int productId, int auctionId)
|
||||
public async Task<bool> AssignProductToAuctionAsync(int productId, decimal startingPrice, decimal bidPrice, int auctionId)
|
||||
{
|
||||
var auction = await _ctx.Auctions.GetByIdAsync(auctionId);
|
||||
if (auction == null)
|
||||
|
|
@ -180,10 +190,19 @@ public class AuctionService : IAuctionService
|
|||
var mapping = new ProductToAuctionMapping
|
||||
{
|
||||
ProductId = productId,
|
||||
StartingPrice = Convert.ToInt32(startingPrice),
|
||||
BidPrice = Convert.ToInt32(bidPrice),
|
||||
BidAmount = 0,
|
||||
AuctionStatus = Domains.Enums.AuctionStatus.Active,
|
||||
AuctionId = auctionId
|
||||
};
|
||||
|
||||
await _productToAuctionRepository.InsertAsync(mapping);
|
||||
try
|
||||
{
|
||||
await _ctx.ProductToAuctions.InsertAsync(mapping);
|
||||
}
|
||||
catch (Exception ex) {
|
||||
await _logger.InformationAsync(ex.ToString());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue