diff --git a/src/router/user.js b/src/router/user.js index 4665a7e..c370716 100644 --- a/src/router/user.js +++ b/src/router/user.js @@ -1,5 +1,5 @@ const getRates = require("../util/exchangeRate"); -const { calculateProgress, updatePlanProgressInDB, updateProgress } = require("../util/calculations"); +const { calculateProgress, updatePlanProgressInDB, updateProgress, calculateTotalAssetValue } = require("../util/calculations"); const suggestions = require("../util/suggestions"); const status = require("../util/statuses"); const ObjectId = require('mongodb').ObjectId; @@ -110,11 +110,14 @@ module.exports = (middleware, users, plans, assets) => { router.get('/assets', async (req, res) => { let userAssets = await assets.find({ userId: new ObjectId(req.session.userId) }).toArray(); + let totalUserAssetValue = await calculateTotalAssetValue(userAssets); + res.render('assets', { user: req.session.user, errMessage: req.session.errMessage, assets: userAssets, geoData: req.session.geoData, + totalUserAssetValue: totalUserAssetValue, icons: icons, }); return res.status(status.Ok); @@ -142,6 +145,7 @@ module.exports = (middleware, users, plans, assets) => { try { const planId = req.params.id; let userAssets = await assets.find({ userId: new ObjectId(req.session.userId) }).toArray(); + let totalUserAssetValue = await calculateTotalAssetValue(userAssets); if (!ObjectId.isValid(planId)) { req.session.errMessage = "Invalid plan ID format."; @@ -160,6 +164,7 @@ module.exports = (middleware, users, plans, assets) => { user: req.session.user, plan: plan, geoData: req.session.geoData, + totalUserAssetValue: totalUserAssetValue, assets: userAssets, progress: progress, suggestions: await suggestions.generateSuggestions(), diff --git a/src/util/calculations.js b/src/util/calculations.js index 058e017..81ff6bf 100644 --- a/src/util/calculations.js +++ b/src/util/calculations.js @@ -12,7 +12,7 @@ async function calculatePlanProgress(plans, assets, userId) { try { const userAssets = await assets.find({ userId: new ObjectId(userId) }).toArray(); - const totalUserAssetValue = userAssets.reduce((total, asset) => total + asset.value, 0); + const totalUserAssetValue = await calculateTotalAssetValue(userAssets); let percentage = 0; if (plans.retirementAssets > 0) { @@ -42,6 +42,31 @@ async function updatePlanProgressInDB(planId, percentage, plans) { } } +async function calculateTotalAssetValue(assets) { + if (!assets || typeof assets.find !== 'function') { + console.error("Error with the assets collection"); + return; + } + try { + let totalAssetValue = 0; + for (const asset of assets) { + if(asset.icon == "Motorcycle" || asset.icon == "Car"){ + today = new Date(); + asset.year = new Date(asset.year).getFullYear(); + let age = today.getFullYear() - asset.year; + let value = asset.value * Math.pow(0.85, age); + totalAssetValue += value; + } else { + totalAssetValue += asset.value; + } + } + return totalAssetValue; + } catch (err) { + console.error("Error in calculateTotalAssetValue:", err); + return 0; + } +} + async function calculateProgress(plan, assets, users, userId) { if (!plan || typeof plan !== 'object') { @@ -63,8 +88,9 @@ async function calculateProgress(plan, assets, users, userId) { try { const userAssets = await assets.find({ userId: new ObjectId(userId) }).toArray(); - const totalUserAssetValue = userAssets.reduce((total, asset) => total + asset.value, 0); + const totalUserAssetValue = await calculateTotalAssetValue(userAssets); const totalUserPlanValue = plan.retirementAssets; + const userDoc = await users.findOne({ _id: new ObjectId(userId) }); @@ -125,4 +151,4 @@ async function updateProgress(plans, assets, users, userId) { -module.exports = { calculatePlanProgress, updatePlanProgressInDB, calculateProgress, updateProgress}; \ No newline at end of file +module.exports = { calculatePlanProgress, updatePlanProgressInDB, calculateTotalAssetValue, calculateProgress, updateProgress}; \ No newline at end of file diff --git a/src/views/assets.ejs b/src/views/assets.ejs index 41fb3cd..4e95d18 100644 --- a/src/views/assets.ejs +++ b/src/views/assets.ejs @@ -19,7 +19,7 @@
<%- new Intl.NumberFormat('en-US', { style: 'currency', currency: geoData.currency ? geoData.currency : 'CAD' }).format(assets.reduce((total, asset) => total + asset.value, 0)) %>
+<%- new Intl.NumberFormat('en-US', { style: 'currency', currency: geoData.currency ? geoData.currency : 'CAD' }).format(totalUserAssetValue) %>