Calculator
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PTR & PTS Calculator</title>
<style>
/* Basic Styling for the Calculator */
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background-color: #f0f2f5;
margin: 0;
color: #333;
}
.calculator-container {
background: #ffffff;
padding: 2rem;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
width: 100%;
max-width: 400px;
}
h1 {
text-align: center;
color: #1a73e8;
margin-bottom: 1.5rem;
}
.input-group {
margin-bottom: 1rem;
}
.input-group label {
display: block;
margin-bottom: 0.5rem;
font-weight: 500;
}
.input-group input {
width: 100%;
padding: 0.75rem;
border: 1px solid #ddd;
border-radius: 8px;
box-sizing: border-box;
font-size: 1rem;
}
button {
width: 100%;
padding: 0.8rem;
border: none;
background-color: #1a73e8;
color: white;
font-size: 1.1rem;
font-weight: bold;
border-radius: 8px;
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: #155ab6;
}
.results-container {
margin-top: 1.5rem;
padding-top: 1.5rem;
border-top: 1px solid #eee;
text-align: center;
}
.result-item {
font-size: 1.2rem;
margin-bottom: 1rem;
}
.result-item span {
font-weight: bold;
color: #202124;
}
.error-message {
color: #d93025;
text-align: center;
margin-top: 1rem;
display: none; /* Hidden by default */
}
</style>
</head>
<body>
<div class="calculator-container">
<h1>PTR & PTS Calculator</h1>
<div class="input-group">
<label for="mrp">MRP (Maximum Retail Price)</label>
<input type="number" id="mrp" placeholder="e.g., 100">
</div>
<div class="input-group">
<label for="retailMargin">Retail Margin (%)</label>
<input type="number" id="retailMargin" placeholder="e.g., 20">
</div>
<div class="input-group">
<label for="stockistMargin">Stockist Margin (%)</label>
<input type="number" id="stockistMargin" placeholder="e.g., 10">
</div>
<div class="input-group">
<label for="gst">GST (%)</label>
<input type="number" id="gst" placeholder="e.g., 12">
</div>
<button onclick="calculate()">Calculate</button>
<div class="results-container" id="results" style="display:none;">
<div class="result-item">PTR (Price to Retailer): <span id="ptrResult"></span></div>
<div class="result-item">PTS (Price to Stockist): <span id="ptsResult"></span></div>
</div>
<p class="error-message" id="error"></p>
</div>
<script>
function calculate() {
// Get input values
const mrp = parseFloat(document.getElementById('mrp').value);
const retailMargin = parseFloat(document.getElementById('retailMargin').value);
const stockistMargin = parseFloat(document.getElementById('stockistMargin').value);
const gst = parseFloat(document.getElementById('gst').value);
const errorElement = document.getElementById('error');
const resultsElement = document.getElementById('results');
// --- Input Validation ---
if (isNaN(mrp) || isNaN(retailMargin) || isNaN(stockistMargin) || isNaN(gst)) {
errorElement.textContent = "Please fill in all fields with valid numbers.";
errorElement.style.display = 'block';
resultsElement.style.display = 'none';
return;
}
if (mrp < 0 || retailMargin < 0 || stockistMargin < 0 || gst < 0) {
errorElement.textContent = "Values cannot be negative.";
errorElement.style.display = 'block';
resultsElement.style.display = 'none';
return;
}
// --- Calculations ---
try {
// Calculate PTR
const netPrice = mrp - (mrp * (retailMargin / 100));
const ptr = netPrice / (1 + (gst / 100));
// Calculate PTS
const pts = ptr - (ptr * (stockistMargin / 100));
// Check if results are valid numbers
if (isNaN(ptr) || isNaN(pts) || !isFinite(ptr) || !isFinite(pts)) {
throw new Error("Calculation resulted in an invalid number.");
}
// --- Display Results ---
document.getElementById('ptrResult').textContent = `₹ ${ptr.toFixed(2)}`;
document.getElementById('ptsResult').textContent = `₹ ${pts.toFixed(2)}`;
// Show results and hide error
resultsElement.style.display = 'block';
errorElement.style.display = 'none';
} catch (e) {
errorElement.textContent = "An error occurred during calculation. Please check your inputs.";
errorElement.style.display = 'block';
resultsElement.style.display = 'none';
}
}
</script>
</body>
</html>
