From a0cee8b56c2bbe2e3bb4d7da281da6ab4d7a7802 Mon Sep 17 00:00:00 2001 From: "a.bouhuolia" Date: Tue, 30 Mar 2021 18:56:48 +0200 Subject: [PATCH] fix(QuickPayment): payment receive number manual/auto-increment mode. --- .../QuickPaymentReceiveForm.js | 35 ++++++++++++++++--- .../QuickPaymentReceiveFormFields.js | 14 +++++++- .../QuickPaymentReceiveFormProvider.js | 8 +++-- .../PaymentReceiveForm/PaymentReceiveForm.js | 1 + 4 files changed, 49 insertions(+), 9 deletions(-) diff --git a/client/src/containers/Dialogs/QuickPaymentReceiveFormDialog/QuickPaymentReceiveForm.js b/client/src/containers/Dialogs/QuickPaymentReceiveFormDialog/QuickPaymentReceiveForm.js index 66729ae9c..a705da1ca 100644 --- a/client/src/containers/Dialogs/QuickPaymentReceiveFormDialog/QuickPaymentReceiveForm.js +++ b/client/src/containers/Dialogs/QuickPaymentReceiveFormDialog/QuickPaymentReceiveForm.js @@ -2,16 +2,17 @@ import React from 'react'; import { Formik } from 'formik'; import { Intent } from '@blueprintjs/core'; import { FormattedMessage as T, useIntl } from 'react-intl'; -import { pick } from 'lodash'; +import { pick, defaultTo } from 'lodash'; import { AppToaster } from 'components'; import { useQuickPaymentReceiveContext } from './QuickPaymentReceiveFormProvider'; import { CreateQuickPaymentReceiveFormSchema } from './QuickPaymentReceive.schema'; import QuickPaymentReceiveFormContent from './QuickPaymentReceiveFormContent'; +import withSettings from 'containers/Settings/withSettings'; import withDialogActions from 'containers/Dialog/withDialogActions'; import { defaultInitialValues, transformErrors } from './utils'; -import { compose } from 'utils'; +import { compose, transactionNumber } from 'utils'; /** * Quick payment receive form. @@ -19,6 +20,12 @@ import { compose } from 'utils'; function QuickPaymentReceiveForm({ // #withDialogActions closeDialog, + + // #withSettings + paymentReceiveAutoIncrement, + paymentReceiveNumberPrefix, + paymentReceiveNextNumber, + preferredDepositAccount }) { const { formatMessage } = useIntl(); const { @@ -27,14 +34,25 @@ function QuickPaymentReceiveForm({ createPaymentReceiveMutate, } = useQuickPaymentReceiveContext(); + // Payment receive number. + const nextPaymentNumber = transactionNumber( + paymentReceiveNumberPrefix, + paymentReceiveNextNumber, + ); + // Initial form values const initialValues = { ...defaultInitialValues, + ...(paymentReceiveAutoIncrement && { + payment_receive_no: nextPaymentNumber, + }), + deposit_account_id: defaultTo(preferredDepositAccount, ''), ...invoice, }; // Handles the form submit. - const handleFormSubmit = (values, { setSubmitting, setFieldError }) => { + const handleFormSubmit = (values, { setSubmitting, setFieldError, status }) => { + debugger; const entries = [values] .filter((entry) => entry.id && entry.payment_amount) .map((entry) => ({ @@ -69,7 +87,6 @@ function QuickPaymentReceiveForm({ } setSubmitting(false); }; - createPaymentReceiveMutate(form).then(onSaved).catch(onError); }; @@ -83,4 +100,12 @@ function QuickPaymentReceiveForm({ ); } -export default compose(withDialogActions)(QuickPaymentReceiveForm); +export default compose( + withDialogActions, + withSettings(({ paymentReceiveSettings }) => ({ + paymentReceiveNextNumber: paymentReceiveSettings?.nextNumber, + paymentReceiveNumberPrefix: paymentReceiveSettings?.numberPrefix, + paymentReceiveAutoIncrement: paymentReceiveSettings?.autoIncrement, + preferredDepositAccount: paymentReceiveSettings?.depositAccount, + })), +)(QuickPaymentReceiveForm); diff --git a/client/src/containers/Dialogs/QuickPaymentReceiveFormDialog/QuickPaymentReceiveFormFields.js b/client/src/containers/Dialogs/QuickPaymentReceiveFormDialog/QuickPaymentReceiveFormFields.js index c47a07896..e16a99241 100644 --- a/client/src/containers/Dialogs/QuickPaymentReceiveFormDialog/QuickPaymentReceiveFormFields.js +++ b/client/src/containers/Dialogs/QuickPaymentReceiveFormDialog/QuickPaymentReceiveFormFields.js @@ -26,13 +26,17 @@ import { momentFormatter, tansformDateValue, handleDateChange, + compose } from 'utils'; import { useQuickPaymentReceiveContext } from './QuickPaymentReceiveFormProvider'; +import withSettings from 'containers/Settings/withSettings'; /** * Quick payment receive form fields. */ -export default function QuickPaymentReceiveFormFields({}) { +function QuickPaymentReceiveFormFields({ + paymentReceiveAutoIncrement +}) { const { accounts } = useQuickPaymentReceiveContext(); // Intl context. @@ -78,6 +82,7 @@ export default function QuickPaymentReceiveFormFields({}) { intent={inputIntent({ error, touched })} minimal={true} {...field} + disabled={paymentReceiveAutoIncrement} /> )} @@ -157,6 +162,7 @@ export default function QuickPaymentReceiveFormFields({}) { helperText={} > form.setFieldValue('deposit_account_id', id) @@ -208,3 +214,9 @@ export default function QuickPaymentReceiveFormFields({}) { ); } + +export default compose( + withSettings(({ paymentReceiveSettings }) => ({ + paymentReceiveAutoIncrement: paymentReceiveSettings?.autoIncrement, + })), +)(QuickPaymentReceiveFormFields) \ No newline at end of file diff --git a/client/src/containers/Dialogs/QuickPaymentReceiveFormDialog/QuickPaymentReceiveFormProvider.js b/client/src/containers/Dialogs/QuickPaymentReceiveFormDialog/QuickPaymentReceiveFormProvider.js index 7ede85cb2..1c3195b67 100644 --- a/client/src/containers/Dialogs/QuickPaymentReceiveFormDialog/QuickPaymentReceiveFormProvider.js +++ b/client/src/containers/Dialogs/QuickPaymentReceiveFormDialog/QuickPaymentReceiveFormProvider.js @@ -1,7 +1,7 @@ import React, { useContext, createContext } from 'react'; import { pick } from 'lodash'; import { DialogContent } from 'components'; -import { useAccounts, useInvoice, useCreatePaymentReceive } from 'hooks/query'; +import { useAccounts, useInvoice, useSettingsPaymentReceives, useCreatePaymentReceive } from 'hooks/query'; const QuickPaymentReceiveContext = createContext(); @@ -16,10 +16,12 @@ function QuickPaymentReceiveFormProvider({ invoiceId, dialogName, ...props }) { const { data: invoice, isLoading: isInvoiceLoading } = useInvoice(invoiceId, { enabled: !!invoiceId, }); - // Create and edit payment receive mutations. const { mutateAsync: createPaymentReceiveMutate } = useCreatePaymentReceive(); + // Fetch payment made settings. + const { isLoading: isSettingsLoading } = useSettingsPaymentReceives(); + // State provider. const provider = { accounts, @@ -28,8 +30,8 @@ function QuickPaymentReceiveFormProvider({ invoiceId, dialogName, ...props }) { customer_id: invoice?.customer?.display_name, payment_amount: invoice.due_amount, }, - isAccountsLoading, + isSettingsLoading, dialogName, createPaymentReceiveMutate, diff --git a/client/src/containers/Sales/PaymentReceives/PaymentReceiveForm/PaymentReceiveForm.js b/client/src/containers/Sales/PaymentReceives/PaymentReceiveForm/PaymentReceiveForm.js index de9e3bdb6..f48c45542 100644 --- a/client/src/containers/Sales/PaymentReceives/PaymentReceiveForm/PaymentReceiveForm.js +++ b/client/src/containers/Sales/PaymentReceives/PaymentReceiveForm/PaymentReceiveForm.js @@ -75,6 +75,7 @@ function PaymentReceiveForm({ nextPaymentNumber, paymentEntriesEditPage, paymentReceiveAutoIncrement, + preferredDepositAccount ], );