JSFiddle - React, Tailwind, and code Playground

by Darby Rathbone

JavaScript

function Round2Cent(v) {
    return Math.round(v * 100) / 100;
}

$(document).ready(function () {
    $("#btext").hide();


    //Updates when new number is entered   
    $("#form input").keyup(function (event) {
        if (event.keyCode == 9) return; // 9 = tab
        fun_list()
    });

    function ShowValue(selector, v) {
        $(selector).html(isNaN(v) ? "Error" : "$" + Round2Cent(v));
    }

    //Functions to update on input change
    function fun_list() {
        get_values();
        window.clval = ((revenue * margin) * (1 - churn) / (1 + discount - (1 - churn)));
        window.clpa = (lead + (hours * hr) / closing);
        window.nltval = clval - clpa;
        window.leadcon = leadr * closing;
        //        clv();
        //        cpa();
        //        nltv();
        ShowValue("#clv", clval);
        ShowValue("#cpa", clpa);
        ShowValue("#nltv", nltval);
        //	ShowValue("#car", ldead);
        result();
        return;
    }

    // updates values

    function get_values() {
        window.revenue = parse_currency($("#form input[name='revenue']").val());
        window.margin = parse_percent($("#form input[name='margin']").val());
        window.churn = parse_percent($("#form input[name='churn']").val());
        window.discount = parse_percent($("#form input[name='discount']").val());
        window.lead = parse_currency($("#form input[name='lead']").val());
        window.closing = parse_percent($("#form input[name='closing']").val());
        window.hours = parse_currency($("#form input[name='hours']").val());
        window.hr = parse_currency($("#form input[name='hr']").val());
        window.leadr = parse_currency($("#form input[name='leadr']").val());

    };

    // Takes a string like "$123,456.789" and returns 123456.789 - from start-up death clock
    function parse_currency(str) {
        return parseFloat(str.replace(/\$|,/g, "")) || "";
    }

    function parse_percent(str) {
        return...