diff --git a/client/src/common/countries.js b/client/src/common/countries.js index cf08fcf48..c86568887 100644 --- a/client/src/common/countries.js +++ b/client/src/common/countries.js @@ -1,5 +1,3 @@ +import intl from 'react-intl-universal'; - -export default [ - { name: 'Libya', value: 'libya' }, -] \ No newline at end of file +export default [{ name: intl.get('libya'), value: 'libya' }]; diff --git a/client/src/common/currencies.js b/client/src/common/currencies.js index 8e9ffd911..ae1dbd6d9 100644 --- a/client/src/common/currencies.js +++ b/client/src/common/currencies.js @@ -1,5 +1,7 @@ +import intl from 'react-intl-universal'; + export default [ - { name: 'US Dollar', code: 'USD' }, - { name: 'Euro', code: 'EUR' }, - { name: 'Libyan Dinar ', code: 'LYD' }, -] \ No newline at end of file + { name: intl.get('us_dollar'), code: 'USD' }, + { name: intl.get('euro'), code: 'EUR' }, + { name: intl.get('libyan_diner'), code: 'LYD' }, +]; diff --git a/client/src/common/dateFormatsOptions.js b/client/src/common/dateFormatsOptions.js index bed2cda21..8c6ed99a2 100644 --- a/client/src/common/dateFormatsOptions.js +++ b/client/src/common/dateFormatsOptions.js @@ -1,40 +1,41 @@ import moment from 'moment'; +import intl from 'react-intl-universal'; export default [ { id: 1, - name: 'MM/DD/YY', + name: intl.get('mm_dd_yy'), label: `${moment().format('MM/DD/YYYY')}`, value: 'mm/dd/yy', }, { id: 2, - name: 'DD/MM/YY', + name: intl.get('dd_mm_yy'), label: `${moment().format('DD/MM/YYYY')}`, value: 'dd/mm/yy', }, { id: 3, - name: 'YY/MM/DD', + name: intl.get('yy_mm_dd'), label: `${moment().format('YYYY/MM/DD')}`, value: 'yy/mm/dd', }, { id: 4, - name: 'MM-DD-YY', + name: intl.get('mm_dd_yy'), label: `${moment().format('MM-DD-YYYY')}`, value: 'mm-dd-yy', }, { id: 5, - name: 'DD-MM-YY', + name: intl.get('dd_mm_yy_'), label: `${moment().format('DD-MM-YYYY')}`, value: 'dd-mm-yy', }, { id: 6, - name: 'YY-MM-DD', + name: intl.get('yy_mm_dd_'), label: `${moment().format('YYYY-MM-DD')}`, value: 'yy-mm-dd', }, -] \ No newline at end of file +]; diff --git a/client/src/common/languagesOptions.js b/client/src/common/languagesOptions.js index b331d32ec..77ddb2f6b 100644 --- a/client/src/common/languagesOptions.js +++ b/client/src/common/languagesOptions.js @@ -1,6 +1,6 @@ - +import intl from 'react-intl-universal'; export default [ - { name: 'English', value: 'en' }, - { name: 'Arabic', value: 'ar' }, -]; \ No newline at end of file + { name: intl.get('english'), value: 'en' }, + { name: intl.get('arabic'), value: 'ar' }, +]; diff --git a/client/src/common/numberFormatsOptions.js b/client/src/common/numberFormatsOptions.js index 0315eae93..4e2b6ccf8 100644 --- a/client/src/common/numberFormatsOptions.js +++ b/client/src/common/numberFormatsOptions.js @@ -1,7 +1,9 @@ +import intl from 'react-intl-universal'; + export const moneyFormat = [ - { key: 'total', text: 'Total rows' }, - { key: 'always', text: 'Always' }, - { key: 'none', text: 'None' }, + { key: 'total', text: intl.get('total_rows') }, + { key: 'always', text: intl.get('always') }, + { key: 'none', text: intl.get('none') }, ]; export const negativeFormat = [ diff --git a/client/src/components/AccountsSuggestField.js b/client/src/components/AccountsSuggestField.js index 7e9952bb7..177aecc60 100644 --- a/client/src/components/AccountsSuggestField.js +++ b/client/src/components/AccountsSuggestField.js @@ -1,6 +1,7 @@ import React, { useState, useCallback, useEffect, useMemo } from 'react'; import { MenuItem } from '@blueprintjs/core'; import { Suggest } from '@blueprintjs/select'; +import intl from 'react-intl-universal'; import classNames from 'classnames'; import { CLASSES } from 'common/classes'; @@ -15,7 +16,7 @@ export default function AccountsSuggestField({ accounts, initialAccountId, selectedAccountId, - defaultSelectText = 'Select account', + defaultSelectText = intl.formatMessage({ id: 'select_account' }), popoverFill = false, onAccountSelected, @@ -32,7 +33,7 @@ export default function AccountsSuggestField({ filterByRootTypes, filterByParentTypes, filterByTypes, - filterByNormal, + filterByNormal, }); return filteredAccounts; }, [ diff --git a/client/src/components/App.js b/client/src/components/App.js index 062cbb77c..f851f4234 100644 --- a/client/src/components/App.js +++ b/client/src/components/App.js @@ -5,6 +5,8 @@ import { QueryClientProvider, QueryClient } from 'react-query'; import { ReactQueryDevtools } from 'react-query/devtools'; import 'style/App.scss'; +import 'moment/locale/ar-ly'; +import 'moment/locale/es-us' import AppIntlLoader from './AppIntlLoader'; import PrivateRoute from 'components/Guards/PrivateRoute'; diff --git a/client/src/components/AppIntlLoader.js b/client/src/components/AppIntlLoader.js index 7fc49b233..7775d2ce7 100644 --- a/client/src/components/AppIntlLoader.js +++ b/client/src/components/AppIntlLoader.js @@ -1,4 +1,5 @@ import React from 'react'; +import moment from 'moment'; import intl from 'react-intl-universal'; import { find } from 'lodash'; import rtlDetect from 'rtl-detect'; @@ -68,6 +69,7 @@ export default function AppIntlLoader({ }, }); }).then(() => { + moment.locale('ar-ly'); setIsLoading(false); }); }, [currentLocale, setIsLoading]); diff --git a/client/src/components/DataTableCells/AccountsListFieldCell.js b/client/src/components/DataTableCells/AccountsListFieldCell.js index 724cf2753..1f27453a1 100644 --- a/client/src/components/DataTableCells/AccountsListFieldCell.js +++ b/client/src/components/DataTableCells/AccountsListFieldCell.js @@ -1,6 +1,7 @@ import React, { useRef, useCallback, useMemo } from 'react'; import classNames from 'classnames'; import { useCellAutoFocus } from 'hooks'; +import intl from 'react-intl-universal'; import AccountsSuggestField from 'components/AccountsSuggestField'; @@ -61,6 +62,7 @@ export default function AccountCellRenderer({ filterByTypes={filterAccountsByTypes} inputProps={{ inputRef: (ref) => (accountRef.current = ref), + placeholder: intl.get('search'), }} openOnKeyDown={true} blurOnSelectClose={false} diff --git a/client/src/components/SalutationList.js b/client/src/components/SalutationList.js index a87a9d4d6..0be3b5169 100644 --- a/client/src/components/SalutationList.js +++ b/client/src/components/SalutationList.js @@ -4,7 +4,13 @@ import intl from 'react-intl-universal'; import { ListSelect } from 'components'; export default function SalutationList({ ...restProps }) { - const saluations = ['Mr.', 'Mrs.', 'Ms.', 'Miss', 'Dr.']; + const saluations = [ + intl.get('mr'), + intl.get('mrs'), + intl.get('ms'), + intl.get('miss'), + intl.get('dr'), + ]; const items = saluations.map((saluation) => ({ key: saluation, label: saluation, diff --git a/client/src/containers/Accounts/AccountsViewsTabs.js b/client/src/containers/Accounts/AccountsViewsTabs.js index 978b11eaf..c68853536 100644 --- a/client/src/containers/Accounts/AccountsViewsTabs.js +++ b/client/src/containers/Accounts/AccountsViewsTabs.js @@ -1,6 +1,8 @@ import React, { useMemo, useCallback } from 'react'; import { Alignment, Navbar, NavbarGroup } from '@blueprintjs/core'; import { pick } from 'lodash'; +import intl from 'react-intl-universal'; + import { DashboardViewsTabs } from 'components'; import { useAccountsChartContext } from 'containers/Accounts/AccountsChartProvider'; @@ -45,7 +47,7 @@ function AccountsViewsTabs({ ( } className={classNames(CLASSES.FILL, 'form-group--type')} > } onItemSelect={(currency) => { setFieldValue('currency_code', currency.currency_code); setFieldValue('currency_name', currency.name); diff --git a/client/src/containers/Drawers/PaperTemplate/PaperTemplateTable.js b/client/src/containers/Drawers/PaperTemplate/PaperTemplateTable.js index cd433387b..db26490d5 100644 --- a/client/src/containers/Drawers/PaperTemplate/PaperTemplateTable.js +++ b/client/src/containers/Drawers/PaperTemplate/PaperTemplateTable.js @@ -22,10 +22,10 @@ export default function DrawerTemplateTable({ tableData, currencyCode }) { Header: intl.get('qty'), accessor: 'quantity', disableSortBy: true, - width: 50, + width: 80, }, { - Header: intl.get('Total'), + Header: intl.get('total'), accessor: ({ total }) => ( ), diff --git a/client/src/containers/FinancialStatements/APAgingSummary/components.js b/client/src/containers/FinancialStatements/APAgingSummary/components.js index fdcb2d6e4..fca3ab6a6 100644 --- a/client/src/containers/FinancialStatements/APAgingSummary/components.js +++ b/client/src/containers/FinancialStatements/APAgingSummary/components.js @@ -1,4 +1,5 @@ import React, { useMemo } from 'react'; +import intl from 'react-intl-universal'; import { useAPAgingSummaryContext } from './APAgingSummaryProvider'; import { getColumnWidth } from 'utils'; import { FormattedMessage as T } from 'components'; @@ -16,7 +17,9 @@ export const useAPAgingSummaryColumns = () => { const agingColumns = React.useMemo(() => { return columns.map( (agingColumn) => - `${agingColumn.before_days} - ${agingColumn.to_days || 'And Over'}`, + `${agingColumn.before_days} - ${ + agingColumn.to_days || intl.get('and_over') + }`, ); }, [columns]); @@ -60,14 +63,12 @@ export const useAPAgingSummaryColumns = () => { /** * A/P aging summary sheet loading bar. */ - export function APAgingSummarySheetLoadingBar() { - const { - isAPAgingFetching - } = useAPAgingSummaryContext(); +export function APAgingSummarySheetLoadingBar() { + const { isAPAgingFetching } = useAPAgingSummaryContext(); return ( - ) -} \ No newline at end of file + ); +} diff --git a/client/src/containers/FinancialStatements/ARAgingSummary/components.js b/client/src/containers/FinancialStatements/ARAgingSummary/components.js index 1746726c7..b0e4023bd 100644 --- a/client/src/containers/FinancialStatements/ARAgingSummary/components.js +++ b/client/src/containers/FinancialStatements/ARAgingSummary/components.js @@ -1,4 +1,5 @@ import React from 'react'; +import intl from 'react-intl-universal'; import { useARAgingSummaryContext } from './ARAgingSummaryProvider'; import { getColumnWidth } from 'utils'; import { FormattedMessage as T } from 'components'; @@ -16,7 +17,9 @@ export const useARAgingSummaryColumns = () => { const agingColumns = React.useMemo(() => { return columns.map( (agingColumn) => - `${agingColumn.before_days} - ${agingColumn.to_days || 'And Over'}`, + `${agingColumn.before_days} - ${ + agingColumn.to_days || intl.get('and_over') + }`, ); }, [columns]); @@ -62,14 +65,12 @@ export const useARAgingSummaryColumns = () => { /** * A/R aging summary sheet loading bar. */ - export function ARAgingSummarySheetLoadingBar() { - const { - isARAgingFetching, - } = useARAgingSummaryContext(); +export function ARAgingSummarySheetLoadingBar() { + const { isARAgingFetching } = useARAgingSummaryContext(); return ( - ) -} \ No newline at end of file + ); +} diff --git a/client/src/containers/FinancialStatements/BalanceSheet/components.js b/client/src/containers/FinancialStatements/BalanceSheet/components.js index ad0992fb9..f8d90e2d4 100644 --- a/client/src/containers/FinancialStatements/BalanceSheet/components.js +++ b/client/src/containers/FinancialStatements/BalanceSheet/components.js @@ -2,34 +2,32 @@ import React from 'react'; import { Button } from '@blueprintjs/core'; import { Icon, If } from 'components'; import { useBalanceSheetContext } from './BalanceSheetProvider'; +import { FormattedMessage as T } from 'react-intl'; import FinancialLoadingBar from '../FinancialLoadingBar'; /** * Balance sheet alerts. */ export function BalanceSheetAlerts() { - const { - isLoading, - refetchBalanceSheet, - balanceSheet, - } = useBalanceSheetContext(); + const { isLoading, refetchBalanceSheet, balanceSheet } = + useBalanceSheetContext(); // Handle refetch the report sheet. const handleRecalcReport = () => { refetchBalanceSheet(); }; // Can't display any error if the report is loading. - if (isLoading) { return null; } + if (isLoading) { + return null; + } return (
- Just a moment! We're - calculating your cost transactions and this doesn't take much time. - Please check after sometime.{' '} - + {' '} +
@@ -40,13 +38,11 @@ export function BalanceSheetAlerts() { * Balance sheet loading bar. */ export function BalanceSheetLoadingBar() { - const { - isFetching - } = useBalanceSheetContext(); + const { isFetching } = useBalanceSheetContext(); return ( - ) -} \ No newline at end of file + ); +} diff --git a/client/src/containers/FinancialStatements/CashFlowStatement/components.js b/client/src/containers/FinancialStatements/CashFlowStatement/components.js index 5097af88f..37c8dcb8d 100644 --- a/client/src/containers/FinancialStatements/CashFlowStatement/components.js +++ b/client/src/containers/FinancialStatements/CashFlowStatement/components.js @@ -1,6 +1,7 @@ import React from 'react'; import { Button } from '@blueprintjs/core'; import { Icon, If } from 'components'; +import { FormattedMessage as T } from 'react-intl'; import { dynamicColumns } from './utils'; import { useCashFlowStatementContext } from './CashFlowStatementProvider'; @@ -52,11 +53,10 @@ export function CashFlowStatementAlerts() { return (
- Just a moment! We're - calculating your cost transactions and this doesn't take much time. - Please check after sometime. + +
diff --git a/client/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryGeneralPanel.js b/client/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryGeneralPanel.js index c982de567..8b0b5c221 100644 --- a/client/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryGeneralPanel.js +++ b/client/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryGeneralPanel.js @@ -57,7 +57,7 @@ export default function CustomersBalanceSummaryGeneralPanel() { inline={true} name={'percentage'} small={true} - label={'Percentage Of Column'} + label={} {...field} />
diff --git a/client/src/containers/FinancialStatements/GeneralLedger/components.js b/client/src/containers/FinancialStatements/GeneralLedger/components.js index 5e9a30b3e..a08ad8dd6 100644 --- a/client/src/containers/FinancialStatements/GeneralLedger/components.js +++ b/client/src/containers/FinancialStatements/GeneralLedger/components.js @@ -2,6 +2,8 @@ import React from 'react'; import intl from 'react-intl-universal'; import { Button } from '@blueprintjs/core'; import { Icon, If } from 'components'; +import { FormattedMessage as T } from 'react-intl'; + import { getForceWidth, getColumnWidth } from 'utils'; import { useGeneralLedgerContext } from './GeneralLedgerProvider'; import FinancialLoadingBar from '../FinancialLoadingBar'; @@ -68,7 +70,6 @@ export function useGeneralLedgerTableColumns() { accessor: 'formatted_credit', className: 'credit', width: getColumnWidth(tableRows, 'formatted_credit', { - minWidth: 100, magicSpacing: 10, }), @@ -105,33 +106,28 @@ export function useGeneralLedgerTableColumns() { ); } - /** * General ledger sheet alerts. */ - export function GeneralLedgerSheetAlerts() { - const { - generalLedger, - isLoading, - sheetRefresh - } = useGeneralLedgerContext(); +export function GeneralLedgerSheetAlerts() { + const { generalLedger, isLoading, sheetRefresh } = useGeneralLedgerContext(); // Handle refetch the report sheet. const handleRecalcReport = () => { sheetRefresh(); }; // Can't display any error if the report is loading. - if (isLoading) { return null; } + if (isLoading) { + return null; + } return (
- Just a moment! We're - calculating your cost transactions and this doesn't take much time. - Please check after sometime.{' '} - + +
@@ -142,13 +138,11 @@ export function useGeneralLedgerTableColumns() { * General ledger sheet loading bar. */ export function GeneralLedgerSheetLoadingBar() { - const { - isFetching, - } = useGeneralLedgerContext(); + const { isFetching } = useGeneralLedgerContext(); return ( - ) + ); } diff --git a/client/src/containers/FinancialStatements/InventoryItemDetails/components.js b/client/src/containers/FinancialStatements/InventoryItemDetails/components.js index 58e44e528..915cd7ee2 100644 --- a/client/src/containers/FinancialStatements/InventoryItemDetails/components.js +++ b/client/src/containers/FinancialStatements/InventoryItemDetails/components.js @@ -1,6 +1,7 @@ import React from 'react'; import { Button } from '@blueprintjs/core'; import { Icon, If } from 'components'; +import { FormattedMessage as T } from 'react-intl'; import { dynamicColumns } from './utils'; import FinancialLoadingBar from '../FinancialLoadingBar'; @@ -51,15 +52,15 @@ export function InventoryItemDetailsAlerts() { if (isInventoryItemDetailsLoading) { return null; } - + return (
- Just a moment! We're - calculating your cost transactions and this doesn't take much time. - Please check after sometime. + + +
diff --git a/client/src/containers/FinancialStatements/InventoryValuation/InventoryValuationActionsBar.js b/client/src/containers/FinancialStatements/InventoryValuation/InventoryValuationActionsBar.js index 36be00363..6a5e2f553 100644 --- a/client/src/containers/FinancialStatements/InventoryValuation/InventoryValuationActionsBar.js +++ b/client/src/containers/FinancialStatements/InventoryValuation/InventoryValuationActionsBar.js @@ -54,7 +54,7 @@ function InventoryValuationActionsBar({ ); -} \ No newline at end of file +} diff --git a/client/src/containers/FinancialStatements/ProfitLossSheet/components.js b/client/src/containers/FinancialStatements/ProfitLossSheet/components.js index 6e69b4438..46a8f7ac1 100644 --- a/client/src/containers/FinancialStatements/ProfitLossSheet/components.js +++ b/client/src/containers/FinancialStatements/ProfitLossSheet/components.js @@ -1,6 +1,8 @@ import React from 'react'; import { Button } from '@blueprintjs/core'; import { Icon, If } from 'components'; +import { FormattedMessage as T } from 'react-intl'; + import { useProfitLossSheetContext } from './ProfitLossProvider'; import FinancialLoadingBar from '../FinancialLoadingBar'; @@ -21,11 +23,8 @@ export function ProfitLossSheetLoadingBar() { * Balance sheet alerts. */ export function ProfitLossSheetAlerts() { - const { - isLoading, - sheetRefetch, - profitLossSheet, - } = useProfitLossSheetContext(); + const { isLoading, sheetRefetch, profitLossSheet } = + useProfitLossSheetContext(); // Handle refetch the report sheet. const handleRecalcReport = () => { @@ -39,11 +38,11 @@ export function ProfitLossSheetAlerts() { return (
- Just a moment! We're - calculating your cost transactions and this doesn't take much time. - Please check after sometime.{' '} + + +
diff --git a/client/src/containers/FinancialStatements/PurchasesByItems/PurchasesByItemsActionsBar.js b/client/src/containers/FinancialStatements/PurchasesByItems/PurchasesByItemsActionsBar.js index 1d778db36..2842adafc 100644 --- a/client/src/containers/FinancialStatements/PurchasesByItems/PurchasesByItemsActionsBar.js +++ b/client/src/containers/FinancialStatements/PurchasesByItems/PurchasesByItemsActionsBar.js @@ -53,7 +53,7 @@ function PurchasesByItemsActionsBar({ - ) -} \ No newline at end of file + ); +} diff --git a/client/src/containers/FinancialStatements/VendorsBalanceSummary/VendorsBalanceSummaryHeaderGeneral.js b/client/src/containers/FinancialStatements/VendorsBalanceSummary/VendorsBalanceSummaryHeaderGeneral.js index 4649a5bd8..7ac062a36 100644 --- a/client/src/containers/FinancialStatements/VendorsBalanceSummary/VendorsBalanceSummaryHeaderGeneral.js +++ b/client/src/containers/FinancialStatements/VendorsBalanceSummary/VendorsBalanceSummaryHeaderGeneral.js @@ -50,7 +50,7 @@ export default function VendorsBalanceSummaryHeaderGeneral() { } name={'percentage'} {...field} /> diff --git a/client/src/containers/FinancialStatements/common.js b/client/src/containers/FinancialStatements/common.js index babc60c74..d9234a63d 100644 --- a/client/src/containers/FinancialStatements/common.js +++ b/client/src/containers/FinancialStatements/common.js @@ -3,21 +3,46 @@ import { transfromToSnakeCase, flatObject } from 'utils'; import intl from 'react-intl-universal'; export const displayColumnsByOptions = [ - { key: 'total', name: 'Total', type: 'total', by: '' }, - { key: 'year', name: 'Date/Year', type: 'date_periods', by: 'year' }, - { key: 'month', name: 'Date/Month', type: 'date_periods', by: 'month' }, - { key: 'week', name: 'Date/Week', type: 'date_periods', by: 'month' }, - { key: 'day', name: 'Date/Day', type: 'date_periods', by: 'day' }, - { key: 'quarter', name: 'Date/Quarter', type: 'date_periods', by: 'quarter' }, + { key: 'total', name: intl.get('total'), type: 'total', by: '' }, + { + key: 'year', + name: intl.get('date_year'), + type: 'date_periods', + by: 'year', + }, + { + key: 'month', + name: intl.get('date_month'), + type: 'date_periods', + by: 'month', + }, + { + key: 'week', + name: intl.get('date_week'), + type: 'date_periods', + by: 'month', + }, + { + key: 'day', + name: intl.get('date_day'), + type: 'date_periods', + by: 'day', + }, + { + key: 'quarter', + name: intl.get('date_quarter'), + type: 'date_periods', + by: 'quarter', + }, ]; export const dateRangeOptions = [ - { value: 'today', label: 'Today' }, - { value: 'this_week', label: 'This Week' }, - { value: 'this_month', label: 'This Month' }, - { value: 'this_quarter', label: 'This Quarter' }, - { value: 'this_year', label: 'This Year' }, - { value: 'custom', label: 'Custom Range' }, + { value: 'today', label: intl.get('today') }, + { value: 'this_week', label: intl.get('this_week') }, + { value: 'this_month', label: intl.get('this_month') }, + { value: 'this_quarter', label: intl.get('this_quarter') }, + { value: 'this_year', label: intl.get('this_year') }, + { value: 'custom', label: intl.get('custom_range') }, ]; export const filterAccountsOptions = [ @@ -34,7 +59,9 @@ export const filterAccountsOptions = [ { key: 'with-transactions', name: intl.get('accounts_with_transactions'), - hint: intl.get('include_accounts_once_has_transactions_on_given_date_period'), + hint: intl.get( + 'include_accounts_once_has_transactions_on_given_date_period', + ), }, ]; diff --git a/client/src/containers/FinancialStatements/reducers.js b/client/src/containers/FinancialStatements/reducers.js index add2c4f49..d74cb844e 100644 --- a/client/src/containers/FinancialStatements/reducers.js +++ b/client/src/containers/FinancialStatements/reducers.js @@ -1,5 +1,7 @@ +import React from 'react'; import { chain } from 'lodash'; import moment from 'moment'; +import { FormattedMessage as T } from 'react-intl'; export const balanceSheetRowsReducer = (accounts) => { return accounts.map((account) => { @@ -10,7 +12,7 @@ export const balanceSheetRowsReducer = (accounts) => { ...(account.total && account.children && account.children.length > 0 ? [ { - name: `Total ${account.name}`, + name: , row_types: ['total-row', account.section_type], total: { ...account.total }, ...(account.total_periods && { @@ -46,12 +48,12 @@ export const profitLossSheetReducer = (profitLoss) => { if (profitLoss.income) { results.push({ - name: 'Income', + name: , total: profitLoss.income.total, children: [ ...profitLoss.income.accounts, { - name: 'Total Income', + name: , total: profitLoss.income.total, total_periods: profitLoss.income.total_periods, rowTypes: ['income_total', 'section_total', 'total'], @@ -62,12 +64,12 @@ export const profitLossSheetReducer = (profitLoss) => { } if (profitLoss.cost_of_sales) { results.push({ - name: 'Cost of sales', + name: , total: profitLoss.cost_of_sales.total, children: [ ...profitLoss.cost_of_sales.accounts, { - name: 'Total cost of sales', + name: , total: profitLoss.cost_of_sales.total, total_periods: profitLoss.cost_of_sales.total_periods, rowTypes: ['cogs_total', 'section_total', 'total'], @@ -78,7 +80,7 @@ export const profitLossSheetReducer = (profitLoss) => { } if (profitLoss.gross_profit) { results.push({ - name: 'Gross profit', + name: , total: profitLoss.gross_profit.total, total_periods: profitLoss.gross_profit.total_periods, rowTypes: ['gross_total', 'section_total', 'total'], @@ -86,12 +88,12 @@ export const profitLossSheetReducer = (profitLoss) => { } if (profitLoss.expenses) { results.push({ - name: 'Expenses', + name: , total: profitLoss.expenses.total, children: [ ...profitLoss.expenses.accounts, { - name: 'Total Expenses', + name: , total: profitLoss.expenses.total, total_periods: profitLoss.expenses.total_periods, rowTypes: ['expenses_total', 'section_total', 'total'], @@ -102,7 +104,7 @@ export const profitLossSheetReducer = (profitLoss) => { } if (profitLoss.operating_profit) { results.push({ - name: 'Net Operating income', + name: , total: profitLoss.operating_profit.total, total_periods: profitLoss.income.total_periods, rowTypes: ['net_operating_total', 'section_total', 'total'], @@ -110,13 +112,13 @@ export const profitLossSheetReducer = (profitLoss) => { } if (profitLoss.other_income) { results.push({ - name: 'Other Income', + name: 'other_income', total: profitLoss.other_income.total, total_periods: profitLoss.other_income.total_periods, children: [ ...profitLoss.other_income.accounts, { - name: 'Total other income', + name: , total: profitLoss.other_income.total, total_periods: profitLoss.other_income.total_periods, rowTypes: ['expenses_total', 'section_total', 'total'], @@ -126,13 +128,13 @@ export const profitLossSheetReducer = (profitLoss) => { } if (profitLoss.other_expenses) { results.push({ - name: 'Other expenses', + name: , total: profitLoss.other_expenses.total, total_periods: profitLoss.other_expenses.total_periods, children: [ ...profitLoss.other_expenses.accounts, { - name: 'Total other expenses', + name: , total: profitLoss.other_expenses.total, total_periods: profitLoss.other_expenses.total_periods, rowTypes: ['expenses_total', 'section_total', 'total'], @@ -142,7 +144,7 @@ export const profitLossSheetReducer = (profitLoss) => { } if (profitLoss.net_other_income) { results.push({ - name: 'Net other income', + name: , total: profitLoss.net_other_income.total, total_periods: profitLoss.net_other_income.total_periods, rowTypes: ['net_other_income', 'section_total', 'total'], @@ -150,7 +152,7 @@ export const profitLossSheetReducer = (profitLoss) => { } if (profitLoss.net_income) { results.push({ - name: 'Net Income', + name: , total: profitLoss.net_income.total, total_periods: profitLoss.net_income.total_periods, rowTypes: ['net_income_total', 'section_total', 'total'], @@ -215,7 +217,7 @@ export const generalLedgerTableRowsReducer = (accounts) => { children: [ { ...account.opening_balance, - name: 'Opening balance', + name: , rowType: 'OPENING_BALANCE', date: moment(account.opening_balance.date).format('DD MMM YYYY'), }, @@ -227,7 +229,7 @@ export const generalLedgerTableRowsReducer = (accounts) => { })), { ...account.closing_balance, - name: 'Closing balance', + name: , rowType: 'CLOSING_BALANCE', date: moment(account.closing_balance.date).format('DD MMM YYYY'), }, @@ -357,4 +359,4 @@ export const salesByItemsReducer = (sheet) => { }); } return results; -}; \ No newline at end of file +}; diff --git a/client/src/containers/Items/ItemFormPrimarySection.js b/client/src/containers/Items/ItemFormPrimarySection.js index 66f2a2f46..db6ae61d8 100644 --- a/client/src/containers/Items/ItemFormPrimarySection.js +++ b/client/src/containers/Items/ItemFormPrimarySection.js @@ -7,7 +7,7 @@ import { Radio, Position, } from '@blueprintjs/core'; -import { FormattedMessage as T } from 'components'; +import { FormattedMessage as T, FormattedHTMLMessage } from 'components'; import { ErrorMessage, FastField } from 'formik'; import { CategoriesSelectList, @@ -41,18 +41,15 @@ export default function ItemFormPrimarySection() { const itemTypeHintContent = ( <>
- {'Service: '} - {'Services that you provide to customers. '} +
- {'Inventory: '} - {'Products you buy and/or sell and that you track quantities of.'} +
- {'Non-Inventory: '} - { - 'Products you buy and/or sell but don’t need to (or can’t) track quantities of, for example, nuts and bolts used in an installation.' - } +
); diff --git a/client/src/containers/Items/ItemsDataTable.js b/client/src/containers/Items/ItemsDataTable.js index d60463eb5..8f958651c 100644 --- a/client/src/containers/Items/ItemsDataTable.js +++ b/client/src/containers/Items/ItemsDataTable.js @@ -1,5 +1,6 @@ import React from 'react'; import { useHistory } from 'react-router-dom'; +import { FormattedMessage as T } from 'react-intl'; import { DataTable } from 'components'; @@ -36,13 +37,8 @@ function ItemsDataTable({ tableProps, }) { // Items list context. - const { - items, - pagination, - isItemsLoading, - isEmptyStatus, - isItemsFetching, - } = useItemsListContext(); + const { items, pagination, isItemsLoading, isEmptyStatus, isItemsFetching } = + useItemsListContext(); // Datatable columns. const columns = useItemsTableColumns(); @@ -134,7 +130,7 @@ function ItemsDataTable({ onMakeAdjustment: handleMakeAdjustment, onDuplicate: handleDuplicate, }} - noResults={'There is no items in the table yet.'} + noResults={} {...tableProps} /> ); diff --git a/client/src/containers/Preferences/Accountant/AccountantForm.js b/client/src/containers/Preferences/Accountant/AccountantForm.js index 5691b74b1..1cb7333bd 100644 --- a/client/src/containers/Preferences/Accountant/AccountantForm.js +++ b/client/src/containers/Preferences/Accountant/AccountantForm.js @@ -9,9 +9,13 @@ import { Intent, } from '@blueprintjs/core'; import { useHistory } from 'react-router-dom'; -import { AccountsSelectList, FieldRequiredHint } from 'components'; -import { FormattedMessage as T } from 'components'; import intl from 'react-intl-universal'; + +import { + FormattedMessage as T, + AccountsSelectList, + FieldRequiredHint, +} from 'components'; import { handleStringChange, inputIntent } from 'utils'; import { useAccountantFormContext } from './AccountantFormProvider'; @@ -22,8 +26,6 @@ import { useAccountantFormContext } from './AccountantFormProvider'; export default function AccountantForm() { const history = useHistory(); - - const { isSubmitting } = useFormikContext(); const handleCloseClick = () => { @@ -103,7 +105,7 @@ export default function AccountantForm() { setFieldValue('accounting_basis', _value); })} > - + diff --git a/client/src/containers/Setup/SetupCongratsPage.js b/client/src/containers/Setup/SetupCongratsPage.js index e68334f27..0eb7104f4 100644 --- a/client/src/containers/Setup/SetupCongratsPage.js +++ b/client/src/containers/Setup/SetupCongratsPage.js @@ -1,7 +1,8 @@ import React, { useCallback } from 'react'; import { Button, Intent } from '@blueprintjs/core'; -import { useHistory } from "react-router-dom"; +import { useHistory } from 'react-router-dom'; import WorkflowIcon from './WorkflowIcon'; +import { FormattedMessage as T } from 'react-intl'; import withOrganizationActions from 'containers/Organization/withOrganizationActions'; import 'style/pages/Setup/Congrats.scss'; @@ -11,18 +12,13 @@ import { compose } from 'utils'; /** * Setup congrats page. */ -function SetupCongratsPage({ - setOrganizationSetupCompleted, -}) { +function SetupCongratsPage({ setOrganizationSetupCompleted }) { const history = useHistory(); const handleBtnClick = useCallback(() => { setOrganizationSetupCompleted(false); history.push('/homepage'); - }, [ - setOrganizationSetupCompleted, - history, - ]); + }, [setOrganizationSetupCompleted, history]); return (
@@ -31,24 +27,20 @@ function SetupCongratsPage({
-

Congrats! You are ready to go

+

+ +

- It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. +

-
); } -export default compose( - withOrganizationActions, -)(SetupCongratsPage); \ No newline at end of file +export default compose(withOrganizationActions)(SetupCongratsPage); diff --git a/client/src/lang/en/index.json b/client/src/lang/en/index.json index cf99bf452..def7bf7f8 100644 --- a/client/src/lang/en/index.json +++ b/client/src/lang/en/index.json @@ -909,7 +909,7 @@ "accounting": "Accounting", "system": "SYSTEM", "it_s_time_to_send_estimates_to_your_customers": "It's time to send estimates to your customers", - "it_is_a_long_established_fact_that_a_reader": " It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.", + "it_is_a_long_established_fact_that_a_reader": "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.", "new_sale_estimate": "New sale estimate", "learn_more": "Learn more", "back_to_list": "Back to list.", @@ -1030,5 +1030,76 @@ "create_a_new_bill": "Create a new bill.", "create_a_new_make_journal": "Create a new Make Journal.", "create_a_new_item": "Create a new item.", - "close_and_open_sidebar": "Close and open sidebar." + "close_and_open_sidebar": "Close and open sidebar.", + "and_over": "And Over", + "date_year": "Date/Year", + "date_month": "Date/Month", + "date_week": "Date/Week", + "date_day": "Date/Day", + "date_quarter": "Date/Quarter", + "today": "Today", + "this_week": "This Week", + "this_month": "This Month", + "this_quarter": "This Quarter", + "this_year": "This Year", + "custom_range": "Custom Range", + "total_rows": "Total rows", + "always": "Always", + "none": "None", + "us_dollar": "US Dollar", + "euro": "Euro", + "libyan_diner": "Libyan Diner", + "english": "English", + "arabic": "Arabic", + "just_a_moment_we_re_calculating_your_cost_transactions": "Just a moment! We're calculating your cost transactions and this doesn't take much time.Please check after sometime.", + "refresh": "Refresh", + "total_name": "Total {name}", + "income": "Income", + "total_income": "Total Income", + "cost_of_sales": "Cost of sales", + "total_cost_of_sales": "Total cost of sales", + "gross_profit": "Gross profit", + "total_expenses": "Total Expenses", + "net_operating_income": "Net Operating income", + "other_income": "Other Income", + "total_other_income": "Total other income", + "other_expenses": "Other expenses", + "total_other_expenses": "Total other expenses", + "net_other_income": "Net other income", + "net_income": "Net Income", + "services_that_you_provide_to_customers": " Service : Services that you provide to customers.", + "products_you_buy_and_or_sell": " Inventory : Products you buy and/or sell and that you track quantities of.", + "products_you_buy_and_or_sell_but_don_t_need": " Non-Inventory: Products you buy and/or sell but don’t need to (or can’t) track quantities of, for example, nuts and bolts used in an installation.", + "there_is_no_items_in_the_table_yet": "There is no items in the table yet.", + "congrats_you_are_ready_to_go": "Congrats! You are ready to go", + "go_to_dashboard": "Go to dashboard", + "mr": "Mr.", + "mrs": "Mrs.", + "ms": "Ms.", + "miss": "Miss.", + "dr": "Dr.", + "all_accounts_": "All Accounts", + "search": "Search...", + "starter": "Starter", + "sale_and_purchase_invoices": "Sale and purchase invoices.", + "customers_vendors_accounts": "Customers/vendors accounts.", + "expense_tracking": "Expense tracking.", + "for_one_user_and_accountant": "For one user and accountant.", + "all_capital_starter_features": "All Capital Starter features.", + "multi_currency": "Multi-currency.", + "purchase_and_sell_orders": "Purchase and sell orders.", + "inventory_management": "Inventory management.", + "three_users_with_your_accountant": "Three users with your accountant.", + "advanced_financial_reports": "Advanced financial reports.", + "all_capital_essential_features": "All Capital Essential features.", + "track_multi_branches_and_locations": "Track multi-branches and locations.", + "projects_accounting_and_timesheets": "Projects accounting and timesheets.", + "accounting_dimensions": "Accounting dimensions", + "libya": "Libya", + "mm_dd_yy": "MM/DD/YY", + "dd_mm_yy": "DD/MM/YY", + "yy_mm_dd": "YY/MM/DD", + "mm_dd_yy_": "MM-DD-YY", + "dd_mm_yy_": "DD-MM-YY", + "yy_mm_dd_": "YY-MM-DD" } \ No newline at end of file diff --git a/client/src/style/fonts/NotoSansArabicUI-Black.woff b/client/src/style/fonts/NotoSansArabicUI-Black.woff deleted file mode 100644 index 369c3bf8e..000000000 Binary files a/client/src/style/fonts/NotoSansArabicUI-Black.woff and /dev/null differ diff --git a/client/src/style/fonts/NotoSansArabicUI-Bold.woff b/client/src/style/fonts/NotoSansArabicUI-Bold.woff deleted file mode 100644 index 7ac60a841..000000000 Binary files a/client/src/style/fonts/NotoSansArabicUI-Bold.woff and /dev/null differ diff --git a/client/src/style/fonts/NotoSansArabicUI-ExtraBold.woff b/client/src/style/fonts/NotoSansArabicUI-ExtraBold.woff deleted file mode 100644 index 8c2990912..000000000 Binary files a/client/src/style/fonts/NotoSansArabicUI-ExtraBold.woff and /dev/null differ diff --git a/client/src/style/fonts/NotoSansArabicUI-ExtraLight.woff b/client/src/style/fonts/NotoSansArabicUI-ExtraLight.woff deleted file mode 100644 index 0a0859cb7..000000000 Binary files a/client/src/style/fonts/NotoSansArabicUI-ExtraLight.woff and /dev/null differ diff --git a/client/src/style/fonts/NotoSansArabicUI-Light.woff b/client/src/style/fonts/NotoSansArabicUI-Light.woff deleted file mode 100644 index 697c88ab1..000000000 Binary files a/client/src/style/fonts/NotoSansArabicUI-Light.woff and /dev/null differ diff --git a/client/src/style/fonts/NotoSansArabicUI-Medium.woff b/client/src/style/fonts/NotoSansArabicUI-Medium.woff deleted file mode 100644 index 08d8cd534..000000000 Binary files a/client/src/style/fonts/NotoSansArabicUI-Medium.woff and /dev/null differ diff --git a/client/src/style/fonts/NotoSansArabicUI-Regular.woff b/client/src/style/fonts/NotoSansArabicUI-Regular.woff deleted file mode 100644 index 900ec2804..000000000 Binary files a/client/src/style/fonts/NotoSansArabicUI-Regular.woff and /dev/null differ diff --git a/client/src/style/fonts/NotoSansArabicUI-SemiBold.woff b/client/src/style/fonts/NotoSansArabicUI-SemiBold.woff deleted file mode 100644 index a88f6d883..000000000 Binary files a/client/src/style/fonts/NotoSansArabicUI-SemiBold.woff and /dev/null differ diff --git a/client/src/style/fonts/NotoSansArabicUI-SemiCondensed.woff b/client/src/style/fonts/NotoSansArabicUI-SemiCondensed.woff new file mode 100644 index 000000000..f5ca1cafd Binary files /dev/null and b/client/src/style/fonts/NotoSansArabicUI-SemiCondensed.woff differ diff --git a/client/src/style/fonts/NotoSansArabicUI-SemiCondensedBlack.woff b/client/src/style/fonts/NotoSansArabicUI-SemiCondensedBlack.woff new file mode 100644 index 000000000..f0b741a49 Binary files /dev/null and b/client/src/style/fonts/NotoSansArabicUI-SemiCondensedBlack.woff differ diff --git a/client/src/style/fonts/NotoSansArabicUI-SemiCondensedMedium.woff b/client/src/style/fonts/NotoSansArabicUI-SemiCondensedMedium.woff new file mode 100644 index 000000000..ca9612a75 Binary files /dev/null and b/client/src/style/fonts/NotoSansArabicUI-SemiCondensedMedium.woff differ diff --git a/client/src/style/fonts/NotoSansArabicUI-SemiCondensedSemiBold.woff b/client/src/style/fonts/NotoSansArabicUI-SemiCondensedSemiBold.woff new file mode 100644 index 000000000..c9270c494 Binary files /dev/null and b/client/src/style/fonts/NotoSansArabicUI-SemiCondensedSemiBold.woff differ diff --git a/client/src/style/fonts/NotoSansArabicUI-Thin.woff b/client/src/style/fonts/NotoSansArabicUI-Thin.woff deleted file mode 100644 index 4b4d7906c..000000000 Binary files a/client/src/style/fonts/NotoSansArabicUI-Thin.woff and /dev/null differ diff --git a/client/src/style/pages/fonts.scss b/client/src/style/pages/fonts.scss index dac97d806..67804dae7 100644 --- a/client/src/style/pages/fonts.scss +++ b/client/src/style/pages/fonts.scss @@ -34,7 +34,7 @@ @font-face { font-family: Noto Sans Arabic; src: local('Noto Sans'), - url('../fonts/NotoSansArabicUI-Regular.woff') format('woff'); + url('../fonts/NotoSansArabicUI-SemiCondensed.woff') format('woff'); font-style: normal; font-weight: 400; font-display: swap; @@ -44,57 +44,17 @@ @font-face { font-family: Noto Sans Arabic; src: local('Noto Sans'), - url('../fonts/NotoSansArabicUI-Black.woff') format('woff'); + url('../fonts/NotoSansArabicUI-SemiCondensedBlack.woff') format('woff'); font-style: normal; font-weight: 900; font-display: swap; } -// arabic Bold -@font-face { - font-family: Noto Sans Arabic; - src: local('Noto Sans'), - url('../fonts/NotoSansArabicUI-Bold.woff') format('woff'); - font-style: normal; - font-weight: 700; - font-display: swap; -} - -// arabic ExtraBold -@font-face { - font-family: Noto Sans Arabic; - src: local('Noto Sans'), - url('../fonts/NotoSansArabicUI-ExtraBold.woff') format('woff'); - font-style: normal; - font-weight: 800; - font-display: swap; -} - -//arabic light -@font-face { - font-family: Noto Sans Arabic; - src: local('Noto Sans'), - url('../fonts/NotoSansArabicUI-Light.woff') format('woff'); - font-style: normal; - font-weight: 300; - font-display: swap; -} - -//arabic ExtraLight -@font-face { - font-family: Noto Sans Arabic; - src: local('Noto Sans'), - url('../fonts/NotoSansArabicUI-ExtraLight.woff') format('woff'); - font-style: normal; - font-weight: 200; - font-display: swap; -} - //arabic Medium @font-face { font-family: Noto Sans Arabic; src: local('Noto Sans'), - url('../fonts/NotoSansArabicUI-Medium.woff') format('woff'); + url('../fonts/NotoSansArabicUI-SemiCondensedMedium.woff') format('woff'); font-style: normal; font-weight: 500; font-display: swap; @@ -104,18 +64,8 @@ @font-face { font-family: Noto Sans Arabic; src: local('Noto Sans'), - url('../fonts/NotoSansArabicUI-SemiBold.woff') format('woff'); + url('../fonts/NotoSansArabicUI-SemiCondensedSemiBold.woff') format('woff'); font-style: normal; font-weight: 600; font-display: swap; } - -//arabic Thin -@font-face { - font-family: Noto Sans Arabic; - src: local('Noto Sans'), - url('../fonts/NotoSansArabicUI-Thin.woff') format('woff'); - font-style: normal; - font-weight: 100; - font-display: swap; -}