-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTaxCalculator.js
116 lines (99 loc) · 3.58 KB
/
TaxCalculator.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
var loadPage = function() {
$("#cmdCalculate").click(calculateTotal);
var label = "txtBase";
var $label = $("<label>").attr('for', label);
var $input = $("<input/>").attr({'id' : label, 'type' : "number"});
var $cBox = $("<label>");
var cssWidth = { "width" : "110px", "display" : "inline-block", "margin-left" : "5px"};
var cssMonthWidth = {"width" : "100px", "display" : "inline-block", "margin-left" : "5px"};
$label.css(cssWidth);
$label.text("Base Salary: ");
$input.attr('readonly' , true);
$cBox.html('<input id= "cmdCheck" type = "checkbox"/> For 12 Months').css({"display" : "inline-block", "margin-left" : "20px"});
$("#monthTax").before($label);
$("#monthTax").before($input);
$("#monthTax").before($cBox);
$("#monthTax").before("</br>");
$("#monthTax").before("</br>");
var monthArr = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November","December"];
var txt = "txt";
monthArr.forEach(function(item,index){
var label = txt + item;
var $mLabel = $("<label>").attr('for', label);
var $mInput = $("<input/>").attr({'id' : label, 'type' : "number"});
$mLabel.css(cssMonthWidth);
$mLabel.text(item + ":");
$("#monthTax").append($mLabel);
$("#monthTax").append($mInput);
$("#monthTax").append("</br>");
}
);
$("#monthTax").append("</br>");
label = "txtBonus";
var $bLabel = $("<label>").attr('for', label);
var $bInput = $("<input/>").attr({'id' : label, 'type' : "number"});
$bLabel.css(cssWidth);
$bLabel.text("Bonus Points: ");
$("#cmdCalculate").before($bLabel);
$("#cmdCalculate").before($bInput);
$("#cmdCalculate").before("</br>");
$("#cmdCheck").change(checkBoxListner);
}
function calculateTotal(){
var result = 0;
var salary = 0;
var wrongInput = false;
var bonus = $("#txtBonus").val() != "" ? parseFloat($("#txtBonus").val()) : 0;
if (bonus < 0)
wrongInput = true;
if ($("#cmdCheck").is(":checked")){
//check inputs
salary = $("#txtBase").val() != "" ? parseFloat($("#txtBase").val()) : 0;
if (salary < 0)
wrongInput = true;
salary *= 12;
}
else{
$('#monthTax').children('input').each(function () {
if (this.value < 0)
wrongInput = true;
else
salary += this.value != "" ? parseFloat(this.value) : 0;
}
);
}
if (wrongInput){
alert("Input can't be negative");
return;
}
result = calculateMonthTax(salary, bonus);
$("#txtResult").text("Total tax is: " + result);
}
function calculateMonthTax(salary, points){
var taxSteps = [74640, 107040, 171840, 238800, 496920, 639996];
var taxValues = [0.1, 0.14, 0.2, 0.31, 0.35, 0.47, 0.5];
const POINT_VALUE = 2580;
points *= POINT_VALUE;
var tax=0;
var step;
for(var i=6; i>0; i--){
step = salary-taxSteps[i-1] > 0 ? salary-taxSteps[i-1] : 0;
if (step != 0)
salary = taxSteps[i-1];
tax += step*taxValues[i];
}
tax += salary*taxValues[0];
return tax-points > 0 ? tax-points : 0;
}
var checkBoxListner = function(){
if (this.checked) {
$("#monthTax").hide();
$("#txtBase").removeAttr('readonly');
}
else if (!this.checked){
$("#monthTax").show();
$("#txtBase").val("");
$("#txtBase").attr('readonly' , true);
}
}
$("document").ready(loadPage);