We Use Cookies
We use cookies to improve your experience, analyze site traffic, and personalize content. By clicking "Accept All", you consent to our use of cookies. You can choose which cookies to allow or change your preferences at any time.
We use cookies to improve your experience, analyze site traffic, and personalize content. By clicking "Accept All", you consent to our use of cookies. You can choose which cookies to allow or change your preferences at any time.
from
£45 /m*
For small businesses based in one location and with four users
from
£ 125 /m *
For SMEs with up-to two locations, multiple users and products
from
£ 300 /m *
Complete package for productivity across multiple uses and locations
Ultimate customisation, collaboration and support for super-users
*Plus UK VAT where applicable. All prices are charged monthly, with a minimum 12 month term. Discounts are provided for both education and charity use.
window.addEventListener(‘load’, () =>{ const queryString = window.location.search; if(queryString.includes(‘asset’)){ console.log(‘clicking’); document.getElementById(‘asset_button’).click(); } else {console.log(‘not clicking’, queryString);}}) let asset_count = document.getElementById(“asset_count”); let asset_display = document.getElementsByClassName(“asset_display”); let cost_display = document.getElementsByClassName(“price-display”); let caredInputs = document.querySelectorAll(‘[data-multiplier]’); let featuresButton = document.getElementsByClassName(“features”); const setFeaturesButton = (link = ‘/features’) => { for(let button of featuresButton){ button.firstChild.setAttribute(‘href’, link); } } const calculate = ()=>{ let total = 0; let multiplier = 1; for(let input of caredInputs){ switch(input.tagName){ case “BUTTON”: if(!input.classList.contains(“active”)) continue; setFeaturesButton(input.getAttribute(‘data-features’)); multiplier += parseFloat(input.getAttribute(“data-multiplier”)); break; case “INPUT”: let value = input.value; let min = input.getAttribute(‘min’); multiplier += (value-min) * parseFloat(input.getAttribute(“data-multiplier”)); break; default: console.log(“Unknown how to handle ” + input.tagName, input); } } for(let cost of cost_display){ let base = parseFloat(cost.getAttribute(“data-base”)); cost.innerHTML = parseFloat(base * multiplier).toFixed(0).toString().replace(/\B(?=(\d{3})+(?!\d))/g, “,”) + ‘.00’; } } /* let expanders = document.getElementsByClassName(“expands”); for(let expander of expanders){ expander.addEventListener(‘click’, ({currentTarget}) => { let parent = currentTarget; if(parent.classList.contains(‘expand’)){ parent.classList.remove(‘expand’); } else { parent.classList.add(‘expand’); } }); }*/ let switches = document.getElementsByClassName(“toggle-switch”); const handleSwitch = (event) =>{ let toggle = event.currentTarget.parentNode; let curButton = event.currentTarget; if(curButton.tagName != ‘BUTTON’) return; let buttons = toggle.getElementsByTagName(“button”); for(let button of buttons){ button.classList.remove(‘active’); } curButton.classList.add(‘active’); calculate(); } const handleRange = ({target}) =>{ for(let display of asset_display){ display.innerHTML = parseFloat(target.value).toFixed(0).toString().replace(/\B(?=(\d{3})+(?!\d))/g, “,”); } calculate(); } asset_count.addEventListener(‘input’, handleRange); for(let toggle of switches){ let buttons = toggle.getElementsByTagName(‘button’); for(let button of buttons){ button.addEventListener(‘click’, handleSwitch) } } calculate();