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'}