Stand/stand.gg/help/reseller/index.html
2024-10-16 11:20:42 +08:00

243 lines
7.8 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<title>Reseller Information | Stand</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/halfmoon-variables.min.css" crossorigin="anonymous" rel="stylesheet" />
<link href="/halfmoon-config.css" rel="stylesheet" />
</head>
<body class="dark-mode">
<div class="page-wrapper with-navbar">
<nav class="navbar">
<div class="container-xl">
<a class="navbar-brand" href="/">Stand</a>
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link" href="/account/">Account</a></li>
<li class="nav-item active"><a class="nav-link" href="/help/">Help</a></li>
</ul>
</div>
</nav>
<div class="content-wrapper">
<div class="container-xl">
<div class="content">
<h1>Stand Reseller Information</h1>
<p>All information relevant to resellers. We recommend you read this page in its entirety.</p>
<h2>Price Calculator & Ordering</h2>
<div class="w-400">
<div class="input-group">
<input class="form-control" type="number" id="qty-basic" value="0" min="0" />
<div class="input-group-append">
<span class="input-group-text">Basic (<span id="price-basic"></span>€)</p></span>
</div>
</div>
<div class="input-group">
<input class="form-control" type="number" id="qty-regular" value="0" min="0" />
<div class="input-group-append">
<span class="input-group-text">Regular (<span id="price-regular"></span>€)</span>
</div>
</div>
<div class="input-group">
<input class="form-control" type="number" id="qty-ultimate" value="0" min="0" />
<div class="input-group-append">
<span class="input-group-text">Ultimate (<span id="price-ultimate"></span>€)</span>
</div>
</div>
<div class="input-group">
<input class="form-control" type="number" id="qty-basictoregular" value="0" min="0" />
<div class="input-group-append">
<span class="input-group-text">Basic To Regular (<span id="price-basictoregular"></span>€)</span>
</div>
</div>
<div class="input-group">
<input class="form-control" type="number" id="qty-regulartoultimate" value="0" min="0" />
<div class="input-group-append">
<span class="input-group-text">Regular To Ultimate (<span id="price-regulartoultimate"></span>€)</span>
</div>
</div>
<div class="input-group">
<input class="form-control" type="number" id="qty-basictoultimate" value="0" min="0" />
<div class="input-group-append">
<span class="input-group-text">Basic To Ultimate (<span id="price-basictoultimate"></span>€)</span>
</div>
</div>
</div>
<p>
Subtotal: <b><span id="total"></span></b><br>
Discount: <b><span id="discount"></span>%</b> (+0.1% Per Extra Key; Max. 16%)<br>
Total: <b><span id="total-discounted"></span></b>
</p>
<p id="place-order-text">To submit your order, message our reseller contact (stand_contact on Discord).</p>
<input id="compact" class="form-control w-400" type="text" placeholder="Compact order format" />
<p>If it can't be implied, also be sure to mention how you want to pay. We accept Bitcoin, Litecoin, Ethereum, and Tether USD on the Ethereum network.</p>
<h2>Recommended Selling Prices</h2>
<ul>
<li>Basic: 12,50€</li>
<li>Regular: 25€</li>
<li>Ultimate: 50€</li>
<li>Basic to Regular: 12,50€</li>
<li>Regular to Ultimate: 25€</li>
<li>Basic to Ultimate: 37,50€</li>
</ul>
<h2>Get listed on our website</h2>
<p>To get listed on our seller pages, message our reseller contact on Discord. Getting listed is free, but you need to have keys in stock.</p>
<p>Please also notify us for price changes or link updates.</p>
<p>Our ranking algorithm is based on price and stock. However, there is no benefit to selling more than 1 cent below the recommended price.</p>
<h2>How do customers redeem these keys?</h2>
<p>You can find our redeem instructions <a href="redeem-instructions.txt">here</a>. Feel free to modify them to fit your needs.</p>
<p>Note that bad redeem instructions can cause confused customers, which will lead to wasted support time, so just giving your customers a link to https://stand.sh/account/ is better than writing out a long checklist.</p>
<h2>When was this key redeemed? / Can you revoke this key?</h2>
<p>To get information about your keys, or revoke keys in case of a chargeback or customer issue, message our reseller contact on Discord.</p>
<h2>Where can I get branding materials?</h2>
<p>In our <a href="/branding.zip">branding.zip</a>.</p>
</div>
</div>
</div>
</div>
<script>
prices = {
basic: (12.50 * 0.75),
regular: (25.00 * 0.75),
ultimate: (50.00 * 0.75),
basictoregular: (12.50 * 0.75),
regulartoultimate: (25.00 * 0.75),
basictoultimate: (37.50 * 0.75),
};
formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'EUR',
});
class Order
{
qty = {};
fromInputs()
{
Object.keys(prices).forEach(item => {
this.qty[item] = document.getElementById("qty-" + item).value ? parseInt(document.getElementById("qty-" + item).value) : 0;
});
}
toCompact()
{
let i = 0, j = 0;
Object.keys(prices).forEach(item => {
++j;
if (this.qty[item] != 0)
{
i = j;
}
});
j = 0;
let arr = [];
Object.keys(prices).forEach(item => {
++j;
if (j <= i)
{
arr.push(this.qty[item]);
}
});
return arr.join(" ");
}
getTotalQty()
{
let total_qty = 0;
Object.keys(prices).forEach(item => {
total_qty += this.qty[item];
});
return total_qty;
}
getBulkDiscount()
{
let discount = (this.getTotalQty() - 1) / 10 * 0.01;
if(discount > 0.16)
{
discount = 0.16;
}
else if(discount < 0.0)
{
discount = 0.0;
}
return discount;
}
}
order = new Order();
function formatEuro(v)
{
return formatter.format(v).substr(1);
}
function formatDiscount(v)
{
let a=v.toString().split("."),
s=a[0]+".";
if(a.length>1)
{
s+=a[1].substr(0,1);
}
else
{
s+="0";
}
return s;
}
function updateTotal()
{
let discount = order.getBulkDiscount();
document.getElementById("discount").textContent = formatDiscount(discount * 100);
let price_mul = 1.0 - discount;
let total = 0;
Object.keys(prices).forEach(item => {
document.getElementById("price-" + item).textContent = formatEuro(prices[item] * price_mul);
total += order.qty[item] * prices[item];
});
document.getElementById("total").textContent = formatEuro(total);
document.getElementById("total-discounted").textContent = formatEuro(total * price_mul);
if (order.getTotalQty() == 0)
{
document.getElementById("place-order-text").textContent = "To submit your order, message our reseller contact (stand_contact on Discord).";
}
else
{
document.getElementById("place-order-text").textContent = "To submit your order, message our reseller contact (stand_contact on Discord) with the following:";
}
}
function onQtyChange()
{
order.fromInputs();
document.getElementById("compact").value = order.toCompact();
updateTotal();
}
Object.keys(prices).forEach(item => {
document.getElementById("qty-" + item).oninput = onQtyChange;
});
onQtyChange();
document.getElementById("compact").onfocus = function()
{
this.select();
};
document.getElementById("compact").oninput = function()
{
let arr = this.value.split(" ");
let i = 0;
Object.keys(prices).forEach(item => {
document.getElementById("qty-" + item).value = arr[i] ? arr[i] : 0;
++i;
});
order.fromInputs();
updateTotal();
};
</script>
</body>
</html>