From 77e550f0284514b1486837499ecddf6a4731d160 Mon Sep 17 00:00:00 2001 From: youngcw <calebyoung94@gmail.com> Date: Mon, 18 Dec 2023 07:58:49 -0700 Subject: [PATCH] [Goals]: fully skip budgeted categories when only applying (#2099) * remove budgeted categories from list when only applying * cleanup * speed up the category removal * note --- .../src/server/budget/goaltemplates.ts | 62 +++++++------------ upcoming-release-notes/2099.md | 6 ++ 2 files changed, 28 insertions(+), 40 deletions(-) create mode 100644 upcoming-release-notes/2099.md diff --git a/packages/loot-core/src/server/budget/goaltemplates.ts b/packages/loot-core/src/server/budget/goaltemplates.ts index 31ea0406b..45d8fcb4d 100644 --- a/packages/loot-core/src/server/budget/goaltemplates.ts +++ b/packages/loot-core/src/server/budget/goaltemplates.ts @@ -151,12 +151,12 @@ async function processTemplate( ): Promise<Notification> { let num_applied = 0; let errors = []; - let originalCategoryBalance = []; const idealTemplate = []; const setToZero = []; let priority_list = []; const categories = await getCategories(); + const categories_remove = []; //clears templated categories for (let c = 0; c < categories.length; c++) { @@ -176,20 +176,29 @@ async function processTemplate( } } if (budgeted) { - originalCategoryBalance.push({ - category: category.id, - amount: budgeted, - isIncome: category.is_income, - isTemplate: template ? true : false, - }); - setToZero.push({ - category: category.id, - amount: 0, - isIncome: category.is_income, - isTemplate: template ? true : false, - }); + if (!force) { + // save index of category to remove + categories_remove.push(c); + } else { + // if we are overwritting add this category to list to zero + setToZero.push({ + category: category.id, + amount: 0, + isIncome: category.is_income, + isTemplate: template ? true : false, + }); + } } } + + // remove the categories we are skipping + // Go backwards through the list so the indexes don't change + // on the categories we need + for (let i = categories_remove.length - 1; i >= 0; i--) { + categories.splice(categories_remove[i], 1); + } + + // zero out the categories that need it await setGoalBudget({ month, templateBudget: setToZero.filter(f => f.isTemplate === true), @@ -339,33 +348,6 @@ async function processTemplate( await setGoalBudget({ month, templateBudget }); } await setCategoryTargets({ month, idealTemplate }); - if (!force) { - //if overwrite is not preferred, set cell to original value; - originalCategoryBalance = originalCategoryBalance.filter( - c => c.isIncome === 0 && c.isTemplate, - ); - for (let l = 0; l < originalCategoryBalance.length; l++) { - await setBudget({ - category: originalCategoryBalance[l].category, - month, - amount: originalCategoryBalance[l].amount, - }); - //if overwrite is not preferred, remove template errors for category - let j = errors.length; - for (let k = 0; k < j; k++) { - if ( - errors[k].includes( - categories.filter( - c => c.id === originalCategoryBalance[l].category, - )[0].name, - ) - ) { - errors.splice(k, 1); - j--; - } - } - } - } if (num_applied === 0) { if (errors.length) { return { diff --git a/upcoming-release-notes/2099.md b/upcoming-release-notes/2099.md new file mode 100644 index 000000000..6482c922b --- /dev/null +++ b/upcoming-release-notes/2099.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [youngcw] +--- + +[Goals]: Fix over budget condition with using apply instead of overwrite -- GitLab