Bootstrap reload theme, public bidbox logics, html and csss improvements
This commit is contained in:
parent
59ae22f5cd
commit
f938fc8eb2
|
|
@ -2,10 +2,12 @@
|
|||
using Nop.Core;
|
||||
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;
|
||||
using Nop.Services.Common;
|
||||
using Nop.Services.Customers;
|
||||
using Nop.Services.Logging;
|
||||
using Nop.Web.Framework.Components;
|
||||
using Nop.Web.Framework.Infrastructure;
|
||||
|
|
@ -23,6 +25,7 @@ public class AuctionPublicViewComponent : NopViewComponent
|
|||
protected readonly IWorkContext _workContext;
|
||||
protected readonly AuctionService _auctionService;
|
||||
protected readonly AuctionSettings _auctionSettings;
|
||||
protected readonly ICustomerService _customerService;
|
||||
protected readonly ILogger _logger;
|
||||
|
||||
#endregion
|
||||
|
|
@ -35,6 +38,7 @@ public class AuctionPublicViewComponent : NopViewComponent
|
|||
IWorkContext workContext,
|
||||
AuctionService auctionService,
|
||||
AuctionSettings auctionSettings,
|
||||
ICustomerService customerService,
|
||||
ILogger logger)
|
||||
{
|
||||
_addressService = addressService;
|
||||
|
|
@ -43,6 +47,7 @@ public class AuctionPublicViewComponent : NopViewComponent
|
|||
_workContext = workContext;
|
||||
_auctionService = auctionService;
|
||||
_auctionSettings = auctionSettings;
|
||||
_customerService = customerService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
|
|
@ -100,6 +105,7 @@ public class AuctionPublicViewComponent : NopViewComponent
|
|||
|
||||
List<ProductToAuctionMapping> auctionIds = await _auctionService.GetProductToAuctionsByProductIdAsync(productDetailsModel.Id);
|
||||
int auctionId = 0;
|
||||
AuctionDto auction;
|
||||
if(auctionIds == null || auctionIds.Count == 0)
|
||||
{
|
||||
return Content(string.Empty);
|
||||
|
|
@ -112,27 +118,32 @@ public class AuctionPublicViewComponent : NopViewComponent
|
|||
//we have more auctions so we return the closest open
|
||||
foreach (var auctionMapping in auctionIds)
|
||||
{
|
||||
var auction = await _auctionService.GetAuctionDtoByIdAsync(auctionMapping.AuctionId);
|
||||
if (!auction.Closed)
|
||||
var auctionItem = await _auctionService.GetAuctionDtoByIdAsync(auctionMapping.AuctionId);
|
||||
if (!auctionItem.Closed)
|
||||
{
|
||||
openAuctionList.Add(auction);
|
||||
openAuctionList.Add(auctionItem);
|
||||
}
|
||||
}
|
||||
//first auction that started or strats not earlier than yesterday
|
||||
auctionId = openAuctionList.Where(x => x.StartDateUtc > DateTime.UtcNow.AddDays(-1)).OrderBy(x => x.StartDateUtc).FirstOrDefault().Id;
|
||||
auction = openAuctionList.Where(x => x.StartDateUtc > DateTime.UtcNow.AddDays(-1)).OrderBy(x => x.StartDateUtc).FirstOrDefault();
|
||||
auctionId = auction.Id;
|
||||
}
|
||||
else
|
||||
{
|
||||
var valami = await _auctionService.GetAuctionDtoByIdAsync(auctionIds.FirstOrDefault().AuctionId);
|
||||
auctionId = valami.Id;
|
||||
auction = await _auctionService.GetAuctionDtoByIdAsync(auctionIds.FirstOrDefault().AuctionId);
|
||||
auctionId = auction.Id;
|
||||
|
||||
}
|
||||
|
||||
var productToAuctionId = await _auctionService.GetProductToAuctionByAuctionIdAndProductIdAsync(auctionId, productDetailsModel.Id);
|
||||
|
||||
productBidBoxViewModel.IsAdmin = await _customerService.IsAdminAsync(customer);
|
||||
productBidBoxViewModel.IsGuest = await _customerService.IsGuestAsync(customer);
|
||||
productBidBoxViewModel.AuctionClosed = auction.Closed;
|
||||
productBidBoxViewModel.WidgetZone = widgetZone;
|
||||
productBidBoxViewModel.BasePrice = productDetailsModel.ProductPrice.OldPriceValue;
|
||||
productBidBoxViewModel.CurrentPrice = productDetailsModel.ProductPrice.PriceValue;
|
||||
productBidBoxViewModel.ProductToAuctionId = productToAuctionId.FirstOrDefault().Id;
|
||||
productBidBoxViewModel.ProductToAuctionsId = productToAuctionId.FirstOrDefault().Id;
|
||||
productBidBoxViewModel.AuctionId = auctionId;
|
||||
productBidBoxViewModel.CustomerId = customer.Id;
|
||||
productBidBoxViewModel.ProductId = productDetailsModel.Id;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using Nop.Web.Framework.Models;
|
||||
using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums;
|
||||
using Nop.Web.Framework.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
|
@ -9,8 +10,11 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Models
|
|||
{
|
||||
public record ProductBidBoxViewModel: BaseNopModel
|
||||
{
|
||||
public int ProductToAuctionId { get; set; }
|
||||
public int ProductToAuctionsId { get; set; }
|
||||
public bool IsAdmin { get; set; }
|
||||
public bool IsGuest { get; set; }
|
||||
public int AuctionId { get; set; }
|
||||
public bool AuctionClosed { get; set; }
|
||||
public int ProductId { get; set; }
|
||||
public int CustomerId { get; set; }
|
||||
|
||||
|
|
|
|||
|
|
@ -3,41 +3,76 @@
|
|||
|
||||
@* @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(myObj) as String) *@
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
<div id="publicProductBidBox" class="bg-dark p-3">
|
||||
@{
|
||||
if (!Model.IsGuest)
|
||||
{
|
||||
<div id="publicProductBidBox" class="p-3 bg-primary text-white">
|
||||
<h4>This item is under auction!</h4>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div>
|
||||
<strong>Base Price:</strong>
|
||||
<span class="value">
|
||||
@String.Format("{0:c}", Model.BasePrice)
|
||||
@* @(decimal?.Round(Model.BasePrice, 2, MidpointRounding.AwayFromZero)) *@
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<strong>Bid Step:</strong>
|
||||
<span class="value">@String.Format("{0:c}", Model.LicitStep)</span>
|
||||
</div>
|
||||
<div>
|
||||
<button id="signalRBidButton" class="btn btn-success" style="text-transform: uppercase;" type="button">
|
||||
Bid @String.Format("{0:c}", Model.BidPrice)
|
||||
</button>
|
||||
@* <button id="bidButton" class="btn btn-success">
|
||||
|
||||
<div class="d-flex justify-content-between mb-3">
|
||||
<div>
|
||||
<strong>Base Price:</strong>
|
||||
<span class="value">
|
||||
@String.Format("{0:c}", Model.BasePrice)
|
||||
@* @(decimal?.Round(Model.BasePrice, 2, MidpointRounding.AwayFromZero)) *@
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<strong>Bid Step:</strong>
|
||||
<span class="value">@String.Format("{0:c}", Model.LicitStep)</span>
|
||||
</div>
|
||||
<div>
|
||||
<button id="signalRBidButton" class="btn btn-success" type="button">
|
||||
Bid @String.Format("{0:c}", Model.BidPrice)
|
||||
</button>
|
||||
@* <button id="bidButton" class="btn btn-success">
|
||||
|
||||
Bid @String.Format("{0:c}", Model.BidPrice)
|
||||
Bid @String.Format("{0:c}", Model.BidPrice)
|
||||
</button> *@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* <button id="testButton" class="btn btn-success">
|
||||
TestButton
|
||||
|
||||
@* <button id="testButton" class="btn btn-success">
|
||||
TestButton
|
||||
</button> *@
|
||||
|
||||
<div id="bidFeedback" class="mt-3"></div>
|
||||
</div>
|
||||
<div id="bidFeedback" class="mt-3"></div>
|
||||
</div>
|
||||
|
||||
|
||||
if (Model.IsAdmin)
|
||||
{
|
||||
<div id="publicProductBidBoxAdmin" class="p-3 bg-primary text-white">
|
||||
<h4>Manage auction!</h4>
|
||||
<div id="bidBoxAdminButtons" class="d-flex justify-content-between mb-3">
|
||||
<button id="signalRBidButton" class="btn btn-scondary" style="text-transform: uppercase;" type="button">
|
||||
Activate item
|
||||
</button>
|
||||
<button id="signalRBidButton" class="btn btn-warning" style="text-transform: uppercase;" type="button">
|
||||
First warning
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<p>No access to admin level buttons</p>
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
<div id="publicProductBidBoxGuest" class="p-3 bg-primary text-white">
|
||||
<h4>This item is under auction!</h4>
|
||||
<div id="bidBoxGuestMessage" class="d-flex justify-content-between mb-3">
|
||||
|
||||
<p>Please log in or register to participate!</p>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
|
||||
<script>
|
||||
var pageViewModel = undefined;
|
||||
|
|
@ -48,48 +83,17 @@
|
|||
console.log(pageViewModel.WidgetZone);
|
||||
console.log(typeof sendMessageToServer);
|
||||
|
||||
|
||||
// $('#bidButton').click(function () {
|
||||
// const bidPrice = $('#bidPrice').val();
|
||||
|
||||
// // Validate bid price
|
||||
// if (!bidPrice || parseInt(bidPrice) < @Model.CurrentPrice + @Model.LicitStep) {
|
||||
// $('#bidFeedback').text('Bid price must be at least the current price plus the licit step.')
|
||||
// .addClass('text-danger');
|
||||
// return;
|
||||
// }
|
||||
|
||||
// // AJAX POST to send the bid
|
||||
// $.ajax({
|
||||
// url: '/Auction/PlaceBid', // Ensure this endpoint exists in your controller
|
||||
// type: 'POST',
|
||||
// contentType: 'application/json',
|
||||
// data: JSON.stringify({
|
||||
// auctionId: pageViewModel.AuctionId,
|
||||
// bidPrice: bidPrice,
|
||||
// customerId: dataObject.CustomerId,
|
||||
// productId: dataObject.ProductId
|
||||
// }),
|
||||
// success: function (response) {
|
||||
// $('#bidFeedback').text(response.message).removeClass('text-danger').addClass('text-success');
|
||||
// },
|
||||
// error: function (xhr) {
|
||||
// $('#bidFeedback').text('Failed to place bid: ' + xhr.responseText)
|
||||
// .addClass('text-danger');
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
|
||||
$("#signalRBidButton").on("click", function () {
|
||||
|
||||
document.getElementById("signalRBidButton").disabled = true;
|
||||
event.preventDefault();
|
||||
document.getElementById("signalRBidButton").disabled = true;
|
||||
event.preventDefault();
|
||||
|
||||
var bidMessage = {
|
||||
AuctionId: pageViewModel.AuctionId.toFixed(),
|
||||
BidPrice: pageViewModel.BidPrice.toFixed(2),
|
||||
ProductId: pageViewModel.ProductId.toFixed(),
|
||||
CustomerId: pageViewModel.CustomerId.toFixed()
|
||||
ProductAuctionMappingId: pageViewModel.ProductToAuctions,
|
||||
AuctionId: pageViewModel.AuctionId,
|
||||
BidPrice: pageViewModel.BidPrice,
|
||||
ProductId: pageViewModel.ProductId,
|
||||
CustomerId: pageViewModel.CustomerId
|
||||
};
|
||||
|
||||
sendMessageToServer("BidRequestMessage", bidMessage);
|
||||
|
|
@ -101,24 +105,9 @@
|
|||
});
|
||||
|
||||
function refreshPublicBidBox(data) {
|
||||
// $.ajax({
|
||||
// url: '/Auction/RefreshAuctionWidget', // Controller endpoint
|
||||
// type: 'POST',
|
||||
// contentType: 'application/json',
|
||||
// data: JSON.stringify({
|
||||
// WidgetZone: pageViewModel.WidgetZone,
|
||||
// ProductId: pageViewModel.ProductId
|
||||
// }),
|
||||
// success: function (response) {
|
||||
// //$('#auction-widget').html(response); // Update the DOM element
|
||||
// console.log("Auction widget refreshed!");
|
||||
// },
|
||||
// error: function (error) {
|
||||
// console.error("Error refreshing auction widget:", error);
|
||||
// }
|
||||
// });
|
||||
|
||||
var widgetPriceElement = document.getElementById("price-value-"+pageViewModel.ProductId);
|
||||
|
||||
var widgetPriceElement = document.getElementById("price-value-" + pageViewModel.ProductId);
|
||||
var budButtonElement = document.getElementById("signalRBidButton");
|
||||
|
||||
if (widgetPriceElement) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue