mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-19 22:30:31 +00:00
WIP: Arabic localization.
This commit is contained in:
@@ -1,5 +1,3 @@
|
|||||||
|
import intl from 'react-intl-universal';
|
||||||
|
|
||||||
|
export default [{ name: intl.get('libya'), value: 'libya' }];
|
||||||
export default [
|
|
||||||
{ name: 'Libya', value: 'libya' },
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
|
import intl from 'react-intl-universal';
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
{ name: 'US Dollar', code: 'USD' },
|
{ name: intl.get('us_dollar'), code: 'USD' },
|
||||||
{ name: 'Euro', code: 'EUR' },
|
{ name: intl.get('euro'), code: 'EUR' },
|
||||||
{ name: 'Libyan Dinar ', code: 'LYD' },
|
{ name: intl.get('libyan_diner'), code: 'LYD' },
|
||||||
]
|
];
|
||||||
|
|||||||
@@ -1,40 +1,41 @@
|
|||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
import intl from 'react-intl-universal';
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
name: 'MM/DD/YY',
|
name: intl.get('mm_dd_yy'),
|
||||||
label: `${moment().format('MM/DD/YYYY')}`,
|
label: `${moment().format('MM/DD/YYYY')}`,
|
||||||
value: 'mm/dd/yy',
|
value: 'mm/dd/yy',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 2,
|
id: 2,
|
||||||
name: 'DD/MM/YY',
|
name: intl.get('dd_mm_yy'),
|
||||||
label: `${moment().format('DD/MM/YYYY')}`,
|
label: `${moment().format('DD/MM/YYYY')}`,
|
||||||
value: 'dd/mm/yy',
|
value: 'dd/mm/yy',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 3,
|
id: 3,
|
||||||
name: 'YY/MM/DD',
|
name: intl.get('yy_mm_dd'),
|
||||||
label: `${moment().format('YYYY/MM/DD')}`,
|
label: `${moment().format('YYYY/MM/DD')}`,
|
||||||
value: 'yy/mm/dd',
|
value: 'yy/mm/dd',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 4,
|
id: 4,
|
||||||
name: 'MM-DD-YY',
|
name: intl.get('mm_dd_yy'),
|
||||||
label: `${moment().format('MM-DD-YYYY')}`,
|
label: `${moment().format('MM-DD-YYYY')}`,
|
||||||
value: 'mm-dd-yy',
|
value: 'mm-dd-yy',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 5,
|
id: 5,
|
||||||
name: 'DD-MM-YY',
|
name: intl.get('dd_mm_yy_'),
|
||||||
label: `${moment().format('DD-MM-YYYY')}`,
|
label: `${moment().format('DD-MM-YYYY')}`,
|
||||||
value: 'dd-mm-yy',
|
value: 'dd-mm-yy',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 6,
|
id: 6,
|
||||||
name: 'YY-MM-DD',
|
name: intl.get('yy_mm_dd_'),
|
||||||
label: `${moment().format('YYYY-MM-DD')}`,
|
label: `${moment().format('YYYY-MM-DD')}`,
|
||||||
value: 'yy-mm-dd',
|
value: 'yy-mm-dd',
|
||||||
},
|
},
|
||||||
]
|
];
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
import intl from 'react-intl-universal';
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
{ name: 'English', value: 'en' },
|
{ name: intl.get('english'), value: 'en' },
|
||||||
{ name: 'Arabic', value: 'ar' },
|
{ name: intl.get('arabic'), value: 'ar' },
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
|
import intl from 'react-intl-universal';
|
||||||
|
|
||||||
export const moneyFormat = [
|
export const moneyFormat = [
|
||||||
{ key: 'total', text: 'Total rows' },
|
{ key: 'total', text: intl.get('total_rows') },
|
||||||
{ key: 'always', text: 'Always' },
|
{ key: 'always', text: intl.get('always') },
|
||||||
{ key: 'none', text: 'None' },
|
{ key: 'none', text: intl.get('none') },
|
||||||
];
|
];
|
||||||
|
|
||||||
export const negativeFormat = [
|
export const negativeFormat = [
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import React, { useState, useCallback, useEffect, useMemo } from 'react';
|
import React, { useState, useCallback, useEffect, useMemo } from 'react';
|
||||||
import { MenuItem } from '@blueprintjs/core';
|
import { MenuItem } from '@blueprintjs/core';
|
||||||
import { Suggest } from '@blueprintjs/select';
|
import { Suggest } from '@blueprintjs/select';
|
||||||
|
import intl from 'react-intl-universal';
|
||||||
|
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { CLASSES } from 'common/classes';
|
import { CLASSES } from 'common/classes';
|
||||||
@@ -15,7 +16,7 @@ export default function AccountsSuggestField({
|
|||||||
accounts,
|
accounts,
|
||||||
initialAccountId,
|
initialAccountId,
|
||||||
selectedAccountId,
|
selectedAccountId,
|
||||||
defaultSelectText = 'Select account',
|
defaultSelectText = intl.formatMessage({ id: 'select_account' }),
|
||||||
popoverFill = false,
|
popoverFill = false,
|
||||||
onAccountSelected,
|
onAccountSelected,
|
||||||
|
|
||||||
@@ -32,7 +33,7 @@ export default function AccountsSuggestField({
|
|||||||
filterByRootTypes,
|
filterByRootTypes,
|
||||||
filterByParentTypes,
|
filterByParentTypes,
|
||||||
filterByTypes,
|
filterByTypes,
|
||||||
filterByNormal,
|
filterByNormal,
|
||||||
});
|
});
|
||||||
return filteredAccounts;
|
return filteredAccounts;
|
||||||
}, [
|
}, [
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import { QueryClientProvider, QueryClient } from 'react-query';
|
|||||||
import { ReactQueryDevtools } from 'react-query/devtools';
|
import { ReactQueryDevtools } from 'react-query/devtools';
|
||||||
|
|
||||||
import 'style/App.scss';
|
import 'style/App.scss';
|
||||||
|
import 'moment/locale/ar-ly';
|
||||||
|
import 'moment/locale/es-us'
|
||||||
|
|
||||||
import AppIntlLoader from './AppIntlLoader';
|
import AppIntlLoader from './AppIntlLoader';
|
||||||
import PrivateRoute from 'components/Guards/PrivateRoute';
|
import PrivateRoute from 'components/Guards/PrivateRoute';
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import moment from 'moment';
|
||||||
import intl from 'react-intl-universal';
|
import intl from 'react-intl-universal';
|
||||||
import { find } from 'lodash';
|
import { find } from 'lodash';
|
||||||
import rtlDetect from 'rtl-detect';
|
import rtlDetect from 'rtl-detect';
|
||||||
@@ -68,6 +69,7 @@ export default function AppIntlLoader({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
|
moment.locale('ar-ly');
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
});
|
});
|
||||||
}, [currentLocale, setIsLoading]);
|
}, [currentLocale, setIsLoading]);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import React, { useRef, useCallback, useMemo } from 'react';
|
import React, { useRef, useCallback, useMemo } from 'react';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { useCellAutoFocus } from 'hooks';
|
import { useCellAutoFocus } from 'hooks';
|
||||||
|
import intl from 'react-intl-universal';
|
||||||
|
|
||||||
import AccountsSuggestField from 'components/AccountsSuggestField';
|
import AccountsSuggestField from 'components/AccountsSuggestField';
|
||||||
|
|
||||||
@@ -61,6 +62,7 @@ export default function AccountCellRenderer({
|
|||||||
filterByTypes={filterAccountsByTypes}
|
filterByTypes={filterAccountsByTypes}
|
||||||
inputProps={{
|
inputProps={{
|
||||||
inputRef: (ref) => (accountRef.current = ref),
|
inputRef: (ref) => (accountRef.current = ref),
|
||||||
|
placeholder: intl.get('search'),
|
||||||
}}
|
}}
|
||||||
openOnKeyDown={true}
|
openOnKeyDown={true}
|
||||||
blurOnSelectClose={false}
|
blurOnSelectClose={false}
|
||||||
|
|||||||
@@ -4,7 +4,13 @@ import intl from 'react-intl-universal';
|
|||||||
import { ListSelect } from 'components';
|
import { ListSelect } from 'components';
|
||||||
|
|
||||||
export default function SalutationList({ ...restProps }) {
|
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) => ({
|
const items = saluations.map((saluation) => ({
|
||||||
key: saluation,
|
key: saluation,
|
||||||
label: saluation,
|
label: saluation,
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import React, { useMemo, useCallback } from 'react';
|
import React, { useMemo, useCallback } from 'react';
|
||||||
import { Alignment, Navbar, NavbarGroup } from '@blueprintjs/core';
|
import { Alignment, Navbar, NavbarGroup } from '@blueprintjs/core';
|
||||||
import { pick } from 'lodash';
|
import { pick } from 'lodash';
|
||||||
|
import intl from 'react-intl-universal';
|
||||||
|
|
||||||
|
|
||||||
import { DashboardViewsTabs } from 'components';
|
import { DashboardViewsTabs } from 'components';
|
||||||
import { useAccountsChartContext } from 'containers/Accounts/AccountsChartProvider';
|
import { useAccountsChartContext } from 'containers/Accounts/AccountsChartProvider';
|
||||||
@@ -45,7 +47,7 @@ function AccountsViewsTabs({
|
|||||||
<Navbar className="navbar--dashboard-views">
|
<Navbar className="navbar--dashboard-views">
|
||||||
<NavbarGroup align={Alignment.LEFT}>
|
<NavbarGroup align={Alignment.LEFT}>
|
||||||
<DashboardViewsTabs
|
<DashboardViewsTabs
|
||||||
defaultTabText={'All Accounts'}
|
defaultTabText={intl.get('all_accounts_')}
|
||||||
currentViewId={accountsCustomViewId}
|
currentViewId={accountsCustomViewId}
|
||||||
resourceName={'accounts'}
|
resourceName={'accounts'}
|
||||||
onChange={handleTabChange}
|
onChange={handleTabChange}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ export default function CurrencyFormFields() {
|
|||||||
meta: { error, touched },
|
meta: { error, touched },
|
||||||
}) => (
|
}) => (
|
||||||
<FormGroup
|
<FormGroup
|
||||||
label={'Currency code'}
|
label={<T id={'currency_code'} />}
|
||||||
className={classNames(CLASSES.FILL, 'form-group--type')}
|
className={classNames(CLASSES.FILL, 'form-group--type')}
|
||||||
>
|
>
|
||||||
<ListSelect
|
<ListSelect
|
||||||
@@ -47,7 +47,7 @@ export default function CurrencyFormFields() {
|
|||||||
selectedItemProp={'currency_code'}
|
selectedItemProp={'currency_code'}
|
||||||
selectedItem={value}
|
selectedItem={value}
|
||||||
textProp={'formatted_name'}
|
textProp={'formatted_name'}
|
||||||
defaultText={'Select currency code'}
|
defaultText={<T id={'select_currency_code'} />}
|
||||||
onItemSelect={(currency) => {
|
onItemSelect={(currency) => {
|
||||||
setFieldValue('currency_code', currency.currency_code);
|
setFieldValue('currency_code', currency.currency_code);
|
||||||
setFieldValue('currency_name', currency.name);
|
setFieldValue('currency_name', currency.name);
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ export default function DrawerTemplateTable({ tableData, currencyCode }) {
|
|||||||
Header: intl.get('qty'),
|
Header: intl.get('qty'),
|
||||||
accessor: 'quantity',
|
accessor: 'quantity',
|
||||||
disableSortBy: true,
|
disableSortBy: true,
|
||||||
width: 50,
|
width: 80,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Header: intl.get('Total'),
|
Header: intl.get('total'),
|
||||||
accessor: ({ total }) => (
|
accessor: ({ total }) => (
|
||||||
<Money amount={total} currency={currencyCode} />
|
<Money amount={total} currency={currencyCode} />
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import React, { useMemo } from 'react';
|
import React, { useMemo } from 'react';
|
||||||
|
import intl from 'react-intl-universal';
|
||||||
import { useAPAgingSummaryContext } from './APAgingSummaryProvider';
|
import { useAPAgingSummaryContext } from './APAgingSummaryProvider';
|
||||||
import { getColumnWidth } from 'utils';
|
import { getColumnWidth } from 'utils';
|
||||||
import { FormattedMessage as T } from 'components';
|
import { FormattedMessage as T } from 'components';
|
||||||
@@ -16,7 +17,9 @@ export const useAPAgingSummaryColumns = () => {
|
|||||||
const agingColumns = React.useMemo(() => {
|
const agingColumns = React.useMemo(() => {
|
||||||
return columns.map(
|
return columns.map(
|
||||||
(agingColumn) =>
|
(agingColumn) =>
|
||||||
`${agingColumn.before_days} - ${agingColumn.to_days || 'And Over'}`,
|
`${agingColumn.before_days} - ${
|
||||||
|
agingColumn.to_days || intl.get('and_over')
|
||||||
|
}`,
|
||||||
);
|
);
|
||||||
}, [columns]);
|
}, [columns]);
|
||||||
|
|
||||||
@@ -60,14 +63,12 @@ export const useAPAgingSummaryColumns = () => {
|
|||||||
/**
|
/**
|
||||||
* A/P aging summary sheet loading bar.
|
* A/P aging summary sheet loading bar.
|
||||||
*/
|
*/
|
||||||
export function APAgingSummarySheetLoadingBar() {
|
export function APAgingSummarySheetLoadingBar() {
|
||||||
const {
|
const { isAPAgingFetching } = useAPAgingSummaryContext();
|
||||||
isAPAgingFetching
|
|
||||||
} = useAPAgingSummaryContext();
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<If condition={isAPAgingFetching}>
|
<If condition={isAPAgingFetching}>
|
||||||
<FinancialLoadingBar />
|
<FinancialLoadingBar />
|
||||||
</If>
|
</If>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import intl from 'react-intl-universal';
|
||||||
import { useARAgingSummaryContext } from './ARAgingSummaryProvider';
|
import { useARAgingSummaryContext } from './ARAgingSummaryProvider';
|
||||||
import { getColumnWidth } from 'utils';
|
import { getColumnWidth } from 'utils';
|
||||||
import { FormattedMessage as T } from 'components';
|
import { FormattedMessage as T } from 'components';
|
||||||
@@ -16,7 +17,9 @@ export const useARAgingSummaryColumns = () => {
|
|||||||
const agingColumns = React.useMemo(() => {
|
const agingColumns = React.useMemo(() => {
|
||||||
return columns.map(
|
return columns.map(
|
||||||
(agingColumn) =>
|
(agingColumn) =>
|
||||||
`${agingColumn.before_days} - ${agingColumn.to_days || 'And Over'}`,
|
`${agingColumn.before_days} - ${
|
||||||
|
agingColumn.to_days || intl.get('and_over')
|
||||||
|
}`,
|
||||||
);
|
);
|
||||||
}, [columns]);
|
}, [columns]);
|
||||||
|
|
||||||
@@ -62,14 +65,12 @@ export const useARAgingSummaryColumns = () => {
|
|||||||
/**
|
/**
|
||||||
* A/R aging summary sheet loading bar.
|
* A/R aging summary sheet loading bar.
|
||||||
*/
|
*/
|
||||||
export function ARAgingSummarySheetLoadingBar() {
|
export function ARAgingSummarySheetLoadingBar() {
|
||||||
const {
|
const { isARAgingFetching } = useARAgingSummaryContext();
|
||||||
isARAgingFetching,
|
|
||||||
} = useARAgingSummaryContext();
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<If condition={isARAgingFetching}>
|
<If condition={isARAgingFetching}>
|
||||||
<FinancialLoadingBar />
|
<FinancialLoadingBar />
|
||||||
</If>
|
</If>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,34 +2,32 @@ import React from 'react';
|
|||||||
import { Button } from '@blueprintjs/core';
|
import { Button } from '@blueprintjs/core';
|
||||||
import { Icon, If } from 'components';
|
import { Icon, If } from 'components';
|
||||||
import { useBalanceSheetContext } from './BalanceSheetProvider';
|
import { useBalanceSheetContext } from './BalanceSheetProvider';
|
||||||
|
import { FormattedMessage as T } from 'react-intl';
|
||||||
import FinancialLoadingBar from '../FinancialLoadingBar';
|
import FinancialLoadingBar from '../FinancialLoadingBar';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Balance sheet alerts.
|
* Balance sheet alerts.
|
||||||
*/
|
*/
|
||||||
export function BalanceSheetAlerts() {
|
export function BalanceSheetAlerts() {
|
||||||
const {
|
const { isLoading, refetchBalanceSheet, balanceSheet } =
|
||||||
isLoading,
|
useBalanceSheetContext();
|
||||||
refetchBalanceSheet,
|
|
||||||
balanceSheet,
|
|
||||||
} = useBalanceSheetContext();
|
|
||||||
|
|
||||||
// Handle refetch the report sheet.
|
// Handle refetch the report sheet.
|
||||||
const handleRecalcReport = () => {
|
const handleRecalcReport = () => {
|
||||||
refetchBalanceSheet();
|
refetchBalanceSheet();
|
||||||
};
|
};
|
||||||
// Can't display any error if the report is loading.
|
// Can't display any error if the report is loading.
|
||||||
if (isLoading) { return null; }
|
if (isLoading) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<If condition={balanceSheet.meta.is_cost_compute_running}>
|
<If condition={balanceSheet.meta.is_cost_compute_running}>
|
||||||
<div class="alert-compute-running">
|
<div class="alert-compute-running">
|
||||||
<Icon icon="info-block" iconSize={12} /> Just a moment! We're
|
<Icon icon="info-block" iconSize={12} />{' '}
|
||||||
calculating your cost transactions and this doesn't take much time.
|
<T id={'just_a_moment_we_re_calculating_your_cost_transactions'} />
|
||||||
Please check after sometime.{' '}
|
|
||||||
|
|
||||||
<Button onClick={handleRecalcReport} minimal={true} small={true}>
|
<Button onClick={handleRecalcReport} minimal={true} small={true}>
|
||||||
Refresh
|
<T id={'refresh'} />
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</If>
|
</If>
|
||||||
@@ -40,13 +38,11 @@ export function BalanceSheetAlerts() {
|
|||||||
* Balance sheet loading bar.
|
* Balance sheet loading bar.
|
||||||
*/
|
*/
|
||||||
export function BalanceSheetLoadingBar() {
|
export function BalanceSheetLoadingBar() {
|
||||||
const {
|
const { isFetching } = useBalanceSheetContext();
|
||||||
isFetching
|
|
||||||
} = useBalanceSheetContext();
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<If condition={isFetching}>
|
<If condition={isFetching}>
|
||||||
<FinancialLoadingBar />
|
<FinancialLoadingBar />
|
||||||
</If>
|
</If>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Button } from '@blueprintjs/core';
|
import { Button } from '@blueprintjs/core';
|
||||||
import { Icon, If } from 'components';
|
import { Icon, If } from 'components';
|
||||||
|
import { FormattedMessage as T } from 'react-intl';
|
||||||
|
|
||||||
import { dynamicColumns } from './utils';
|
import { dynamicColumns } from './utils';
|
||||||
import { useCashFlowStatementContext } from './CashFlowStatementProvider';
|
import { useCashFlowStatementContext } from './CashFlowStatementProvider';
|
||||||
@@ -52,11 +53,10 @@ export function CashFlowStatementAlerts() {
|
|||||||
return (
|
return (
|
||||||
<If condition={cashFlowStatement.meta.is_cost_compute_running}>
|
<If condition={cashFlowStatement.meta.is_cost_compute_running}>
|
||||||
<div className="alert-compute-running">
|
<div className="alert-compute-running">
|
||||||
<Icon icon="info-block" iconSize={12} /> Just a moment! We're
|
<Icon icon="info-block" iconSize={12} />
|
||||||
calculating your cost transactions and this doesn't take much time.
|
<T id={'just_a_moment_we_re_calculating_your_cost_transactions'} />
|
||||||
Please check after sometime.
|
|
||||||
<Button onClick={handleRecalcReport} minimal={true} small={true}>
|
<Button onClick={handleRecalcReport} minimal={true} small={true}>
|
||||||
Refresh
|
<T id={'refresh'} />
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</If>
|
</If>
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ export default function CustomersBalanceSummaryGeneralPanel() {
|
|||||||
inline={true}
|
inline={true}
|
||||||
name={'percentage'}
|
name={'percentage'}
|
||||||
small={true}
|
small={true}
|
||||||
label={'Percentage Of Column'}
|
label={<T id={'percentage_of_column'}/>}
|
||||||
{...field}
|
{...field}
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ import React from 'react';
|
|||||||
import intl from 'react-intl-universal';
|
import intl from 'react-intl-universal';
|
||||||
import { Button } from '@blueprintjs/core';
|
import { Button } from '@blueprintjs/core';
|
||||||
import { Icon, If } from 'components';
|
import { Icon, If } from 'components';
|
||||||
|
import { FormattedMessage as T } from 'react-intl';
|
||||||
|
|
||||||
import { getForceWidth, getColumnWidth } from 'utils';
|
import { getForceWidth, getColumnWidth } from 'utils';
|
||||||
import { useGeneralLedgerContext } from './GeneralLedgerProvider';
|
import { useGeneralLedgerContext } from './GeneralLedgerProvider';
|
||||||
import FinancialLoadingBar from '../FinancialLoadingBar';
|
import FinancialLoadingBar from '../FinancialLoadingBar';
|
||||||
@@ -68,7 +70,6 @@ export function useGeneralLedgerTableColumns() {
|
|||||||
accessor: 'formatted_credit',
|
accessor: 'formatted_credit',
|
||||||
className: 'credit',
|
className: 'credit',
|
||||||
width: getColumnWidth(tableRows, 'formatted_credit', {
|
width: getColumnWidth(tableRows, 'formatted_credit', {
|
||||||
|
|
||||||
minWidth: 100,
|
minWidth: 100,
|
||||||
magicSpacing: 10,
|
magicSpacing: 10,
|
||||||
}),
|
}),
|
||||||
@@ -105,33 +106,28 @@ export function useGeneralLedgerTableColumns() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* General ledger sheet alerts.
|
* General ledger sheet alerts.
|
||||||
*/
|
*/
|
||||||
export function GeneralLedgerSheetAlerts() {
|
export function GeneralLedgerSheetAlerts() {
|
||||||
const {
|
const { generalLedger, isLoading, sheetRefresh } = useGeneralLedgerContext();
|
||||||
generalLedger,
|
|
||||||
isLoading,
|
|
||||||
sheetRefresh
|
|
||||||
} = useGeneralLedgerContext();
|
|
||||||
|
|
||||||
// Handle refetch the report sheet.
|
// Handle refetch the report sheet.
|
||||||
const handleRecalcReport = () => {
|
const handleRecalcReport = () => {
|
||||||
sheetRefresh();
|
sheetRefresh();
|
||||||
};
|
};
|
||||||
// Can't display any error if the report is loading.
|
// Can't display any error if the report is loading.
|
||||||
if (isLoading) { return null; }
|
if (isLoading) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<If condition={generalLedger.meta.is_cost_compute_running}>
|
<If condition={generalLedger.meta.is_cost_compute_running}>
|
||||||
<div class="alert-compute-running">
|
<div class="alert-compute-running">
|
||||||
<Icon icon="info-block" iconSize={12} /> Just a moment! We're
|
<Icon icon="info-block" iconSize={12} />
|
||||||
calculating your cost transactions and this doesn't take much time.
|
<T id={'just_a_moment_we_re_calculating_your_cost_transactions'} />
|
||||||
Please check after sometime.{' '}
|
|
||||||
|
|
||||||
<Button onClick={handleRecalcReport} minimal={true} small={true}>
|
<Button onClick={handleRecalcReport} minimal={true} small={true}>
|
||||||
Refresh
|
<T id={'refresh'} />
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</If>
|
</If>
|
||||||
@@ -142,13 +138,11 @@ export function useGeneralLedgerTableColumns() {
|
|||||||
* General ledger sheet loading bar.
|
* General ledger sheet loading bar.
|
||||||
*/
|
*/
|
||||||
export function GeneralLedgerSheetLoadingBar() {
|
export function GeneralLedgerSheetLoadingBar() {
|
||||||
const {
|
const { isFetching } = useGeneralLedgerContext();
|
||||||
isFetching,
|
|
||||||
} = useGeneralLedgerContext();
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<If condition={isFetching}>
|
<If condition={isFetching}>
|
||||||
<FinancialLoadingBar />
|
<FinancialLoadingBar />
|
||||||
</If>
|
</If>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Button } from '@blueprintjs/core';
|
import { Button } from '@blueprintjs/core';
|
||||||
import { Icon, If } from 'components';
|
import { Icon, If } from 'components';
|
||||||
|
import { FormattedMessage as T } from 'react-intl';
|
||||||
|
|
||||||
import { dynamicColumns } from './utils';
|
import { dynamicColumns } from './utils';
|
||||||
import FinancialLoadingBar from '../FinancialLoadingBar';
|
import FinancialLoadingBar from '../FinancialLoadingBar';
|
||||||
@@ -51,15 +52,15 @@ export function InventoryItemDetailsAlerts() {
|
|||||||
if (isInventoryItemDetailsLoading) {
|
if (isInventoryItemDetailsLoading) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<If condition={inventoryItemDetails.meta.is_cost_compute_running}>
|
<If condition={inventoryItemDetails.meta.is_cost_compute_running}>
|
||||||
<div className="alert-compute-running">
|
<div className="alert-compute-running">
|
||||||
<Icon icon="info-block" iconSize={12} /> Just a moment! We're
|
<Icon icon="info-block" iconSize={12} />
|
||||||
calculating your cost transactions and this doesn't take much time.
|
<T id={'just_a_moment_we_re_calculating_your_cost_transactions'} />
|
||||||
Please check after sometime.
|
|
||||||
<Button onClick={handleRecalcReport} minimal={true} small={true}>
|
<Button onClick={handleRecalcReport} minimal={true} small={true}>
|
||||||
Refresh
|
<T id={'refresh'} />
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</If>
|
</If>
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ function InventoryValuationActionsBar({
|
|||||||
<NavbarGroup>
|
<NavbarGroup>
|
||||||
<Button
|
<Button
|
||||||
className={classNames(Classes.MINIMAL, 'button--gray-highlight')}
|
className={classNames(Classes.MINIMAL, 'button--gray-highlight')}
|
||||||
text={'Re-calc Report'}
|
text={<T id={'recalc_report'} />}
|
||||||
onClick={handleRecalculateReport}
|
onClick={handleRecalculateReport}
|
||||||
icon={<Icon icon="refresh-16" iconSize={16} />}
|
icon={<Icon icon="refresh-16" iconSize={16} />}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ function JournalHeader({
|
|||||||
<Tabs animate={true} vertical={true} renderActiveTabPanelOnly={true}>
|
<Tabs animate={true} vertical={true} renderActiveTabPanelOnly={true}>
|
||||||
<Tab
|
<Tab
|
||||||
id="general"
|
id="general"
|
||||||
title={'General'}
|
title={<T id={'general'} />}
|
||||||
panel={<JournalSheetHeaderGeneral />}
|
panel={<JournalSheetHeaderGeneral />}
|
||||||
/>
|
/>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import React from 'react';
|
|||||||
import intl from 'react-intl-universal';
|
import intl from 'react-intl-universal';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import { Button } from '@blueprintjs/core';
|
import { Button } from '@blueprintjs/core';
|
||||||
import { Icon, If } from 'components';
|
import { Icon, If, FormattedMessage as T } from 'components';
|
||||||
import { useJournalSheetContext } from './JournalProvider';
|
import { useJournalSheetContext } from './JournalProvider';
|
||||||
import FinancialLoadingBar from '../FinancialLoadingBar';
|
import FinancialLoadingBar from '../FinancialLoadingBar';
|
||||||
|
|
||||||
@@ -10,7 +10,6 @@ import FinancialLoadingBar from '../FinancialLoadingBar';
|
|||||||
* Retrieve the journal table columns.
|
* Retrieve the journal table columns.
|
||||||
*/
|
*/
|
||||||
export const useJournalTableColumns = () => {
|
export const useJournalTableColumns = () => {
|
||||||
|
|
||||||
|
|
||||||
return React.useMemo(
|
return React.useMemo(
|
||||||
() => [
|
() => [
|
||||||
@@ -69,45 +68,40 @@ export const useJournalTableColumns = () => {
|
|||||||
* Journal sheet loading bar.
|
* Journal sheet loading bar.
|
||||||
*/
|
*/
|
||||||
export function JournalSheetLoadingBar() {
|
export function JournalSheetLoadingBar() {
|
||||||
const {
|
const { isFetching } = useJournalSheetContext();
|
||||||
isFetching
|
|
||||||
} = useJournalSheetContext();
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<If condition={isFetching}>
|
<If condition={isFetching}>
|
||||||
<FinancialLoadingBar />
|
<FinancialLoadingBar />
|
||||||
</If>
|
</If>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Journal sheet alerts.
|
* Journal sheet alerts.
|
||||||
*/
|
*/
|
||||||
export function JournalSheetAlerts() {
|
export function JournalSheetAlerts() {
|
||||||
const {
|
const { isLoading, refetchSheet, journalSheet } = useJournalSheetContext();
|
||||||
isLoading,
|
|
||||||
refetchSheet,
|
|
||||||
journalSheet,
|
|
||||||
} = useJournalSheetContext();
|
|
||||||
|
|
||||||
// Handle refetch the report sheet.
|
// Handle refetch the report sheet.
|
||||||
const handleRecalcReport = () => {
|
const handleRecalcReport = () => {
|
||||||
refetchSheet();
|
refetchSheet();
|
||||||
};
|
};
|
||||||
// Can't display any error if the report is loading.
|
// Can't display any error if the report is loading.
|
||||||
if (isLoading) { return null; }
|
if (isLoading) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<If condition={journalSheet.meta.is_cost_compute_running}>
|
<If condition={journalSheet.meta.is_cost_compute_running}>
|
||||||
<div class="alert-compute-running">
|
<div class="alert-compute-running">
|
||||||
<Icon icon="info-block" iconSize={12} /> Just a moment! We're
|
<Icon icon="info-block" iconSize={12} />
|
||||||
calculating your cost transactions and this doesn't take much time.
|
<T id={'just_a_moment_we_re_calculating_your_cost_transactions'} />
|
||||||
Please check after sometime.{' '}
|
|
||||||
|
|
||||||
<Button onClick={handleRecalcReport} minimal={true} small={true}>
|
<Button onClick={handleRecalcReport} minimal={true} small={true}>
|
||||||
Refresh
|
<T id={'refresh'} />
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</If>
|
</If>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Button } from '@blueprintjs/core';
|
import { Button } from '@blueprintjs/core';
|
||||||
import { Icon, If } from 'components';
|
import { Icon, If } from 'components';
|
||||||
|
import { FormattedMessage as T } from 'react-intl';
|
||||||
|
|
||||||
import { useProfitLossSheetContext } from './ProfitLossProvider';
|
import { useProfitLossSheetContext } from './ProfitLossProvider';
|
||||||
import FinancialLoadingBar from '../FinancialLoadingBar';
|
import FinancialLoadingBar from '../FinancialLoadingBar';
|
||||||
|
|
||||||
@@ -21,11 +23,8 @@ export function ProfitLossSheetLoadingBar() {
|
|||||||
* Balance sheet alerts.
|
* Balance sheet alerts.
|
||||||
*/
|
*/
|
||||||
export function ProfitLossSheetAlerts() {
|
export function ProfitLossSheetAlerts() {
|
||||||
const {
|
const { isLoading, sheetRefetch, profitLossSheet } =
|
||||||
isLoading,
|
useProfitLossSheetContext();
|
||||||
sheetRefetch,
|
|
||||||
profitLossSheet,
|
|
||||||
} = useProfitLossSheetContext();
|
|
||||||
|
|
||||||
// Handle refetch the report sheet.
|
// Handle refetch the report sheet.
|
||||||
const handleRecalcReport = () => {
|
const handleRecalcReport = () => {
|
||||||
@@ -39,11 +38,11 @@ export function ProfitLossSheetAlerts() {
|
|||||||
return (
|
return (
|
||||||
<If condition={profitLossSheet.meta.is_cost_compute_running}>
|
<If condition={profitLossSheet.meta.is_cost_compute_running}>
|
||||||
<div class="alert-compute-running">
|
<div class="alert-compute-running">
|
||||||
<Icon icon="info-block" iconSize={12} /> Just a moment! We're
|
<Icon icon="info-block" iconSize={12} />
|
||||||
calculating your cost transactions and this doesn't take much time.
|
<T id={'just_a_moment_we_re_calculating_your_cost_transactions'} />
|
||||||
Please check after sometime.{' '}
|
|
||||||
<Button onClick={handleRecalcReport} minimal={true} small={true}>
|
<Button onClick={handleRecalcReport} minimal={true} small={true}>
|
||||||
Refresh
|
<T id={'refresh'} />
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</If>
|
</If>
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ function PurchasesByItemsActionsBar({
|
|||||||
<NavbarGroup>
|
<NavbarGroup>
|
||||||
<Button
|
<Button
|
||||||
className={classNames(Classes.MINIMAL, 'button--gray-highlight')}
|
className={classNames(Classes.MINIMAL, 'button--gray-highlight')}
|
||||||
text={'Re-calc Report'}
|
text={<T id={'recalc_report'} />}
|
||||||
onClick={handleRecalculateReport}
|
onClick={handleRecalculateReport}
|
||||||
icon={<Icon icon="refresh-16" iconSize={16} />}
|
icon={<Icon icon="refresh-16" iconSize={16} />}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ function SalesByItemsActionsBar({
|
|||||||
<NavbarGroup>
|
<NavbarGroup>
|
||||||
<Button
|
<Button
|
||||||
className={classNames(Classes.MINIMAL, 'button--gray-highlight')}
|
className={classNames(Classes.MINIMAL, 'button--gray-highlight')}
|
||||||
text={'Re-calc Report'}
|
text={<T id={'recalc_report'} />}
|
||||||
onClick={handleRecalculateReport}
|
onClick={handleRecalculateReport}
|
||||||
icon={<Icon icon="refresh-16" iconSize={16} />}
|
icon={<Icon icon="refresh-16" iconSize={16} />}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ function TrialBalanceActionsBar({
|
|||||||
<NavbarGroup>
|
<NavbarGroup>
|
||||||
<Button
|
<Button
|
||||||
className={classNames(Classes.MINIMAL, 'button--gray-highlight')}
|
className={classNames(Classes.MINIMAL, 'button--gray-highlight')}
|
||||||
text={'Re-calc Report'}
|
text={<T id={'recalc_report'} />}
|
||||||
onClick={handleRecalcReport}
|
onClick={handleRecalcReport}
|
||||||
icon={<Icon icon="refresh-16" iconSize={16} />}
|
icon={<Icon icon="refresh-16" iconSize={16} />}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import React from 'react';
|
|||||||
import intl from 'react-intl-universal';
|
import intl from 'react-intl-universal';
|
||||||
import { Button } from '@blueprintjs/core';
|
import { Button } from '@blueprintjs/core';
|
||||||
import { getColumnWidth } from 'utils';
|
import { getColumnWidth } from 'utils';
|
||||||
import { If, Icon } from 'components';
|
import { If, Icon, FormattedMessage as T } from 'components';
|
||||||
import { CellTextSpan } from 'components/Datatable/Cells';
|
import { CellTextSpan } from 'components/Datatable/Cells';
|
||||||
import { useTrialBalanceSheetContext } from './TrialBalanceProvider';
|
import { useTrialBalanceSheetContext } from './TrialBalanceProvider';
|
||||||
import FinancialLoadingBar from '../FinancialLoadingBar';
|
import FinancialLoadingBar from '../FinancialLoadingBar';
|
||||||
@@ -60,15 +60,13 @@ export const useTrialBalanceTableColumns = () => {
|
|||||||
* Trial balance sheet progress loading bar.
|
* Trial balance sheet progress loading bar.
|
||||||
*/
|
*/
|
||||||
export function TrialBalanceSheetLoadingBar() {
|
export function TrialBalanceSheetLoadingBar() {
|
||||||
const {
|
const { isFetching } = useTrialBalanceSheetContext();
|
||||||
isFetching
|
|
||||||
} = useTrialBalanceSheetContext();
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<If condition={isFetching}>
|
<If condition={isFetching}>
|
||||||
<FinancialLoadingBar />
|
<FinancialLoadingBar />
|
||||||
</If>
|
</If>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -78,7 +76,7 @@ export function TrialBalanceSheetAlerts() {
|
|||||||
const {
|
const {
|
||||||
trialBalanceSheet: { meta },
|
trialBalanceSheet: { meta },
|
||||||
isLoading,
|
isLoading,
|
||||||
refetchSheet
|
refetchSheet,
|
||||||
} = useTrialBalanceSheetContext();
|
} = useTrialBalanceSheetContext();
|
||||||
|
|
||||||
// Handle refetch the sheet.
|
// Handle refetch the sheet.
|
||||||
@@ -86,19 +84,20 @@ export function TrialBalanceSheetAlerts() {
|
|||||||
refetchSheet();
|
refetchSheet();
|
||||||
};
|
};
|
||||||
// Can't display any error if the report is loading.
|
// Can't display any error if the report is loading.
|
||||||
if (isLoading) { return null; }
|
if (isLoading) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<If condition={meta.is_cost_compute_running}>
|
<If condition={meta.is_cost_compute_running}>
|
||||||
<div class="alert-compute-running">
|
<div class="alert-compute-running">
|
||||||
<Icon icon="info-block" iconSize={12} /> Just a moment! We're
|
<Icon icon="info-block" iconSize={12} />
|
||||||
calculating your cost transactions and this doesn't take much time.
|
<T id={'just_a_moment_we_re_calculating_your_cost_transactions'} />
|
||||||
Please check after sometime.{' '}
|
|
||||||
|
|
||||||
<Button onClick={handleRecalcReport} minimal={true} small={true}>
|
<Button onClick={handleRecalcReport} minimal={true} small={true}>
|
||||||
Refresh
|
<T id={'refresh'} />
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</If>
|
</If>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ export default function VendorsBalanceSummaryHeaderGeneral() {
|
|||||||
<Checkbox
|
<Checkbox
|
||||||
inline={true}
|
inline={true}
|
||||||
small={true}
|
small={true}
|
||||||
label={'Percentage Of Column'}
|
label={<T id={'percentage_of_column'} />}
|
||||||
name={'percentage'}
|
name={'percentage'}
|
||||||
{...field}
|
{...field}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -3,21 +3,46 @@ import { transfromToSnakeCase, flatObject } from 'utils';
|
|||||||
import intl from 'react-intl-universal';
|
import intl from 'react-intl-universal';
|
||||||
|
|
||||||
export const displayColumnsByOptions = [
|
export const displayColumnsByOptions = [
|
||||||
{ key: 'total', name: 'Total', type: 'total', by: '' },
|
{ key: 'total', name: intl.get('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: 'year',
|
||||||
{ key: 'week', name: 'Date/Week', type: 'date_periods', by: 'month' },
|
name: intl.get('date_year'),
|
||||||
{ key: 'day', name: 'Date/Day', type: 'date_periods', by: 'day' },
|
type: 'date_periods',
|
||||||
{ key: 'quarter', name: 'Date/Quarter', type: 'date_periods', by: 'quarter' },
|
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 = [
|
export const dateRangeOptions = [
|
||||||
{ value: 'today', label: 'Today' },
|
{ value: 'today', label: intl.get('today') },
|
||||||
{ value: 'this_week', label: 'This Week' },
|
{ value: 'this_week', label: intl.get('this_week') },
|
||||||
{ value: 'this_month', label: 'This Month' },
|
{ value: 'this_month', label: intl.get('this_month') },
|
||||||
{ value: 'this_quarter', label: 'This Quarter' },
|
{ value: 'this_quarter', label: intl.get('this_quarter') },
|
||||||
{ value: 'this_year', label: 'This Year' },
|
{ value: 'this_year', label: intl.get('this_year') },
|
||||||
{ value: 'custom', label: 'Custom Range' },
|
{ value: 'custom', label: intl.get('custom_range') },
|
||||||
];
|
];
|
||||||
|
|
||||||
export const filterAccountsOptions = [
|
export const filterAccountsOptions = [
|
||||||
@@ -34,7 +59,9 @@ export const filterAccountsOptions = [
|
|||||||
{
|
{
|
||||||
key: 'with-transactions',
|
key: 'with-transactions',
|
||||||
name: intl.get('accounts_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',
|
||||||
|
),
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
|
import React from 'react';
|
||||||
import { chain } from 'lodash';
|
import { chain } from 'lodash';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
import { FormattedMessage as T } from 'react-intl';
|
||||||
|
|
||||||
export const balanceSheetRowsReducer = (accounts) => {
|
export const balanceSheetRowsReducer = (accounts) => {
|
||||||
return accounts.map((account) => {
|
return accounts.map((account) => {
|
||||||
@@ -10,7 +12,7 @@ export const balanceSheetRowsReducer = (accounts) => {
|
|||||||
...(account.total && account.children && account.children.length > 0
|
...(account.total && account.children && account.children.length > 0
|
||||||
? [
|
? [
|
||||||
{
|
{
|
||||||
name: `Total ${account.name}`,
|
name: <T id={'total_name'} values={{ name: account.name }} />,
|
||||||
row_types: ['total-row', account.section_type],
|
row_types: ['total-row', account.section_type],
|
||||||
total: { ...account.total },
|
total: { ...account.total },
|
||||||
...(account.total_periods && {
|
...(account.total_periods && {
|
||||||
@@ -46,12 +48,12 @@ export const profitLossSheetReducer = (profitLoss) => {
|
|||||||
|
|
||||||
if (profitLoss.income) {
|
if (profitLoss.income) {
|
||||||
results.push({
|
results.push({
|
||||||
name: 'Income',
|
name: <T id={'income'} />,
|
||||||
total: profitLoss.income.total,
|
total: profitLoss.income.total,
|
||||||
children: [
|
children: [
|
||||||
...profitLoss.income.accounts,
|
...profitLoss.income.accounts,
|
||||||
{
|
{
|
||||||
name: 'Total Income',
|
name: <T id={'total_income'} />,
|
||||||
total: profitLoss.income.total,
|
total: profitLoss.income.total,
|
||||||
total_periods: profitLoss.income.total_periods,
|
total_periods: profitLoss.income.total_periods,
|
||||||
rowTypes: ['income_total', 'section_total', 'total'],
|
rowTypes: ['income_total', 'section_total', 'total'],
|
||||||
@@ -62,12 +64,12 @@ export const profitLossSheetReducer = (profitLoss) => {
|
|||||||
}
|
}
|
||||||
if (profitLoss.cost_of_sales) {
|
if (profitLoss.cost_of_sales) {
|
||||||
results.push({
|
results.push({
|
||||||
name: 'Cost of sales',
|
name: <T id={'cost_of_sales'} />,
|
||||||
total: profitLoss.cost_of_sales.total,
|
total: profitLoss.cost_of_sales.total,
|
||||||
children: [
|
children: [
|
||||||
...profitLoss.cost_of_sales.accounts,
|
...profitLoss.cost_of_sales.accounts,
|
||||||
{
|
{
|
||||||
name: 'Total cost of sales',
|
name: <T id={'total_cost_of_sales'} />,
|
||||||
total: profitLoss.cost_of_sales.total,
|
total: profitLoss.cost_of_sales.total,
|
||||||
total_periods: profitLoss.cost_of_sales.total_periods,
|
total_periods: profitLoss.cost_of_sales.total_periods,
|
||||||
rowTypes: ['cogs_total', 'section_total', 'total'],
|
rowTypes: ['cogs_total', 'section_total', 'total'],
|
||||||
@@ -78,7 +80,7 @@ export const profitLossSheetReducer = (profitLoss) => {
|
|||||||
}
|
}
|
||||||
if (profitLoss.gross_profit) {
|
if (profitLoss.gross_profit) {
|
||||||
results.push({
|
results.push({
|
||||||
name: 'Gross profit',
|
name: <T id={'gross_profit'} />,
|
||||||
total: profitLoss.gross_profit.total,
|
total: profitLoss.gross_profit.total,
|
||||||
total_periods: profitLoss.gross_profit.total_periods,
|
total_periods: profitLoss.gross_profit.total_periods,
|
||||||
rowTypes: ['gross_total', 'section_total', 'total'],
|
rowTypes: ['gross_total', 'section_total', 'total'],
|
||||||
@@ -86,12 +88,12 @@ export const profitLossSheetReducer = (profitLoss) => {
|
|||||||
}
|
}
|
||||||
if (profitLoss.expenses) {
|
if (profitLoss.expenses) {
|
||||||
results.push({
|
results.push({
|
||||||
name: 'Expenses',
|
name: <T id={'expenses'} />,
|
||||||
total: profitLoss.expenses.total,
|
total: profitLoss.expenses.total,
|
||||||
children: [
|
children: [
|
||||||
...profitLoss.expenses.accounts,
|
...profitLoss.expenses.accounts,
|
||||||
{
|
{
|
||||||
name: 'Total Expenses',
|
name: <T id={'total_expenses'} />,
|
||||||
total: profitLoss.expenses.total,
|
total: profitLoss.expenses.total,
|
||||||
total_periods: profitLoss.expenses.total_periods,
|
total_periods: profitLoss.expenses.total_periods,
|
||||||
rowTypes: ['expenses_total', 'section_total', 'total'],
|
rowTypes: ['expenses_total', 'section_total', 'total'],
|
||||||
@@ -102,7 +104,7 @@ export const profitLossSheetReducer = (profitLoss) => {
|
|||||||
}
|
}
|
||||||
if (profitLoss.operating_profit) {
|
if (profitLoss.operating_profit) {
|
||||||
results.push({
|
results.push({
|
||||||
name: 'Net Operating income',
|
name: <T id={'net_operating_income'} />,
|
||||||
total: profitLoss.operating_profit.total,
|
total: profitLoss.operating_profit.total,
|
||||||
total_periods: profitLoss.income.total_periods,
|
total_periods: profitLoss.income.total_periods,
|
||||||
rowTypes: ['net_operating_total', 'section_total', 'total'],
|
rowTypes: ['net_operating_total', 'section_total', 'total'],
|
||||||
@@ -110,13 +112,13 @@ export const profitLossSheetReducer = (profitLoss) => {
|
|||||||
}
|
}
|
||||||
if (profitLoss.other_income) {
|
if (profitLoss.other_income) {
|
||||||
results.push({
|
results.push({
|
||||||
name: 'Other Income',
|
name: 'other_income',
|
||||||
total: profitLoss.other_income.total,
|
total: profitLoss.other_income.total,
|
||||||
total_periods: profitLoss.other_income.total_periods,
|
total_periods: profitLoss.other_income.total_periods,
|
||||||
children: [
|
children: [
|
||||||
...profitLoss.other_income.accounts,
|
...profitLoss.other_income.accounts,
|
||||||
{
|
{
|
||||||
name: 'Total other income',
|
name: <T id={'total_other_income'} />,
|
||||||
total: profitLoss.other_income.total,
|
total: profitLoss.other_income.total,
|
||||||
total_periods: profitLoss.other_income.total_periods,
|
total_periods: profitLoss.other_income.total_periods,
|
||||||
rowTypes: ['expenses_total', 'section_total', 'total'],
|
rowTypes: ['expenses_total', 'section_total', 'total'],
|
||||||
@@ -126,13 +128,13 @@ export const profitLossSheetReducer = (profitLoss) => {
|
|||||||
}
|
}
|
||||||
if (profitLoss.other_expenses) {
|
if (profitLoss.other_expenses) {
|
||||||
results.push({
|
results.push({
|
||||||
name: 'Other expenses',
|
name: <T id={'other_expenses'} />,
|
||||||
total: profitLoss.other_expenses.total,
|
total: profitLoss.other_expenses.total,
|
||||||
total_periods: profitLoss.other_expenses.total_periods,
|
total_periods: profitLoss.other_expenses.total_periods,
|
||||||
children: [
|
children: [
|
||||||
...profitLoss.other_expenses.accounts,
|
...profitLoss.other_expenses.accounts,
|
||||||
{
|
{
|
||||||
name: 'Total other expenses',
|
name: <T id={'total_other_expenses'} />,
|
||||||
total: profitLoss.other_expenses.total,
|
total: profitLoss.other_expenses.total,
|
||||||
total_periods: profitLoss.other_expenses.total_periods,
|
total_periods: profitLoss.other_expenses.total_periods,
|
||||||
rowTypes: ['expenses_total', 'section_total', 'total'],
|
rowTypes: ['expenses_total', 'section_total', 'total'],
|
||||||
@@ -142,7 +144,7 @@ export const profitLossSheetReducer = (profitLoss) => {
|
|||||||
}
|
}
|
||||||
if (profitLoss.net_other_income) {
|
if (profitLoss.net_other_income) {
|
||||||
results.push({
|
results.push({
|
||||||
name: 'Net other income',
|
name: <T id={'net_other_income'} />,
|
||||||
total: profitLoss.net_other_income.total,
|
total: profitLoss.net_other_income.total,
|
||||||
total_periods: profitLoss.net_other_income.total_periods,
|
total_periods: profitLoss.net_other_income.total_periods,
|
||||||
rowTypes: ['net_other_income', 'section_total', 'total'],
|
rowTypes: ['net_other_income', 'section_total', 'total'],
|
||||||
@@ -150,7 +152,7 @@ export const profitLossSheetReducer = (profitLoss) => {
|
|||||||
}
|
}
|
||||||
if (profitLoss.net_income) {
|
if (profitLoss.net_income) {
|
||||||
results.push({
|
results.push({
|
||||||
name: 'Net Income',
|
name: <T id={'net_income'} />,
|
||||||
total: profitLoss.net_income.total,
|
total: profitLoss.net_income.total,
|
||||||
total_periods: profitLoss.net_income.total_periods,
|
total_periods: profitLoss.net_income.total_periods,
|
||||||
rowTypes: ['net_income_total', 'section_total', 'total'],
|
rowTypes: ['net_income_total', 'section_total', 'total'],
|
||||||
@@ -215,7 +217,7 @@ export const generalLedgerTableRowsReducer = (accounts) => {
|
|||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
...account.opening_balance,
|
...account.opening_balance,
|
||||||
name: 'Opening balance',
|
name: <T id={'opening_balance'} />,
|
||||||
rowType: 'OPENING_BALANCE',
|
rowType: 'OPENING_BALANCE',
|
||||||
date: moment(account.opening_balance.date).format('DD MMM YYYY'),
|
date: moment(account.opening_balance.date).format('DD MMM YYYY'),
|
||||||
},
|
},
|
||||||
@@ -227,7 +229,7 @@ export const generalLedgerTableRowsReducer = (accounts) => {
|
|||||||
})),
|
})),
|
||||||
{
|
{
|
||||||
...account.closing_balance,
|
...account.closing_balance,
|
||||||
name: 'Closing balance',
|
name: <T id={'closing_balance'} />,
|
||||||
rowType: 'CLOSING_BALANCE',
|
rowType: 'CLOSING_BALANCE',
|
||||||
date: moment(account.closing_balance.date).format('DD MMM YYYY'),
|
date: moment(account.closing_balance.date).format('DD MMM YYYY'),
|
||||||
},
|
},
|
||||||
@@ -357,4 +359,4 @@ export const salesByItemsReducer = (sheet) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
Radio,
|
Radio,
|
||||||
Position,
|
Position,
|
||||||
} from '@blueprintjs/core';
|
} from '@blueprintjs/core';
|
||||||
import { FormattedMessage as T } from 'components';
|
import { FormattedMessage as T, FormattedHTMLMessage } from 'components';
|
||||||
import { ErrorMessage, FastField } from 'formik';
|
import { ErrorMessage, FastField } from 'formik';
|
||||||
import {
|
import {
|
||||||
CategoriesSelectList,
|
CategoriesSelectList,
|
||||||
@@ -41,18 +41,15 @@ export default function ItemFormPrimarySection() {
|
|||||||
const itemTypeHintContent = (
|
const itemTypeHintContent = (
|
||||||
<>
|
<>
|
||||||
<div class="mb1">
|
<div class="mb1">
|
||||||
<strong>{'Service: '}</strong>
|
<FormattedHTMLMessage id={'services_that_you_provide_to_customers'} />
|
||||||
{'Services that you provide to customers. '}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="mb1">
|
<div class="mb1">
|
||||||
<strong>{'Inventory: '}</strong>
|
<FormattedHTMLMessage id={'products_you_buy_and_or_sell'} />
|
||||||
{'Products you buy and/or sell and that you track quantities of.'}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="mb1">
|
<div class="mb1">
|
||||||
<strong>{'Non-Inventory: '}</strong>
|
<FormattedHTMLMessage
|
||||||
{
|
id={'products_you_buy_and_or_sell_but_don_t_need'}
|
||||||
'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.'
|
/>
|
||||||
}
|
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { useHistory } from 'react-router-dom';
|
import { useHistory } from 'react-router-dom';
|
||||||
|
import { FormattedMessage as T } from 'react-intl';
|
||||||
|
|
||||||
import { DataTable } from 'components';
|
import { DataTable } from 'components';
|
||||||
|
|
||||||
@@ -36,13 +37,8 @@ function ItemsDataTable({
|
|||||||
tableProps,
|
tableProps,
|
||||||
}) {
|
}) {
|
||||||
// Items list context.
|
// Items list context.
|
||||||
const {
|
const { items, pagination, isItemsLoading, isEmptyStatus, isItemsFetching } =
|
||||||
items,
|
useItemsListContext();
|
||||||
pagination,
|
|
||||||
isItemsLoading,
|
|
||||||
isEmptyStatus,
|
|
||||||
isItemsFetching,
|
|
||||||
} = useItemsListContext();
|
|
||||||
|
|
||||||
// Datatable columns.
|
// Datatable columns.
|
||||||
const columns = useItemsTableColumns();
|
const columns = useItemsTableColumns();
|
||||||
@@ -134,7 +130,7 @@ function ItemsDataTable({
|
|||||||
onMakeAdjustment: handleMakeAdjustment,
|
onMakeAdjustment: handleMakeAdjustment,
|
||||||
onDuplicate: handleDuplicate,
|
onDuplicate: handleDuplicate,
|
||||||
}}
|
}}
|
||||||
noResults={'There is no items in the table yet.'}
|
noResults={<T id={'there_is_no_items_in_the_table_yet'} />}
|
||||||
{...tableProps}
|
{...tableProps}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -9,9 +9,13 @@ import {
|
|||||||
Intent,
|
Intent,
|
||||||
} from '@blueprintjs/core';
|
} from '@blueprintjs/core';
|
||||||
import { useHistory } from 'react-router-dom';
|
import { useHistory } from 'react-router-dom';
|
||||||
import { AccountsSelectList, FieldRequiredHint } from 'components';
|
|
||||||
import { FormattedMessage as T } from 'components';
|
|
||||||
import intl from 'react-intl-universal';
|
import intl from 'react-intl-universal';
|
||||||
|
|
||||||
|
import {
|
||||||
|
FormattedMessage as T,
|
||||||
|
AccountsSelectList,
|
||||||
|
FieldRequiredHint,
|
||||||
|
} from 'components';
|
||||||
import { handleStringChange, inputIntent } from 'utils';
|
import { handleStringChange, inputIntent } from 'utils';
|
||||||
|
|
||||||
import { useAccountantFormContext } from './AccountantFormProvider';
|
import { useAccountantFormContext } from './AccountantFormProvider';
|
||||||
@@ -22,8 +26,6 @@ import { useAccountantFormContext } from './AccountantFormProvider';
|
|||||||
export default function AccountantForm() {
|
export default function AccountantForm() {
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const { isSubmitting } = useFormikContext();
|
const { isSubmitting } = useFormikContext();
|
||||||
|
|
||||||
const handleCloseClick = () => {
|
const handleCloseClick = () => {
|
||||||
@@ -103,7 +105,7 @@ export default function AccountantForm() {
|
|||||||
setFieldValue('accounting_basis', _value);
|
setFieldValue('accounting_basis', _value);
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<Radio label={intl.get('Cash')} value="cash" />
|
<Radio label={intl.get('cash')} value="cash" />
|
||||||
<Radio label={intl.get('accrual')} value="accrual" />
|
<Radio label={intl.get('accrual')} value="accrual" />
|
||||||
</RadioGroup>
|
</RadioGroup>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import React, { useCallback } from 'react';
|
import React, { useCallback } from 'react';
|
||||||
import { Button, Intent } from '@blueprintjs/core';
|
import { Button, Intent } from '@blueprintjs/core';
|
||||||
import { useHistory } from "react-router-dom";
|
import { useHistory } from 'react-router-dom';
|
||||||
import WorkflowIcon from './WorkflowIcon';
|
import WorkflowIcon from './WorkflowIcon';
|
||||||
|
import { FormattedMessage as T } from 'react-intl';
|
||||||
import withOrganizationActions from 'containers/Organization/withOrganizationActions';
|
import withOrganizationActions from 'containers/Organization/withOrganizationActions';
|
||||||
|
|
||||||
import 'style/pages/Setup/Congrats.scss';
|
import 'style/pages/Setup/Congrats.scss';
|
||||||
@@ -11,18 +12,13 @@ import { compose } from 'utils';
|
|||||||
/**
|
/**
|
||||||
* Setup congrats page.
|
* Setup congrats page.
|
||||||
*/
|
*/
|
||||||
function SetupCongratsPage({
|
function SetupCongratsPage({ setOrganizationSetupCompleted }) {
|
||||||
setOrganizationSetupCompleted,
|
|
||||||
}) {
|
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
|
|
||||||
const handleBtnClick = useCallback(() => {
|
const handleBtnClick = useCallback(() => {
|
||||||
setOrganizationSetupCompleted(false);
|
setOrganizationSetupCompleted(false);
|
||||||
history.push('/homepage');
|
history.push('/homepage');
|
||||||
}, [
|
}, [setOrganizationSetupCompleted, history]);
|
||||||
setOrganizationSetupCompleted,
|
|
||||||
history,
|
|
||||||
]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div class="setup-congrats">
|
<div class="setup-congrats">
|
||||||
@@ -31,24 +27,20 @@ function SetupCongratsPage({
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="setup-congrats__text">
|
<div class="setup-congrats__text">
|
||||||
<h1>Congrats! You are ready to go</h1>
|
<h1>
|
||||||
|
<T id={'congrats_you_are_ready_to_go'} />
|
||||||
|
</h1>
|
||||||
|
|
||||||
<p class="paragraph">
|
<p class="paragraph">
|
||||||
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.
|
<T id={'it_is_a_long_established_fact_that_a_reader'} />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<Button
|
<Button intent={Intent.PRIMARY} type="submit" onClick={handleBtnClick}>
|
||||||
intent={Intent.PRIMARY}
|
<T id={'go_to_dashboard'} />
|
||||||
type="submit"
|
|
||||||
onClick={handleBtnClick}
|
|
||||||
>
|
|
||||||
Go to dashboard
|
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default compose(
|
export default compose(withOrganizationActions)(SetupCongratsPage);
|
||||||
withOrganizationActions,
|
|
||||||
)(SetupCongratsPage);
|
|
||||||
|
|||||||
@@ -909,7 +909,7 @@
|
|||||||
"accounting": "Accounting",
|
"accounting": "Accounting",
|
||||||
"system": "SYSTEM",
|
"system": "SYSTEM",
|
||||||
"it_s_time_to_send_estimates_to_your_customers": "It's time to send estimates to your customers",
|
"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",
|
"new_sale_estimate": "New sale estimate",
|
||||||
"learn_more": "Learn more",
|
"learn_more": "Learn more",
|
||||||
"back_to_list": "Back to list.",
|
"back_to_list": "Back to list.",
|
||||||
@@ -1030,5 +1030,76 @@
|
|||||||
"create_a_new_bill": "Create a new bill.",
|
"create_a_new_bill": "Create a new bill.",
|
||||||
"create_a_new_make_journal": "Create a new Make Journal.",
|
"create_a_new_make_journal": "Create a new Make Journal.",
|
||||||
"create_a_new_item": "Create a new item.",
|
"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": "<strong> Service :</strong> Services that you provide to customers.",
|
||||||
|
"products_you_buy_and_or_sell": "<strong> Inventory :</strong> Products you buy and/or sell and that you track quantities of.",
|
||||||
|
"products_you_buy_and_or_sell_but_don_t_need": "<strong> Non-Inventory:</strong> 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"
|
||||||
}
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
client/src/style/fonts/NotoSansArabicUI-SemiCondensed.woff
Normal file
BIN
client/src/style/fonts/NotoSansArabicUI-SemiCondensed.woff
Normal file
Binary file not shown.
BIN
client/src/style/fonts/NotoSansArabicUI-SemiCondensedBlack.woff
Normal file
BIN
client/src/style/fonts/NotoSansArabicUI-SemiCondensedBlack.woff
Normal file
Binary file not shown.
BIN
client/src/style/fonts/NotoSansArabicUI-SemiCondensedMedium.woff
Normal file
BIN
client/src/style/fonts/NotoSansArabicUI-SemiCondensedMedium.woff
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -34,7 +34,7 @@
|
|||||||
@font-face {
|
@font-face {
|
||||||
font-family: Noto Sans Arabic;
|
font-family: Noto Sans Arabic;
|
||||||
src: local('Noto Sans'),
|
src: local('Noto Sans'),
|
||||||
url('../fonts/NotoSansArabicUI-Regular.woff') format('woff');
|
url('../fonts/NotoSansArabicUI-SemiCondensed.woff') format('woff');
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-display: swap;
|
font-display: swap;
|
||||||
@@ -44,57 +44,17 @@
|
|||||||
@font-face {
|
@font-face {
|
||||||
font-family: Noto Sans Arabic;
|
font-family: Noto Sans Arabic;
|
||||||
src: local('Noto Sans'),
|
src: local('Noto Sans'),
|
||||||
url('../fonts/NotoSansArabicUI-Black.woff') format('woff');
|
url('../fonts/NotoSansArabicUI-SemiCondensedBlack.woff') format('woff');
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 900;
|
font-weight: 900;
|
||||||
font-display: swap;
|
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
|
//arabic Medium
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: Noto Sans Arabic;
|
font-family: Noto Sans Arabic;
|
||||||
src: local('Noto Sans'),
|
src: local('Noto Sans'),
|
||||||
url('../fonts/NotoSansArabicUI-Medium.woff') format('woff');
|
url('../fonts/NotoSansArabicUI-SemiCondensedMedium.woff') format('woff');
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-display: swap;
|
font-display: swap;
|
||||||
@@ -104,18 +64,8 @@
|
|||||||
@font-face {
|
@font-face {
|
||||||
font-family: Noto Sans Arabic;
|
font-family: Noto Sans Arabic;
|
||||||
src: local('Noto Sans'),
|
src: local('Noto Sans'),
|
||||||
url('../fonts/NotoSansArabicUI-SemiBold.woff') format('woff');
|
url('../fonts/NotoSansArabicUI-SemiCondensedSemiBold.woff') format('woff');
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-display: swap;
|
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;
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user