From c5c3d1133a14c4a41ff2958fa2dfb542a4fcb5ae Mon Sep 17 00:00:00 2001 From: RunasSudo Date: Fri, 22 Nov 2024 18:54:28 +1100 Subject: [PATCH] Implement editing and deleting balance assertions --- src/components/BalanceAssertionEditor.vue | 117 ++++++++++++++++++++++ src/main.ts | 2 + src/pages/BalanceAssertionsView.vue | 17 ++-- src/pages/EditBalanceAssertionView.vue | 67 +++++++++++++ src/pages/EditTransactionView.vue | 14 +-- src/pages/NewBalanceAssertionView.vue | 41 ++++++++ 6 files changed, 242 insertions(+), 16 deletions(-) create mode 100644 src/components/BalanceAssertionEditor.vue create mode 100644 src/pages/EditBalanceAssertionView.vue create mode 100644 src/pages/NewBalanceAssertionView.vue diff --git a/src/components/BalanceAssertionEditor.vue b/src/components/BalanceAssertionEditor.vue new file mode 100644 index 0000000..bf074d9 --- /dev/null +++ b/src/components/BalanceAssertionEditor.vue @@ -0,0 +1,117 @@ + + + + + diff --git a/src/main.ts b/src/main.ts index 824f9fb..d0c32a1 100644 --- a/src/main.ts +++ b/src/main.ts @@ -31,6 +31,8 @@ async function initApp() { const routes = [ { path: '/', name: 'index', component: () => import('./pages/HomeView.vue') }, { path: '/balance-assertions', name: 'balance-assertions', component: () => import('./pages/BalanceAssertionsView.vue') }, + { path: '/balance-assertions/edit/:id', name: 'balance-assertions-edit', component: () => import('./pages/EditBalanceAssertionView.vue') }, + { path: '/balance-assertions/new', name: 'balance-assertions-new', component: () => import('./pages/NewBalanceAssertionView.vue') }, { path: '/chart-of-accounts', name: 'chart-of-accounts', component: () => import('./pages/ChartOfAccountsView.vue') }, { path: '/general-ledger', name: 'general-ledger', component: () => import('./pages/GeneralLedgerView.vue') }, { path: '/journal', name: 'journal', component: () => import('./pages/JournalView.vue') }, diff --git a/src/pages/BalanceAssertionsView.vue b/src/pages/BalanceAssertionsView.vue index 5343bc3..eb2ae56 100644 --- a/src/pages/BalanceAssertionsView.vue +++ b/src/pages/BalanceAssertionsView.vue @@ -22,12 +22,10 @@
- +
@@ -54,10 +52,8 @@ @@ -72,7 +68,8 @@ import { db, totalBalancesAtDate } from '../db.ts'; import { pp } from '../display.ts'; - import { CheckIcon, XMarkIcon } from '@heroicons/vue/24/outline'; + import { CheckIcon, PencilIcon, XMarkIcon } from '@heroicons/vue/24/outline'; + import { PlusIcon } from '@heroicons/vue/16/solid'; const balanceAssertions = ref([] as ValidatedBalanceAssertion[]); diff --git a/src/pages/EditBalanceAssertionView.vue b/src/pages/EditBalanceAssertionView.vue new file mode 100644 index 0000000..e7df81e --- /dev/null +++ b/src/pages/EditBalanceAssertionView.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/src/pages/EditTransactionView.vue b/src/pages/EditTransactionView.vue index b70aa0e..c4f1272 100644 --- a/src/pages/EditTransactionView.vue +++ b/src/pages/EditTransactionView.vue @@ -30,7 +30,7 @@ import { ref } from 'vue'; import { useRoute } from 'vue-router'; - import { JoinedTransactionPosting, Posting, db, joinedToTransactions, serialiseAmount } from '../db.ts'; + import { JoinedTransactionPosting, db, joinedToTransactions, serialiseAmount } from '../db.ts'; import TransactionEditor, { EditingTransaction } from '../components/TransactionEditor.vue'; const route = useRoute(); @@ -56,16 +56,18 @@ const transactions = joinedToTransactions(joinedTransactionPostings); if (transactions.length !== 1) { throw new Error('Unexpected number of transactions returned from SQL'); } - transaction.value = transactions[0] as unknown as EditingTransaction; + const rawTransaction = transactions[0] as any; // Format dt - transaction.value.dt = dayjs(transaction.value.dt).format('YYYY-MM-DD') + rawTransaction.dt = dayjs(rawTransaction.dt).format('YYYY-MM-DD'); // Initialise sign and amount_abs - for (const posting of transaction.value.postings) { - posting.sign = (posting as unknown as Posting).quantity! >= 0 ? 'dr' : 'cr'; - posting.amount_abs = serialiseAmount(Math.abs((posting as unknown as Posting).quantity), (posting as unknown as Posting).commodity); + for (const posting of rawTransaction.postings) { + posting.sign = posting.quantity >= 0 ? 'dr' : 'cr'; + posting.amount_abs = serialiseAmount(Math.abs(posting.quantity), posting.commodity); } + + transaction.value = rawTransaction as EditingTransaction; } load(); diff --git a/src/pages/NewBalanceAssertionView.vue b/src/pages/NewBalanceAssertionView.vue new file mode 100644 index 0000000..f02930d --- /dev/null +++ b/src/pages/NewBalanceAssertionView.vue @@ -0,0 +1,41 @@ + + + + +
- - - - + +