Javascript, HTML, CSS Code
Copy
<html>
<head>
<script type="text/javascript"> window.addEventListener('error', function(event) { var message = JSON.parse(JSON.stringify(event.message)); var source = event.filename; var lineno = event.lineno; var colno = event.colno; var error = event.error; window.parent.postMessage({ type: 'iframeError', details: { message: message, source: source, lineno: lineno, colno: colno, error: error ? error.stack : '' } }, '*'); }); window.addEventListener('unhandledrejection', function(event) { window.parent.postMessage({ type: 'iframePromiseRejection', details: { reason: event.reason } }, '*'); }); </script>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>ASN Partners – Accountancy Services Fee</title>
<meta name="description" content="A detailed calculator for accountancy services fees at ASN Partners, featuring various client types and catering to specific needs.">
<meta name="keywords" content="calculator, accountancy, business services, fee estimation, ASN Partners">
<style>
body {
background: #fafafa;
font-family: 'Roboto', sans-serif;
font-size: 16px;
color: #333333;
margin: 0;
padding: 10px;
}
.container {
max-width: 800px;
margin: 0 auto;
}
h1 {
text-align: center;
color: #800000;
}
.section {
margin-bottom: 20px;
padding: 10px;
background: #fff;
border-radius: 5px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
}
.border-maroon {
border: 2px solid #800000;
padding: 10px;
}
.flex-row {
display: flex;
flex-wrap: wrap;
align-items: center;
margin-bottom: 10px;
}
.flex-row > div {
flex: 1;
padding: 5px;
min-width: 120px;
}
.button {
background: #800000;
color: #fff;
border: none;
border-radius: 5px;
padding: 10px 15px;
cursor: pointer;
width: 100%;
}
.button:hover {
opacity: 0.9;
}
.fee-display {
text-align: right;
min-width: 80px;
}
input[type="text"], input[type="number"], select, textarea {
width: 100%;
padding: 5px;
border: 1px solid #ccc;
border-radius: 3px;
box-sizing: border-box;
}
.toggle-btn {
display: inline-block;
cursor: pointer;
border: 1px solid #800000;
border-radius: 15px;
width: 50px;
height: 25px;
position: relative;
margin-left: 10px;
vertical-align: middle;
}
.toggle-btn::before {
content: "No";
position: absolute;
left: 5px;
top: 3px;
font-size: 12px;
color: #800000;
}
.toggle-btn.active {
background: #800000;
}
.toggle-btn.active::before {
content: "Yes";
color: #fff;
left: 18px;
}
.hidden {
display: none;
}
.service-row {
border-bottom: 1px solid #ccc;
padding-bottom: 10px;
margin-bottom: 10px;
}
.cta-row {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: center;
}
.summary-field {
display: flex;
justify-content: space-between;
padding: 5px 0;
border-bottom: 1px solid #eee;
}
@media (max-width: 600px) {
.flex-row {
flex-direction: column;
}
}
</style>
<link rel="canonical" href="https://calculator.tools/prompt/10135/">
<meta charset="utf-8">
</head>
<body>
<div class="container">
<h1>ASN Partners – Accountancy Services Fee</h1>
<div id="client-details" class="section border-maroon">
<div class="flex-row">
<div><input type="text" id="clientName" placeholder="Client Name"></div>
<div><input type="text" id="clientContact" placeholder="Client Contact No (UK & Wales)"></div>
<div>
<select id="clientType">
<option value="" disabled selected>Client Type</option>
<option value="Private Limited">Private Limited</option>
<option value="Partnership">Partnership</option>
<option value="Sole Trader">Sole Trader</option>
<option value="Self Assessment">Self Assessment</option>
<option value="Other">Other</option>
</select>
</div>
</div>
</div>
<div id="services" class="section">
<!-- Accounts & Tax -->
<div class="service-row">
<div class="flex-row">
<div>
<span>Accounts & Tax</span>
<span class="toggle-btn" id="accountsTaxToggle" data-service="accountsTax"></span>
</div>
<div id="accountsTaxConditional" class="hidden">
<select id="accountsTaxRange">
<option value="" disabled selected>Select Turnover Range</option>
<option>≤ £90,000</option>
<option>≤ £99,000</option>
<option>≤ £149,000</option>
<option>≤ £249,000</option>
<option>≤ £349,000</option>
<option>≤ £499,000</option>
<option>≤ £749,000</option>
<option>≤ £999,000</option>
<option>> £999,000</option>
</select>
</div>
<div class="fee-display" id="accountsTaxFee">£0.00</div>
</div>
</div>
<!-- VAT -->
<div class="service-row">
<div class="flex-row">
<div>
<span>VAT</span>
<span class="toggle-btn" id="vatToggle" data-service="vat"></span>
</div>
<div id="vatConditional" class="hidden">
<select id="vatRange">
<option value="" disabled selected>Select Turnover Range</option>
<option>≤ £90,000</option>
<option>≤ £99,000</option>
<option>≤ £149,000</option>
<option>≤ £249,000</option>
<option>≤ £349,000</option>
<option>≤ £499,000</option>
<option>≤ £749,000</option>
<option>≤ £999,000</option>
<option>> £999,000</option>
</select>
</div>
<div class="fee-display" id="vatFee">£0.00</div>
</div>
</div>
<!-- Payroll -->
<div class="service-row">
<div class="flex-row">
<div>
<span>Payroll</span>
<span class="toggle-btn" id="payrollToggle" data-service="payroll"></span>
</div>
<div id="payrollConditional" class="hidden">
<select id="payrollFrequency">
<option value="" disabled selected>Select Frequency</option>
<option>Weekly</option>
<option>Monthly</option>
<option>Fortnight</option>
<option>Weekly + Monthly</option>
</select>
<select id="payrollEmployeeCount">
<option value="" disabled selected>Select Employee Count</option>
<option>≤5</option>
<option>≤10</option>
<option>≤15</option>
<option>≤20</option>
<option>≤30</option>
<option>≤40</option>
<option>≤50</option>
<option>>50</option>
</select>
</div>
<div class="fee-display" id="payrollFee">£0.00</div>
</div>
</div>
<!-- Other formations omitted for brevity -->
</div>
<div class="section" id="calculateSection">
<button type="button" id="calculateBtn" class="button" style="width:100%;">Calculate</button>
</div>
<div id="summaryPanel" class="section hidden">
<div class="summary-field"><div>Subtotal</div><div id="subtotalDisplay">£0.00</div></div>
<div class="summary-field"><div>Discount %</div><div><input type="number" id="discountPercent" value="0" style="width:60px;"></div></div>
<div class="summary-field"><div>Discount Amount</div><div id="discountAmount">£0.00</div></div>
<div class="summary-field"><div>VAT (20%)</div><div id="vatAmount">£0.00</div></div>
<div class="summary-field"><div>Annual Total</div><div id="annualTotal">£0.00</div></div>
<div class="summary-field"><div>Monthly Fee</div><div id="monthlyFee">£0.00</div></div>
</div>
<div class="section" style="text-align:center;">
<p>The above is an estimate. Contact us for exact quotes.</p>
</div>
<div class="section cta-row">
<button type="button" id="resetBtn" class="button">Reset</button>
<button type="button" id="printBtn" class="button">Print</button>
<button type="button" id="emailBtn" class="button">Email</button>
<button type="button" id="callBtn" class="button">Call → 0208 911 8000</button>
</div>
</div>
<script>
function toggleService(e) {
var toggle = e.target;
var service = toggle.getAttribute("data-service");
toggle.classList.toggle("active");
var conditional = document.getElementById(service + "Conditional");
if (toggle.classList.contains("active")) {
conditional.classList.remove("hidden");
} else {
conditional.classList.add("hidden");
document.getElementById(service + "Fee").textContent = "£0.00";
}
}
document.querySelectorAll(".toggle-btn").forEach(function(el) {
el.addEventListener("click", toggleService);
});
document.getElementById("calculateBtn").addEventListener("click", function() {
var subtotal = 0;
var accountsTaxFee = 0;
var clientType = document.getElementById("clientType").value;
// Accounts & Tax Service Fee Calculation
if (document.getElementById("accountsTaxToggle").classList.contains("active")) {
var range = document.getElementById("accountsTaxRange").value;
accountsTaxFee = range === ">£999,000" ? 0 : (clientType === "Sole Trader" || clientType === "Partnership") ? 1800 : 2000;
}
document.getElementById("accountsTaxFee").textContent = "£" + accountsTaxFee.toFixed(2);
subtotal += accountsTaxFee;
// VBA (Placeholder for actual logic)
var vatFee = 0; // Implement accordingly
document.getElementById("vatFee").textContent = "£" + vatFee.toFixed(2);
subtotal += vatFee;
// Payroll (Placeholder for actual logic)
var payrollFee = 0; // Implement accordingly
document.getElementById("payrollFee").textContent = "£" + payrollFee.toFixed(2);
subtotal += payrollFee;
// Update Summary
document.getElementById("subtotalDisplay").textContent = "£" + subtotal.toFixed(2);
});
document.getElementById("resetBtn").addEventListener("click", function() {
// Reset Logic
document.querySelectorAll("input[type='text'],input[type='number'],select").forEach(function(el) {
el.value = "";
});
document.getElementById("summaryPanel").classList.add("hidden");
document.querySelectorAll(".toggle-btn").forEach(function(el) {
el.classList.remove("active");
});
});
document.getElementById("printBtn").addEventListener("click", function() {
window.print();
});
document.getElementById("emailBtn").addEventListener("click", function() {
window.location.href = "mailto:admin@asnpartners.co.uk";
});
document.getElementById("callBtn").addEventListener("click", function() {
window.location.href = "tel:02089118000";
});
</script>
<script type="text/javascript"> var localStoragePrefix = "ct-{{ cachebreaker }}"; var lastSave = 0; function saveLocal(data) { if (Date.now() - lastSave < 1000) { return; } let cookie = localStoragePrefix + "=" + JSON.stringify(data) + "; path=" + window.location.pathname + "'; SameSite=Strict"; cookie += "; expires=" + new Date(Date.now() + 1000 * 60 * 60 * 24 * 365 * 1000).toUTCString(); document.cookie = cookie; lastSave = Date.now(); } function loadLocal() { var cookiePrefix = localStoragePrefix + "="; var cookieStart = document.cookie.indexOf(cookiePrefix); if (cookieStart > -1) { let cookieEnd = document.cookie.indexOf(";", cookieStart); if (cookieEnd == -1) { cookieEnd = document.cookie.length; } var cookieData = document.cookie.substring(cookieStart + cookiePrefix.length, cookieEnd); return JSON.parse(cookieData); } } </script>
<script type="text/javascript"> window.addEventListener('load', function() { var observer = new MutationObserver(function() { window.parent.postMessage({height: document.documentElement.scrollHeight || document.body.scrollHeight},"*"); }); observer.observe(document.body, {attributes: true, childList: true, subtree: true}); window.parent.postMessage({height: document.documentElement.scrollHeight || document.body.scrollHeight},"*"); }); </script>
</body>
</html>