From b15437c88e72bb81d0b775e043035b9ac1d0275c Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Mon, 21 Feb 2022 16:03:57 +0200
Subject: [PATCH] feat(manual journal): add exchange rate input.
---
src/common/features.js | 3 +-
.../MakeJournalEntriesHeaderFields.js | 72 ++++++++++++-------
.../MakeJournal/MakeJournalEntriesPage.js | 13 +++-
.../MakeJournal/MakeJournalProvider.js | 25 ++++---
4 files changed, 76 insertions(+), 37 deletions(-)
diff --git a/src/common/features.js b/src/common/features.js
index 81df5f3be..a042429eb 100644
--- a/src/common/features.js
+++ b/src/common/features.js
@@ -2,5 +2,6 @@
export const Features = {
Warehouses: 'warehouses',
- Branches: 'branches'
+ Branches: 'branches',
+ ManualJournal: 'manualJournal',
}
\ No newline at end of file
diff --git a/src/containers/Accounting/MakeJournal/MakeJournalEntriesHeaderFields.js b/src/containers/Accounting/MakeJournal/MakeJournalEntriesHeaderFields.js
index 02c329654..6ba992434 100644
--- a/src/containers/Accounting/MakeJournal/MakeJournalEntriesHeaderFields.js
+++ b/src/containers/Accounting/MakeJournal/MakeJournalEntriesHeaderFields.js
@@ -9,6 +9,7 @@ import { FastField, ErrorMessage } from 'formik';
import { DateInput } from '@blueprintjs/datetime';
import { FormattedMessage as T } from 'components';
import classNames from 'classnames';
+import { Features } from 'common';
import { CLASSES } from 'common/classes';
import {
@@ -23,8 +24,11 @@ import {
FieldHint,
FieldRequiredHint,
Icon,
+ If,
+ FeatureCan,
InputPrependButton,
CurrencySelectList,
+ ExchangeRateInputGroup,
} from 'components';
import withSettings from 'containers/Settings/withSettings';
import { useMakeJournalFormContext } from './MakeJournalProvider';
@@ -48,7 +52,12 @@ function MakeJournalEntriesHeader({
journalNextNumber,
journalNumberPrefix,
}) {
- const { currencies } = useMakeJournalFormContext();
+ const {
+ currencies,
+ isForeignJournal,
+ baseCurrency,
+ setSelactJournalCurrency,
+ } = useMakeJournalFormContext();
// Handle journal number change.
const handleJournalNumberChange = () => {
@@ -185,29 +194,44 @@ function MakeJournalEntriesHeader({
{/*------------ Currency -----------*/}
-
- {({ form, field: { value }, meta: { error, touched } }) => (
- }
- className={classNames('form-group--currency', CLASSES.FILL)}
- inline={true}
- >
- {
- form.setFieldValue('currency_code', currencyItem.currency_code);
- }}
- defaultSelectText={value}
- disabled={true}
- />
-
- )}
-
+ {/* */}
+
+ {({ form, field: { value }, meta: { error, touched } }) => (
+ }
+ className={classNames('form-group--currency', CLASSES.FILL)}
+ inline={true}
+ >
+ {
+ form.setFieldValue(
+ 'currency_code',
+ currencyItem.currency_code,
+ );
+ setSelactJournalCurrency(currencyItem);
+ }}
+ defaultSelectText={value}
+ />
+
+ )}
+
+ {/* */}
+
+ {/* ----------- Exchange rate ----------- */}
+
+
+
);
}
diff --git a/src/containers/Accounting/MakeJournal/MakeJournalEntriesPage.js b/src/containers/Accounting/MakeJournal/MakeJournalEntriesPage.js
index 452d8ffc9..a00a2cec4 100644
--- a/src/containers/Accounting/MakeJournal/MakeJournalEntriesPage.js
+++ b/src/containers/Accounting/MakeJournal/MakeJournalEntriesPage.js
@@ -6,15 +6,22 @@ import 'style/pages/ManualJournal/MakeJournal.scss';
import MakeJournalEntriesForm from './MakeJournalEntriesForm';
import { MakeJournalProvider } from './MakeJournalProvider';
+import withCurrentOrganization from 'containers/Organization/withCurrentOrganization';
+import { compose } from 'utils';
+
/**
* Make journal entries page.
*/
-export default function MakeJournalEntriesPage() {
+function MakeJournalEntriesPage({
+ // #withCurrentOrganization
+ organization: { base_currency },
+}) {
const { id: journalId } = useParams();
-
+
return (
-
+
);
}
+export default compose(withCurrentOrganization())(MakeJournalEntriesPage);
diff --git a/src/containers/Accounting/MakeJournal/MakeJournalProvider.js b/src/containers/Accounting/MakeJournal/MakeJournalProvider.js
index e382c1661..ce3de0e90 100644
--- a/src/containers/Accounting/MakeJournal/MakeJournalProvider.js
+++ b/src/containers/Accounting/MakeJournal/MakeJournalProvider.js
@@ -1,4 +1,5 @@
import React, { createContext, useState } from 'react';
+import { isEqual, isUndefined } from 'lodash';
import DashboardInsider from 'components/Dashboard/DashboardInsider';
import {
useAccounts,
@@ -8,7 +9,7 @@ import {
useCreateJournal,
useEditJournal,
useSettings,
- useSettingsManualJournals
+ useSettingsManualJournals,
} from 'hooks/query';
const MakeJournalFormContext = createContext();
@@ -16,15 +17,13 @@ const MakeJournalFormContext = createContext();
/**
* Make journal form provider.
*/
-function MakeJournalProvider({ journalId, ...props }) {
+function MakeJournalProvider({ journalId, baseCurrency, ...props }) {
// Load the accounts list.
const { data: accounts, isLoading: isAccountsLoading } = useAccounts();
// Load the customers list.
- const {
- data: contacts,
- isLoading: isContactsLoading,
- } = useAutoCompleteContacts();
+ const { data: contacts, isLoading: isContactsLoading } =
+ useAutoCompleteContacts();
// Load the currencies list.
const { data: currencies, isLoading: isCurrenciesLoading } = useCurrencies();
@@ -45,12 +44,18 @@ function MakeJournalProvider({ journalId, ...props }) {
// Submit form payload.
const [submitPayload, setSubmitPayload] = useState({});
+ const [selectJournalCurrency, setSelactJournalCurrency] = useState(null);
+
+ const isForeignJournal =
+ !isEqual(selectJournalCurrency?.currency_code, baseCurrency) &&
+ !isUndefined(selectJournalCurrency?.currency_code);
const provider = {
accounts,
contacts,
currencies,
manualJournal,
+ baseCurrency,
createJournalMutate,
editJournalMutate,
@@ -60,11 +65,13 @@ function MakeJournalProvider({ journalId, ...props }) {
isCurrenciesLoading,
isJournalLoading,
isSettingsLoading,
-
+ isForeignJournal,
isNewMode: !journalId,
submitPayload,
- setSubmitPayload
+ setSubmitPayload,
+ selectJournalCurrency,
+ setSelactJournalCurrency,
};
return (
@@ -73,7 +80,7 @@ function MakeJournalProvider({ journalId, ...props }) {
isJournalLoading ||
isAccountsLoading ||
isCurrenciesLoading ||
- isContactsLoading ||
+ isContactsLoading ||
isSettingsLoading
}
name={'make-journal-page'}