diff --git a/src/common/resourcesTypes.js b/src/common/resourcesTypes.js
index e6de2706d..91e981aa8 100644
--- a/src/common/resourcesTypes.js
+++ b/src/common/resourcesTypes.js
@@ -12,5 +12,5 @@ export const RESOURCES_TYPES = {
MANUAL_JOURNAL: 'manual_journal',
ACCOUNT: 'account',
CREDIT_NOTE: 'credit_note',
- VENDOR_CREDIT_NOTE:'vendor_credit_note'
+ VENDOR_CREDIT:'vendor_credit'
};
diff --git a/src/config/sidebarMenu.js b/src/config/sidebarMenu.js
index 928d37eb0..5e1ca1b60 100644
--- a/src/config/sidebarMenu.js
+++ b/src/config/sidebarMenu.js
@@ -259,8 +259,8 @@ export default [
},
},
{
- text: ,
- href: '/vendors-credit-notes',
+ text: ,
+ href: '/vendor-credits',
},
{
text: ,
@@ -306,6 +306,14 @@ export default [
ability: BillAction.Create,
},
},
+ {
+ text: ,
+ href: '/vendor-credits/new',
+ permission: {
+ subject: AbilitySubject.Bill,
+ ability: BillAction.Create,
+ },
+ },
{
text: ,
href: '/payment-mades/new',
diff --git a/src/containers/Alerts/VendorCeditNotes/VendorCreditNoteDeleteAlert.js b/src/containers/Alerts/VendorCeditNotes/VendorCreditDeleteAlert.js
similarity index 55%
rename from src/containers/Alerts/VendorCeditNotes/VendorCreditNoteDeleteAlert.js
rename to src/containers/Alerts/VendorCeditNotes/VendorCreditDeleteAlert.js
index 25e935099..1067d486e 100644
--- a/src/containers/Alerts/VendorCeditNotes/VendorCreditNoteDeleteAlert.js
+++ b/src/containers/Alerts/VendorCeditNotes/VendorCreditDeleteAlert.js
@@ -8,17 +8,18 @@ import withAlertStoreConnect from 'containers/Alert/withAlertStoreConnect';
import withAlertActions from 'containers/Alert/withAlertActions';
import withDrawerActions from 'containers/Drawer/withDrawerActions';
+import { useDeleteVendorCredit } from 'hooks/query';
import { compose } from 'utils';
/**
- * Vendor Credit note delete alert.
+ * Vendor Credit delete alert.
*/
-function VendorCreditNoteDeleteAlert({
+function VendorCreditDeleteAlert({
name,
// #withAlertStoreConnect
isOpen,
- payload: { vendorCrditNoteId },
+ payload: { vendorCreditId },
// #withAlertActions
closeAlert,
@@ -26,11 +27,32 @@ function VendorCreditNoteDeleteAlert({
// #withDrawerActions
closeDrawer,
}) {
+ const { isLoading, mutateAsync: deleteVendorCreditMutate } =
+ useDeleteVendorCredit();
+
// handle cancel delete credit note alert.
const handleCancelDeleteAlert = () => {
closeAlert(name);
};
- const handleConfirmCreditNoteDelete = () => {};
+ const handleConfirmCreditDelete = () => {
+ deleteVendorCreditMutate(vendorCreditId)
+ .then(() => {
+ AppToaster.show({
+ message: intl.get('vendor_credits.alert.success_message'),
+ intent: Intent.SUCCESS,
+ });
+ })
+ .catch(
+ ({
+ response: {
+ data: { errors },
+ },
+ }) => {},
+ )
+ .finally(() => {
+ closeAlert(name);
+ });
+ };
return (
-
+
);
@@ -54,4 +78,4 @@ export default compose(
withAlertStoreConnect(),
withAlertActions,
withDrawerActions,
-)(VendorCreditNoteDeleteAlert);
+)(VendorCreditDeleteAlert);
diff --git a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFloatingActions.js b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFloatingActions.js
index a8f0121f4..3affd700e 100644
--- a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFloatingActions.js
+++ b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFloatingActions.js
@@ -26,32 +26,74 @@ export default function VendorCreditNoteFloatingActions() {
const { resetForm, submitForm, isSubmitting } = useFormikContext();
// Credit note form context.
- const { setSubmitPayload } = useVendorCreditNoteFormContext();
+ const { setSubmitPayload, isNewMode } = useVendorCreditNoteFormContext();
+
+ // 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 });
+ };
+
const handleClearBtnClick = (event) => {
resetForm();
};
return (
- {/* ----------- Save And Open ----------- */}
+ {/* ----------- Save ----------- */}
}
+ text={}
/>
+
- } />
- } />
+ }
+ onClick={handleSubmitAndNewBtnClick}
+ />
+ }
+ onClick={handleSubmitSaveContinueEditingBtnClick}
+ />
}
minimal={true}
@@ -70,13 +112,20 @@ export default function VendorCreditNoteFloatingActions() {
}
/>
- } />
- } />
+ }
+ onClick={handleSubmitDraftAndNewBtnClick}
+ />
+ }
+ onClick={handleSubmitDraftContinueEditingBtnClick}
+ />
}
minimal={true}
@@ -89,14 +138,12 @@ export default function VendorCreditNoteFloatingActions() {
/>
- {/* ----------- Save and New ----------- */}
-
{/* ----------- Clear & Reset----------- */}
:
}
+ text={isNewMode ?
:
}
/>
{/* ----------- Cancel ----------- */}
);
}
diff --git a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormPage.js b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormPage.js
index 62c966293..31a4c3e3e 100644
--- a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormPage.js
+++ b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormPage.js
@@ -14,7 +14,7 @@ export default function VendorCreditNoteFormPage() {
const idAsInteger = parseInt(id, 10);
return (
-
+
);
diff --git a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormProvider.js b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormProvider.js
index 0cb45a195..b3e74703b 100644
--- a/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormProvider.js
+++ b/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormProvider.js
@@ -1,25 +1,20 @@
import React from 'react';
-import { useLocation } from 'react-router-dom';
-import { isEmpty, pick } from 'lodash';
import DashboardInsider from 'components/Dashboard/DashboardInsider';
-import { transformToEditForm } from './utils';
-import { useBill, useItems, useVendors } from 'hooks/query';
+import {
+ useCreateVendorCredit,
+ useEditVendorCredit,
+ useVendorCredit,
+ useItems,
+ useVendors,
+} from 'hooks/query';
const VendorCreditNoteFormContext = React.createContext();
/**
* Vendor Credit note data provider.
*/
-function VendorCreditNoteFormProvider({ creditNoteId, ...props }) {
- const { state } = useLocation();
- const billId = state?.action;
-
- // Fetches the bill by the given id.
- const { data: bill, isLoading: isBillLoading } = useBill(billId, {
- enabled: !!billId,
- });
-
+function VendorCreditNoteFormProvider({ vendorCreditId, ...props }) {
// Handle fetching the items table based on the given query.
const {
data: { items },
@@ -34,28 +29,41 @@ function VendorCreditNoteFormProvider({ creditNoteId, ...props }) {
isLoading: isVendorsLoading,
} = useVendors({ page_size: 10000 });
+ // Handle fetch vendor credit details.
+ const { data: vendorCredit, isLoading: isVendorCreditLoading } =
+ useVendorCredit(vendorCreditId, {
+ enabled: !!vendorCreditId,
+ });
+
// Form submit payload.
const [submitPayload, setSubmitPayload] = React.useState();
+ // Create and edit vendor credit mutations.
+ const { mutateAsync: createVendorCreditMutate } = useCreateVendorCredit();
+ const { mutateAsync: editVendorCreditMutate } = useEditVendorCredit();
+
// Determines whether the form in new mode.
- const isNewMode = !creditNoteId;
+ const isNewMode = !vendorCreditId;
// Provider payload.
const provider = {
- bill,
items,
vendors,
- billId,
+ vendorCredit,
submitPayload,
-
- setSubmitPayload,
isNewMode,
+
+ isVendorCreditLoading,
+
+ createVendorCreditMutate,
+ editVendorCreditMutate,
+ setSubmitPayload,
};
return (
@@ -65,4 +73,4 @@ function VendorCreditNoteFormProvider({ creditNoteId, ...props }) {
const useVendorCreditNoteFormContext = () =>
React.useContext(VendorCreditNoteFormContext);
-export { VendorCreditNoteFormProvider , useVendorCreditNoteFormContext };
+export { VendorCreditNoteFormProvider, useVendorCreditNoteFormContext };
diff --git a/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.js b/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.js
index c5d611c0b..114dc1580 100644
--- a/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.js
+++ b/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.js
@@ -1,9 +1,7 @@
import React from 'react';
import * as R from 'ramda';
import moment from 'moment';
-import intl from 'react-intl-universal';
-import { Intent } from '@blueprintjs/core';
-import { AppToaster } from 'components';
+
import {
defaultFastFieldShouldUpdate,
transformToForm,
@@ -14,7 +12,6 @@ import {
updateItemsEntriesTotal,
ensureEntriesHaveEmptyLine,
} from 'containers/Entries/utils';
-import { isLandedCostDisabled } from '../../../Entries/utils';
export const MIN_LINES_NUMBER = 4;
@@ -32,11 +29,10 @@ export const defaultCreditNoteEntry = {
// Default Vendors Credit Note.
export const defaultVendorsCreditNote = {
vendor_id: '',
- bill_number: '',
- bill_date: moment(new Date()).format('YYYY-MM-DD'),
- reference_no: '',
+ vendor_credit_number: '',
+ vendor_credit_date: moment(new Date()).format('YYYY-MM-DD'),
+ // reference_no: '',
note: '',
- open: '',
entries: [...repeatValue(defaultCreditNoteEntry, MIN_LINES_NUMBER)],
};
@@ -64,16 +60,18 @@ export const transformToEditForm = (creditNote) => {
};
};
-
/**
* Transformes credit note entries to submit request.
*/
- export const transformEntriesToSubmit = (entries) => {
+export const transformEntriesToSubmit = (entries) => {
const transformCreditNoteEntry = R.compose(
R.omit(['amount']),
R.curry(transformToForm)(R.__, defaultCreditNoteEntry),
);
- return R.compose(orderingLinesIndexes, R.map(transformCreditNoteEntry))(entries);
+ return R.compose(
+ orderingLinesIndexes,
+ R.map(transformCreditNoteEntry),
+ )(entries);
};
/**
@@ -86,21 +84,19 @@ export const filterNonZeroEntries = (entries) => {
/**
* Transformes form values to request body.
*/
- export const transformFormValuesToRequest = (values) => {
+export const transformFormValuesToRequest = (values) => {
const entries = filterNonZeroEntries(values.entries);
return {
...values,
entries: transformEntriesToSubmit(entries),
- open: false,
};
};
-
/**
* Detarmines vendors fast field should update
*/
- export const vendorsFieldShouldUpdate = (newProps, oldProps) => {
+export const vendorsFieldShouldUpdate = (newProps, oldProps) => {
return (
newProps.vendors !== oldProps.vendors ||
defaultFastFieldShouldUpdate(newProps, oldProps)
@@ -110,9 +106,9 @@ export const filterNonZeroEntries = (entries) => {
/**
* Detarmines entries fast field should update.
*/
- export const entriesFieldShouldUpdate = (newProps, oldProps) => {
+export const entriesFieldShouldUpdate = (newProps, oldProps) => {
return (
newProps.items !== oldProps.items ||
defaultFastFieldShouldUpdate(newProps, oldProps)
);
-};
\ No newline at end of file
+};
diff --git a/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteActionsBar.js b/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteActionsBar.js
index 12a79c20f..e52077150 100644
--- a/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteActionsBar.js
+++ b/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteActionsBar.js
@@ -18,6 +18,8 @@ import {
} from 'components';
import DashboardActionsBar from '../../../../components/Dashboard/DashboardActionsBar';
+import { useVendorsCreditNoteListContext } from './VendorsCreditNoteListProvider';
+
import withVendorsCreditNotes from './withVendorsCreditNotes';
import withVendorsCreditNotesActions from './withVendorsCreditNotesActions';
import withSettings from '../../../Settings/withSettings';
@@ -30,6 +32,7 @@ import { compose } from 'utils';
*/
function VendorsCreditNoteActionsBar({
// #withVendorsCreditNotes
+ vendorCreditFilterRoles,
// #withVendorsCreditNotesActions
setVendorsCreditNoteTableState,
@@ -42,9 +45,14 @@ function VendorsCreditNoteActionsBar({
}) {
const history = useHistory();
- // credit note list context.
+ // vendor credit list context.
+ const { VendorCreditsViews, fields, refresh } =
+ useVendorsCreditNoteListContext();
- // credit note refresh action.
+ // Handle click a new Vendor.
+ const handleClickNewVendorCredit = () => {
+ history.push('/vendor-credits/new');
+ };
// Handle view tab change.
const handleTabChange = (view) => {
@@ -52,11 +60,13 @@ function VendorsCreditNoteActionsBar({
};
// Handle click a refresh credit note.
- const handleRefreshBtnClick = () => {};
+ const handleRefreshBtnClick = () => {
+ refresh();
+ };
// Handle table row size change.
const handleTableRowSizeChange = (size) => {
- addSetting('vendorsCreditNote', 'tableSize', size);
+ addSetting('vendorCredits', 'tableSize', size);
};
return (
@@ -64,11 +74,33 @@ function VendorsCreditNoteActionsBar({
}
onChange={handleTabChange}
/>
+ }
+ text={}
+ onClick={handleClickNewVendorCredit}
+ />
+ {
+ setVendorsCreditNoteTableState({ filterRoles: filterConditions });
+ },
+ }}
+ >
+
+
}
@@ -106,7 +138,7 @@ export default compose(
withVendorsCreditNotesActions,
withSettingsActions,
withVendorsCreditNotes(({ vendorsCreditNoteTableState }) => ({
- creditNoteFilterRoles: vendorsCreditNoteTableState.filterRoles,
+ vendorCreditFilterRoles: vendorsCreditNoteTableState.filterRoles,
})),
withSettings(({ vendorsCreditNoteSetting }) => ({
creditNoteTableSize: vendorsCreditNoteSetting?.tableSize,
diff --git a/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteDataTable.js b/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteDataTable.js
index 9beed42b4..7cf8d381e 100644
--- a/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteDataTable.js
+++ b/src/containers/Purchases/CreditNotes/CreditNotesLanding/VendorsCreditNoteDataTable.js
@@ -14,7 +14,7 @@ import withVendorsCreditNotesActions from './withVendorsCreditNotesActions';
import withSettings from '../../../Settings/withSettings';
import withAlertsActions from 'containers/Alert/withAlertActions';
-import { useVendorsCreditNoteTableColumns } from './components';
+import { useVendorsCreditNoteTableColumns, ActionsMenu } from './components';
import { useVendorsCreditNoteListContext } from './VendorsCreditNoteListProvider';
import { compose } from 'utils';
@@ -34,7 +34,14 @@ function VendorsCreditNoteDataTable({
}) {
const history = useHistory();
- // Credit note list context.
+ // Vendor credits context.
+ const {
+ vendorCredits,
+ pagination,
+ isEmptyStatus,
+ isVendorCreditsFetching,
+ isVendorCreditsLoading,
+ } = useVendorsCreditNoteListContext();
// Credit note table columns.
const columns = useVendorsCreditNoteTableColumns();
@@ -56,40 +63,39 @@ function VendorsCreditNoteDataTable({
);
// Display create note empty status instead of the table.
- // if (isEmptyStatus) {
- // return ;
- // }
+ if (isEmptyStatus) {
+ return ;
+ }
// Handle delete credit note.
const handleDeleteVendorCreditNote = ({ id }) => {
- openAlert('vendor-credit-note-delete', { creditNoteId: id });
+ openAlert('vendor-credit-delete', { vendorCreditId: id });
};
// Handle edit credit note.
- const hanldeEditVendorCreditNote = (creditNote) => {
- history.push(`/vendor-credit-notes/${creditNote.id}/edit`);
+ const hanldeEditVendorCreditNote = (vendorCredit) => {
+ history.push(`/vendor-credits/${vendorCredit.id}/edit`);
};
return (
}
@@ -15,8 +16,12 @@ export default function VendorsCreditNoteEmptyStatus() {
}
action={
<>
-