diff --git a/static/modules/finance.js b/static/modules/finance.js index 7ecf0bd..40a34af 100644 --- a/static/modules/finance.js +++ b/static/modules/finance.js @@ -367,13 +367,20 @@ function renderFinance() { expenseArr.forEach(function(e) { allMonths[e.month || ''] = true; }); var detailRows = Object.keys(allMonths).filter(function(m) { var b = budgetArr.find(function(x) { return x.month === m; }) || {}; - var exp = expenseArr.find(function(x) { return x.month === m; }) || {}; var bRev = parseFloat(b.rev || 0), bGross = parseFloat(b.gross || 0), bPay = parseFloat(b.payment || 0); - var eCost = parseFloat(exp.cost || 0), ePaid = parseFloat(exp.paid || 0); + var eCost = 0, ePaid = 0; + expenseArr.filter(function(x) { return x.month === m; }).forEach(function(e) { + eCost += parseFloat(e.cost || 0) || 0; + ePaid += parseFloat(e.paid || 0) || 0; + }); return bRev || bGross || bPay || eCost || ePaid; }).sort().map(function(m) { var b = budgetArr.find(function(x) { return x.month === m; }) || {}; - var exp = expenseArr.find(function(x) { return x.month === m; }) || {}; + var eCost = 0, ePaid = 0; + expenseArr.filter(function(x) { return x.month === m; }).forEach(function(e) { + eCost += parseFloat(e.cost || 0) || 0; + ePaid += parseFloat(e.paid || 0) || 0; + }); var bRev = parseFloat(b.rev || 0), bGross = parseFloat(b.gross || 0), bPay = parseFloat(b.payment || 0); var eCost = parseFloat(exp.cost || 0), ePaid = parseFloat(exp.paid || 0); var bCf = bPay - ePaid; @@ -405,12 +412,16 @@ function renderFinance() { rev = Math.round(rev); payment = Math.round(payment); gross = Math.round(gross); cost = Math.round(cost); paid = Math.round(paid); } else { const b = bd.find(x => (x.month || "") === selMonth) || {}; - const e = ed.find(x => (x.month || "") === selMonth) || {}; + let cost2 = 0, paid2 = 0; + ed.filter(x => (x.month || "") === selMonth).forEach(e => { + cost2 += parseFloat(e.cost || 0) || 0; + paid2 += parseFloat(e.paid || 0) || 0; + }); rev = Math.round(parseFloat(b.rev || 0) || 0); payment = Math.round(parseFloat(b.payment || 0) || 0); gross = Math.round(parseFloat(b.gross || 0) || 0); - cost = Math.round(parseFloat(e.cost || 0) || 0); - paid = Math.round(parseFloat(e.paid || 0) || 0); + cost = Math.round(cost2); + paid = Math.round(paid2); } if (!rev && !payment && !cost && !paid && !gross) return; dataItems.push({ diff --git a/static/modules/plan.js b/static/modules/plan.js index 91dc31b..a3f63db 100644 --- a/static/modules/plan.js +++ b/static/modules/plan.js @@ -383,14 +383,22 @@ function renderPlan() { budgetArr.forEach(function(b) { allMonths[b.month || ''] = true; }); expenseArr.forEach(function(e) { allMonths[e.month || ''] = true; }); var detailRows = Object.keys(allMonths).filter(function(m) { + if (state.planYear !== 0 && parseInt(m.substring(0, 4)) !== state.planYear) return false; var b = budgetArr.find(function(x) { return x.month === m; }) || {}; - var exp = expenseArr.find(function(x) { return x.month === m; }) || {}; var bRev = parseFloat(b.rev || 0), bGross = parseFloat(b.gross || 0), bPay = parseFloat(b.payment || 0); - var eCost = parseFloat(exp.cost || 0), ePaid = parseFloat(exp.paid || 0); + var eCost = 0, ePaid = 0; + expenseArr.filter(function(x) { return x.month === m; }).forEach(function(e) { + eCost += parseFloat(e.cost || 0) || 0; + ePaid += parseFloat(e.paid || 0) || 0; + }); return bRev || bGross || bPay || eCost || ePaid; }).sort().map(function(m) { var b = budgetArr.find(function(x) { return x.month === m; }) || {}; - var exp = expenseArr.find(function(x) { return x.month === m; }) || {}; + var eCost = 0, ePaid = 0; + expenseArr.filter(function(x) { return x.month === m; }).forEach(function(e) { + eCost += parseFloat(e.cost || 0) || 0; + ePaid += parseFloat(e.paid || 0) || 0; + }); var bRev = parseFloat(b.rev || 0), bGross = parseFloat(b.gross || 0), bPay = parseFloat(b.payment || 0); var eCost = parseFloat(exp.cost || 0), ePaid = parseFloat(exp.paid || 0); var bCf = bPay - ePaid; @@ -417,12 +425,17 @@ function renderPlan() { let bd = []; try { bd = JSON.parse(pf.budget_data || "[]"); } catch (e) {} let ed = []; try { ed = JSON.parse(pf.expense_data || "[]"); } catch (e) {} const b = bd.find(x => (x.month || "") === selMonth) || {}; - const e = ed.find(x => (x.month || "") === selMonth) || {}; - const rev = Math.round(parseFloat(b.rev || 0) || 0); - const payment = Math.round(parseFloat(b.payment || 0) || 0); - const gross = Math.round(parseFloat(b.gross || 0) || 0); - const cost = Math.round(parseFloat(e.cost || 0) || 0); - const paid = Math.round(parseFloat(e.paid || 0) || 0); + let rev = Math.round(parseFloat(b.rev || 0) || 0); + let payment2 = Math.round(parseFloat(b.payment || 0) || 0); + let gross = Math.round(parseFloat(b.gross || 0) || 0); + let cost = 0, paid = 0; + ed.filter(x => (x.month || "") === selMonth).forEach(e => { + cost += parseFloat(e.cost || 0) || 0; + paid += parseFloat(e.paid || 0) || 0; + }); + cost = Math.round(cost); + paid = Math.round(paid); + payment = payment2; if (!rev && !payment && !cost && !paid && !gross) return; dataItems.push({ pf: pf, @@ -511,9 +524,15 @@ function renderPlan() { let budget = []; try { budget = JSON.parse(pf.budget_data || "[]"); } catch (e) {} let expense = []; try { expense = JSON.parse(pf.expense_data || "[]"); } catch (e) {} let rev = 0, payment = 0, gross = 0; - budget.forEach(b => { rev += parseFloat(b.rev || 0) || 0; gross += parseFloat(b.gross || 0) || 0; payment += parseFloat(b.payment || 0) || 0; }); + budget.forEach(b => { + if (state.planYear !== 0 && parseInt((b.month || '').substring(0, 4)) !== state.planYear) return; + rev += parseFloat(b.rev || 0) || 0; gross += parseFloat(b.gross || 0) || 0; payment += parseFloat(b.payment || 0) || 0; + }); let cost = 0, paid = 0; - expense.forEach(e => { cost += parseFloat(e.cost || 0) || 0; paid += parseFloat(e.paid || 0) || 0; }); + expense.forEach(e => { + if (state.planYear !== 0 && parseInt((e.month || '').substring(0, 4)) !== state.planYear) return; + cost += parseFloat(e.cost || 0) || 0; paid += parseFloat(e.paid || 0) || 0; + }); return { rev: Math.round(rev), payment: Math.round(payment), cost: Math.round(cost), paid: Math.round(paid), gross: Math.round(gross) }; }; const allPfs = pfs; @@ -1049,11 +1068,13 @@ function computePlanMonthly(planFinances, year) { var pf = pfs[j]; if ((pf.sign_month || '') === month) sign += parseFloat(pf.sign_amount || 0); var bd = []; try { bd = JSON.parse(pf.budget_data || '[]'); } catch(e) {} - var b = bd.find(function(x) { return (x.month || '') === month; }); - if (b) { revenue += parseFloat(b.rev || 0); gross += parseFloat(b.gross || 0); payment += parseFloat(b.payment || 0); } + bd.filter(function(x) { return (x.month || '') === month; }).forEach(function(b) { + revenue += parseFloat(b.rev || 0); gross += parseFloat(b.gross || 0); payment += parseFloat(b.payment || 0); + }); var ed = []; try { ed = JSON.parse(pf.expense_data || '[]'); } catch(e) {} - var e = ed.find(function(x) { return (x.month || '') === month; }); - if (e) { cost += parseFloat(e.cost || 0); paid += parseFloat(e.paid || 0); } + ed.filter(function(x) { return (x.month || '') === month; }).forEach(function(e) { + cost += parseFloat(e.cost || 0); paid += parseFloat(e.paid || 0); + }); } data.push({ month: month, sign: Math.round(sign), revenue: Math.round(revenue), gross: Math.round(gross), payment: Math.round(payment), cost: Math.round(cost), paid: Math.round(paid) }); }