From dc4cdb2a8fd1541c23aa1342c997122cf9b6ff14 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Sun, 9 Jun 2024 20:05:15 +0200 Subject: [PATCH] fix: Assign branch in categorize bank transaction --- .../Cashflow/CategorizeCashflowTransaction.ts | 1 - .../server/src/services/Cashflow/utils.ts | 8 ++--- .../Branches/BranchSuggestField_.tsx | 18 +++++++++++ .../CategorizeTransactionBoot.tsx | 10 +++++- .../CategorizeTransactionBranchField.tsx | 22 +++++++++++++ .../CategorizeTransactionForm.tsx | 32 ++++++++++++++----- .../CategorizeTransactionOtherIncome.tsx | 3 ++ ...CategorizeTransactionOwnerContribution.tsx | 3 ++ .../CategorizeTransactionTransferFrom.tsx | 5 ++- .../CategorizeTransactionOtherExpense.tsx | 3 ++ .../CategorizeTransactionOwnerDrawings.tsx | 3 ++ .../CategorizeTransactionToAccount.tsx | 5 ++- .../CategorizeTransactionDrawer/_utils.ts | 1 + 13 files changed, 98 insertions(+), 16 deletions(-) create mode 100644 packages/webapp/src/components/Branches/BranchSuggestField_.tsx create mode 100644 packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/CategorizeTransactionBranchField.tsx diff --git a/packages/server/src/services/Cashflow/CategorizeCashflowTransaction.ts b/packages/server/src/services/Cashflow/CategorizeCashflowTransaction.ts index 3d19e1547..9ec711881 100644 --- a/packages/server/src/services/Cashflow/CategorizeCashflowTransaction.ts +++ b/packages/server/src/services/Cashflow/CategorizeCashflowTransaction.ts @@ -12,7 +12,6 @@ import { Knex } from 'knex'; import { transformCategorizeTransToCashflow } from './utils'; import { CommandCashflowValidator } from './CommandCasflowValidator'; import NewCashflowTransactionService from './NewCashflowTransactionService'; -import { TransferAuthorizationGuaranteeDecision } from 'plaid'; @Service() export class CategorizeCashflowTransaction { diff --git a/packages/server/src/services/Cashflow/utils.ts b/packages/server/src/services/Cashflow/utils.ts index ce95e8416..8258abb28 100644 --- a/packages/server/src/services/Cashflow/utils.ts +++ b/packages/server/src/services/Cashflow/utils.ts @@ -1,4 +1,4 @@ -import { upperFirst, camelCase, omit } from 'lodash'; +import { upperFirst, camelCase } from 'lodash'; import { CASHFLOW_TRANSACTION_TYPE, CASHFLOW_TRANSACTION_TYPE_META, @@ -6,7 +6,6 @@ import { } from './constants'; import { ICashflowNewCommandDTO, - ICashflowTransaction, ICategorizeCashflowTransactioDTO, IUncategorizedCashflowTransaction, } from '@/interfaces'; @@ -42,8 +41,8 @@ export const getCashflowAccountTransactionsTypes = () => { /** * Tranasformes the given uncategorized transaction and categorized DTO * to cashflow create DTO. - * @param {IUncategorizedCashflowTransaction} uncategorizeModel - * @param {ICategorizeCashflowTransactioDTO} categorizeDTO + * @param {IUncategorizedCashflowTransaction} uncategorizeModel + * @param {ICategorizeCashflowTransactioDTO} categorizeDTO * @returns {ICashflowNewCommandDTO} */ export const transformCategorizeTransToCashflow = ( @@ -62,6 +61,7 @@ export const transformCategorizeTransToCashflow = ( transactionNumber: categorizeDTO.transactionNumber, transactionType: categorizeDTO.transactionType, uncategorizedTransactionId: uncategorizeModel.id, + branchId: categorizeDTO?.branchId, publish: true, }; }; diff --git a/packages/webapp/src/components/Branches/BranchSuggestField_.tsx b/packages/webapp/src/components/Branches/BranchSuggestField_.tsx new file mode 100644 index 000000000..6cd6fc2c6 --- /dev/null +++ b/packages/webapp/src/components/Branches/BranchSuggestField_.tsx @@ -0,0 +1,18 @@ +// @ts-nocheck +import { FSuggest } from '../Forms'; + +interface BranchSuggestFieldProps { + items: any[]; +} + +export function BranchSuggestField({ ...props }: BranchSuggestFieldProps) { + return ( + + ); +} diff --git a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/CategorizeTransactionBoot.tsx b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/CategorizeTransactionBoot.tsx index 6a7b8ea2b..dbd9e00fc 100644 --- a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/CategorizeTransactionBoot.tsx +++ b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/CategorizeTransactionBoot.tsx @@ -1,5 +1,6 @@ // @ts-nocheck -import React from 'react'; +import React, { useMemo } from 'react'; +import { first } from 'lodash'; import { DrawerHeaderContent, DrawerLoading } from '@/components'; import { DRAWERS } from '@/constants/drawers'; import { @@ -34,6 +35,12 @@ function CategorizeTransactionBoot({ uncategorizedTransactionId, ...props }) { isLoading: isUncategorizedTransactionLoading, } = useUncategorizedTransaction(uncategorizedTransactionId); + // Retrieves the primary branch. + const primaryBranch = useMemo( + () => branches?.find((b) => b.primary) || first(branches), + [branches], + ); + const provider = { uncategorizedTransactionId, uncategorizedTransaction, @@ -42,6 +49,7 @@ function CategorizeTransactionBoot({ uncategorizedTransactionId, ...props }) { accounts, isBranchesLoading, isAccountsLoading, + primaryBranch, }; const isLoading = isBranchesLoading || isUncategorizedTransactionLoading || isAccountsLoading; diff --git a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/CategorizeTransactionBranchField.tsx b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/CategorizeTransactionBranchField.tsx new file mode 100644 index 000000000..29c149ec4 --- /dev/null +++ b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/CategorizeTransactionBranchField.tsx @@ -0,0 +1,22 @@ +// @ts-nocheck +import { FFormGroup, FeatureCan } from '@/components'; +import { useCategorizeTransactionBoot } from './CategorizeTransactionBoot'; +import { Features } from '@/constants'; +import { BranchSuggestField } from '@/components/Branches/BranchSuggestField_'; + +export function CategorizeTransactionBranchField() { + const { branches } = useCategorizeTransactionBoot(); + + return ( + + + + + + ); +} diff --git a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/CategorizeTransactionForm.tsx b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/CategorizeTransactionForm.tsx index a10387af6..2c7843894 100644 --- a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/CategorizeTransactionForm.tsx +++ b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/CategorizeTransactionForm.tsx @@ -24,8 +24,11 @@ function CategorizeTransactionFormRoot({ // #withDrawerActions closeDrawer, }) { - const { uncategorizedTransactionId, uncategorizedTransaction } = - useCategorizeTransactionBoot(); + const { + uncategorizedTransactionId, + uncategorizedTransaction, + primaryBranch, + } = useCategorizeTransactionBoot(); const { mutateAsync: categorizeTransaction } = useCategorizeTransaction(); // Callbacks handles form submit. @@ -37,18 +40,28 @@ function CategorizeTransactionFormRoot({ .then(() => { setSubmitting(false); closeDrawer(DRAWERS.CATEGORIZE_TRANSACTION); - + AppToaster.show({ message: 'The uncategorized transaction has been categorized.', intent: Intent.SUCCESS, }); }) - .catch(() => { + .catch((err) => { setSubmitting(false); - AppToaster.show({ - message: 'Something went wrong!', - intent: Intent.DANGER, - }); + if ( + err.response.data?.errors?.some( + (e) => e.type === 'BRANCH_ID_REQUIRED', + ) + ) { + setErrors({ + branchId: 'The branch is required.', + }); + } else { + AppToaster.show({ + message: 'Something went wrong!', + intent: Intent.DANGER, + }); + } }); }; // Form initial values in create and edit mode. @@ -60,6 +73,9 @@ function CategorizeTransactionFormRoot({ * as well. */ ...transformToCategorizeForm(uncategorizedTransaction), + + /** Assign the primary branch id as default value. */ + branchId: primaryBranch?.id || null, }; return ( diff --git a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyIn/CategorizeTransactionOtherIncome.tsx b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyIn/CategorizeTransactionOtherIncome.tsx index 2afc65f87..17e701096 100644 --- a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyIn/CategorizeTransactionOtherIncome.tsx +++ b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyIn/CategorizeTransactionOtherIncome.tsx @@ -8,6 +8,7 @@ import { FTextArea, } from '@/components'; import { useCategorizeTransactionBoot } from '../CategorizeTransactionBoot'; +import { CategorizeTransactionBranchField } from '../CategorizeTransactionBranchField'; export default function CategorizeTransactionOtherIncome() { const { accounts } = useCategorizeTransactionBoot(); @@ -68,6 +69,8 @@ export default function CategorizeTransactionOtherIncome() { fill={true} /> + + ); } diff --git a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyIn/CategorizeTransactionOwnerContribution.tsx b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyIn/CategorizeTransactionOwnerContribution.tsx index 83b485c51..f850f4dc0 100644 --- a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyIn/CategorizeTransactionOwnerContribution.tsx +++ b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyIn/CategorizeTransactionOwnerContribution.tsx @@ -8,6 +8,7 @@ import { FTextArea, } from '@/components'; import { useCategorizeTransactionBoot } from '../CategorizeTransactionBoot'; +import { CategorizeTransactionBranchField } from '../CategorizeTransactionBranchField'; export default function CategorizeTransactionOwnerContribution() { const { accounts } = useCategorizeTransactionBoot(); @@ -63,6 +64,8 @@ export default function CategorizeTransactionOwnerContribution() { + + ); } diff --git a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyIn/CategorizeTransactionTransferFrom.tsx b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyIn/CategorizeTransactionTransferFrom.tsx index 57f2a1911..01b5b8bba 100644 --- a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyIn/CategorizeTransactionTransferFrom.tsx +++ b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyIn/CategorizeTransactionTransferFrom.tsx @@ -8,6 +8,7 @@ import { FTextArea, } from '@/components'; import { useCategorizeTransactionBoot } from '../CategorizeTransactionBoot'; +import { CategorizeTransactionBranchField } from '../CategorizeTransactionBranchField'; export default function CategorizeTransactionTransferFrom() { const { accounts } = useCategorizeTransactionBoot(); @@ -47,7 +48,7 @@ export default function CategorizeTransactionTransferFrom() { inline > + + ); } diff --git a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyOut/CategorizeTransactionOtherExpense.tsx b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyOut/CategorizeTransactionOtherExpense.tsx index b85436e17..9be2042f2 100644 --- a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyOut/CategorizeTransactionOtherExpense.tsx +++ b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyOut/CategorizeTransactionOtherExpense.tsx @@ -8,6 +8,7 @@ import { FTextArea, } from '@/components'; import { useCategorizeTransactionBoot } from '../CategorizeTransactionBoot'; +import { CategorizeTransactionBranchField } from '../CategorizeTransactionBranchField'; export default function CategorizeTransactionOtherExpense() { const { accounts } = useCategorizeTransactionBoot(); @@ -68,6 +69,8 @@ export default function CategorizeTransactionOtherExpense() { fill={true} /> + + ); } diff --git a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyOut/CategorizeTransactionOwnerDrawings.tsx b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyOut/CategorizeTransactionOwnerDrawings.tsx index e39235fd9..79746421f 100644 --- a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyOut/CategorizeTransactionOwnerDrawings.tsx +++ b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyOut/CategorizeTransactionOwnerDrawings.tsx @@ -8,6 +8,7 @@ import { FTextArea, } from '@/components'; import { useCategorizeTransactionBoot } from '../CategorizeTransactionBoot'; +import { CategorizeTransactionBranchField } from '../CategorizeTransactionBranchField'; export default function CategorizeTransactionOwnerDrawings() { const { accounts } = useCategorizeTransactionBoot(); @@ -68,6 +69,8 @@ export default function CategorizeTransactionOwnerDrawings() { fill={true} /> + + ); } diff --git a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyOut/CategorizeTransactionToAccount.tsx b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyOut/CategorizeTransactionToAccount.tsx index 4e4545e52..93d6b7174 100644 --- a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyOut/CategorizeTransactionToAccount.tsx +++ b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/MoneyOut/CategorizeTransactionToAccount.tsx @@ -8,6 +8,7 @@ import { FTextArea, } from '@/components'; import { useCategorizeTransactionBoot } from '../CategorizeTransactionBoot'; +import { CategorizeTransactionBranchField } from '../CategorizeTransactionBranchField'; export default function CategorizeTransactionToAccount() { const { accounts } = useCategorizeTransactionBoot(); @@ -49,7 +50,7 @@ export default function CategorizeTransactionToAccount() { + + ); } diff --git a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/_utils.ts b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/_utils.ts index 9fedc3678..cf13dc829 100644 --- a/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/_utils.ts +++ b/packages/webapp/src/containers/CashFlow/CategorizeTransaction/drawers/CategorizeTransactionDrawer/_utils.ts @@ -11,6 +11,7 @@ export const defaultInitialValues = { transactionType: '', referenceNo: '', description: '', + branchId: '', }; export const transformToCategorizeForm = (uncategorizedTransaction) => {