From 2b1ba88983182c74a9f7c2987c81dccd829fa4c7 Mon Sep 17 00:00:00 2001
From: rodriguestiago0 <tiagomcrodrigues@gmail.com>
Date: Sun, 4 Aug 2024 19:56:11 +0100
Subject: [PATCH] Add Reset Hold and Hold For Next Month api (#3140)

---
 packages/api/methods.ts                       |  8 +++++++
 packages/loot-core/src/server/api.ts          | 21 +++++++++++++++++++
 .../loot-core/src/types/api-handlers.d.ts     |  7 +++++++
 upcoming-release-notes/3140.md                |  6 ++++++
 4 files changed, 42 insertions(+)
 create mode 100644 upcoming-release-notes/3140.md

diff --git a/packages/api/methods.ts b/packages/api/methods.ts
index 06109bf83..fc3455063 100644
--- a/packages/api/methods.ts
+++ b/packages/api/methods.ts
@@ -208,3 +208,11 @@ export function updateRule(rule) {
 export function deleteRule(id) {
   return send('api/rule-delete', { id });
 }
+
+export function holdBudgetForNextMonth(month, amount) {
+  return send('api/budget-hold-for-next-month', { month, amount });
+}
+
+export function resetBudgetHold(month) {
+  return send('api/budget-reset-hold', { month });
+}
diff --git a/packages/loot-core/src/server/api.ts b/packages/loot-core/src/server/api.ts
index 84e538405..6d49fb813 100644
--- a/packages/loot-core/src/server/api.ts
+++ b/packages/loot-core/src/server/api.ts
@@ -406,6 +406,27 @@ handlers['api/budget-set-carryover'] = withMutation(async function ({
   });
 });
 
+handlers['api/budget-hold-for-next-month'] = withMutation(async function ({
+  month,
+  amount,
+}) {
+  checkFileOpen();
+  await validateMonth(month);
+  if (amount <= 0) {
+    throw APIError('Amount to hold needs to be greater than 0');
+  }
+  return handlers['budget/hold-for-next-month']({
+    month,
+    amount,
+  });
+});
+
+handlers['api/budget-reset-hold'] = withMutation(async function ({ month }) {
+  checkFileOpen();
+  await validateMonth(month);
+  return handlers['budget/reset-hold']({ month });
+});
+
 handlers['api/transactions-export'] = async function ({
   transactions,
   categoryGroups,
diff --git a/packages/loot-core/src/types/api-handlers.d.ts b/packages/loot-core/src/types/api-handlers.d.ts
index 2b9bd0880..cf26bac83 100644
--- a/packages/loot-core/src/types/api-handlers.d.ts
+++ b/packages/loot-core/src/types/api-handlers.d.ts
@@ -63,6 +63,13 @@ export interface ApiHandlers {
     flag: boolean;
   }) => Promise<void>;
 
+  'api/budget-hold-for-next-month': (arg: {
+    month: string;
+    amount: number;
+  }) => Promise<void>;
+
+  'api/budget-reset-hold': (arg: { month: string }) => Promise<void>;
+
   'api/transactions-export': (arg: {
     transactions;
     categoryGroups;
diff --git a/upcoming-release-notes/3140.md b/upcoming-release-notes/3140.md
new file mode 100644
index 000000000..0802097b9
--- /dev/null
+++ b/upcoming-release-notes/3140.md
@@ -0,0 +1,6 @@
+---
+category: Enhancements
+authors: [rodriguestiago0]
+---
+
+Add `reset-hold` and `hold-for-next-month` methods to the API
\ No newline at end of file
-- 
GitLab