From 66b8e1f69fafb604580b73280985df36205dc472 Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Wed, 2 Mar 2022 21:07:53 +0000 Subject: [PATCH 01/11] Fix edit-accounts' font being off --- web/src/dialogs/EditAccount.vue | 2 +- web/src/pages/Account.vue | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/web/src/dialogs/EditAccount.vue b/web/src/dialogs/EditAccount.vue index a883b51..5816274 100644 --- a/web/src/dialogs/EditAccount.vue +++ b/web/src/dialogs/EditAccount.vue @@ -22,7 +22,7 @@ function openEditAccount(e : any) { \ No newline at end of file diff --git a/web/src/stores/budget-account.ts b/web/src/stores/budget-account.ts index 21b0436..bf440a2 100644 --- a/web/src/stores/budget-account.ts +++ b/web/src/stores/budget-account.ts @@ -16,6 +16,7 @@ export interface Account { ID: string Name: string OnBudget: boolean + IsOpen: boolean ClearedBalance: number WorkingBalance: number ReconciledBalance: number -- 2.47.2 From f26ee8f472730351052d2284fe32b66ddd9361b9 Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Wed, 2 Mar 2022 21:15:56 +0000 Subject: [PATCH 05/11] Add ability to change is_open from API --- postgres/accounts.sql.go | 13 ++++++++++--- postgres/queries/accounts.sql | 5 +++-- server/account.go | 2 ++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/postgres/accounts.sql.go b/postgres/accounts.sql.go index 5746a0f..ab5de4e 100644 --- a/postgres/accounts.sql.go +++ b/postgres/accounts.sql.go @@ -196,19 +196,26 @@ func (q *Queries) SearchAccounts(ctx context.Context, arg SearchAccountsParams) const updateAccount = `-- name: UpdateAccount :one UPDATE accounts SET name = $1, - on_budget = $2 -WHERE accounts.id = $3 + on_budget = $2, + is_open = $3 +WHERE accounts.id = $4 RETURNING id, budget_id, name, on_budget, is_open ` type UpdateAccountParams struct { Name string OnBudget bool + IsOpen bool ID uuid.UUID } func (q *Queries) UpdateAccount(ctx context.Context, arg UpdateAccountParams) (Account, error) { - row := q.db.QueryRowContext(ctx, updateAccount, arg.Name, arg.OnBudget, arg.ID) + row := q.db.QueryRowContext(ctx, updateAccount, + arg.Name, + arg.OnBudget, + arg.IsOpen, + arg.ID, + ) var i Account err := row.Scan( &i.ID, diff --git a/postgres/queries/accounts.sql b/postgres/queries/accounts.sql index 6f363ce..0e62900 100644 --- a/postgres/queries/accounts.sql +++ b/postgres/queries/accounts.sql @@ -35,6 +35,7 @@ ORDER BY accounts.name; -- name: UpdateAccount :one UPDATE accounts SET name = $1, - on_budget = $2 -WHERE accounts.id = $3 + on_budget = $2, + is_open = $3 +WHERE accounts.id = $4 RETURNING *; \ No newline at end of file diff --git a/server/account.go b/server/account.go index 0c057af..65b0908 100644 --- a/server/account.go +++ b/server/account.go @@ -39,6 +39,7 @@ type TransactionsResponse struct { type EditAccountRequest struct { Name string `json:"name"` OnBudget bool `json:"onBudget"` + IsOpen bool `json:"isOpen"` } func (h *Handler) editAccount(c *gin.Context) { @@ -59,6 +60,7 @@ func (h *Handler) editAccount(c *gin.Context) { updateParams := postgres.UpdateAccountParams{ Name: request.Name, OnBudget: request.OnBudget, + IsOpen: request.IsOpen, ID: accountUUID, } account, err := h.Service.UpdateAccount(c.Request.Context(), updateParams) -- 2.47.2 From a0cabbf4f7c3ebdffe66d052cecad7af172082ea Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Wed, 2 Mar 2022 21:16:06 +0000 Subject: [PATCH 06/11] Pass is_open to API from EditAccount --- web/src/dialogs/EditAccount.vue | 2 +- web/src/stores/budget-account.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web/src/dialogs/EditAccount.vue b/web/src/dialogs/EditAccount.vue index e2b33b4..5c5aa53 100644 --- a/web/src/dialogs/EditAccount.vue +++ b/web/src/dialogs/EditAccount.vue @@ -13,7 +13,7 @@ const accountOnBudget = ref(true); const accountOpen = ref(true); function editAccount(e : any) { - accountStore.EditAccount(CurrentAccount.value?.ID ?? "", accountName.value, accountOnBudget.value); + accountStore.EditAccount(CurrentAccount.value?.ID ?? "", accountName.value, accountOnBudget.value, accountOpen.value); } function openEditAccount(e : any) { diff --git a/web/src/stores/budget-account.ts b/web/src/stores/budget-account.ts index bf440a2..c8e64d8 100644 --- a/web/src/stores/budget-account.ts +++ b/web/src/stores/budget-account.ts @@ -124,8 +124,8 @@ export const useAccountStore = defineStore("budget/account", { return; this.addCategoriesForMonth(year, month, response.Categories); }, - async EditAccount(accountid: string, name: string, onBudget: boolean) { - const result = await POST("/account/" + accountid, JSON.stringify({ name: name, onBudget: onBudget })); + async EditAccount(accountid: string, name: string, onBudget: boolean, isOpen: boolean) { + const result = await POST("/account/" + accountid, JSON.stringify({ name: name, onBudget: onBudget, isOpen: isOpen })); const response = await result.json(); useBudgetsStore().MergeBudgetingData(response); }, -- 2.47.2 From 15381c84f6610236106d9fc2020c5793c0af17da Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Wed, 2 Mar 2022 21:21:56 +0000 Subject: [PATCH 07/11] Navigate to budgeting from closed account --- web/src/dialogs/EditAccount.vue | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/web/src/dialogs/EditAccount.vue b/web/src/dialogs/EditAccount.vue index 5c5aa53..43b0456 100644 --- a/web/src/dialogs/EditAccount.vue +++ b/web/src/dialogs/EditAccount.vue @@ -4,7 +4,10 @@ import Modal from '../components/Modal.vue'; import { useAccountStore } from '../stores/budget-account'; import Input from '../components/Input.vue'; import Checkbox from '../components/Checkbox.vue'; +import { useRouter } from 'vue-router'; +import { useBudgetsStore } from '../stores/budget'; +const router = useRouter(); const accountStore = useAccountStore(); const CurrentAccount = computed(() => accountStore.CurrentAccount); @@ -14,6 +17,12 @@ const accountOpen = ref(true); function editAccount(e : any) { accountStore.EditAccount(CurrentAccount.value?.ID ?? "", accountName.value, accountOnBudget.value, accountOpen.value); + + // account closed, move to Budget + if(!accountOpen.value){ + const currentBudgetID = useBudgetsStore().CurrentBudgetID; + router.replace('/budget/'+currentBudgetID+'/budgeting'); + } } function openEditAccount(e : any) { -- 2.47.2 From 29f534bf105bdc1a6f7c2de96aad3f876e28a385 Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Wed, 2 Mar 2022 21:22:06 +0000 Subject: [PATCH 08/11] Hide closed accounts menuentry --- web/src/pages/BudgetSidebar.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/pages/BudgetSidebar.vue b/web/src/pages/BudgetSidebar.vue index 69698a5..0a1b728 100644 --- a/web/src/pages/BudgetSidebar.vue +++ b/web/src/pages/BudgetSidebar.vue @@ -60,11 +60,11 @@ function getAccountName(account : Account) { -
  • + -- 2.47.2 From c7a8adb3ab4c1c832131d3810f38972f485b9a3d Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Wed, 2 Mar 2022 21:22:15 +0000 Subject: [PATCH 09/11] Remove closed account from sidebar --- web/src/stores/budget-account.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/web/src/stores/budget-account.ts b/web/src/stores/budget-account.ts index c8e64d8..4c6d71e 100644 --- a/web/src/stores/budget-account.ts +++ b/web/src/stores/budget-account.ts @@ -128,6 +128,10 @@ export const useAccountStore = defineStore("budget/account", { const result = await POST("/account/" + accountid, JSON.stringify({ name: name, onBudget: onBudget, isOpen: isOpen })); const response = await result.json(); useBudgetsStore().MergeBudgetingData(response); + + if(!isOpen) { + this.Accounts.delete(accountid); + } }, addCategoriesForMonth(year: number, month: number, categories: Category[]): void { this.$patch((state) => { -- 2.47.2 From 3727061065503d81aafcc80829ff367f53f8c02f Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Wed, 2 Mar 2022 21:52:16 +0000 Subject: [PATCH 10/11] Prevent closing of accounts with balance --- web/src/components/Modal.vue | 8 ++++++-- web/src/dialogs/EditAccount.vue | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/web/src/components/Modal.vue b/web/src/components/Modal.vue index faea3ca..5f0c076 100644 --- a/web/src/components/Modal.vue +++ b/web/src/components/Modal.vue @@ -7,7 +7,7 @@ const props = defineProps<{ }>(); const emit = defineEmits<{ - (e: 'submit'): void, + (e: 'submit', event : {cancel:boolean}): boolean, (e: 'open'): void, }>(); @@ -20,8 +20,12 @@ function openDialog() { visible.value = true; }; function submitDialog() { + const e = {cancel: false}; + emit("submit", e); + if(e.cancel) + return; + visible.value = false; - emit("submit"); } diff --git a/web/src/dialogs/EditAccount.vue b/web/src/dialogs/EditAccount.vue index 43b0456..d8e3515 100644 --- a/web/src/dialogs/EditAccount.vue +++ b/web/src/dialogs/EditAccount.vue @@ -14,8 +14,16 @@ const CurrentAccount = computed(() => accountStore.CurrentAccount); const accountName = ref(""); const accountOnBudget = ref(true); const accountOpen = ref(true); +const error = ref(""); -function editAccount(e : any) { +function editAccount(e : {cancel:boolean}) : boolean { + if(CurrentAccount.value?.ClearedBalance != 0 && !accountOpen.value){ + e.cancel = true; + error.value = "Cannot close account with balance"; + return false; + } + + error.value = ""; accountStore.EditAccount(CurrentAccount.value?.ID ?? "", accountName.value, accountOnBudget.value, accountOpen.value); // account closed, move to Budget @@ -23,6 +31,7 @@ function editAccount(e : any) { const currentBudgetID = useBudgetsStore().CurrentBudgetID; router.replace('/budget/'+currentBudgetID+'/budgeting'); } + return true; } function openEditAccount(e : any) { @@ -37,7 +46,7 @@ function openEditAccount(e : any) {
    +
    + {{ error }} +
    \ No newline at end of file -- 2.47.2 From 42d431ba8b13f85da37aae6e9d28c8edb0cbc491 Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Wed, 2 Mar 2022 21:52:35 +0000 Subject: [PATCH 11/11] Fix modal layout for dark theme --- web/src/components/Modal.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/components/Modal.vue b/web/src/components/Modal.vue index 5f0c076..d628210 100644 --- a/web/src/components/Modal.vue +++ b/web/src/components/Modal.vue @@ -42,9 +42,9 @@ function submitDialog() { v-if="visible" class="fixed inset-0 bg-gray-600 bg-opacity-50 overflow-y-auto h-full w-full" > -
    +
    -

    {{ buttonText }}

    +

    {{ buttonText }}