diff --git a/packages/loot-core/src/server/budget/goaltemplates.ts b/packages/loot-core/src/server/budget/goaltemplates.ts index aed1be66630a901189efc8dd08fb5ff5278e33bf..65fa4685ea075e85e3c89acca6b99a9bae8be87f 100644 --- a/packages/loot-core/src/server/budget/goaltemplates.ts +++ b/packages/loot-core/src/server/budget/goaltemplates.ts @@ -19,14 +19,12 @@ import { goalsWeek } from './goals/goalsWeek'; export async function applyTemplate({ month }) { await storeTemplates(); const category_templates = await getTemplates(null); - await resetCategoryTargets({ month, category: null }); return processTemplate(month, false, category_templates); } export async function overwriteTemplate({ month }) { await storeTemplates(); const category_templates = await getTemplates(null); - await resetCategoryTargets({ month, category: null }); return processTemplate(month, true, category_templates); } @@ -36,8 +34,7 @@ export async function applySingleCategoryTemplate({ month, category }) { ]); await storeTemplates(); const category_templates = await getTemplates(categories[0]); - await resetCategoryTargets({ month, category: categories }); - return processTemplate(month, true, category_templates); + return processTemplate(month, true, category_templates, categories[0]); } export function runCheckTemplates() { @@ -91,21 +88,21 @@ async function setCategoryTargets({ month, idealTemplate }) { }); } -async function resetCategoryTargets({ month, category }) { - let categories; +async function resetCategoryTargets(month, category) { + let categories = []; if (category === null) { categories = await getCategories(); } else { categories = category; } await batchMessages(async () => { - categories.forEach(element => { + for (let i = 0; i < categories.length; i++) { setGoal({ - category: element.id, + category: categories[i].id, goal: null, month, }); - }); + } }); } @@ -155,6 +152,7 @@ async function processTemplate( month, force, category_templates, + category?, ): Promise<Notification> { let num_applied = 0; let errors = []; @@ -162,8 +160,13 @@ async function processTemplate( const setToZero = []; let priority_list = []; - const categories = await getCategories(); + let categories = []; const categories_remove = []; + if (category) { + categories[0] = category; + } else { + categories = await getCategories(); + } //clears templated categories for (let c = 0; c < categories.length; c++) { @@ -205,11 +208,12 @@ async function processTemplate( categories.splice(categories_remove[i], 1); } - // zero out the categories that need it + // zero out budget and goal from categories that need it await setGoalBudget({ month, templateBudget: setToZero.filter(f => f.isTemplate === true), }); + await resetCategoryTargets(month, categories); // sort and filter down to just the requested priorities priority_list = priority_list diff --git a/upcoming-release-notes/3011.md b/upcoming-release-notes/3011.md new file mode 100644 index 0000000000000000000000000000000000000000..101af143f4ae99f1ef2518018163d6dbeb5e59a6 --- /dev/null +++ b/upcoming-release-notes/3011.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [youngcw] +--- + +Fix apply template resetting the goals on already set categories