From cb1f58763745e4f6fd23708454c852038bb5835f Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Sat, 29 Jun 2024 10:30:03 +0200 Subject: [PATCH] fix(server): Handle the delete error when the matched transaction --- .../Alerts/Expenses/ExpenseDeleteAlert.tsx | 12 ++--------- .../src/containers/Alerts/Expenses/_utils.ts | 20 +++++++++++++++++++ .../ManualJournals/JournalDeleteAlert.tsx | 14 ++++++++++--- .../Alerts/ManualJournals/_utils.ts | 11 ++++++++++ .../PaymentMades/PaymentMadeDeleteAlert.tsx | 10 ++++++++++ .../containers/Alerts/PaymentMades/_utils.ts | 11 ++++++++++ .../PaymentReceiveDeleteAlert.tsx | 11 +++++++++- .../Alerts/PaymentReceives/_utils.ts | 11 ++++++++++ .../Invoices/InvoicesLanding/components.tsx | 6 ++++++ 9 files changed, 92 insertions(+), 14 deletions(-) create mode 100644 packages/webapp/src/containers/Alerts/Expenses/_utils.ts create mode 100644 packages/webapp/src/containers/Alerts/ManualJournals/_utils.ts create mode 100644 packages/webapp/src/containers/Alerts/PaymentMades/_utils.ts create mode 100644 packages/webapp/src/containers/Alerts/PaymentReceives/_utils.ts diff --git a/packages/webapp/src/containers/Alerts/Expenses/ExpenseDeleteAlert.tsx b/packages/webapp/src/containers/Alerts/Expenses/ExpenseDeleteAlert.tsx index 84985060f..bd28bab18 100644 --- a/packages/webapp/src/containers/Alerts/Expenses/ExpenseDeleteAlert.tsx +++ b/packages/webapp/src/containers/Alerts/Expenses/ExpenseDeleteAlert.tsx @@ -11,6 +11,7 @@ import withDrawerActions from '@/containers/Drawer/withDrawerActions'; import { useDeleteExpense } from '@/hooks/query'; import { compose } from '@/utils'; import { DRAWERS } from '@/constants/drawers'; +import { handleDeleteErrors } from './_utils'; /** * Expense delete alert. @@ -51,16 +52,7 @@ function ExpenseDeleteAlert({ data: { errors }, }, }) => { - if ( - errors.find((e) => e.type === 'EXPENSE_HAS_ASSOCIATED_LANDED_COST') - ) { - AppToaster.show({ - intent: Intent.DANGER, - message: intl.get( - 'couldn_t_delete_expense_transaction_has_associated_located_landed_cost_transaction', - ), - }); - } + handleDeleteErrors(errors); }, ) .finally(() => { diff --git a/packages/webapp/src/containers/Alerts/Expenses/_utils.ts b/packages/webapp/src/containers/Alerts/Expenses/_utils.ts new file mode 100644 index 000000000..4a692bd23 --- /dev/null +++ b/packages/webapp/src/containers/Alerts/Expenses/_utils.ts @@ -0,0 +1,20 @@ +import { Intent } from '@blueprintjs/core'; +import intl from 'react-intl-universal'; +import { AppToaster } from '@/components'; + +export const handleDeleteErrors = (errors: any) => { + if (errors.find((e: any) => e.type === 'EXPENSE_HAS_ASSOCIATED_LANDED_COST')) { + AppToaster.show({ + intent: Intent.DANGER, + message: intl.get( + 'couldn_t_delete_expense_transaction_has_associated_located_landed_cost_transaction', + ), + }); + } + if (errors.find((e: any) => e.type === 'CANNOT_DELETE_TRANSACTION_MATCHED')) { + AppToaster.show({ + intent: Intent.DANGER, + message: 'Cannot delete a transaction matched with a bank transaction.', + }); + } +}; diff --git a/packages/webapp/src/containers/Alerts/ManualJournals/JournalDeleteAlert.tsx b/packages/webapp/src/containers/Alerts/ManualJournals/JournalDeleteAlert.tsx index 741bd05e6..8d09ae6cb 100644 --- a/packages/webapp/src/containers/Alerts/ManualJournals/JournalDeleteAlert.tsx +++ b/packages/webapp/src/containers/Alerts/ManualJournals/JournalDeleteAlert.tsx @@ -11,6 +11,7 @@ import withDrawerActions from '@/containers/Drawer/withDrawerActions'; import { compose } from '@/utils'; import { DRAWERS } from '@/constants/drawers'; +import { handleDeleteErrors } from './_utils'; /** * Journal delete alert. @@ -48,9 +49,16 @@ function JournalDeleteAlert({ closeAlert(name); closeDrawer(DRAWERS.JOURNAL_DETAILS); }) - .catch(() => { - closeAlert(name); - }); + .catch( + ({ + response: { + data: { errors }, + }, + }) => { + handleDeleteErrors(errors); + closeAlert(name); + }, + ); }; return ( diff --git a/packages/webapp/src/containers/Alerts/ManualJournals/_utils.ts b/packages/webapp/src/containers/Alerts/ManualJournals/_utils.ts new file mode 100644 index 000000000..2f4db0186 --- /dev/null +++ b/packages/webapp/src/containers/Alerts/ManualJournals/_utils.ts @@ -0,0 +1,11 @@ +import { AppToaster } from '@/components'; +import { Intent } from '@blueprintjs/core'; + +export const handleDeleteErrors = (errors: any) => { + if (errors.find((e: any) => e.type === 'CANNOT_DELETE_TRANSACTION_MATCHED')) { + AppToaster.show({ + intent: Intent.DANGER, + message: 'Cannot delete a transaction matched with a bank transaction.', + }); + } +}; diff --git a/packages/webapp/src/containers/Alerts/PaymentMades/PaymentMadeDeleteAlert.tsx b/packages/webapp/src/containers/Alerts/PaymentMades/PaymentMadeDeleteAlert.tsx index 1a89b782a..51139d29b 100644 --- a/packages/webapp/src/containers/Alerts/PaymentMades/PaymentMadeDeleteAlert.tsx +++ b/packages/webapp/src/containers/Alerts/PaymentMades/PaymentMadeDeleteAlert.tsx @@ -12,6 +12,7 @@ import { useDeletePaymentMade } from '@/hooks/query'; import { compose } from '@/utils'; import { DRAWERS } from '@/constants/drawers'; +import { handleDeleteErrors } from './_utils'; /** * Payment made delete alert. @@ -47,6 +48,15 @@ function PaymentMadeDeleteAlert({ }); closeDrawer(DRAWERS.PAYMENT_MADE_DETAILS); }) + .catch( + ({ + response: { + data: { errors }, + }, + }) => { + handleDeleteErrors(errors); + }, + ) .finally(() => { closeAlert(name); }); diff --git a/packages/webapp/src/containers/Alerts/PaymentMades/_utils.ts b/packages/webapp/src/containers/Alerts/PaymentMades/_utils.ts new file mode 100644 index 000000000..2f4db0186 --- /dev/null +++ b/packages/webapp/src/containers/Alerts/PaymentMades/_utils.ts @@ -0,0 +1,11 @@ +import { AppToaster } from '@/components'; +import { Intent } from '@blueprintjs/core'; + +export const handleDeleteErrors = (errors: any) => { + if (errors.find((e: any) => e.type === 'CANNOT_DELETE_TRANSACTION_MATCHED')) { + AppToaster.show({ + intent: Intent.DANGER, + message: 'Cannot delete a transaction matched with a bank transaction.', + }); + } +}; diff --git a/packages/webapp/src/containers/Alerts/PaymentReceives/PaymentReceiveDeleteAlert.tsx b/packages/webapp/src/containers/Alerts/PaymentReceives/PaymentReceiveDeleteAlert.tsx index ad360a66f..553bfb2c7 100644 --- a/packages/webapp/src/containers/Alerts/PaymentReceives/PaymentReceiveDeleteAlert.tsx +++ b/packages/webapp/src/containers/Alerts/PaymentReceives/PaymentReceiveDeleteAlert.tsx @@ -14,6 +14,7 @@ import withAlertStoreConnect from '@/containers/Alert/withAlertStoreConnect'; import withAlertActions from '@/containers/Alert/withAlertActions'; import withDrawerActions from '@/containers/Drawer/withDrawerActions'; +import { handleDeleteErrors } from './_utils'; import { compose } from '@/utils'; import { DRAWERS } from '@/constants/drawers'; @@ -53,7 +54,15 @@ function PaymentReceiveDeleteAlert({ }); closeDrawer(DRAWERS.PAYMENT_RECEIVE_DETAILS); }) - .catch(() => {}) + .catch( + ({ + response: { + data: { errors }, + }, + }) => { + handleDeleteErrors(errors); + }, + ) .finally(() => { closeAlert(name); }); diff --git a/packages/webapp/src/containers/Alerts/PaymentReceives/_utils.ts b/packages/webapp/src/containers/Alerts/PaymentReceives/_utils.ts new file mode 100644 index 000000000..3e6ae9ae7 --- /dev/null +++ b/packages/webapp/src/containers/Alerts/PaymentReceives/_utils.ts @@ -0,0 +1,11 @@ +import { Intent } from '@blueprintjs/core'; +import { AppToaster } from '@/components'; + +export const handleDeleteErrors = (errors: any) => { + if (errors.find((e: any) => e.type === 'CANNOT_DELETE_TRANSACTION_MATCHED')) { + AppToaster.show({ + intent: Intent.DANGER, + message: 'Cannot delete a transaction matched with a bank transaction.', + }); + } +}; diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoicesLanding/components.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoicesLanding/components.tsx index ca458f00f..5bdb11d26 100644 --- a/packages/webapp/src/containers/Sales/Invoices/InvoicesLanding/components.tsx +++ b/packages/webapp/src/containers/Sales/Invoices/InvoicesLanding/components.tsx @@ -117,6 +117,12 @@ export const handleDeleteErrors = (errors) => { intent: Intent.DANGER, }); } + if (errors.find((e) => e.type === 'CANNOT_DELETE_TRANSACTION_MATCHED')) { + AppToaster.show({ + intent: Intent.DANGER, + message: 'Cannot delete a transaction matched with a bank transaction.', + }); + } }; export function ActionsMenu({