-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
127 lines (117 loc) · 3.71 KB
/
script.js
File metadata and controls
127 lines (117 loc) · 3.71 KB
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
117
118
119
120
121
122
123
124
125
126
127
const addExpenseButton = document.getElementById("add-expense-button");
const descriptionInput = document.getElementById("description");
const valueInput = document.getElementById("value");
const selectInput = document.getElementById("type");
const TotalBudget = document.getElementById("TotalBudget");
const incomeList = document.getElementById("income-list");
const expenseList = document.getElementById("expense-list");
const totalIncome = document.getElementById("total-income");
const totalExpense = document.getElementById("total-expense");
let inc, exp, budget;
function formatMoney(value) {
return Math.abs(Number(value)).toLocaleString(undefined, {
minimumFractionDigits: 2,
});
}
function calculateIncome() {
let sum = 0;
for (let item of incomeList.children) {
const valueString =
item.children[0].children[1].children[0].innerHTML.replace(/,/g, "");
// console.log(parseFloat(valueString));
sum += parseFloat(valueString);
}
inc = sum;
totalIncome.innerHTML = formatMoney(sum);
}
calculateIncome();
/**
* Task 1: Calculate total expense
*/
function calculateExpense() {
let sum = 0;
for (let item of expenseList.children) {
const valueString =
item.children[0].children[1].children[0].innerHTML.replace(/,/g, "");
sum += parseFloat(valueString);
}
exp = sum;
totalExpense.innerHTML = formatMoney(sum);
}
calculateExpense();
/**
* Task 2: Calculate the budget
*/
function calculateBudget() {
let income = totalIncome.innerHTML.replace(/,/g, "");
let expense = totalExpense.innerHTML.replace(/,/g, "");
budget = income - (expense);
TotalBudget.innerHTML = formatMoney(budget);
}
calculateBudget();
/**
* Task 3: Delete Entry
*/
function deleteEntry(listItem) {
listItem.parentNode.removeChild(listItem);
let p = listItem.children[1].children[0].innerHTML.replace(/,/g, "");
let p1 = p[0];
p = parseFloat(p);
// let budg=TotalBudget.innerHTML.replace(/,/g, "");
let income = totalIncome.innerHTML.replace(/,/g, "");
let expense = totalExpense.innerHTML.replace(/,/g, "");
if (p1 === "+") {
totalIncome.innerHTML = formatMoney(parseFloat(income) - parseFloat(p));
}
if (p1 === "-") {
totalExpense.innerHTML = formatMoney(parseFloat(expense) + parseFloat(p));
console.log("object ", parseFloat(expense) + parseFloat(p));
}
calculateBudget();
}
function addEntry() {
const type = selectInput.value;
const description = descriptionInput.value;
const value = valueInput.value;
// data validation
const errors = [];
if (description.length === 0) {
errors.push("Please enter the description");
}
if (value.length === 0) {
errors.push("Please enter the value");
}
if (errors.length > 0) {
alert(errors);
return;
}
// insert entry
const list = type === "income" ? incomeList : expenseList;
const sign = type === "income" ? "+" : "-";
const colorClass = type === "income" ? "text-green-600" : "text-red-600";
console.log("object", inc, exp + parseFloat(value));
if (budget == 0 && type === 'expense') alert("not have enough money");
else {
const newEntryHtml = `
<li class="py-2.5">
<div class="group flex justify-between gap-2 text-sm">
<span>${description}</span>
<div>
<span class="${colorClass}">${sign}${formatMoney(value)}</span>
<span onclick="deleteEntry(this.parentNode.parentNode)"
class=" ml-2 hidden cursor-pointer font-medium text-red-500 group-hover:inline-block"
>
Delete
</span>
</div>
</div>
</li>
`;
list.innerHTML += newEntryHtml;
}
// update total income value
calculateIncome();
calculateExpense();
calculateBudget();
}
addExpenseButton.addEventListener("click", addEntry);