actions/update-transaction/update-transaction.mjs
import constants from "../../common/constants.mjs"; import app from "../../you_need_a_budget.app.mjs"; export default { key: "you_need_a_budget-update-transaction", name: "Update Transaction", description: "Update an existing transaction. [See the docs](https://api.youneedabudget.com/v1#/Transactions/updateTransaction)", version: "0.0.3", annotations: { destructiveHint: true, openWorldHint: true, readOnlyHint: false, }, type: "action", props: { app, budgetId: { propDefinition: [ app, "budgetId", ], }, accountId: { propDefinition: [ app, "accountId", ({ budgetId }) => ({ budgetId, }), ], }, transactionId: { propDefinition: [ app, "transactionId", ({ budgetId }) => ({ budgetId, }), ], }, date: { description: "The transaction date in ISO format `YYYY-MM-DD` (e.g. `2016-12-01`). Future dates (scheduled transactions) are not permitted. Split transaction dates cannot be changed and if a different date is supplied it will be ignored.", propDefinition: [ app, "date", ], }, payeeId: { label: "Payee ID", description: "The id of the payee.", optional: true, propDefinition: [ app, "payee", ({ budgetId }) => ({ budgetId, }), ], }, categoryId: { propDefinition: [ app, "categoryId", ({ budgetId }) => ({ budgetId, }), ], optional: true, }, amount: { propDefinition: [ app, "amount", ], }, memo: { type: "string", label: "Memo", description: "A short description.", optional: true, }, cleared: { type: "string[]", label: "Cleared", description: "The cleared status of the transaction.", options: Object.values(constants.CLEARED_STATUS), optional: true, }, approved: { type: "boolean", label: "Approved", description: "Approve the transaction directly?", optional: true, }, }, methods: { updateTransaction({ budgetId, transactionId, data = {}, }) { return this.app._client().transactions.updateTransaction( budgetId, transactionId, data, ); }, }, async run({ $: step }) { const { budgetId, transactionId, accountId, date, payeeId, categoryId, amount, memo, cleared, approved, } = this; try { const response = await this.updateTransaction({ budgetId, transactionId, data: { transaction: { account_id: accountId, date, amount: this.app._convertToMilliunit(amount), payee_id: payeeId, category_id: categoryId?.value ?? categoryId, memo, cleared, approved, }, }, }); step.export("$summary", `Transaction ${this.response.data.transaction.id} updated.`); return response; } catch (error) { const msg = "Error updating transaction"; const strError = JSON.stringify(error, null, 2); if (!error?.error) { console.log("Error in API response, please check your transactions to make sure the changes were applied."); step.export("$summary", `Transaction ${this.transactionId} updated.`); return { success: true, transactionId, }; } console.log(msg, error); throw new Error(`${msg}: ${strError}`); } }, };