Mango.Nop.Plugins/Nop.Plugin.Misc.AuctionPlugin/Content/Js/Auction.js

374 lines
14 KiB
JavaScript

window.sendBidMessage = function (ptaId, auctionId, bidPrice, productId) {
setBidButtonDisabledById("signalRBidButton" + ptaId, true);
var bidMessage = {
ProductAuctionMappingId: ptaId,
AuctionId: auctionId,
BidPrice: bidPrice,
ProductId: productId,
CustomerId: window.CustomerId
};
var content = JSON.stringify(bidMessage);
console.log("WTF " + content);
sendMessageToServer("BidRequestMessage", window.CustomerId, content);
return false;
}
window.setBidButtonDisabledById = function (bidButtonElementId, disabled, updateDisabledState = true) {
if (!updateDisabledState) return;
setBidButtonDisabled(document.getElementById(bidButtonElementId), disabled, updateDisabledState);
}
window.sendAuctionStatusChange = function (ptaId, auctionStatus) {
var customerId = window.CustomerId;
console.log("Send auctionstatus: " + customerId + ", " + ptaId);
// Create the message object
var auctionMessage = {
ProductToAuctionId: ptaId,
AuctionStatus: auctionStatus
};
// Convert to JSON and log
var content = JSON.stringify(auctionMessage);
console.log(content);
// Send the message via SignalR
sendMessageToServer("AuctionProductStatusRequest", customerId, content);
return false;
}
window.refreshPublicBidBox = function (bidNotification, updateBidButtonDisabledState, ptaId) {
//now we are refreshing any widget that has this ptaId
var auctionDto = bidNotification.auctionDto;
var productToAuction = auctionDto.productToAuctionDtos[0];
/*var productAuctionMappingId = ptaId;*/
var winnerId = productToAuction.winnerCustomerId;
var isMyBid;
var widgetPriceElement = document.getElementById("price-value-" + productToAuction.ProductId);
var widgetPriceElementInList = $('.product-item[data-productid="' + productToAuction.ProductId + '"]');
var currency = window.WorkingCurrency;
console.log(currency);
var bidButtonElement = document.getElementById("signalRBidButton" + ptaId);
var storedBidPricePlaceholder = document.getElementById("bidPriceContainer" + ptaId);
var licitStepElement = document.getElementById("licitStepText" + ptaId);
var bidBox = document.getElementById("publicProductBidBox" + ptaId);
var bidBoxTitle = document.getElementById("bidBoxTitle" + ptaId);
console.log(bidNotification);
if (winnerId == window.CustomerId) {
isMyBid = true;
}
console.log("ProductToAuctionId: " + ptaId);
//TODO: TESZT STATUS!!! - JTEST.
var status = productToAuction.auctionStatus;
//var status = AuctionStatus.TEST;
if (updateBidButtonDisabledState) {
setButtons(status, ptaId);
}
if (widgetPriceElement || widgetPriceElementInList) {
if (widgetPriceElement) {
/*if (productAuctionMappingId == ptaId) {*/
console.log("THIS IS FOR US! SORRY FOR SHOUTING");
if (currency.CurrencyCode == "EUR") {
widgetPriceElement.textContent = EURFormatter.format(bidNotification.currentPrice * window.WorkingCurrency.Rate); // Update the price
//licitStepElement.textContent = EURFormatter.format(bidNotification.nextStepAmount * window.WorkingCurrency.Rate);
}
else {
widgetPriceElement.textContent = HUFFormatter.format(bidNotification.currentPrice); // Update the price
//licitStepElement.textContent = HUFFormatter.format(bidNotification.nextStepAmount);
}
/*}*/
}
/*if (productAuctionMappingId == ptaId) {*/
console.log("THIS IS FOR US! SORRY FOR SHOUTING");
if (currency.CurrencyCode == "EUR") {
//widgetPriceElement.textContent = EURFormatter.format(bidNotification.currentPrice * window.WorkingCurrency.Rate); // Update the price
licitStepElement.textContent = EURFormatter.format(bidNotification.nextStepAmount * window.WorkingCurrency.Rate);
}
else {
//widgetPriceElement.textContent = HUFFormatter.format(bidNotification.currentPrice); // Update the price
licitStepElement.textContent = HUFFormatter.format(bidNotification.nextStepAmount);
}
storedBidPricePlaceholder.value = Number(bidNotification.nextBidPrice);
setBidButtonDisabled(bidButtonElement, !productToAuction.isActiveItem, updateBidButtonDisabledState);
var list;
if (isMyBid) {
console.log("This is my bid");
list = bidBox.classList;
list.add("bg-success");
list.remove("bg-primary");
bidButtonElement.textContent = window.LocalizationStrings.GoodJob;
bidBoxTitle.textContent = productToAuction.auctionStatus == AuctionStatus.Sold ? window.LocalizationStrings.YouWin : window.LocalizationStrings.YourBidLeading;
if (window.IsAdmin) {
console.log("I AM WEASEL!!! " + window.IsAdmin);
setBidButtonDisabled(bidButtonElement, !productToAuction.isActiveItem, updateBidButtonDisabledState);
} else {
console.log("I AM NOT WEASEL!!! " + window.IsAdmin);
setBidButtonDisabled(bidButtonElement, true, updateBidButtonDisabledState);
}
} else {
list = bidBox.classList;
list.add("bg-primary");
list.remove("bg-success");
bidBoxTitle.textContent = productToAuction.auctionStatus == AuctionStatus.Sold ? window.LocalizationStrings.Sold : window.LocalizationStrings.PlaceABid;
if (currency.CurrencyCode == "EUR") {
bidButtonElement.textContent = window.LocalizationStrings.BidButtonPrefix + EURFormatter.format(bidBoxPageViewModel.NextBidPriceInWorkingCurrency);
//bidButtonElement.textContent = EURFormatter.format(storedBidPricePlaceholder.value);
} else {
bidButtonElement.textContent = window.LocalizationStrings.BidButtonPrefix + HUFFormatter.format(bidBoxPageViewModel.NextBidPrice);
//bidButtonElement.textContent = HUFFormatter.format(storedBidPricePlaceholder.value);
}
bidButtonElement.disabled = false;
}
console.log(`WidgetPrice updated to: ${bidNotification.currentPrice}`);
//} else {
// console.log("Not for this product");
//}
} else {
console.warn("Element with ID 'WidgetPrice' not found in the DOM.");
}
}
function setButtons(auctionStatus, ptaId) {
console.log("SetButtons called: " + auctionStatus);
// Button IDs and their default states for each AuctionStatus
//true = disabled
var buttonStates = {
[AuctionStatus.None]: {
signalRBidButton: true,
signalRFirstWarningButton: true,
signalRSecondWarningButton: true,
signalROpenItemButton: false,
signalRCloseItemButton: true,
signalRPauseItemButton: true,
signalRRevertBidButton: true,
signalRResetItemButton: true,
},
[AuctionStatus.Active]: {
signalRBidButton: false,
signalRFirstWarningButton: false,
signalRSecondWarningButton: true,
signalROpenItemButton: true,
signalRCloseItemButton: true,
signalRPauseItemButton: false,
signalRRevertBidButton: true,
signalRResetItemButton: true,
},
[AuctionStatus.FirstWarning]: {
signalRBidButton: false,
signalRFirstWarningButton: true,
signalRSecondWarningButton: false,
signalROpenItemButton: true,
signalRCloseItemButton: true,
signalRPauseItemButton: false,
signalRRevertBidButton: true,
signalRResetItemButton: true,
},
[AuctionStatus.SecondWarning]: {
signalRBidButton: false,
signalRFirstWarningButton: true,
signalRSecondWarningButton: true,
signalROpenItemButton: true,
signalRCloseItemButton: false,
signalRPauseItemButton: false,
signalRRevertBidButton: true,
signalRResetItemButton: true,
},
[AuctionStatus.Pause]: {
signalRBidButton: true,
signalRFirstWarningButton: true,
signalRSecondWarningButton: true,
signalROpenItemButton: false,
signalRCloseItemButton: true,
signalRPauseItemButton: true,
signalRRevertBidButton: false,
signalRResetItemButton: false,
},
[AuctionStatus.Sold]: {
signalRBidButton: true,
signalRFirstWarningButton: true,
signalRSecondWarningButton: true,
signalROpenItemButton: true,
signalRCloseItemButton: true,
signalRPauseItemButton: true,
signalRRevertBidButton: true,
signalRResetItemButton: true,
},
[AuctionStatus.NotSold]: {
signalRBidButton: true,
signalRFirstWarningButton: true,
signalRSecondWarningButton: true,
signalROpenItemButton: true,
signalRCloseItemButton: true,
signalRPauseItemButton: true,
signalRRevertBidButton: true,
signalRResetItemButton: true,
},
[AuctionStatus.TEST]: {
signalRBidButton: false,
signalRFirstWarningButton: false,
signalRSecondWarningButton: false,
signalROpenItemButton: false,
signalRCloseItemButton: false,
signalRPauseItemButton: false,
signalRRevertBidButton: false,
signalRResetItemButton: false,
},
};
// Get the states for the given auctionStatus
var states = buttonStates[auctionStatus];
if (!states) {
console.error("Unknown AuctionStatus: ", auctionStatus);
return;
}
// Apply the states to each button
Object.keys(states).forEach((buttonId) => {
var button = document.getElementById(buttonId + ptaId);
if (button) {
button.disabled = states[buttonId];
button.hidden = states[buttonId];
} else {
console.warn(`Button with ID ${buttonId} not found.`);
}
});
}
function handleAuctionUpdate(auctionStatusNotification, myPtaId) {
var ids = auctionStatusNotification.auctionDto.productToAuctionDtos.map(pta => pta.id);
ids.forEach(ptaId => {
console.log(ptaId);
var productToAuctionDtos = auctionStatusNotification.auctionDto.productToAuctionDtos;
// Find the object with the matching Id
var matchingDto = productToAuctionDtos.find(pta => pta.id === ptaId);
if (matchingDto) {
console.log('Matching ProductToAuctionDto:', matchingDto);
UpdateBox(ptaId, matchingDto.productId, auctionStatusNotification.auctionDto, matchingDto);
} else {
console.log(`No ProductToAuctionDto found with Id: ${ptaId}`);
}
});
}
function UpdateBox(ptaId, productId, auctionDto, ptaDto) {
var widgetPriceElement = document.getElementById("price-value-" + productId);
var widgetPriceElementInList = $('.product-item[data-productid="' + productId + '"]');
var bidButtonElement = document.getElementById("signalRBidButton" + ptaId);
var licitStepElement = document.getElementById("licitStepText" + ptaId);
var bidBoxTitle = document.getElementById("bidBoxTitle" + ptaId);
var productAuctionMappingId = ptaId;
let isMyBid = false;
//TODO: TESZT STATUS!!! - JTEST.
let itemStatus = ptaDto.auctionStatus;
//var itemStatus = AuctionStatus.TEST;
let winnerId = ptaDto.winnerCustomerId;
if (winnerId == window.CustomerId) {
isMyBid = true;
}
console.log("handle auction update called" + productAuctionMappingId);
console.log("auction status:" + itemStatus);
if (widgetPriceElement || widgetPriceElementInList) {
/*if (productAuctionMappingId == bidBoxPageViewModel.ProductToAuctionId) {*/
console.log("THIS IS FOR US! SORRY FOR SHOUTING");
switch (itemStatus) {
case AuctionStatus.None:
location.reload();
break;
case AuctionStatus.Active:
if (isMyBid) {
bidBoxTitle.textContent = window.LocalizationStrings.YourBidLeading;
} else {
bidBoxTitle.textContent = window.LocalizationStrings.PlaceABid;
}
break;
case AuctionStatus.Pause:
bidBoxTitle.textContent = window.LocalizationStrings.AuctionPaused;
break;
case AuctionStatus.FirstWarning:
bidBoxTitle.textContent = window.LocalizationStrings.FirstWarning;
break;
case AuctionStatus.SecondWarning:
bidBoxTitle.textContent = window.LocalizationStrings.SecondWarning;
break;
case AuctionStatus.Sold:
if (isMyBid) {
bidBoxTitle.textContent = window.LocalizationStrings.YouWin;
} else {
bidBoxTitle.textContent = window.LocalizationStrings.ItemClosed;
}
break;
case AuctionStatus.NotSold:
bidBoxTitle.textContent = window.LocalizationStrings.ItemClosed;
break;
default:
console.warn("Unknown AuctionStatus: ", itemStatus);
}
/*console.log(`Status updated to: ${auctionStatusNotification.currentPrice}, next bid is ${bidBoxPageViewModel.NextBidPrice}`);*/
//}
//else {
// console.log("Not for this product");
//}
} else {
console.warn("Element with ID 'WidgetPrice' not found in the DOM.");
}
setButtons(itemStatus, ptaId);
}