diff --git a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFloatingActions.js b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFloatingActions.js
index 3affd700e..d831d0666 100644
--- a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFloatingActions.js
+++ b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFloatingActions.js
@@ -66,6 +66,7 @@ export default function VendorCreditNoteFloatingActions() {
// Handle submit button click.
const handleSubmitBtnClick = (event) => {
setSubmitPayload({ redirect: true });
+ submitForm();
};
const handleClearBtnClick = (event) => {
@@ -80,6 +81,7 @@ export default function VendorCreditNoteFloatingActions() {
disabled={isSubmitting}
loading={isSubmitting}
intent={Intent.PRIMARY}
+ onClick={handleSubmitBtnClick}
text={
}
/>
diff --git a/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteDataTable.js b/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteDataTable.js
index 7cf8d381e..7532610d2 100644
--- a/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteDataTable.js
+++ b/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteDataTable.js
@@ -48,7 +48,7 @@ function VendorsCreditNoteDataTable({
// Local storage memorizing columns widths.
const [initialColumnsWidths, , handleColumnResizing] =
- useMemorizedColumnsWidths(TABLES.CREDIT_NOTE);
+ useMemorizedColumnsWidths(TABLES.VENDOR_CREDITS);
// Handles fetch data once the table state change.
const handleDataTableFetchData = React.useCallback(
diff --git a/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFloatingActions.js b/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFloatingActions.js
index 398680493..727643a7b 100644
--- a/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFloatingActions.js
+++ b/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFloatingActions.js
@@ -26,32 +26,76 @@ export default function CreditNoteFloatingActions() {
const { resetForm, submitForm, isSubmitting } = useFormikContext();
// Credit note form context.
- const { setSubmitPayload } = useCreditNoteFormContext();
+ const { setSubmitPayload, isNewMode } = useCreditNoteFormContext();
+
+ // Handle submit, save and anothe new button click.
+ const handleSubmitAndNewBtnClick = (event) => {
+ setSubmitPayload({ redirect: false, status: true, resetForm: true });
+ submitForm();
+ };
+
+ // Handle submit as save & continue editing button click.
+ const handleSubmitSaveContinueEditingBtnClick = (event) => {
+ setSubmitPayload({ redirect: false, status: true });
+ submitForm();
+ };
+
+ // Handle submit as draft button click.
+ const handleSubmitDraftBtnClick = (event) => {
+ setSubmitPayload({ redirect: true, status: false });
+ submitForm();
+ };
+
+ // handle submit as draft & new button click.
+ const handleSubmitDraftAndNewBtnClick = (event) => {
+ setSubmitPayload({ redirect: false, status: false, resetForm: true });
+ submitForm();
+ };
+
+ // Handle submit as draft & continue editing button click.
+ const handleSubmitDraftContinueEditingBtnClick = (event) => {
+ setSubmitPayload({ redirect: false, status: false });
+ submitForm();
+ };
// Handle cancel button click.
const handleCancelBtnClick = (event) => {
history.goBack();
};
+ // Handle submit button click.
+ const handleSubmitBtnClick = (event) => {
+ setSubmitPayload({ redirect: true });
+ submitForm();
+ };
+
const handleClearBtnClick = (event) => {
resetForm();
};
return (
- {/* ----------- Save And Deliver ----------- */}
+ {/* ----------- Save ----------- */}
}
+ onClick={handleSubmitBtnClick}
+ text={}
/>
+
- } />
- } />
+ }
+ onClick={handleSubmitAndNewBtnClick}
+ />
+ }
+ onClick={handleSubmitSaveContinueEditingBtnClick}
+ />
}
minimal={true}
@@ -70,13 +114,20 @@ export default function CreditNoteFloatingActions() {
}
/>
- } />
- } />
+ }
+ onClick={handleSubmitDraftAndNewBtnClick}
+ />
+ }
+ onClick={handleSubmitDraftContinueEditingBtnClick}
+ />
}
minimal={true}
@@ -89,18 +140,17 @@ export default function CreditNoteFloatingActions() {
/>
- {/* ----------- Save and New ----------- */}
-
{/* ----------- Clear & Reset----------- */}
:
}
+ text={isNewMode ?
:
}
/>
{/* ----------- Cancel ----------- */}
}
/>
diff --git a/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteForm.js b/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteForm.js
index 503ce1000..9fe97db87 100644
--- a/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteForm.js
+++ b/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteForm.js
@@ -7,8 +7,8 @@ import { sumBy, omit, isEmpty } from 'lodash';
import classNames from 'classnames';
import { CLASSES } from 'common/classes';
import {
- getCreateCreditNoteFormSchema,
- getEditCreditNoteFormSchema,
+ CreateCreditNoteFormSchema,
+ EditCreditNoteFormSchema,
} from './CreditNoteForm.schema';
import CreditNoteFormHeader from './CreditNoteFormHeader';
@@ -17,9 +17,21 @@ import CreditNoteFormFooter from './CreditNoteFormFooter';
import CreditNoteFloatingActions from './CreditNoteFloatingActions';
import { AppToaster } from 'components';
-import { compose, orderingLinesIndexes, transactionNumber } from 'utils';
+
import { useCreditNoteFormContext } from './CreditNoteFormProvider';
-import { transformToEditForm, defaultCreditNote } from './utils';
+import {
+ filterNonZeroEntries,
+ transformToEditForm,
+ transformFormValuesToRequest,
+ defaultCreditNote,
+} from './utils';
+
+import {
+ compose,
+ orderingLinesIndexes,
+ transactionNumber,
+ safeSumBy,
+} from 'utils';
import withSettings from 'containers/Settings/withSettings';
import withCurrentOrganization from 'containers/Organization/withCurrentOrganization';
@@ -36,33 +48,35 @@ function CreditNoteForm({
const history = useHistory();
// Credit note form context.
- const { invoice } = useCreditNoteFormContext();
+ const {
+ isNewMode,
+ submitPayload,
+ creditNote,
+ createCreditNoteMutate,
+ editCreditNoteMutate,
+ } = useCreditNoteFormContext();
// Initial values.
const initialValues = React.useMemo(
() => ({
- ...(!isEmpty(invoice)
- ? { ...transformToEditForm(invoice), currency_code: base_currency }
+ ...(!isEmpty(creditNote)
+ ? { ...transformToEditForm(creditNote), currency_code: base_currency }
: {
...defaultCreditNote,
entries: orderingLinesIndexes(defaultCreditNote.entries),
- currency_code: base_currency,
}),
}),
[],
);
- // Handle form submit.
- const handleSubmit = (values, { setSubmitting, setErrors, resetForm }) => {
- setSubmitting(true);
+ // Handles form submit.
+ const handleFormSubmit = (
+ values,
+ { setSubmitting, setErrors, resetForm },
+ ) => {
+ const entries = filterNonZeroEntries(values.entries);
+ const totalQuantity = safeSumBy(entries, 'quantity');
- const entries = values.entries.filter(
- (item) => item.item_id && item.quantity,
- );
-
- const totalQuantity = sumBy(entries, (entry) => parseInt(entry.quantity));
-
- // Throw danger toaster in case total quantity equals zero.
if (totalQuantity === 0) {
AppToaster.show({
message: intl.get('quantity_cannot_be_zero_or_empty'),
@@ -71,24 +85,45 @@ function CreditNoteForm({
setSubmitting(false);
return;
}
- // Transformes the values of the form to request.
const form = {
- // ...transformValueToRequest(values),
+ ...transformFormValuesToRequest(values),
};
-
// Handle the request success.
- const onSuccess = () => {};
+ const onSuccess = (response) => {
+ AppToaster.show({
+ message: intl.get(
+ isNewMode
+ ? 'credit_note.success_message'
+ : 'credit_note.edit_success_message',
+ ),
+ intent: Intent.SUCCESS,
+ });
+ setSubmitting(false);
+
+ if (submitPayload.redirect) {
+ history.push('/credit-notes');
+ }
+ if (submitPayload.resetForm) {
+ resetForm();
+ }
+ };
// Handle the request error.
const onError = ({
response: {
data: { errors },
},
- }) => {};
+ }) => {
+ setSubmitting(false);
+ };
+ if (isNewMode) {
+ createCreditNoteMutate(form).then(onSuccess).catch(onError);
+ } else {
+ editCreditNoteMutate([creditNote.id, form])
+ .then(onSuccess)
+ .catch(onError);
+ }
};
- const CreateCreditNoteFormSchema = getCreateCreditNoteFormSchema();
- const EditCreditNoteFormSchema = getEditCreditNoteFormSchema();
-
return (
);
}
-
-export default compose(withCurrentOrganization())(CreditNoteForm);
+export default compose(
+ withSettings(({ creditNoteSettings }) => ({
+ creditAutoIncrement: creditNoteSettings?.autoIncrement,
+ creditNextNumber: creditNoteSettings?.nextNumber,
+ creditNumberPrefix: creditNoteSettings?.numberPrefix,
+ })),
+ withCurrentOrganization(),
+)(CreditNoteForm);
diff --git a/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormDialogs.js b/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormDialogs.js
new file mode 100644
index 000000000..bfb2d99c7
--- /dev/null
+++ b/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormDialogs.js
@@ -0,0 +1,24 @@
+import React from 'react';
+import CreditNoteNumberDialog from '../../../Dialogs/CreditNoteNumberDialog';
+import { useFormikContext } from 'formik';
+
+/**
+ * Credit note form dialogs.
+ */
+export default function CreditNoteFormDialogs() {
+ // Update the form once the credit number form submit confirm.
+ const handleCreditNumberFormConfirm = ({ incrementNumber, manually }) => {
+ setFieldValue('credit_note_number', incrementNumber || '');
+ setFieldValue('credit_note_no_manually', manually);
+ };
+
+ const { setFieldValue } = useFormikContext();
+ return (
+
+
+
+ );
+}
diff --git a/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormHeaderFields.js b/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormHeaderFields.js
index d17d28e8c..00ac441d2 100644
--- a/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormHeaderFields.js
+++ b/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormHeaderFields.js
@@ -1,5 +1,10 @@
import React from 'react';
-import { FormGroup, InputGroup, Position } from '@blueprintjs/core';
+import {
+ FormGroup,
+ InputGroup,
+ Position,
+ ControlGroup,
+} from '@blueprintjs/core';
import { DateInput } from '@blueprintjs/datetime';
import { FastField, Field, ErrorMessage } from 'formik';
import { CLASSES } from 'common/classes';
@@ -7,10 +12,14 @@ import classNames from 'classnames';
import {
ContactSelecetList,
FieldRequiredHint,
+ InputPrependButton,
Icon,
FormattedMessage as T,
} from 'components';
-import { customerNameFieldShouldUpdate } from './utils';
+import {
+ customerNameFieldShouldUpdate,
+ useObserveCreditNoSettings,
+} from './utils';
import { useCreditNoteFormContext } from './CreditNoteFormProvider';
import withSettings from 'containers/Settings/withSettings';
@@ -27,10 +36,40 @@ import {
/**
* Credit note form header fields.
*/
-function CreditNoteFormHeaderFields() {
-
+function CreditNoteFormHeaderFields({
+ // #withDialogActions
+ openDialog,
+
+ // #withSettings
+ creditAutoIncrement,
+ creditNumberPrefix,
+ creditNextNumber,
+}) {
// Credit note form context.
const { customers } = useCreditNoteFormContext();
+
+ // Handle credit number changing.
+ const handleCreditNumberChange = () => {
+ openDialog('credit-number-form');
+ };
+
+ // Handle credit no. field blur.
+ const handleCreditNoBlur = (form, field) => (event) => {
+ const newValue = event.target.value;
+
+ if (field.value !== newValue && creditAutoIncrement) {
+ openDialog('credit-number-form', {
+ initialFormValues: {
+ manualTransactionNo: newValue,
+ incrementMode: 'manual-transaction',
+ },
+ });
+ }
+ };
+
+ // Syncs credit number settings with form.
+ useObserveCreditNoSettings(creditNumberPrefix, creditNextNumber);
+
return (
{/* ----------- Customer name ----------- */}
@@ -96,11 +135,34 @@ function CreditNoteFormHeaderFields() {
label={}
labelInfo={}
inline={true}
- className={classNames('form-group--credit_note_number', CLASSES.FILL)}
+ className={classNames(
+ 'form-group--credit_note_number',
+ CLASSES.FILL,
+ )}
intent={inputIntent({ error, touched })}
helperText={}
>
-
+
+
+ ,
+ }}
+ tooltip={true}
+ tooltipProps={{
+ content: (
+
+ ),
+ position: Position.BOTTOM_LEFT,
+ }}
+ />
+
)}
@@ -121,5 +183,11 @@ function CreditNoteFormHeaderFields() {
);
}
-
-export default CreditNoteFormHeaderFields;
+export default compose(
+ withDialogActions,
+ withSettings(({ creditNoteSettings }) => ({
+ creditAutoIncrement: creditNoteSettings?.autoIncrement,
+ creditNextNumber: creditNoteSettings?.nextNumber,
+ creditNumberPrefix: creditNoteSettings?.numberPrefix,
+ })),
+)(CreditNoteFormHeaderFields);
diff --git a/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormProvider.js b/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormProvider.js
index 0c33c8868..210875d51 100644
--- a/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormProvider.js
+++ b/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormProvider.js
@@ -10,6 +10,7 @@ import {
useEditCreditNote,
useItems,
useCustomers,
+ useSettingsCreditNotes,
} from 'hooks/query';
const CreditNoteFormContext = React.createContext();
@@ -40,6 +41,9 @@ function CreditNoteFormProvider({ creditNoteId, ...props }) {
},
);
+ // Handle fetching settings.
+ useSettingsCreditNotes();
+
// Create and edit credit note mutations.
const { mutateAsync: createCreditNoteMutate } = useCreateCreditNote();
const { mutateAsync: editCreditNoteMutate } = useEditCreditNote();
diff --git a/src/containers/Sales/CreditNotes/CreditNoteForm/utils.js b/src/containers/Sales/CreditNotes/CreditNoteForm/utils.js
index d2992cf9d..807029d9f 100644
--- a/src/containers/Sales/CreditNotes/CreditNoteForm/utils.js
+++ b/src/containers/Sales/CreditNotes/CreditNoteForm/utils.js
@@ -6,8 +6,10 @@ import {
defaultFastFieldShouldUpdate,
transformToForm,
repeatValue,
+ transactionNumber,
orderingLinesIndexes,
} from 'utils';
+import { useFormikContext } from 'formik';
import {
updateItemsEntriesTotal,
@@ -115,3 +117,15 @@ export const entriesFieldShouldUpdate = (newProps, oldProps) => {
defaultFastFieldShouldUpdate(newProps, oldProps)
);
};
+
+/**
+ * Syncs invoice no. settings with form.
+ */
+ export const useObserveCreditNoSettings = (prefix, nextNumber) => {
+ const { setFieldValue } = useFormikContext();
+
+ React.useEffect(() => {
+ const creditNo = transactionNumber(prefix, nextNumber);
+ setFieldValue('credit_note_number', creditNo);
+ }, [setFieldValue, prefix, nextNumber]);
+};
diff --git a/src/containers/Sales/CreditNotes/CreditNotesLanding/CreditNotesActionsBar.js b/src/containers/Sales/CreditNotes/CreditNotesLanding/CreditNotesActionsBar.js
index be363cfc4..cb1b864c6 100644
--- a/src/containers/Sales/CreditNotes/CreditNotesLanding/CreditNotesActionsBar.js
+++ b/src/containers/Sales/CreditNotes/CreditNotesLanding/CreditNotesActionsBar.js
@@ -65,7 +65,7 @@ function CreditNotesActionsBar({
// Handle table row size change.
const handleTableRowSizeChange = (size) => {
- addSetting('creditNotes', 'tableSize', size);
+ addSetting('creditNote', 'tableSize', size);
};
return (
diff --git a/src/hooks/query/creditNote.js b/src/hooks/query/creditNote.js
index e107005fd..3095f53c7 100644
--- a/src/hooks/query/creditNote.js
+++ b/src/hooks/query/creditNote.js
@@ -21,6 +21,9 @@ const commonInvalidateQueries = (queryClient) => {
queryClient.invalidateQueries(t.ACCOUNTS);
queryClient.invalidateQueries(t.ACCOUNT);
+ // Invalidate settings.
+ queryClient.invalidateQueries([t.SETTING, t.SETTING_CREDIT_NOTES]);
+
// Invalidate financial reports.
queryClient.invalidateQueries(t.FINANCIAL_REPORT);
};
@@ -95,8 +98,6 @@ const transformInvoices = (res) => ({
* Retrieve credit notes list with pagination meta.
*/
export function useCreditNotes(query, props) {
-
-
return useRequestQuery(
[t.CREDIT_NOTES, query],
{ method: 'get', url: 'sales/credit_notes', params: query },
From 43b91503d2d8e947d3af8cc33db4877ebfce9d94 Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Wed, 1 Dec 2021 14:02:54 +0200
Subject: [PATCH 012/164] feat: add auto increment in vendor credit number.
---
.../VendorCreditNumberDialogContent.js | 102 ++++++++++++++++++
.../VendorCreditNumberDilaogProvider.js | 28 +++++
.../Dialogs/VendorCreditNumberDialog/index.js | 40 +++++++
.../CreditNoteForm/VendorCreditNoteForm.js | 32 +++++-
.../VendorCreditNoteFormDialogs.js | 27 +++++
.../VendorCreditNoteFormHeaderFields.js | 91 ++++++++++++++--
.../VendorCreditNoteFormProvider.js | 4 +
.../CreditNotes/CreditNoteForm/utils.js | 15 +++
.../VendorsCreditNoteActionsBar.js | 2 +-
src/containers/Settings/withSettings.js | 4 +-
src/hooks/query/settings.js | 21 ++++
src/hooks/query/types.js | 2 +
src/hooks/query/vendorCredit.js | 3 +
src/lang/en/index.json | 10 +-
src/store/settings/settings.reducer.js | 4 +-
15 files changed, 366 insertions(+), 19 deletions(-)
create mode 100644 src/containers/Dialogs/VendorCreditNumberDialog/VendorCreditNumberDialogContent.js
create mode 100644 src/containers/Dialogs/VendorCreditNumberDialog/VendorCreditNumberDilaogProvider.js
create mode 100644 src/containers/Dialogs/VendorCreditNumberDialog/index.js
create mode 100644 src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormDialogs.js
diff --git a/src/containers/Dialogs/VendorCreditNumberDialog/VendorCreditNumberDialogContent.js b/src/containers/Dialogs/VendorCreditNumberDialog/VendorCreditNumberDialogContent.js
new file mode 100644
index 000000000..b9dcecc61
--- /dev/null
+++ b/src/containers/Dialogs/VendorCreditNumberDialog/VendorCreditNumberDialogContent.js
@@ -0,0 +1,102 @@
+import React from 'react';
+import intl from 'react-intl-universal';
+import { useSaveSettings } from 'hooks/query';
+
+import { VendorCreditNumberDilaogProvider } from './VendorCreditNumberDilaogProvider';
+import ReferenceNumberForm from 'containers/JournalNumber/ReferenceNumberForm';
+
+import withDialogActions from 'containers/Dialog/withDialogActions';
+import withSettings from 'containers/Settings/withSettings';
+import withSettingsActions from 'containers/Settings/withSettingsActions';
+import { compose } from 'utils';
+import {
+ transformFormToSettings,
+ transformSettingsToForm,
+} from 'containers/JournalNumber/utils';
+
+/**
+ * Vendor credit number dialog
+ */
+function VendorCreditNumberDialogContent({
+ // #ownProps
+ initialValues,
+ onConfirm,
+
+ // #withSettings
+ nextNumber,
+ numberPrefix,
+ autoIncrement,
+
+ // #withDialogActions
+ closeDialog,
+}) {
+ const { mutateAsync: saveSettings } = useSaveSettings();
+ const [referenceFormValues, setReferenceFormValues] = React.useState(null);
+
+ // Handle the submit form.
+ const handleSubmitForm = (values, { setSubmitting }) => {
+ // Handle the form success.
+ const handleSuccess = () => {
+ setSubmitting(false);
+ closeDialog('vendor-credit-form');
+ onConfirm(values);
+ };
+ // Handle the form errors.
+ const handleErrors = () => {
+ setSubmitting(false);
+ };
+ if (values.incrementMode === 'manual-transaction') {
+ handleSuccess();
+ return;
+ }
+ // Transformes the form values to settings to save it.
+ const options = transformFormToSettings(values, 'vendor_credit');
+
+ // Save the settings.
+ saveSettings({ options }).then(handleSuccess).catch(handleErrors);
+ };
+
+ // Handle the dialog close.
+ const handleClose = () => {
+ closeDialog('vendor-credit-form');
+ };
+ // Handle form change.
+ const handleChange = (values) => {
+ setReferenceFormValues(values);
+ };
+
+ // Description.
+ const description =
+ referenceFormValues?.incrementMode === 'auto'
+ ? intl.get('vendor_credit.auto_increment.auto')
+ : intl.get('vendor_credit.auto_increment.manually');
+
+ return (
+
+
+
+ );
+}
+
+export default compose(
+ withDialogActions,
+ withSettingsActions,
+ withSettings(({ vendorsCreditNoteSetting }) => ({
+ autoIncrement: vendorsCreditNoteSetting?.autoIncrement,
+ nextNumber: vendorsCreditNoteSetting?.nextNumber,
+ numberPrefix: vendorsCreditNoteSetting?.numberPrefix,
+ })),
+)(VendorCreditNumberDialogContent);
diff --git a/src/containers/Dialogs/VendorCreditNumberDialog/VendorCreditNumberDilaogProvider.js b/src/containers/Dialogs/VendorCreditNumberDialog/VendorCreditNumberDilaogProvider.js
new file mode 100644
index 000000000..0d285b6fc
--- /dev/null
+++ b/src/containers/Dialogs/VendorCreditNumberDialog/VendorCreditNumberDilaogProvider.js
@@ -0,0 +1,28 @@
+import React from 'react';
+import { DialogContent } from 'components';
+import { useSettingsVendorCredits } from 'hooks/query';
+
+const VendorCreditNumberDialogContext = React.createContext();
+
+/**
+ * Vendor credit number dialog provider
+ */
+function VendorCreditNumberDilaogProvider({ query, ...props }) {
+ const { isLoading: isSettingsLoading } = useSettingsVendorCredits();
+
+ // Provider payload.
+ const provider = {
+ isSettingsLoading,
+ };
+
+ return (
+
+
+
+ );
+}
+
+const useVendorCreditNumberDialogContext = () =>
+ React.useContext(VendorCreditNumberDialogContext);
+
+export { VendorCreditNumberDilaogProvider, useVendorCreditNumberDialogContext };
diff --git a/src/containers/Dialogs/VendorCreditNumberDialog/index.js b/src/containers/Dialogs/VendorCreditNumberDialog/index.js
new file mode 100644
index 000000000..e92fdf702
--- /dev/null
+++ b/src/containers/Dialogs/VendorCreditNumberDialog/index.js
@@ -0,0 +1,40 @@
+import React from 'react';
+import { Dialog, DialogSuspense, FormattedMessage as T } from 'components';
+import withDialogRedux from 'components/DialogReduxConnect';
+import { compose, saveInvoke } from 'utils';
+
+const VendorCreditNumberDialogContent = React.lazy(() =>
+ import('./VendorCreditNumberDialogContent'),
+);
+
+/**
+ * Vendor Credit number dialog.
+ */
+function VendorCreditNumberDialog({
+ dialogName,
+ payload: { initialFormValues },
+ isOpen,
+ onConfirm,
+}) {
+ const handleConfirm = (values) => {
+ saveInvoke(onConfirm, values);
+ };
+
+ return (
+
}
+ name={dialogName}
+ autoFocus={true}
+ canEscapeKeyClose={true}
+ isOpen={isOpen}
+ >
+
+
+
+
+ );
+}
+export default compose(withDialogRedux())(VendorCreditNumberDialog);
diff --git a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteForm.js b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteForm.js
index e48b31edf..05fed2f74 100644
--- a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteForm.js
+++ b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteForm.js
@@ -15,23 +15,31 @@ import VendorCreditNoteFormHeader from './VendorCreditNoteFormHeader';
import VendorCreditNoteItemsEntriesEditor from './VendorCreditNoteItemsEntriesEditor';
import VendorCreditNoteFormFooter from './VendorCreditNoteFormFooter';
import VendorCreditNoteFloatingActions from './VendorCreditNoteFloatingActions';
+import VendorCreditNoteFormDialogs from './VendorCreditNoteFormDialogs';
+
import { useVendorCreditNoteFormContext } from './VendorCreditNoteFormProvider';
import { AppToaster } from 'components';
-
-import { compose, safeSumBy } from 'utils';
+import { compose, safeSumBy, transactionNumber } from 'utils';
import {
defaultVendorsCreditNote,
filterNonZeroEntries,
transformToEditForm,
transformFormValuesToRequest,
} from './utils';
+
+import withSettings from 'containers/Settings/withSettings';
import withCurrentOrganization from 'containers/Organization/withCurrentOrganization';
/**
* Vendor Credit note form.
*/
function VendorCreditNoteForm({
+ // #withSettings
+ vendorcreditAutoIncrement,
+ vendorcreditNumberPrefix,
+ vendorcreditNextNumber,
+
// #withCurrentOrganization
organization: { base_currency },
}) {
@@ -46,6 +54,12 @@ function VendorCreditNoteForm({
editVendorCreditMutate,
} = useVendorCreditNoteFormContext();
+ // Credit number.
+ const vendorCreditNumber = transactionNumber(
+ vendorcreditNumberPrefix,
+ vendorcreditNextNumber,
+ );
+
// Initial values.
const initialValues = React.useMemo(
() => ({
@@ -55,6 +69,9 @@ function VendorCreditNoteForm({
}
: {
...defaultVendorsCreditNote,
+ ...(vendorcreditAutoIncrement && {
+ vendor_credit_number: vendorCreditNumber,
+ }),
}),
}),
[vendorCredit, base_currency],
@@ -134,12 +151,19 @@ function VendorCreditNoteForm({
-
+
);
}
-export default compose(withCurrentOrganization())(VendorCreditNoteForm);
+export default compose(
+ withSettings(({ vendorsCreditNoteSetting }) => ({
+ vendorcreditAutoIncrement: vendorsCreditNoteSetting?.autoIncrement,
+ vendorcreditNextNumber: vendorsCreditNoteSetting?.nextNumber,
+ vendorcreditNumberPrefix: vendorsCreditNoteSetting?.numberPrefix,
+ })),
+ withCurrentOrganization(),
+)(VendorCreditNoteForm);
diff --git a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormDialogs.js b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormDialogs.js
new file mode 100644
index 000000000..5d5d69df2
--- /dev/null
+++ b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormDialogs.js
@@ -0,0 +1,27 @@
+import React from 'react';
+import VendorCreditNumberDialog from '../../../Dialogs/VendorCreditNumberDialog';
+import { useFormikContext } from 'formik';
+
+/**
+ * Vendor credit form dialog.
+ */
+export default function VendorCreditNoteFormDialogs() {
+ // Update the form once the vendor credit number form submit confirm.
+ const handleVendorCreditNumberFormConfirm = ({
+ incrementNumber,
+ manually,
+ }) => {
+ setFieldValue('vendor_credit_number', incrementNumber || '');
+ setFieldValue('vendor_credit_no_manually', manually);
+ };
+ const { setFieldValue } = useFormikContext();
+
+ return (
+
+
+
+ );
+}
diff --git a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormHeaderFields.js b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormHeaderFields.js
index 120d59b5d..e93db9c63 100644
--- a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormHeaderFields.js
+++ b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormHeaderFields.js
@@ -1,5 +1,10 @@
import React from 'react';
-import { FormGroup, InputGroup, Position } from '@blueprintjs/core';
+import {
+ FormGroup,
+ InputGroup,
+ Position,
+ ControlGroup,
+} from '@blueprintjs/core';
import { DateInput } from '@blueprintjs/datetime';
import { FastField, Field, ErrorMessage } from 'formik';
import { CLASSES } from 'common/classes';
@@ -7,10 +12,14 @@ import classNames from 'classnames';
import {
ContactSelecetList,
FieldRequiredHint,
+ InputPrependButton,
Icon,
FormattedMessage as T,
} from 'components';
-import { vendorsFieldShouldUpdate } from './utils';
+import {
+ vendorsFieldShouldUpdate,
+ useObserveVendorCreditNoSettings,
+} from './utils';
import { useVendorCreditNoteFormContext } from './VendorCreditNoteFormProvider';
@@ -22,13 +31,48 @@ import {
handleDateChange,
} from 'utils';
+import withSettings from 'containers/Settings/withSettings';
+import withDialogActions from 'containers/Dialog/withDialogActions';
+
/**
* Vendor Credit note form header fields.
*/
+function VendorCreditNoteFormHeaderFields({
+ // #withDialogActions
+ openDialog,
-function VendorCreditNoteFormHeaderFields() {
- // Credit note form context.
+ // #withSettings
+ vendorcreditAutoIncrement,
+ vendorcreditNumberPrefix,
+ vendorcreditNextNumber,
+}) {
+ // Vendor Credit form context.
const { vendors } = useVendorCreditNoteFormContext();
+
+ // Handle vendor credit number changing.
+ const handleVendorCreditNumberChange = () => {
+ openDialog('vendor-credit-form');
+ };
+
+ // Handle vendor credit no. field blur.
+ const handleVendorCreditNoBlur = (form, field) => (event) => {
+ const newValue = event.target.value;
+
+ if (field.value !== newValue && vendorcreditAutoIncrement) {
+ openDialog('vendor-credit-form', {
+ initialFormValues: {
+ manualTransactionNo: newValue,
+ incrementMode: 'manual-transaction',
+ },
+ });
+ }
+ };
+ // Syncs vendor credit number settings with form.
+ useObserveVendorCreditNoSettings(
+ vendorcreditNumberPrefix,
+ vendorcreditNextNumber,
+ );
+
return (
{/* ----------- Vendor name ----------- */}
@@ -94,7 +138,7 @@ function VendorCreditNoteFormHeaderFields() {
{/* ----------- Vendor Credit No # ----------- */}
- {({ field, meta: { error, touched } }) => (
+ {({ form, field, meta: { error, touched } }) => (
}
inline={true}
@@ -102,12 +146,34 @@ function VendorCreditNoteFormHeaderFields() {
intent={inputIntent({ error, touched })}
helperText={}
>
-
+
+
+ ,
+ }}
+ tooltip={true}
+ tooltipProps={{
+ content: (
+
+ ),
+ position: Position.BOTTOM_LEFT,
+ }}
+ />
+
)}
{/* ----------- Reference ----------- */}
- {/*
+
{({ field, meta: { error, touched } }) => (
}
@@ -119,9 +185,16 @@ function VendorCreditNoteFormHeaderFields() {
)}
- */}
+
);
}
-export default VendorCreditNoteFormHeaderFields;
+export default compose(
+ withDialogActions,
+ withSettings(({ vendorsCreditNoteSetting }) => ({
+ vendorcreditAutoIncrement: vendorsCreditNoteSetting?.autoIncrement,
+ vendorcreditNextNumber: vendorsCreditNoteSetting?.nextNumber,
+ vendorcreditNumberPrefix: vendorsCreditNoteSetting?.numberPrefix,
+ })),
+)(VendorCreditNoteFormHeaderFields);
diff --git a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormProvider.js b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormProvider.js
index b3e74703b..184c68772 100644
--- a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormProvider.js
+++ b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormProvider.js
@@ -7,6 +7,7 @@ import {
useVendorCredit,
useItems,
useVendors,
+ useSettingsVendorCredits,
} from 'hooks/query';
const VendorCreditNoteFormContext = React.createContext();
@@ -23,6 +24,9 @@ function VendorCreditNoteFormProvider({ vendorCreditId, ...props }) {
page_size: 10000,
});
+ // Handle fetching settings.
+ useSettingsVendorCredits();
+
// Handle fetch vendors data table or list
const {
data: { vendors },
diff --git a/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.js b/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.js
index 114dc1580..4e2232e70 100644
--- a/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.js
+++ b/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.js
@@ -6,12 +6,14 @@ import {
defaultFastFieldShouldUpdate,
transformToForm,
repeatValue,
+ transactionNumber,
orderingLinesIndexes,
} from 'utils';
import {
updateItemsEntriesTotal,
ensureEntriesHaveEmptyLine,
} from 'containers/Entries/utils';
+import { useFormikContext } from 'formik';
export const MIN_LINES_NUMBER = 4;
@@ -30,6 +32,7 @@ export const defaultCreditNoteEntry = {
export const defaultVendorsCreditNote = {
vendor_id: '',
vendor_credit_number: '',
+ vendor_credit_no_manually: false,
vendor_credit_date: moment(new Date()).format('YYYY-MM-DD'),
// reference_no: '',
note: '',
@@ -112,3 +115,15 @@ export const entriesFieldShouldUpdate = (newProps, oldProps) => {
defaultFastFieldShouldUpdate(newProps, oldProps)
);
};
+
+/**
+ * Syncs invoice no. settings with form.
+ */
+ export const useObserveVendorCreditNoSettings = (prefix, nextNumber) => {
+ const { setFieldValue } = useFormikContext();
+
+ React.useEffect(() => {
+ const creditNo = transactionNumber(prefix, nextNumber);
+ setFieldValue('vendor_credit_number', creditNo);
+ }, [setFieldValue, prefix, nextNumber]);
+};
diff --git a/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteActionsBar.js b/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteActionsBar.js
index e52077150..681b5da68 100644
--- a/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteActionsBar.js
+++ b/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteActionsBar.js
@@ -66,7 +66,7 @@ function VendorsCreditNoteActionsBar({
// Handle table row size change.
const handleTableRowSizeChange = (size) => {
- addSetting('vendorCredits', 'tableSize', size);
+ addSetting('vendorCredit', 'tableSize', size);
};
return (
diff --git a/src/containers/Settings/withSettings.js b/src/containers/Settings/withSettings.js
index 6acdcb53b..867e56dc7 100644
--- a/src/containers/Settings/withSettings.js
+++ b/src/containers/Settings/withSettings.js
@@ -19,8 +19,8 @@ export default (mapState) => {
cashflowSettings: state.settings.data.cashflowAccounts,
cashflowTransactionsSettings: state.settings.data.cashflowTransactions,
cashflowSetting: state.settings.data.cashflow,
- creditNoteSettings: state.settings.data.creditNotes,
- vendorsCreditNoteSetting: state.settings.data.vendorCredits,
+ creditNoteSettings: state.settings.data.creditNote,
+ vendorsCreditNoteSetting: state.settings.data.vendorCredit,
};
return mapState ? mapState(mapped, state, props) : mapped;
};
diff --git a/src/hooks/query/settings.js b/src/hooks/query/settings.js
index b7c70b335..4575307aa 100644
--- a/src/hooks/query/settings.js
+++ b/src/hooks/query/settings.js
@@ -123,6 +123,27 @@ export function useSettingCashFlow(props) {
);
}
+/**
+ * Retrieve credit notes settings.
+ */
+export function useSettingsCreditNotes(props) {
+ return useSettingsQuery(
+ [t.SETTING, t.SETTING_CREDIT_NOTES],
+ { group: 'credit_note' },
+ props,
+ );
+}
+/**
+ * Retrieve vendor credit settings.
+ */
+export function useSettingsVendorCredits(props) {
+ return useSettingsQuery(
+ [t.SETTING, t.SETTING_VENDOR_CREDITS],
+ { group: 'vendor_credit' },
+ props,
+ );
+}
+
/**
* Retrieve SMS Notifications settings.
*/
diff --git a/src/hooks/query/types.js b/src/hooks/query/types.js
index a32093703..374c6540c 100644
--- a/src/hooks/query/types.js
+++ b/src/hooks/query/types.js
@@ -130,6 +130,8 @@ const SETTING = {
SETTING_SMS_NOTIFICATION: 'SETTING_SMS_NOTIFICATION',
SETTING_SMS_NOTIFICATIONS: 'SETTING_SMS_NOTIFICATIONS',
SETTING_EDIT_SMS_NOTIFICATION: 'SETTING_EDIT_SMS_NOTIFICATION',
+ SETTING_CREDIT_NOTES: 'SETTING_CREDIT_NOTES',
+ SETTING_VENDOR_CREDITS: 'SETTING_VENDOR_CREDITS',
};
const ORGANIZATIONS = {
diff --git a/src/hooks/query/vendorCredit.js b/src/hooks/query/vendorCredit.js
index f4867aceb..272d30ab7 100644
--- a/src/hooks/query/vendorCredit.js
+++ b/src/hooks/query/vendorCredit.js
@@ -21,6 +21,9 @@ const commonInvalidateQueries = (queryClient) => {
queryClient.invalidateQueries(t.ACCOUNTS);
queryClient.invalidateQueries(t.ACCOUNT);
+ // Invalidate settings.
+ queryClient.invalidateQueries([t.SETTING, t.SETTING_VENDOR_CREDITS]);
+
// Invalidate financial reports.
queryClient.invalidateQueries(t.FINANCIAL_REPORT);
};
diff --git a/src/lang/en/index.json b/src/lang/en/index.json
index 17677d624..6c2ef8dcd 100644
--- a/src/lang/en/index.json
+++ b/src/lang/en/index.json
@@ -1516,5 +1516,13 @@
"vendor_credits.success_message": "The vendor credit has been created successfully",
"vendor_credits.edit_success_message": "The vendor credit has been edited successfully.",
"vendor_credits.alert.success_message": "The given vendor credit has been deleted successfully.",
- "vendor_credits.note.once_delete_this_vendor_credit_note": "Once you delete this vendor credit , you won't be able to restore it later. Are you sure you want to delete this vendor credit ?"
+ "vendor_credits.note.once_delete_this_vendor_credit_note": "Once you delete this vendor credit , you won't be able to restore it later. Are you sure you want to delete this vendor credit ?",
+ "credit_note_number_settings": "Credit Note Number Settings",
+ "credit_note.auto_increment.auto": "Your credit note numbers are set on auto-increment mode. Are you sure changing this setting?",
+ "credit_note.auto_increment.manually": "Your credit note numbers are set on manual mode. Are you sure chaning this settings?",
+ "setting_your_auto_generated_credit_note_number": "Setting your auto-generated credit note number",
+ "vendor_credit_number_settings": "Vendor Credit Number Settings",
+ "vendor_credit.auto_increment.auto": "Your vendor credit numbers are set on auto-increment mode. Are you sure changing this setting?",
+ "vendor_credit.auto_increment.manually": "Your vendor credit numbers are set on manual mode. Are you sure chaning this settings?",
+ "setting_your_auto_generated_vendor_credit_number": "Setting your auto-generated vendor credit number"
}
\ No newline at end of file
diff --git a/src/store/settings/settings.reducer.js b/src/store/settings/settings.reducer.js
index 2498a04bd..853ab0589 100644
--- a/src/store/settings/settings.reducer.js
+++ b/src/store/settings/settings.reducer.js
@@ -52,10 +52,10 @@ const initialState = {
cashflowTransactions: {
tableSize: 'medium',
},
- creditNotes: {
+ creditNote: {
tableSize: 'medium',
},
- vendorCredits: {
+ vendorCredit: {
tableSize: 'medium',
},
},
From 31e0bbc1876dcc98cf9a735e95cff02c5781eb97 Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Wed, 1 Dec 2021 16:59:37 +0200
Subject: [PATCH 013/164] feat: add View detail.
---
src/common/drawers.js | 2 +
src/components/DrawersContainer.js | 4 +
.../CreditNotes/CreditNoteDeleteAlert.js | 1 +
.../VendorCreditDeleteAlert.js | 1 +
.../CreditNoteDetail.js | 26 +++++++
.../CreditNoteDetailActionsBar.js | 76 +++++++++++++++++++
.../CreditNoteDetailDrawerContent.js | 21 +++++
.../CreditNoteDetailDrawerFooter.js | 32 ++++++++
.../CreditNoteDetailDrawerProvider.js | 39 ++++++++++
.../CreditNoteDetailHeader.js | 50 ++++++++++++
.../CreditNoteDetailPanel.js | 24 ++++++
.../CreditNoteDetailTable.js | 31 ++++++++
.../Drawers/CreditNoteDetailDrawer/index.js | 33 ++++++++
.../Drawers/CreditNoteDetailDrawer/utils.js | 47 ++++++++++++
.../VendorCreditDetail.js | 26 +++++++
.../VendorCreditDetailActionsBar.js | 76 +++++++++++++++++++
.../VendorCreditDetailDrawerContent.js | 18 +++++
.../VendorCreditDetailDrawerFooter.js | 34 +++++++++
.../VendorCreditDetailDrawerProvider.js | 37 +++++++++
.../VendorCreditDetailHeader.js | 49 ++++++++++++
.../VendorCreditDetailPanel.js | 24 ++++++
.../VendorCreditDetailTable.js | 31 ++++++++
.../Drawers/VendorCreditDetailDrawer/index.js | 34 +++++++++
.../Drawers/VendorCreditDetailDrawer/utils.js | 51 +++++++++++++
.../VendorsCreditNoteDataTable.js | 23 +++++-
.../CreditNotesDataTable.js | 20 ++++-
.../CreditNotesLanding/CreditNotesList.js | 3 +-
src/lang/en/index.json | 14 +++-
.../Drawers/CreditNoteDetails.module.scss | 68 +++++++++++++++++
.../Drawers/VendorCreditDetail.module.scss | 68 +++++++++++++++++
30 files changed, 956 insertions(+), 7 deletions(-)
create mode 100644 src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetail.js
create mode 100644 src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailActionsBar.js
create mode 100644 src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailDrawerContent.js
create mode 100644 src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailDrawerFooter.js
create mode 100644 src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailDrawerProvider.js
create mode 100644 src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailHeader.js
create mode 100644 src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailPanel.js
create mode 100644 src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailTable.js
create mode 100644 src/containers/Drawers/CreditNoteDetailDrawer/index.js
create mode 100644 src/containers/Drawers/CreditNoteDetailDrawer/utils.js
create mode 100644 src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetail.js
create mode 100644 src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailActionsBar.js
create mode 100644 src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailDrawerContent.js
create mode 100644 src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailDrawerFooter.js
create mode 100644 src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailDrawerProvider.js
create mode 100644 src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailHeader.js
create mode 100644 src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailPanel.js
create mode 100644 src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailTable.js
create mode 100644 src/containers/Drawers/VendorCreditDetailDrawer/index.js
create mode 100644 src/containers/Drawers/VendorCreditDetailDrawer/utils.js
create mode 100644 src/style/components/Drawers/CreditNoteDetails.module.scss
create mode 100644 src/style/components/Drawers/VendorCreditDetail.module.scss
diff --git a/src/common/drawers.js b/src/common/drawers.js
index 3a1b21032..b42c44b9f 100644
--- a/src/common/drawers.js
+++ b/src/common/drawers.js
@@ -14,4 +14,6 @@ export const DRAWERS = {
QUICK_WRITE_VENDOR: 'quick-write-vendor',
QUICK_CREATE_CUSTOMER: 'quick-create-customer',
QUICK_CREATE_ITEM: 'quick-create-item',
+ CREDIT_NOTE_DETAIL_DRAWER: 'credit-note-detail-drawer',
+ VENDOR_CREDIT_DETAIL_DRAWER: 'vendor-credit-detail-drawer',
};
diff --git a/src/components/DrawersContainer.js b/src/components/DrawersContainer.js
index 135dcb8a3..b7c0e8fe6 100644
--- a/src/components/DrawersContainer.js
+++ b/src/components/DrawersContainer.js
@@ -17,6 +17,8 @@ import CashflowTransactionDetailDrawer from '../containers/Drawers/CashflowTrans
import QuickCreateCustomerDrawer from '../containers/Drawers/QuickCreateCustomerDrawer';
import QuickCreateItemDrawer from '../containers/Drawers/QuickCreateItemDrawer';
import QuickWriteVendorDrawer from '../containers/Drawers/QuickWriteVendorDrawer';
+import CreditNoteDetailDrawer from '../containers/Drawers/CreditNoteDetailDrawer';
+import VendorCreditDetailDrawer from '../containers/Drawers/VendorCreditDetailDrawer';
import { DRAWERS } from 'common/drawers';
@@ -47,6 +49,8 @@ export default function DrawersContainer() {
+
+
);
}
diff --git a/src/containers/Alerts/CreditNotes/CreditNoteDeleteAlert.js b/src/containers/Alerts/CreditNotes/CreditNoteDeleteAlert.js
index f7cc492c9..be664372a 100644
--- a/src/containers/Alerts/CreditNotes/CreditNoteDeleteAlert.js
+++ b/src/containers/Alerts/CreditNotes/CreditNoteDeleteAlert.js
@@ -41,6 +41,7 @@ function CreditNoteDeleteAlert({
message: intl.get('credit_note.alert.success_message'),
intent: Intent.SUCCESS,
});
+ closeDrawer('credit-note-detail-drawer');
})
.catch(
({
diff --git a/src/containers/Alerts/VendorCeditNotes/VendorCreditDeleteAlert.js b/src/containers/Alerts/VendorCeditNotes/VendorCreditDeleteAlert.js
index 1067d486e..160905c1d 100644
--- a/src/containers/Alerts/VendorCeditNotes/VendorCreditDeleteAlert.js
+++ b/src/containers/Alerts/VendorCeditNotes/VendorCreditDeleteAlert.js
@@ -41,6 +41,7 @@ function VendorCreditDeleteAlert({
message: intl.get('vendor_credits.alert.success_message'),
intent: Intent.SUCCESS,
});
+ closeDrawer('vendor-credit-detail-drawer');
})
.catch(
({
diff --git a/src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetail.js b/src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetail.js
new file mode 100644
index 000000000..74f7e760b
--- /dev/null
+++ b/src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetail.js
@@ -0,0 +1,26 @@
+import React from 'react';
+import { Tab } from '@blueprintjs/core';
+import intl from 'react-intl-universal';
+import { DrawerMainTabs } from 'components';
+
+import CreditNoteDetailPanel from './CreditNoteDetailPanel';
+import clsx from 'classnames';
+
+import CreditNoteDetailCls from '../../../style/components/Drawers/CreditNoteDetails.module.scss';
+
+/**
+ * Credit Note view detail.
+ */
+export default function CreditNoteDetail() {
+ return (
+