diff --git a/src/containers/Dialogs/ReconcileCreditNoteDialog/ReconcileCreditNoteFormFields.js b/src/containers/Dialogs/ReconcileCreditNoteDialog/ReconcileCreditNoteFormFields.js index a035fd95d..af46248e0 100644 --- a/src/containers/Dialogs/ReconcileCreditNoteDialog/ReconcileCreditNoteFormFields.js +++ b/src/containers/Dialogs/ReconcileCreditNoteDialog/ReconcileCreditNoteFormFields.js @@ -2,7 +2,7 @@ import React from 'react'; import { FastField, useFormikContext } from 'formik'; import { Classes } from '@blueprintjs/core'; import { T, TotalLines, TotalLine } from 'components'; -import { getEntriesTotal } from 'containers/Entries/utils'; +import { sumBy, subtract } from 'lodash'; import ReconcileCreditNoteEntriesTable from './ReconcileCreditNoteEntriesTable'; import { useReconcileCreditNoteContext } from './ReconcileCreditNoteFormProvider'; import { formattedAmount } from 'utils'; @@ -12,19 +12,32 @@ import { formattedAmount } from 'utils'; */ export default function ReconcileCreditNoteFormFields() { const { - creditNote: { formatted_credits_remaining, currency_code }, + creditNote: { + formatted_credits_remaining, + credits_remaining, + currency_code, + }, } = useReconcileCreditNoteContext(); const { values } = useFormikContext(); // Calculate the total amount. - const totalAmount = React.useMemo( - () => getEntriesTotal(values.entries), - [values.entries], - ); + const totalAmount = React.useMemo(() => { + const total = sumBy(values.entries, 'amount'); + return subtract(credits_remaining, total); + }, [values.entries]); return (
+
+
+ +
+
+ {formatted_credits_remaining} +
+
+ {/*------------ Reconcile credit entries table -----------*/} {({ @@ -50,7 +63,7 @@ export default function ReconcileCreditNoteFormFields() { value={formattedAmount(totalAmount, currency_code)} /> } + title={} value={formatted_credits_remaining} /> diff --git a/src/containers/Dialogs/ReconcileVendorCreditDialog/ReconcileVendorCreditFormFields.js b/src/containers/Dialogs/ReconcileVendorCreditDialog/ReconcileVendorCreditFormFields.js index 531e18b82..e95ef43e4 100644 --- a/src/containers/Dialogs/ReconcileVendorCreditDialog/ReconcileVendorCreditFormFields.js +++ b/src/containers/Dialogs/ReconcileVendorCreditDialog/ReconcileVendorCreditFormFields.js @@ -1,25 +1,40 @@ import React from 'react'; import { FastField, useFormikContext } from 'formik'; import { Classes } from '@blueprintjs/core'; +import { sumBy, subtract } from 'lodash'; import { T, TotalLines, TotalLine } from 'components'; -import { getEntriesTotal } from 'containers/Entries/utils'; import ReconcileVendorCreditEntriesTable from './ReconcileVendorCreditEntriesTable'; import { useReconcileVendorCreditContext } from './ReconcileVendorCreditFormProvider'; import { formattedAmount } from 'utils'; export default function ReconcileVendorCreditFormFields() { - const { vendorCredit } = useReconcileVendorCreditContext(); + const { + vendorCredit: { + currency_code, + credits_remaining, + formatted_credits_remaining, + }, + } = useReconcileVendorCreditContext(); const { values } = useFormikContext(); // Calculate the total amount. - const totalAmount = React.useMemo( - () => getEntriesTotal(values.entries), - [values.entries], - ); + const totalAmount = React.useMemo(() => { + const total = sumBy(values.entries, 'amount'); + return subtract(credits_remaining, total); + }, [values.entries]); return (
+
+
+ +
+
+ {formatted_credits_remaining} +
+
+ {({ form: { setFieldValue, values }, @@ -41,13 +56,13 @@ export default function ReconcileVendorCreditFormFields() { title={ } - value={formattedAmount(totalAmount, vendorCredit.currency_code)} + value={formattedAmount(totalAmount, currency_code)} /> } - value={vendorCredit.formatted_credits_remaining} + value={formatted_credits_remaining} />
diff --git a/src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailDrawerProvider.js b/src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailDrawerProvider.js index 8f3bd7326..136722ca3 100644 --- a/src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailDrawerProvider.js +++ b/src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailDrawerProvider.js @@ -3,6 +3,7 @@ import intl from 'react-intl-universal'; import { useCreditNote, useRefundCreditNote, + useReconcileCreditNote, useReconcileCreditNotes, } from 'hooks/query'; import { DrawerHeaderContent, DrawerLoading } from 'components'; @@ -33,15 +34,21 @@ function CreditNoteDetailDrawerProvider({ creditNoteId, ...props }) { // Handle fetch refund credit note. const { data: reconcileCreditNotes, - isFetching: isReconcileCreditNoteFetching, isLoading: isReconcileCreditNoteLoading, } = useReconcileCreditNotes(creditNoteId, { enabled: !!creditNoteId, }); + // Handle fetch reconcile credit note details. + const { isLoading: isReconcileCreditLoading, data: reconcileCreditNote } = + useReconcileCreditNote(creditNoteId, { + enabled: !!creditNoteId, + }); + const provider = { creditNote, refundCreditNote, + reconcileCreditNote, reconcileCreditNotes, isRefundCreditNoteLoading, @@ -54,7 +61,8 @@ function CreditNoteDetailDrawerProvider({ creditNoteId, ...props }) { loading={ isCreditNoteLoading || isRefundCreditNoteLoading || - isReconcileCreditNoteLoading + isReconcileCreditNoteLoading || + isReconcileCreditLoading } > @@ -34,12 +34,16 @@ export default function CreditNoteDetailHeader() { } /> + } /> + diff --git a/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.js b/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.js index 9add47fe9..554cfc3e0 100644 --- a/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.js +++ b/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.js @@ -35,7 +35,7 @@ export const defaultVendorsCreditNote = { vendor_credit_no_manually: false, open: '', vendor_credit_date: moment(new Date()).format('YYYY-MM-DD'), - // reference_no: '', + reference_no: '', note: '', entries: [...repeatValue(defaultCreditNoteEntry, MIN_LINES_NUMBER)], }; diff --git a/src/containers/Purchases/CreditNotes/CreditNotesLanding/components.js b/src/containers/Purchases/CreditNotes/CreditNotesLanding/components.js index 88a1c1f40..b9af4c70e 100644 --- a/src/containers/Purchases/CreditNotes/CreditNotesLanding/components.js +++ b/src/containers/Purchases/CreditNotes/CreditNotesLanding/components.js @@ -140,7 +140,7 @@ export function useVendorsCreditNoteTableColumns() { { id: 'balance', Header: intl.get('balance'), - accessor: 'credits_remaining', + accessor: 'formatted_credits_remaining', width: 120, align: 'right', clickable: true, diff --git a/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormProvider.js b/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormProvider.js index 210875d51..569bd27cc 100644 --- a/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormProvider.js +++ b/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormProvider.js @@ -73,7 +73,7 @@ function CreditNoteFormProvider({ creditNoteId, ...props }) { return ( diff --git a/src/containers/Sales/CreditNotes/CreditNoteForm/utils.js b/src/containers/Sales/CreditNotes/CreditNoteForm/utils.js index d2825947b..c6ca1721f 100644 --- a/src/containers/Sales/CreditNotes/CreditNoteForm/utils.js +++ b/src/containers/Sales/CreditNotes/CreditNoteForm/utils.js @@ -36,7 +36,7 @@ export const defaultCreditNote = { credit_note_number: '', credit_note_no_manually: false, open: '', - // reference_no: '', + reference_no: '', note: '', terms_conditions: '', entries: [...repeatValue(defaultCreditNoteEntry, MIN_LINES_NUMBER)], diff --git a/src/lang/en/index.json b/src/lang/en/index.json index 31ac4a1ce..98e74ba2c 100644 --- a/src/lang/en/index.json +++ b/src/lang/en/index.json @@ -1581,6 +1581,7 @@ "vendor_credit_opened.are_sure_to_open_this_credit": "Are you sure you want to open this vendor credit?", "reconcile_credit_note.label": "Reconcile credit note with invoices.", "reconcile_credit_note.dialog.total_amount_to_credit": "Total amount to credit", + "reconcile_credit_note.dialog.credits_balance": "Credits balance:", "reconcile_credit_note.dialog.remaining_credits": "Remaining credits", "reconcile_credit_note.column.remaining_amount": "Remaining amount", "reconcile_credit_note.column.amount_to_credit": "Amount to credit", @@ -1595,6 +1596,7 @@ "reconcile_vendor_credit.dialog.success_message": "The vendor credit has been applied to the given bills successfully", "reconcile_vendor_credit.alert.there_is_no_open_bills": "There is no open bills associated to credit note vendor.", "reconcile_vendor_credit.dialog.total_amount_to_credit": "Total amount to credit", + "reconcile_vendor_note.dialog.credits_balance": "Credits balance:", "reconcile_vendor_credit.dialog.remaining_credits": "Remaining amount", "reconcile_vendor_credit.column.bill_number": "Bill #", "reconcile_vendor_credit.column.remaining_amount": "Remaining amount", diff --git a/src/style/pages/CreditNote/PageForm.scss b/src/style/pages/CreditNote/PageForm.scss index a5dab2707..8da43b9aa 100644 --- a/src/style/pages/CreditNote/PageForm.scss +++ b/src/style/pages/CreditNote/PageForm.scss @@ -36,7 +36,7 @@ body.page-credit-note-edit { } } #{$self}__footer { - .form-group--customer_notes, + .form-group--note, .form-group--terms_conditions { max-width: 450px; width: 100%; diff --git a/src/style/pages/ReconcileCreditNote/ReconcileCreditNoteForm.scss b/src/style/pages/ReconcileCreditNote/ReconcileCreditNoteForm.scss index 3a0e5c363..d041ea4d3 100644 --- a/src/style/pages/ReconcileCreditNote/ReconcileCreditNoteForm.scss +++ b/src/style/pages/ReconcileCreditNote/ReconcileCreditNoteForm.scss @@ -62,6 +62,20 @@ } } + .credit-remaining { + display: flex; + justify-content: flex-end; + padding-top: 5px; + padding-bottom: 15px; + &__label { + } + &__balance { + font-weight: 500; + color: #343463; + margin-left: 5px; + } + } + .bp3-callout { font-size: 14px; } diff --git a/src/style/pages/ReconcileVendorCredit/ReconcileVendorCreditForm.scss b/src/style/pages/ReconcileVendorCredit/ReconcileVendorCreditForm.scss index a5c09945f..7461bf445 100644 --- a/src/style/pages/ReconcileVendorCredit/ReconcileVendorCreditForm.scss +++ b/src/style/pages/ReconcileVendorCredit/ReconcileVendorCreditForm.scss @@ -66,6 +66,20 @@ .bp3-callout { font-size: 14px; } + + .credit-remaining { + display: flex; + justify-content: flex-end; + padding-top: 5px; + padding-bottom: 15px; + &__label { + } + &__balance { + font-weight: 500; + color: #343463; + margin-left: 5px; + } + } .bp3-dialog-footer { display: flex; justify-content: flex-start; diff --git a/src/style/pages/VendorsCreditNote/PageForm.scss b/src/style/pages/VendorsCreditNote/PageForm.scss index ebddd4d3a..79be9954b 100644 --- a/src/style/pages/VendorsCreditNote/PageForm.scss +++ b/src/style/pages/VendorsCreditNote/PageForm.scss @@ -5,7 +5,7 @@ body.page-vendor-credit-note-edit { } } -.dashboard__insider--vendor-credit-note-form { +.dashboard__insider--vendor-credit-form { padding-bottom: 64px; }