diff --git a/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailActionsBar.js b/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailActionsBar.js
new file mode 100644
index 000000000..66b60c8d4
--- /dev/null
+++ b/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailActionsBar.js
@@ -0,0 +1,76 @@
+import React from 'react';
+import { useHistory } from 'react-router-dom';
+
+import {
+ Button,
+ NavbarGroup,
+ Classes,
+ NavbarDivider,
+ Intent,
+} from '@blueprintjs/core';
+import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
+
+import { usePaymentMadeDetailContext } from './PaymentMadeDetailProvider';
+
+import withDialogActions from 'containers/Dialog/withDialogActions';
+import withAlertsActions from 'containers/Alert/withAlertActions';
+import withDrawerActions from 'containers/Drawer/withDrawerActions';
+
+import { Icon, FormattedMessage as T } from 'components';
+
+import { safeCallback, compose } from 'utils';
+
+function PaymentMadeDetailActionsBar({
+ // #withAlertsActions
+ openAlert,
+
+ // #withDrawerActions
+ closeDrawer,
+}) {
+ const history = useHistory();
+
+ const { paymentMadeId } = usePaymentMadeDetailContext();
+
+ // Handle edit payment made.
+ const onEditPaymentMade = () => {
+ return paymentMadeId
+ ? (history.push(`/payment-mades/${paymentMadeId}/edit`),
+ closeDrawer('payment-made-detail-drawer'))
+ : null;
+ };
+
+ // Handle delete payment made.
+ const onDeletePaymentMade = () => {
+ return paymentMadeId
+ ? (openAlert('payment-made-delete', { paymentMadeId }),
+ closeDrawer('payment-made-detail-drawer'))
+ : null;
+ };
+
+ return (
+
+
+ }
+ text={}
+ onClick={safeCallback(onEditPaymentMade)}
+ />
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={safeCallback(onDeletePaymentMade)}
+ />
+
+
+ );
+}
+
+export default compose(
+ withDialogActions,
+ withDrawerActions,
+ withAlertsActions,
+)(PaymentMadeDetailActionsBar);
diff --git a/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailFooter.js b/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailFooter.js
new file mode 100644
index 000000000..77e912f60
--- /dev/null
+++ b/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailFooter.js
@@ -0,0 +1,24 @@
+import React from 'react';
+
+import { usePaymentMadeDetailContext } from './PaymentMadeDetailProvider';
+
+export default function PaymentMadeDetailFooter() {
+ const {
+ paymentEntries: { total_payment_amount },
+ } = usePaymentMadeDetailContext();
+
+ return (
+
+
+
+
Subtotal
+
{total_payment_amount}
+
+
+
TOTAL
+
{total_payment_amount}
+
+
+
+ );
+}
diff --git a/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailHeader.js b/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailHeader.js
new file mode 100644
index 000000000..6e89bb627
--- /dev/null
+++ b/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailHeader.js
@@ -0,0 +1,57 @@
+import React from 'react';
+import intl from 'react-intl-universal';
+import moment from 'moment';
+
+import { defaultTo } from 'lodash';
+
+import { DetailsMenu, DetailItem } from 'components';
+
+import { usePaymentMadeDetailContext } from './PaymentMadeDetailProvider';
+
+/**
+ * Payment made detail header.
+ */
+export default function PaymentMadeDetailHeader() {
+ const {
+ paymentMade: {
+ formatted_amount,
+ payment_number,
+ payment_account,
+ formatted_payment_date,
+ vendor,
+ created_at,
+ statement,
+ },
+ } = usePaymentMadeDetailContext();
+
+ return (
+
+
+
+ {formatted_amount}
+
+
+ {payment_number}
+
+
+ {vendor?.display_name}
+
+
+ {payment_account?.name}
+
+
+ {formatted_payment_date}
+
+
+
+
+
+ {defaultTo(statement, '—')}
+
+
+ {moment(created_at).format('YYYY MMM DD')}
+
+
+
+ );
+}
diff --git a/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailProvider.js b/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailProvider.js
index d491d2298..d1d1cdb4b 100644
--- a/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailProvider.js
+++ b/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailProvider.js
@@ -1,7 +1,11 @@
import React from 'react';
import intl from 'react-intl-universal';
import { DrawerHeaderContent, DashboardInsider } from 'components';
-import { useTransactionsByReference } from 'hooks/query';
+import {
+ useTransactionsByReference,
+ usePaymentMade,
+ usePaymentMadeEditPage,
+} from 'hooks/query';
const PaymentMadeDetailContext = React.createContext();
@@ -9,6 +13,20 @@ const PaymentMadeDetailContext = React.createContext();
* Payment made detail provider.
*/
function PaymentMadeDetailProvider({ paymentMadeId, ...props }) {
+ // Handle fetch specific payment made details.
+ const { data: paymentMade, isFetching: isPaymentMadeLoading } =
+ usePaymentMade(paymentMadeId, {
+ enabled: !!paymentMadeId,
+ });
+
+ // Handle fetch specific payment made details.
+ const {
+ data: { entries: paymentEntries },
+ isLoading: isPaymentLoading,
+ } = usePaymentMadeEditPage(paymentMadeId, {
+ enabled: !!paymentMadeId,
+ });
+
// Handle fetch transaction by reference.
const {
data: { transactions },
@@ -24,9 +42,14 @@ function PaymentMadeDetailProvider({ paymentMadeId, ...props }) {
//provider.
const provider = {
transactions,
+ paymentMadeId,
+ paymentMade,
+ paymentEntries,
};
return (
-
+
+
+
+
+ );
+}
diff --git a/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailTable.js b/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailTable.js
new file mode 100644
index 000000000..1680144d9
--- /dev/null
+++ b/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailTable.js
@@ -0,0 +1,17 @@
+import React from 'react';
+import { usePaymentMadeEntriesColumns } from './utils';
+import { DataTable } from 'components';
+
+import { usePaymentMadeDetailContext } from './PaymentMadeDetailProvider';
+
+export default function PaymentMadeDetailTable() {
+ const columns = usePaymentMadeEntriesColumns();
+
+ const { paymentEntries } = usePaymentMadeDetailContext();
+
+ return (
+
+
+
+ );
+}
diff --git a/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetails.js b/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetails.js
index eee6f2590..eef27a063 100644
--- a/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetails.js
+++ b/client/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetails.js
@@ -2,6 +2,7 @@ import React from 'react';
import { Tabs, Tab } from '@blueprintjs/core';
import intl from 'react-intl-universal';
+import PaymentMadeDetailTab from './PaymentMadeDetailTab';
import JournalEntriesTable from '../../JournalEntriesTable/JournalEntriesTable';
import { usePaymentMadeDetailContext } from './PaymentMadeDetailProvider';
@@ -14,7 +15,11 @@ export default function PaymentMadeDetails() {
return (
-
+ }
+ />
+
diff --git a/client/src/containers/Drawers/PaymentMadeDetailDrawer/utils.js b/client/src/containers/Drawers/PaymentMadeDetailDrawer/utils.js
new file mode 100644
index 000000000..25d885806
--- /dev/null
+++ b/client/src/containers/Drawers/PaymentMadeDetailDrawer/utils.js
@@ -0,0 +1,35 @@
+import React from 'react';
+import intl from 'react-intl-universal';
+import moment from 'moment';
+
+export const usePaymentMadeEntriesColumns = () =>
+ React.useMemo(() => [
+ {
+ Header: intl.get('date'),
+ accessor: (row) => moment(row.date).format('YYYY MMM DD'),
+ width: 100,
+ disableSortBy: true,
+ },
+ {
+ Header: intl.get('bill_number'),
+ accessor: 'bill_no',
+ width: 150,
+ disableSortBy: true,
+ },
+ {
+ Header: intl.get('bill_amount'),
+ accessor: 'amount',
+ },
+ {
+ Header: intl.get('due_amount'),
+ accessor: 'due_amount',
+ width: 100,
+ disableSortBy: true,
+ },
+ {
+ Header: intl.get('payment_amount'),
+ accessor: 'payment_amount',
+ width: 100,
+ disableSortBy: true,
+ },
+ ]);
diff --git a/client/src/hooks/query/paymentMades.js b/client/src/hooks/query/paymentMades.js
index 88b46aed5..9005fef93 100644
--- a/client/src/hooks/query/paymentMades.js
+++ b/client/src/hooks/query/paymentMades.js
@@ -166,4 +166,20 @@ export function useRefreshPaymentMades() {
queryClient.invalidateQueries(t.PAYMENT_MADES);
},
};
-}
\ No newline at end of file
+}
+
+/**
+ * Retrieve specific payment made.
+ * @param {number} id - Payment made.
+ */
+export function usePaymentMade(id, props) {
+ return useRequestQuery(
+ [t.PAYMENT_MADE, id],
+ { method: 'get', url: `purchases/bill_payments/${id}` },
+ {
+ select: (res) => res.data.bill_payment,
+ defaultData: {},
+ ...props,
+ },
+ );
+}