Compare commits

...

36 Commits

Author SHA1 Message Date
Ahmed Bouhuolia
e662bf7af9 Update CHANGELOG.md 2022-04-15 06:34:18 +02:00
a.bouhuolia
a829ceb709 Merge branch 'develop' into main 2022-04-15 06:29:34 +02:00
a.bouhuolia
cdce00187b Merge branch 'feature/tooltip-oneline' into develop 2022-04-15 06:26:42 +02:00
a.bouhuolia
91a38b34cc feat: add readonly entriese details as oneline with tooltip for more details. 2022-04-15 06:24:24 +02:00
a.bouhuolia
1b97a162e8 Merge branch 'BIG-entries-columns' of https://github.com/bigcapitalhq/client into develop 2022-04-15 04:36:08 +02:00
elforjani13
e8e12e63ea feat: add tooltip cell to detail. 2022-04-10 13:46:05 +02:00
elforjani13
80feba6005 feat(sales/purchases): add tooltip cell to detail. 2022-04-09 02:04:31 +02:00
elforjani13
cc457e1e43 feat: estimate tooltip. 2022-04-09 00:42:34 +02:00
a.bouhuolia
2ced5dc013 feat(TextOverlayTooltip): WIP 2022-04-08 06:04:12 +02:00
Ahmed Bouhuolia
dd86c2993e Merge pull request #50 from bigcapitalhq/BIG-372-activate-branches-and-warehouses-dialog-reloading-once-activating
BIG-372: activate branches & warehouses reloading.
2022-04-08 05:21:31 +02:00
a.bouhuolia
bd05a4a188 fix(GeneralLedger): BIG-373 Issue general ledger report select specific account. 2022-04-08 05:19:11 +02:00
elforjani13
8160cbe402 feat: add entries-columns. 2022-04-06 16:52:44 +02:00
elforjani13
0ef6bebfb8 BIG-372: activate branches & warehouses reloading. 2022-04-06 15:00:30 +02:00
a.bouhuolia
91ff3fdccb Merge branch 'main' into develop 2022-04-05 06:08:54 +02:00
a.bouhuolia
edd37fff78 fix(PaymaentViaVocher): make the plan is fixed. 2022-04-05 06:06:02 +02:00
a.bouhuolia
679f7ce96c Merge branch 'develop' into main 2022-04-05 05:27:28 +02:00
Ahmed Bouhuolia
79b3ab9ec7 Update CHANGELOG.md 2022-04-05 05:26:48 +02:00
a.bouhuolia
e7158b7ba7 feat(i18n): add the missing arabic localization. 2022-04-05 05:25:26 +02:00
Ahmed Bouhuolia
569bc1c4a4 Merge pull request #49 from bigcapitalhq/billingplans
Billingplans
2022-04-05 05:16:28 +02:00
elforjani13
b880732087 feat: add billing plans. 2022-04-04 23:52:29 +02:00
elforjani13
b1e7720bd9 BIG-378: add Localize to invoice. 2022-04-04 17:58:39 +02:00
a.bouhuolia
5eb9968095 Merge branch 'develop' into main 2022-03-31 15:09:25 +02:00
a.bouhuolia
5c601fcf2d fix(Account): BIG-296 Issue when creating a new child account from chart of accounts list. 2022-03-28 11:58:12 +02:00
a.bouhuolia
df4c4a832b Merge branch 'develop' into main 2022-03-24 15:32:30 +02:00
a.bouhuolia
98a02396a9 Merge branch 'develop' into main 2022-02-21 15:02:35 +02:00
a.bouhuolia
96635ffa84 Merge branch 'develop' into main 2022-02-18 20:44:42 +02:00
a.bouhuolia
68c0678dc3 Merge branch 'develop' into main 2022-02-17 12:10:20 +02:00
a.bouhuolia
da699a766a Merge branch 'develop' into main 2022-01-13 15:40:55 +02:00
a.bouhuolia
f1899e1ce1 Merge branch 'develop' into main 2022-01-08 18:20:08 +02:00
Ahmed Bouhuolia
11851d114d Merge pull request #16 from bigcapitalhq/develop
Release 1.5.5
2022-01-04 22:35:49 +02:00
a.bouhuolia
21779007be fix: application version. 2022-01-03 23:14:11 +02:00
a.bouhuolia
4fc1ecdc2d Merge branch 'main' of https://github.com/bigcapitalhq/client into main 2022-01-03 19:42:48 +02:00
a.bouhuolia
c9b5cecf7a Merge branch 'develop' into main 2022-01-03 19:42:23 +02:00
elforjani13
c31e9dcd29 fix: inventory adjustment & contacts drawer. 2022-01-03 14:35:50 +02:00
elforjani13
430ab95dc3 landed cost localiztion. 2022-01-03 13:38:22 +02:00
Ahmed Bouhuolia
8100a57195 Merge pull request #15 from bigcapitalhq/develop
Merge `develop` to `main`
2022-01-03 12:31:14 +02:00
39 changed files with 705 additions and 291 deletions

View File

@@ -2,6 +2,19 @@
All notable changes to Bigcapital server-side will be in this file. All notable changes to Bigcapital server-side will be in this file.
## [1.7.3-rc.2] - 15-04-2022
### Fixed
- `BIG-372` Activate branches and warehouses dialog reloading once activating.
- `BIG-373` Issue general ledger report select specific account.
- `BIG-377` Make readonly details entries as oneline with tooltip for more details.
## [1.7.2-rc.2] - 04-04-2022
### Fixed
- Add the missing Arabic localization.
- Subscription plans modifications.
## [1.7.1-rc.2] - 30-03-2022 ## [1.7.1-rc.2] - 30-03-2022
## Added ## Added

View File

@@ -85,6 +85,9 @@ function getClientEnvironment(publicUrl) {
WDS_SOCKET_HOST: process.env.WDS_SOCKET_HOST, WDS_SOCKET_HOST: process.env.WDS_SOCKET_HOST,
WDS_SOCKET_PATH: process.env.WDS_SOCKET_PATH, WDS_SOCKET_PATH: process.env.WDS_SOCKET_PATH,
WDS_SOCKET_PORT: process.env.WDS_SOCKET_PORT, WDS_SOCKET_PORT: process.env.WDS_SOCKET_PORT,
// Application version.
VERSION: paths.appVersion
} }
); );
// Stringify all values so we can feed into webpack DefinePlugin // Stringify all values so we can feed into webpack DefinePlugin

View File

@@ -48,6 +48,8 @@ const resolveModule = (resolveFn, filePath) => {
return resolveFn(`${filePath}.js`); return resolveFn(`${filePath}.js`);
}; };
const appVersion = require(resolveApp('package.json')).version;
// config after eject: we're in ./config/ // config after eject: we're in ./config/
module.exports = { module.exports = {
dotenv: resolveApp('.env'), dotenv: resolveApp('.env'),
@@ -65,6 +67,7 @@ module.exports = {
proxySetup: resolveApp('src/setupProxy.js'), proxySetup: resolveApp('src/setupProxy.js'),
appNodeModules: resolveApp('node_modules'), appNodeModules: resolveApp('node_modules'),
publicUrlOrPath, publicUrlOrPath,
appVersion
}; };

View File

@@ -11,7 +11,7 @@ export const CommercialDocHeader = styled.div`
`; `;
export const CommercialDocTopHeader = styled.div` export const CommercialDocTopHeader = styled.div`
margin-bottom: 25px; margin-bottom: 30px;
`; `;
export const CommercialDocEntriesTable = styled(DataTable)` export const CommercialDocEntriesTable = styled(DataTable)`

View File

@@ -0,0 +1,27 @@
import React from 'react';
import { Tooltip, Position } from '@blueprintjs/core';
/**
* Text overview tooltip cell.
* @returns {JSX.Element}
*/
export function TextOverviewTooltipCell({ cell: { value } }) {
const SUBMENU_POPOVER_MODIFIERS = {
flip: { boundariesElement: 'viewport', padding: 20 },
offset: { offset: '0, 10' },
preventOverflow: { boundariesElement: 'viewport', padding: 40 },
};
return (
<Tooltip
content={value}
position={Position.BOTTOM_LEFT}
boundary={'viewport'}
minimal={true}
modifiers={SUBMENU_POPOVER_MODIFIERS}
targetClassName={'table-tooltip-overview-target'}
>
{value}
</Tooltip>
);
}

View File

@@ -10,6 +10,7 @@ import CheckBoxFieldCell from './CheckBoxFieldCell';
import SwitchFieldCell from './SwitchFieldCell'; import SwitchFieldCell from './SwitchFieldCell';
import TextAreaCell from './TextAreaCell'; import TextAreaCell from './TextAreaCell';
import BranchesListFieldCell from './BranchesListFieldCell'; import BranchesListFieldCell from './BranchesListFieldCell';
import { TextOverviewTooltipCell } from './TextOverviewTooltipCell';
export { export {
AccountsListFieldCell, AccountsListFieldCell,
@@ -25,4 +26,5 @@ export {
SwitchFieldCell, SwitchFieldCell,
TextAreaCell, TextAreaCell,
BranchesListFieldCell, BranchesListFieldCell,
TextOverviewTooltipCell,
}; };

View File

@@ -28,7 +28,7 @@ export default function Sidebar({ dashboardContentRef }) {
* @returns {React.JSX} * @returns {React.JSX}
*/ */
function SidebarFooterVersion() { function SidebarFooterVersion() {
const { REACT_APP_VERSION: VERSION } = process.env; const { VERSION } = process.env;
if (!VERSION) { if (!VERSION) {
return null; return null;

View File

@@ -49,7 +49,6 @@ import DrawerHeaderContent from './Drawer/DrawerHeaderContent';
import Postbox from './Postbox'; import Postbox from './Postbox';
import AccountsSuggestField from './AccountsSuggestField'; import AccountsSuggestField from './AccountsSuggestField';
import MaterialProgressBar from './MaterialProgressBar'; import MaterialProgressBar from './MaterialProgressBar';
import { MoneyFieldCell } from './DataTableCells';
import AvaterCell from './AvaterCell'; import AvaterCell from './AvaterCell';
import { ItemsMultiSelect } from './Items'; import { ItemsMultiSelect } from './Items';
@@ -105,6 +104,7 @@ export * from './Currencies';
export * from './FormTopbar' export * from './FormTopbar'
export * from './Paper'; export * from './Paper';
export * from './Accounts' export * from './Accounts'
export * from './DataTableCells';
const Hint = FieldHint; const Hint = FieldHint;
@@ -167,7 +167,6 @@ export {
Postbox, Postbox,
AccountsSuggestField, AccountsSuggestField,
MaterialProgressBar, MaterialProgressBar,
MoneyFieldCell,
ItemsMultiSelect, ItemsMultiSelect,
AvaterCell, AvaterCell,
MoreMenuItems, MoreMenuItems,

45
src/config/interfaces.tsx Normal file
View File

@@ -0,0 +1,45 @@
export enum ISidebarMenuItemType {
Label = 'label',
Link = 'link',
Group = 'group',
Overlay = 'overlay'
}
export interface ISidebarMenuItemOverlay extends ISidebarMenuItemCommon {
type: ISidebarMenuItemType.Overlay;
}
export interface ISidebarMenuItemLink extends ISidebarMenuItemCommon {
text: string | JSX.Element;
href: string;
type: ISidebarMenuItemType.Link;
matchExact?: boolean;
}
export interface ISidebarMenuItemLabel extends ISidebarMenuItemCommon {
text?: string;
type: ISidebarMenuItemType.Label;
}
export interface ISidebarMenuItemGroup extends ISidebarMenuItemCommon {
type: ISidebarMenuItemType.Group;
}
export interface ISidebarMenuItemPermission {
subject: string;
ability: string;
}
export interface ISidebarMenuItemCommon {
ability?: ISidebarMenuItemPermission | ISidebarMenuItemPermission[];
feature?: string;
disabled?: boolean;
children?: ISidebarMenuItem[];
onlySubscriptionExpired?: boolean;
}
export type ISidebarMenuItem =
| ISidebarMenuItemLink
| ISidebarMenuItemLabel
| ISidebarMenuItemGroup
| ISidebarMenuItemOverlay;

View File

@@ -57,9 +57,7 @@ function BillTransactionDeleteAlert({
loading={isLoading} loading={isLoading}
> >
<p> <p>
<T <T id={`landed_cost.once_your_delete_this_located_landed_cost`} />
id={`Once your delete this located landed cost, you won't be able to restore it later, Are your sure you want to delete this transaction?`}
/>
</p> </p>
</Alert> </Alert>
); );

View File

@@ -79,6 +79,10 @@ export const handleCashFlowTransactionType = (reference, openDrawer) => {
return openDrawer('refund-vendor-detail-drawer', { return openDrawer('refund-vendor-detail-drawer', {
refundTransactionId: reference.reference_id, refundTransactionId: reference.reference_id,
}); });
case 'InventoryAdjustment':
return openDrawer('inventory-adjustment-drawer', {
inventoryId: reference.reference_id,
});
default: default:
return openDrawer('cashflow-transaction-drawer', { return openDrawer('cashflow-transaction-drawer', {

View File

@@ -37,7 +37,7 @@ function AllocateLandedCostFloatingActions({
<DialogFooterActions alignment={'left'}> <DialogFooterActions alignment={'left'}>
{costTransactionEntry && ( {costTransactionEntry && (
<UnallocatedAmount> <UnallocatedAmount>
Unallocated cost Amount:{' '} <T id={'landed_cost.dialog.label_unallocated_cost_amount'}/>
<strong>{formattedUnallocatedCostAmount}</strong> <strong>{formattedUnallocatedCostAmount}</strong>
</UnallocatedAmount> </UnallocatedAmount>
)} )}

View File

@@ -42,7 +42,10 @@ function AllocateLandedCostForm({
.map((entry) => transformToForm(entry, defaultInitialValues.items[0])); .map((entry) => transformToForm(entry, defaultInitialValues.items[0]));
if (entries.length <= 0) { if (entries.length <= 0) {
AppToaster.show({ message: 'Something wrong!', intent: Intent.DANGER }); AppToaster.show({
message: intl.get('something_wrong'),
intent: Intent.DANGER,
});
return; return;
} }
const form = { const form = {
@@ -69,13 +72,14 @@ function AllocateLandedCostForm({
) )
) { ) {
AppToaster.show({ AppToaster.show({
message: message: intl.get(
'The total located cost is bigger than the transaction line.', 'landed_cost.error.the_total_located_cost_is_bigger_than_the_transaction_line',
),
intent: Intent.DANGER, intent: Intent.DANGER,
}); });
} else { } else {
AppToaster.show({ AppToaster.show({
message: 'Something went wrong!', message: intl.get('something_went_wrong'),
intent: Intent.DANGER, intent: Intent.DANGER,
}); });
} }

View File

@@ -9,7 +9,7 @@ const BranchActivateContext = React.createContext();
* Branch activate form provider. * Branch activate form provider.
*/ */
function BranchActivateFormProvider({ dialogName, ...props }) { function BranchActivateFormProvider({ dialogName, ...props }) {
const { mutateAsync: activateBranches, isLoading } = useActivateBranches(); const { mutateAsync: activateBranches } = useActivateBranches();
// State provider. // State provider.
const provider = { const provider = {
@@ -18,7 +18,7 @@ function BranchActivateFormProvider({ dialogName, ...props }) {
}; };
return ( return (
<DialogContent isLoading={isLoading}> <DialogContent>
<BranchActivateContext.Provider value={provider} {...props} /> <BranchActivateContext.Provider value={provider} {...props} />
</DialogContent> </DialogContent>
); );

View File

@@ -36,7 +36,7 @@ function PaymentViaLicenseDialogContent({
setSubmitting(true); setSubmitting(true);
const mutateValues = { const mutateValues = {
plan_slug: `${values.plan_slug}-${values.period}ly`, plan_slug: `essentials-monthly`,
license_code: values.license_code, license_code: values.license_code,
}; };
// Payment via voucher mutate. // Payment via voucher mutate.

View File

@@ -9,8 +9,7 @@ const WarehouseActivateContext = React.createContext();
* warehouse activate form provider. * warehouse activate form provider.
*/ */
function WarehouseActivateFormProvider({ dialogName, ...props }) { function WarehouseActivateFormProvider({ dialogName, ...props }) {
const { mutateAsync: activateWarehouses, isLoading } = const { mutateAsync: activateWarehouses } = useActivateWarehouses();
useActivateWarehouses();
// State provider. // State provider.
const provider = { const provider = {
@@ -19,7 +18,7 @@ function WarehouseActivateFormProvider({ dialogName, ...props }) {
}; };
return ( return (
<DialogContent isLoading={isLoading}> <DialogContent>
<WarehouseActivateContext.Provider value={provider} {...props} /> <WarehouseActivateContext.Provider value={provider} {...props} />
</DialogContent> </DialogContent>
); );

View File

@@ -13,57 +13,81 @@ import {
} from '@blueprintjs/core'; } from '@blueprintjs/core';
import { import {
FormatNumberCell, FormatNumberCell,
TextOverviewTooltipCell,
FormattedMessage as T, FormattedMessage as T,
Choose, Choose,
Icon, Icon,
} from '../../../components'; } from '../../../components';
import { getColumnWidth } from 'utils';
import { useBillDrawerContext } from './BillDrawerProvider';
/** /**
* Retrieve bill readonly details entries table columns. * Retrieve bill readonly details entries table columns.
*/ */
export const useBillReadonlyEntriesTableColumns = () => export const useBillReadonlyEntriesTableColumns = () => {
React.useMemo( const {
bill: { entries },
} = useBillDrawerContext();
return React.useMemo(
() => [ () => [
{ {
Header: intl.get('product_and_service'), Header: intl.get('product_and_service'),
accessor: 'item.name', accessor: 'item.name',
Cell: TextOverviewTooltipCell,
width: 150, width: 150,
className: 'item', className: 'item',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('description'), Header: intl.get('description'),
accessor: 'description', accessor: 'description',
Cell: TextOverviewTooltipCell,
className: 'description', className: 'description',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('quantity'), Header: intl.get('quantity'),
accessor: 'quantity', accessor: 'quantity',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100, width: getColumnWidth(entries, 'quantity', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('rate'), Header: intl.get('rate'),
accessor: 'rate', accessor: 'rate',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100, width: getColumnWidth(entries, 'rate', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('amount'), Header: intl.get('amount'),
accessor: 'amount', accessor: 'amount',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100, width: getColumnWidth(entries, 'amount', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
], ],
[], [],
); );
};
/** /**
* Bill details status. * Bill details status.

View File

@@ -10,56 +10,81 @@ import {
Tag, Tag,
Intent, Intent,
} from '@blueprintjs/core'; } from '@blueprintjs/core';
import { getColumnWidth } from 'utils';
import { import {
Icon, Icon,
FormattedMessage as T, FormattedMessage as T,
TextOverviewTooltipCell,
FormatNumberCell, FormatNumberCell,
Choose, Choose,
} from '../../../components'; } from '../../../components';
import { useCreditNoteDetailDrawerContext } from './CreditNoteDetailDrawerProvider';
export const useCreditNoteReadOnlyEntriesColumns = () => export const useCreditNoteReadOnlyEntriesColumns = () => {
React.useMemo( // credit note details drawer context.
const {
creditNote: { entries },
} = useCreditNoteDetailDrawerContext();
return React.useMemo(
() => [ () => [
{ {
Header: intl.get('product_and_service'), Header: intl.get('product_and_service'),
accessor: 'item.name', accessor: 'item.name',
Cell: TextOverviewTooltipCell,
width: 150, width: 150,
className: 'name', className: 'name',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('description'), Header: intl.get('description'),
accessor: 'description', accessor: 'description',
Cell: TextOverviewTooltipCell,
className: 'description', className: 'description',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('quantity'), Header: intl.get('quantity'),
accessor: 'quantity', accessor: 'quantity',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100, width: getColumnWidth(entries, 'quantity', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('rate'), Header: intl.get('rate'),
accessor: 'rate', accessor: 'rate',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100, width: getColumnWidth(entries, 'rate', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('amount'), Header: intl.get('amount'),
accessor: 'amount', accessor: 'amount',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100, width: getColumnWidth(entries, 'amount', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
], ],
[], [],
); );
};
/** /**
* Credit note more actions mneu. * Credit note more actions mneu.

View File

@@ -1,47 +1,74 @@
import React from 'react'; import React from 'react';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import { FormatNumberCell } from '../../../components'; import { FormatNumberCell, TextOverviewTooltipCell } from '../../../components';
import { getColumnWidth } from 'utils';
import { useEstimateDetailDrawerContext } from './EstimateDetailDrawerProvider';
/** /**
* Retrieve table columns of estimate readonly entries details. * Retrieve table columns of estimate readonly entries details.
*/ */
export const useEstimateReadonlyEntriesColumns = () => export const useEstimateReadonlyEntriesColumns = () => {
React.useMemo(() => [ // estimate details drawer context.
{ const {
Header: intl.get('product_and_service'), estimate: { entries },
accessor: 'item.name', } = useEstimateDetailDrawerContext();
width: 150,
className: 'name', return React.useMemo(
disableSortBy: true, () => [
}, {
{ Header: intl.get('product_and_service'),
Header: intl.get('description'), accessor: 'item.name',
accessor: 'description', Cell: TextOverviewTooltipCell,
className: 'description', width: 150,
disableSortBy: true, className: 'name',
}, disableSortBy: true,
{ textOverview: true,
Header: intl.get('quantity'), },
accessor: 'quantity', {
Cell: FormatNumberCell, Header: intl.get('description'),
width: 100, accessor: 'description',
align: 'right', Cell: TextOverviewTooltipCell,
disableSortBy: true, className: 'description',
}, disableSortBy: true,
{ textOverview: true,
Header: intl.get('rate'), },
accessor: 'rate', {
Cell: FormatNumberCell, Header: intl.get('quantity'),
width: 100, accessor: 'quantity',
align: 'right', Cell: FormatNumberCell,
disableSortBy: true, width: getColumnWidth(entries, 'quantity', {
}, minWidth: 60,
{ magicSpacing: 5,
Header: intl.get('amount'), }),
accessor: 'amount', align: 'right',
Cell: FormatNumberCell, disableSortBy: true,
width: 100, textOverview: true,
align: 'right', },
disableSortBy: true, {
}, Header: intl.get('rate'),
], []); accessor: 'rate',
Cell: FormatNumberCell,
width: getColumnWidth(entries, 'rate', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right',
disableSortBy: true,
textOverview: true,
},
{
Header: intl.get('amount'),
accessor: 'amount',
Cell: FormatNumberCell,
width: getColumnWidth(entries, 'amount', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right',
disableSortBy: true,
textOverview: true,
},
],
[],
);
};

View File

@@ -1,33 +1,46 @@
import React from 'react'; import React from 'react';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import { FormatNumberCell } from '../../../components'; import { FormatNumberCell, TextOverviewTooltipCell } from '../../../components';
import { useExpenseDrawerContext } from './ExpenseDrawerProvider';
import { getColumnWidth } from 'utils';
/** /**
* Retrieve expense readonly details entries table columns. * Retrieve expense readonly details entries table columns.
*/ */
export const useExpenseReadEntriesColumns = () => export const useExpenseReadEntriesColumns = () => {
React.useMemo( // Expense drawer context.
const {
expense: { categories },
} = useExpenseDrawerContext();
return React.useMemo(
() => [ () => [
{ {
Header: intl.get('expense_account'), Header: intl.get('expense_account'),
accessor: 'expense_account.name', accessor: 'expense_account.name',
Cell: TextOverviewTooltipCell,
width: 110, width: 110,
disableSortBy: true, disableSortBy: true,
textOverview: true,
className: 'account', className: 'account',
}, },
{ {
Header: intl.get('description'), Header: intl.get('description'),
accessor: 'description', accessor: 'description',
width: 110, Cell: TextOverviewTooltipCell,
disableSortBy: true,
className: 'description', className: 'description',
disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('amount'), Header: intl.get('amount'),
accessor: 'amount', accessor: 'amount',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100, width: getColumnWidth(categories, 'amount', {
minWidth: 60,
magicSpacing: 5,
}),
disableSortBy: true, disableSortBy: true,
className: 'amount', className: 'amount',
align: 'right', align: 'right',
@@ -35,3 +48,4 @@ export const useExpenseReadEntriesColumns = () =>
], ],
[], [],
); );
};

View File

@@ -1,37 +1,60 @@
import React from 'react'; import React from 'react';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import { getColumnWidth } from 'utils';
import { TextOverviewTooltipCell } from 'components';
import { useInventoryAdjustmentDrawerContext } from './InventoryAdjustmentDrawerProvider';
export const useInventoryAdjustmentEntriesColumns = () => export const useInventoryAdjustmentEntriesColumns = () => {
React.useMemo( // Inventory adjustment details drawer context.
const {
inventoryAdjustment: { entries },
} = useInventoryAdjustmentDrawerContext();
return React.useMemo(
() => [ () => [
{ {
Header: intl.get('inventory_adjustment.column.product'), Header: intl.get('inventory_adjustment.column.product'),
accessor: 'item.name', accessor: 'item.name',
width: 150, Cell: TextOverviewTooltipCell,
width: 100,
className: 'name', className: 'name',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('quantity'), Header: intl.get('quantity'),
accessor: 'quantity', accessor: 'quantity',
width: 100, width: getColumnWidth(entries, 'quantity', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('cost'), Header: intl.get('cost'),
accessor: 'cost', accessor: 'cost',
width: 100, width: getColumnWidth(entries, 'cost', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('value'), Header: intl.get('value'),
accessor: 'value', accessor: 'value',
width: 100, width: getColumnWidth(entries, 'value', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
], ],
[], [],
); );
};

View File

@@ -11,12 +11,14 @@ import {
Intent, Intent,
Tag, Tag,
} from '@blueprintjs/core'; } from '@blueprintjs/core';
import { getColumnWidth } from 'utils';
import { import {
FormatNumberCell, FormatNumberCell,
Icon, Icon,
FormattedMessage as T, FormattedMessage as T,
Choose, Choose,
Can, Can,
TextOverviewTooltipCell,
} from 'components'; } from 'components';
import { import {
SaleInvoiceAction, SaleInvoiceAction,
@@ -27,49 +29,69 @@ import { useInvoiceDetailDrawerContext } from './InvoiceDetailDrawerProvider';
/** /**
* Retrieve invoice readonly details table columns. * Retrieve invoice readonly details table columns.
*/ */
export const useInvoiceReadonlyEntriesColumns = () => export const useInvoiceReadonlyEntriesColumns = () => {
React.useMemo( // Invoice details drawer context.
const {
invoice: { entries },
} = useInvoiceDetailDrawerContext();
return React.useMemo(
() => [ () => [
{ {
Header: intl.get('product_and_service'), Header: intl.get('product_and_service'),
accessor: 'item.name', accessor: 'item.name',
width: 150, Cell: TextOverviewTooltipCell,
className: 'name',
disableSortBy: true, disableSortBy: true,
textOverview: true,
width: 150,
}, },
{ {
Header: intl.get('description'), Header: intl.get('description'),
accessor: 'description', accessor: 'description',
className: 'description', Cell: TextOverviewTooltipCell,
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('quantity'), Header: intl.get('quantity'),
accessor: 'quantity', accessor: 'quantity',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100,
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
width: getColumnWidth(entries, 'quantity', {
minWidth: 60,
magicSpacing: 5,
}),
}, },
{ {
Header: intl.get('rate'), Header: intl.get('rate'),
accessor: 'rate', accessor: 'rate',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100,
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
width: getColumnWidth(entries, 'rate', {
minWidth: 60,
magicSpacing: 5,
}),
}, },
{ {
Header: intl.get('amount'), Header: intl.get('amount'),
accessor: 'amount', accessor: 'amount',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100,
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
width: getColumnWidth(entries, 'amount', {
minWidth: 60,
magicSpacing: 5,
}),
}, },
], ],
[], [],
); );
};
/** /**
* Invoice details more actions menu. * Invoice details more actions menu.

View File

@@ -10,7 +10,10 @@ import { TableStyle } from '../../../common';
* Manual journal drawer table. * Manual journal drawer table.
*/ */
export default function ManualJournalDrawerTable() { export default function ManualJournalDrawerTable() {
// Retrieves the readonly manual journal entries columns.
const columns = useManualJournalEntriesColumns(); const columns = useManualJournalEntriesColumns();
// Manual journal drawer context.
const { manualJournal } = useManualJournalDrawerContext(); const { manualJournal } = useManualJournalDrawerContext();
return ( return (

View File

@@ -1,28 +1,17 @@
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import React from 'react'; import React from 'react';
import { Tag, Intent, Classes, Tooltip, Position } from '@blueprintjs/core'; import { Tag, Intent } from '@blueprintjs/core';
import { T, Choose, FormatNumberCell, If, Icon } from '../../../components'; import {
T,
Choose,
FormatNumberCell,
TextOverviewTooltipCell,
} from '../../../components';
import { Features } from 'common'; import { Features } from 'common';
import { getColumnWidth } from 'utils';
import { useFeatureCan } from 'hooks/state'; import { useFeatureCan } from 'hooks/state';
import { useManualJournalDrawerContext } from './ManualJournalDrawerProvider';
/**
* Note column accessor.
*/
export function NoteAccessor(row) {
return (
<If condition={row.note}>
<Tooltip
className={Classes.TOOLTIP_INDICATOR}
content={row.note}
position={Position.LEFT_TOP}
hoverOpenDelay={50}
>
<Icon icon={'file-alt'} iconSize={16} />
</Tooltip>
</If>
);
}
/** /**
* Publish column accessor. * Publish column accessor.
@@ -50,37 +39,45 @@ export function ManualJournalDetailsStatus({ manualJournal }) {
*/ */
export const useManualJournalEntriesColumns = () => { export const useManualJournalEntriesColumns = () => {
const { featureCan } = useFeatureCan(); const { featureCan } = useFeatureCan();
// manual journal details drawer context.
const {
manualJournal: { entries },
} = useManualJournalDrawerContext();
return React.useMemo( return React.useMemo(
() => [ () => [
{ {
Header: intl.get('account_name'), Header: intl.get('account_name'),
Cell: TextOverviewTooltipCell,
accessor: 'account.name', accessor: 'account.name',
width: 130, width: 130,
disableSortBy: true, disableSortBy: true,
className: 'account', textOverview: true,
}, },
{ {
Header: intl.get('contact'), Header: intl.get('contact'),
accessor: 'contact.display_name', accessor: 'contact.display_name',
width: 130, Cell: TextOverviewTooltipCell,
width: 100,
disableSortBy: true, disableSortBy: true,
className: 'contact', textOverview: true,
}, },
{ {
Header: intl.get('note'), Header: intl.get('note'),
accessor: NoteAccessor, accessor: 'note',
width: 80, Cell: TextOverviewTooltipCell,
disableSortBy: true, disableSortBy: true,
className: 'note', textOverview: true,
width: 100,
}, },
...(featureCan(Features.Branches) ...(featureCan(Features.Branches)
? [ ? [
{ {
Header: intl.get('branch'), Header: intl.get('branch'),
width: 130, width: 100,
accessor: 'branch.name', accessor: 'branch.name',
disableSortBy: true, disableSortBy: true,
className: 'branch',
}, },
] ]
: []), : []),
@@ -88,25 +85,31 @@ export const useManualJournalEntriesColumns = () => {
Header: intl.get('credit'), Header: intl.get('credit'),
accessor: 'credit', accessor: 'credit',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100, width: getColumnWidth(entries, 'credit', {
minWidth: 60,
magicSpacing: 5,
}),
disableResizable: true, disableResizable: true,
disableSortBy: true, disableSortBy: true,
textOverview: true,
formatNumber: { noZero: true }, formatNumber: { noZero: true },
className: 'credit',
align: 'right', align: 'right',
}, },
{ {
Header: intl.get('debit'), Header: intl.get('debit'),
accessor: 'debit', accessor: 'debit',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100, width: getColumnWidth(entries, 'debit', {
minWidth: 60,
magicSpacing: 5,
}),
disableResizable: true, disableResizable: true,
textOverview: true,
disableSortBy: true, disableSortBy: true,
formatNumber: { noZero: true }, formatNumber: { noZero: true },
className: 'debit',
align: 'right', align: 'right',
}, },
], ],
[featureCan], [],
); );
}; };

View File

@@ -3,43 +3,65 @@ import intl from 'react-intl-universal';
import moment from 'moment'; import moment from 'moment';
import { FormatNumberCell } from '../../../components'; import { FormatNumberCell } from '../../../components';
import { getColumnWidth } from 'utils';
import { usePaymentMadeDetailContext } from './PaymentMadeDetailProvider';
export const usePaymentMadeEntriesColumns = () => export const usePaymentMadeEntriesColumns = () => {
React.useMemo(() => [ // Payment made details context.
{ const {
Header: intl.get('date'), paymentMade: { entries },
accessor: (row) => moment(row.date).format('YYYY MMM DD'), } = usePaymentMadeDetailContext();
width: 100,
disableSortBy: true, return React.useMemo(
className: 'date', () => [
}, {
{ Header: intl.get('date'),
Header: intl.get('bill_number'), accessor: (row) => moment(row.date).format('YYYY MMM DD'),
accessor: 'bill_no', width: 100,
width: 150, disableSortBy: true,
disableSortBy: true, className: 'date',
className: 'bill_number', },
}, {
{ Header: intl.get('bill_number'),
Header: intl.get('bill_amount'), accessor: 'bill_no',
accessor: 'bill.amount', width: 150,
Cell: FormatNumberCell, disableSortBy: true,
align: 'right', className: 'bill_number',
}, },
{ {
Header: intl.get('due_amount'), Header: intl.get('bill_amount'),
accessor: 'bill.due_amount', accessor: 'bill.amount',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100, width: getColumnWidth(entries, 'bill.amount', {
disableSortBy: true, minWidth: 60,
align: 'right', magicSpacing: 5,
}, }),
{ align: 'right',
Header: intl.get('payment_amount'), },
accessor: 'payment_amount', {
Cell: FormatNumberCell, Header: intl.get('due_amount'),
width: 100, accessor: 'bill.due_amount',
disableSortBy: true, Cell: FormatNumberCell,
align: 'right', width: getColumnWidth(entries, 'bill.due_amount', {
}, minWidth: 60,
], []); magicSpacing: 5,
}),
disableSortBy: true,
align: 'right',
},
{
Header: intl.get('payment_amount'),
accessor: 'payment_amount',
Cell: FormatNumberCell,
width: getColumnWidth(entries, 'payment_amount', {
minWidth: 60,
magicSpacing: 5,
}),
disableSortBy: true,
textOverview: true,
align: 'right',
},
],
[],
);
};

View File

@@ -2,12 +2,18 @@ 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 { FormatNumberCell } from '../../../components'; import { FormatNumberCell } from '../../../components';
import { getColumnWidth } from 'utils';
import { usePaymentReceiveDetailContext } from './PaymentReceiveDetailProvider';
/** /**
* Retrieve payment entries table columns. * Retrieve payment entries table columns.
*/ */
export const usePaymentReceiveEntriesColumns = () => export const usePaymentReceiveEntriesColumns = () => {
React.useMemo( const {
paymentReceive: { entries },
} = usePaymentReceiveDetailContext();
return React.useMemo(
() => [ () => [
{ {
Header: intl.get('date'), Header: intl.get('date'),
@@ -27,24 +33,38 @@ export const usePaymentReceiveEntriesColumns = () =>
Header: intl.get('invoice_amount'), Header: intl.get('invoice_amount'),
accessor: 'invoice.balance', accessor: 'invoice.balance',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: getColumnWidth(entries, 'invoice.balance', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right', align: 'right',
textOverview: true,
}, },
{ {
Header: intl.get('amount_due'), Header: intl.get('amount_due'),
accessor: 'invoice.due_amount', accessor: 'invoice.due_amount',
Cell: FormatNumberCell, Cell: FormatNumberCell,
align: 'right', align: 'right',
width: 100, width: getColumnWidth(entries, 'invoice.due_amount', {
minWidth: 60,
magicSpacing: 5,
}),
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('payment_amount'), Header: intl.get('payment_amount'),
accessor: 'invoice.payment_amount', accessor: 'invoice.payment_amount',
Cell: FormatNumberCell, Cell: FormatNumberCell,
align: 'right', align: 'right',
width: 100, width: getColumnWidth(entries, 'invoice.payment_amount', {
minWidth: 60,
magicSpacing: 5,
}),
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
], ],
[], [],
); );
};

View File

@@ -1,44 +1,69 @@
import React from 'react'; import React from 'react';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import { FormatNumberCell } from '../../../components'; import { getColumnWidth } from 'utils';
import { FormatNumberCell, TextOverviewTooltipCell } from '../../../components';
export const useReceiptReadonlyEntriesTableColumns = () => React.useMemo(() => [ import { useReceiptDetailDrawerContext } from './ReceiptDetailDrawerProvider.js';
{
Header: intl.get('product_and_service'),
accessor: 'item.name',
width: 150,
className: 'name',
disableSortBy: true
},
{
Header: intl.get('description'),
accessor: 'description',
className: 'description',
disableSortBy: true
},
{
Header: intl.get('quantity'),
accessor: 'quantity',
Cell: FormatNumberCell,
width: 100,
align: 'right',
disableSortBy: true
},
{
Header: intl.get('rate'),
accessor: 'rate',
Cell: FormatNumberCell,
width: 100,
align: 'right',
disableSortBy: true
},
{
Header: intl.get('amount'),
accessor: 'amount',
Cell: FormatNumberCell,
width: 100,
align: 'right',
disableSortBy: true
},
], []);
export const useReceiptReadonlyEntriesTableColumns = () => {
// Receipt details drawer context.
const {
receipt: { entries },
} = useReceiptDetailDrawerContext();
return React.useMemo(
() => [
{
Header: intl.get('product_and_service'),
accessor: 'item.name',
Cell: TextOverviewTooltipCell,
width: 150,
className: 'name',
disableSortBy: true,
textOverview: true,
},
{
Header: intl.get('description'),
accessor: 'description',
Cell: TextOverviewTooltipCell,
className: 'description',
disableSortBy: true,
textOverview: true,
},
{
Header: intl.get('quantity'),
accessor: 'quantity',
Cell: FormatNumberCell,
width: getColumnWidth(entries, 'quantity', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right',
disableSortBy: true,
},
{
Header: intl.get('rate'),
accessor: 'rate',
Cell: FormatNumberCell,
width: getColumnWidth(entries, 'rate', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right',
disableSortBy: true,
textOverview: true,
},
{
Header: intl.get('amount'),
accessor: 'amount',
Cell: FormatNumberCell,
width: getColumnWidth(entries, 'amount', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right',
disableSortBy: true,
textOverview: true,
},
],
[],
);
};

View File

@@ -10,59 +10,82 @@ import {
Tag, Tag,
Intent, Intent,
} from '@blueprintjs/core'; } from '@blueprintjs/core';
import { getColumnWidth } from 'utils';
import { import {
Icon, Icon,
FormattedMessage as T, FormattedMessage as T,
TextOverviewTooltipCell,
FormatNumberCell, FormatNumberCell,
Choose, Choose,
} from '../../../components'; } from '../../../components';
import { useVendorCreditDetailDrawerContext } from './VendorCreditDetailDrawerProvider';
/** /**
* Retrieve vendor credit readonly details entries table columns. * Retrieve vendor credit readonly details entries table columns.
*/ */
export const useVendorCreditReadonlyEntriesTableColumns = () => export const useVendorCreditReadonlyEntriesTableColumns = () => {
React.useMemo( const {
vendorCredit: { entries },
} = useVendorCreditDetailDrawerContext();
return React.useMemo(
() => [ () => [
{ {
Header: intl.get('product_and_service'), Header: intl.get('product_and_service'),
accessor: 'item.name', accessor: 'item.name',
Cell: TextOverviewTooltipCell,
width: 150, width: 150,
className: 'item', className: 'item',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('description'), Header: intl.get('description'),
accessor: 'description', accessor: 'description',
Cell: TextOverviewTooltipCell,
className: 'description', className: 'description',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('quantity'), Header: intl.get('quantity'),
accessor: 'quantity', accessor: 'quantity',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100, width: getColumnWidth(entries, 'quantity', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('rate'), Header: intl.get('rate'),
accessor: 'rate', accessor: 'rate',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100, width: getColumnWidth(entries, 'rate', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('amount'), Header: intl.get('amount'),
accessor: 'amount', accessor: 'amount',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100, width: getColumnWidth(entries, 'amount', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
], ],
[], [],
); );
};
/** /**
* Vendor note more actions menu. * Vendor note more actions menu.

View File

@@ -1,40 +1,58 @@
import React from 'react'; import React from 'react';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import { Intent, Tag } from '@blueprintjs/core'; import { Intent, Tag } from '@blueprintjs/core';
import { getColumnWidth } from 'utils';
import { useWarehouseDetailDrawerContext } from './WarehouseTransferDetailDrawerProvider';
import { import {
FormattedMessage as T, FormattedMessage as T,
FormatNumberCell, FormatNumberCell,
TextOverviewTooltipCell,
Choose, Choose,
} from '../../../components'; } from '../../../components';
export const useWarehouseTransferReadOnlyEntriesColumns = () => /**
React.useMemo( * Retrieves the readonly warehouse transfer entries columns.
*/
export const useWarehouseTransferReadOnlyEntriesColumns = () => {
const {
warehouseTransfer: { entries },
} = useWarehouseDetailDrawerContext();
return React.useMemo(
() => [ () => [
{ {
Header: intl.get('warehouse_transfer.column.item_name'), Header: intl.get('warehouse_transfer.column.item_name'),
accessor: 'item.name', accessor: 'item.name',
width: 150, Cell: TextOverviewTooltipCell,
width: 100,
className: 'name', className: 'name',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('warehouse_transfer.column.description'), Header: intl.get('warehouse_transfer.column.description'),
accessor: 'description', accessor: 'description',
Cell: TextOverviewTooltipCell,
className: 'description', className: 'description',
disableSortBy: true, disableSortBy: true,
textOverview: true,
}, },
{ {
Header: intl.get('warehouse_transfer.column.transfer_quantity'), Header: intl.get('warehouse_transfer.column.transfer_quantity'),
accessor: 'quantity', accessor: 'quantity',
Cell: FormatNumberCell, Cell: FormatNumberCell,
width: 100, width: getColumnWidth(entries, 'quantity', {
minWidth: 60,
magicSpacing: 5,
}),
align: 'right', align: 'right',
disableSortBy: true, disableSortBy: true,
}, },
], ],
[], [],
); );
};
/** /**
* Warehouses transfer details status. * Warehouses transfer details status.

View File

@@ -43,7 +43,10 @@ export function ActionsCellRenderer({
const exampleMenu = ( const exampleMenu = (
<Menu> <Menu>
<MenuItem onClick={onRemoveRole} text={'item_entries.remove_row'} /> <MenuItem
onClick={onRemoveRole}
text={<T id={'item_entries.remove_row'} />}
/>
</Menu> </Menu>
); );

View File

@@ -1,7 +1,6 @@
import React from 'react'; import React from 'react';
import { FormGroup, Classes } from '@blueprintjs/core'; import { Classes } from '@blueprintjs/core';
import { FormattedMessage as T } from 'components'; import { FormattedMessage as T } from 'components';
import classNames from 'classnames';
import { AccountMultiSelect, Row, Col } from 'components'; import { AccountMultiSelect, Row, Col } from 'components';
import { FFormGroup } from '../../../components/Forms'; import { FFormGroup } from '../../../components/Forms';
@@ -47,10 +46,10 @@ function GLHeaderGeneralPaneContent() {
<Col xs={4}> <Col xs={4}>
<FFormGroup <FFormGroup
label={<T id={'specific_accounts'} />} label={<T id={'specific_accounts'} />}
name={'accounts'} name={'accountsIds'}
className={Classes.FILL} className={Classes.FILL}
> >
<AccountMultiSelect name="accounts" accounts={accounts} /> <AccountMultiSelect name="accountsIds" accounts={accounts} />
</FFormGroup> </FFormGroup>
</Col> </Col>
</Row> </Row>

View File

@@ -32,7 +32,7 @@ export const getDefaultGeneralLedgerQuery = () => {
basis: 'accural', basis: 'accural',
filterByOption: 'with-transactions', filterByOption: 'with-transactions',
branchesIds: [], branchesIds: [],
accounts: [], accountsIds: [],
}; };
}; };
@@ -49,8 +49,9 @@ const parseGeneralLedgerQuery = (locationQuery) => {
return { return {
...transformed, ...transformed,
// Ensures the branches ids is always array. // Ensures the branches, accounts ids is always array.
branchesIds: castArray(transformed.branchesIds), branchesIds: castArray(transformed.branchesIds),
accountsIds: castArray(transformed.accountsIds),
}; };
}; };

View File

@@ -12,7 +12,6 @@ function VendorsBalanceSummaryProvider({ filter, ...props }) {
const query = React.useMemo(() => transformFilterFormToQuery(filter), [ const query = React.useMemo(() => transformFilterFormToQuery(filter), [
filter, filter,
]); ]);
// Fetching vendors balance summary report based on the given query. // Fetching vendors balance summary report based on the given query.
const { const {
data: VendorBalanceSummary, data: VendorBalanceSummary,

View File

@@ -147,7 +147,7 @@ function InvoiceFormHeaderFields({
</FastField> </FastField>
</Col> </Col>
<Col className={'col--due-date'}> <Col xs={6}>
{/* ----------- Due date ----------- */} {/* ----------- Due date ----------- */}
<FastField name={'due_date'}> <FastField name={'due_date'}>
{({ form, field: { value }, meta: { error, touched } }) => ( {({ form, field: { value }, meta: { error, touched } }) => (

View File

@@ -1173,7 +1173,6 @@
"From transaction": "من معاملة", "From transaction": "من معاملة",
"Landed": "Landed", "Landed": "Landed",
"This options allows you to be able to add additional cost eg. freight then allocate cost to the items in your bills.": "يتيح لك هذا الخيار إمكانية إضافة تكلفة إضافية على سبيل المثال اضافة تكلفة الشحن ومن ثم تخصيص التكلفة لفواتير الشراء.", "This options allows you to be able to add additional cost eg. freight then allocate cost to the items in your bills.": "يتيح لك هذا الخيار إمكانية إضافة تكلفة إضافية على سبيل المثال اضافة تكلفة الشحن ومن ثم تخصيص التكلفة لفواتير الشراء.",
"Once your delete this located landed cost, you won't be able to restore it later, Are your sure you want to delete this transaction?": "بمجرد حذف معاملة تحميل التكلفة ، لن تتمكن من استعادتها لاحقًا ، هل أنت متأكد من أنك تريد حذف هذه المعاملة؟",
"journal_entries": "القيود", "journal_entries": "القيود",
"contact": "جهة الاتصال", "contact": "جهة الاتصال",
"invoice_details": "تفاصيل الفاتورة", "invoice_details": "تفاصيل الفاتورة",
@@ -1390,7 +1389,7 @@
"filter.value": "قيمة", "filter.value": "قيمة",
"payment_made.empty_status.title": "المنشأة لم تدفع اي اموال إلي الموردين ، إلي حد الأن!.", "payment_made.empty_status.title": "المنشأة لم تدفع اي اموال إلي الموردين ، إلي حد الأن!.",
"estimate.delete.error.estimate_converted_to_invoice": "لا يمكن حذف عملية عرض اسعار الذي تم تحويلها إلي فاتورة بيع.", "estimate.delete.error.estimate_converted_to_invoice": "لا يمكن حذف عملية عرض اسعار الذي تم تحويلها إلي فاتورة بيع.",
"landed_cost.action.delete.success_message": "The landed cost has been deleted successfully.", "landed_cost.action.delete.success_message": "تم حذف تكلفة اضافية بنجاح. ",
"items.option.only_active": "Only active", "items.option.only_active": "Only active",
"items.option_all_items.hint": "جميع الاصناف ، بما في ذلك تلك الاصناف لديها رصيد صفر.", "items.option_all_items.hint": "جميع الاصناف ، بما في ذلك تلك الاصناف لديها رصيد صفر.",
"items.option_with_transactions": "الاصناف مع معاملات", "items.option_with_transactions": "الاصناف مع معاملات",
@@ -1594,6 +1593,9 @@
"refund": "استرجاع", "refund": "استرجاع",
"landed_cost.dialog.label_select_transaction": "حدد المعاملة ", "landed_cost.dialog.label_select_transaction": "حدد المعاملة ",
"landed_cost.dialog.label_select_transaction_entry": "حدد سطر المعاملة ", "landed_cost.dialog.label_select_transaction_entry": "حدد سطر المعاملة ",
"landed_cost.dialog.label_unallocated_cost_amount":"قيمة التكلفة غير المحملة:",
"landed_cost.error.the_total_located_cost_is_bigger_than_the_transaction_line":"إجمالي قيمة التكلفة المحملة أكبر من قيمة سطر المعاملة.",
"landed_cost.once_your_delete_this_located_landed_cost": "بمجرد حذف معاملة تحميل التكلفة ، لن تتمكن من استعادتها لاحقًا ، هل أنت متأكد من أنك تريد حذف هذه المعاملة؟",
"refund_credit_note.dialog.label": "استرجاع اموال", "refund_credit_note.dialog.label": "استرجاع اموال",
"refund_credit_note.dialog.success_message": "تم انشاء معاملة استرجاع الاموال لإشعار الدائن بنجاح.", "refund_credit_note.dialog.success_message": "تم انشاء معاملة استرجاع الاموال لإشعار الدائن بنجاح.",
"refund_credit_note.dialog.refund_date": "تاريخ الاسترجاع", "refund_credit_note.dialog.refund_date": "تاريخ الاسترجاع",
@@ -1916,7 +1918,7 @@
"branches_multi_select.placeholder": "تصفية حسب الفروع…", "branches_multi_select.placeholder": "تصفية حسب الفروع…",
"warehouses_multi_select.label": "مخازن", "warehouses_multi_select.label": "مخازن",
"warehouses_multi_select.placeholder": "تصفية حسب المخازن…", "warehouses_multi_select.placeholder": "تصفية حسب المخازن…",
"dimensions": "Dimensions", "dimensions": "الأبعاد",
"warehouse_transfer.save_initiate_transfer": "حفظ وبدء النقل", "warehouse_transfer.save_initiate_transfer": "حفظ وبدء النقل",
"warehouse_transfer.save_mark_as_transferred": "حفظ وتم النقل", "warehouse_transfer.save_mark_as_transferred": "حفظ وتم النقل",
"warehouse_transfer.label.transfer_initiated": "بدء النقل", "warehouse_transfer.label.transfer_initiated": "بدء النقل",
@@ -1945,7 +1947,7 @@
"view_customer_details": "عرض تفاصيل العميل ", "view_customer_details": "عرض تفاصيل العميل ",
"view_vendor_details": "عرض تفاصيل المورد ", "view_vendor_details": "عرض تفاصيل المورد ",
"thanks_for_your_business_and_have_a_great_day": "Thanks for your business and have a great day!", "thanks_for_your_business_and_have_a_great_day": "Thanks for your business and have a great day!",
"terms_and_conditions.placeholder": "Enter the terms and conditions of your business to be displayed in your transaction", "terms_and_conditions.placeholder": "أدخل شروط وأحكام عملك ليتم عرضها في المعاملة.",
"expenses.decscrption.placeholder": "Enter the description of your business to be displayed in your transaction", "expenses.decscrption.placeholder": "Enter the description of your business to be displayed in your transaction",
"make_jorunal.decscrption.placeholder": "Enter the description of your business to be displayed in your transaction", "make_jorunal.decscrption.placeholder": "Enter the description of your business to be displayed in your transaction",
"estimate_form.label.total": "إجمالي", "estimate_form.label.total": "إجمالي",
@@ -1953,14 +1955,15 @@
"estimate_form.label.customer_note": "ملاحظة الزبون", "estimate_form.label.customer_note": "ملاحظة الزبون",
"estimate_form.label.terms_conditions": "الشروط والأحكام", "estimate_form.label.terms_conditions": "الشروط والأحكام",
"estimate_form.customer_note.placeholder": "Thanks for your business and have a great day!", "estimate_form.customer_note.placeholder": "Thanks for your business and have a great day!",
"estimate_form.terms_and_conditions.placeholder": "Enter the terms and conditions of your business to be displayed in your transaction", "estimate_form.terms_and_conditions.placeholder": "أدخل شروط وأحكام عملك ليتم عرضها في المعاملة.",
"invoice_form.label.total": "إجمالي", "invoice_form.label.total": "إجمالي",
"invoice_form.label.subtotal": "المجموع", "invoice_form.label.subtotal": "المجموع",
"invoice_form.label.due_amount": "مبلغ المستحق", "invoice_form.label.due_amount": "مبلغ المستحق",
"invoice_form.label.payment_amount": "مبلغ المدفوع", "invoice_form.label.payment_amount": "مبلغ المدفوع",
"invoice_form.label.invoice_message": "رسالة الفاتورة", "invoice_form.label.invoice_message": "رسالة الفاتورة",
"invoice_form.invoice_message.placeholder": "Thanks for your business and have a great day!", "invoice_form.invoice_message.placeholder": "Thanks for your business and have a great day!",
"invoice_form.terms_and_conditions.placeholder": "Enter the terms and conditions of your business to be displayed in your transaction", "invoice_form.label.terms_conditions": "الشروط والأحكام",
"invoice_form.terms_and_conditions.placeholder": "أدخل شروط وأحكام عملك ليتم عرضها في المعاملة.",
"receipt_form.label.total": "إجمالي", "receipt_form.label.total": "إجمالي",
"receipt_form.label.subtotal": "المجموع", "receipt_form.label.subtotal": "المجموع",
"receipt_form.label.due_amount": "مبلغ المستحق", "receipt_form.label.due_amount": "مبلغ المستحق",
@@ -1974,13 +1977,13 @@
"payment_receive_form.label.subtotal": "المجموع", "payment_receive_form.label.subtotal": "المجموع",
"payment_receive_form.label.total": "إجمالي", "payment_receive_form.label.total": "إجمالي",
"bill_form.label.note": "ملاحظة", "bill_form.label.note": "ملاحظة",
"bill_form.label.note.placeholder": "Enter the terms and conditions of your business to be displayed in your transaction", "bill_form.label.note.placeholder": "أدخل شروط وأحكام عملك ليتم عرضها في المعاملة.",
"bill_form.label.subtotal": "المجموع", "bill_form.label.subtotal": "المجموع",
"bill_form.label.total": "إجمالي", "bill_form.label.total": "إجمالي",
"bill_form.label.due_amount": "مبلغ المستحق", "bill_form.label.due_amount": "مبلغ المستحق",
"bill_form.label.payment_amount": "مبلغ المدفوع", "bill_form.label.payment_amount": "مبلغ المدفوع",
"vendor_credit_form.label.note": "ملاحظة", "vendor_credit_form.label.note": "ملاحظة",
"vendor_credit_form.note.placeholder": "Enter the terms and conditions of your business to be displayed in your transaction", "vendor_credit_form.note.placeholder": "أدخل شروط وأحكام عملك ليتم عرضها في المعاملة.",
"vendor_credit_form.label.subtotal": "المجموع", "vendor_credit_form.label.subtotal": "المجموع",
"vendor_credit_form.label.total": "إجمالي", "vendor_credit_form.label.total": "إجمالي",
"payment_made_form.label.statement": "بيان", "payment_made_form.label.statement": "بيان",
@@ -2008,7 +2011,7 @@
"warehouse_transfer.empty_status.title": "إدارة عمليات النقل بين المخازن", "warehouse_transfer.empty_status.title": "إدارة عمليات النقل بين المخازن",
"warehouse_transfer.empty_status.description": "غالبًا ماتحتاج الاعمال ذات مخازن متعددة لطلبات نقل البضائع من مخزن إلى آخر عندما تكون في حاجة ماسة إلى البائعين.", "warehouse_transfer.empty_status.description": "غالبًا ماتحتاج الاعمال ذات مخازن متعددة لطلبات نقل البضائع من مخزن إلى آخر عندما تكون في حاجة ماسة إلى البائعين.",
"warehouse_transfer.form.reason.label": "أسباب النقل", "warehouse_transfer.form.reason.label": "أسباب النقل",
"warehouse_transfer.form.reason.placeholder": "Enter the reason behind the transfer order.", "warehouse_transfer.form.reason.placeholder": "أدخل السبب وراء طلب النقل.",
"item.error.you_could_not_delete_item_has_associated": "لا يمكنك حذف العنصر لديه معاملات مرتبطة به ", "item.error.you_could_not_delete_item_has_associated": "لا يمكنك حذف العنصر لديه معاملات مرتبطة به ",
"warehouse_transfer.quantity_cannot_be_zero_or_empty": "لا يمكن أن تكون الكمية صفراً أو فارغة.", "warehouse_transfer.quantity_cannot_be_zero_or_empty": "لا يمكن أن تكون الكمية صفراً أو فارغة.",
"invoice.validation.due_date": "يجب أن يكون حقل {path} في وقت لاحق من {min}", "invoice.validation.due_date": "يجب أن يكون حقل {path} في وقت لاحق من {min}",

View File

@@ -1147,7 +1147,6 @@
"From transaction": "From transaction", "From transaction": "From transaction",
"landed": "Landed", "landed": "Landed",
"This options allows you to be able to add additional cost eg. freight then allocate cost to the items in your bills.": "This options allows you to be able to add additional cost eg. freight then allocate cost to the items in your bills.", "This options allows you to be able to add additional cost eg. freight then allocate cost to the items in your bills.": "This options allows you to be able to add additional cost eg. freight then allocate cost to the items in your bills.",
"Once your delete this located landed cost, you won't be able to restore it later, Are your sure you want to delete this transaction?": "Once your delete this located landed cost, you won't be able to restore it later, Are your sure you want to delete this transaction?",
"journal_entries": "Journal Entries", "journal_entries": "Journal Entries",
"contact": "Contact", "contact": "Contact",
"invoice_details": "Invoice details", "invoice_details": "Invoice details",
@@ -1259,12 +1258,41 @@
"setup.initializing.please_refresh_the_page": "Please refresh the page", "setup.initializing.please_refresh_the_page": "Please refresh the page",
"setup.organization.title": "Lets Get Started", "setup.organization.title": "Lets Get Started",
"setup.organization.description": "Tell the system a little bit about your organization.", "setup.organization.description": "Tell the system a little bit about your organization.",
"plan.capital_basic.title": "Capital Basic",
"plan.feature.sales_invoices": "Sales Invoices.",
"plan.feature.sales_estimates": "Sales Estimates.",
"plan.feature.customers": "Customers.",
"plan.feature.credit_notes": "Credit notes.",
"plan.feature.manual_journals": "Manual Journals.",
"plan.feature.expenses_tracking": "Expenses Tracking",
"plan.feature.basic_financial_reports": "Basic Financial Reports.",
"plan.capital_plus.title": "Capital Plus",
"plan.feature.all_capital_basic": "All Capital Basic features.",
"plan.feature.predefined_user_roles": "Predefined User Roles.",
"plan.feature.custom_tables_views": "Custom Tables Views.",
"plan.feature.transactions_locking": "Transactions Locking.",
"plan.feature.plus_financial_reports": "Plus Financial Reports.",
"plan.feature.custom_fields_resources": "Custom Fields & Resources.",
"plan.essential.title": "Capital Essential",
"plan.feature.all_capital_plus": "All Capital Basic features.",
"plan.feature.sales_purchases_order": "Sales & Purchases Order.",
"plan.feature.purchase_invoices": "Purchase Invoices.",
"plan.feature.inventory_tracking": "Inventory Tracking.",
"plan.feature.custom_roles": "Custom Roles.",
"plan.feature.multiply_currency_transcations": "Multiply Currency Transcations.",
"plan.feature.inventory_reports": "Inventory Reports.",
"plan.feature.landed_cost": "Landed cost.",
"plan.capital_enterprise.title": "Capital Enterprise",
"plan.feature.all_capital_essential": "All Capital Essential features.",
"plan.feature.multiply_branches": "Multiply Branches.",
"plan.feature.multiply_warehouses": "Multiply Warehouses.",
"plan.feature.accounting_dimensions": "Accounting Dimensions.",
"plan.feature.warehouses_reports": "Warehouses Reports.",
"plan.feature.branches_reports": "Branches Reports.",
"plan.professional.title": "Pro", "plan.professional.title": "Pro",
"plan.essential.title": "Essential",
"plan.plus.title": "Plus+", "plan.plus.title": "Plus+",
"plan.feature.sale_purchase_invoice": "Sale and purchase invoices.", "plan.feature.sale_purchase_invoice": "Sale and purchase invoices.",
"plan.feature.receivable_payable_accounts": "Customers/vendors accounts.", "plan.feature.receivable_payable_accounts": "Customers/vendors accounts.",
"plan.feature.expenses_tracking": "Expenses tracking",
"plan.feature.manual_journal": "Manual journals.", "plan.feature.manual_journal": "Manual journals.",
"plan.feature.financial_reports": "Financial reports.", "plan.feature.financial_reports": "Financial reports.",
"plan.feature.one_user_with_accountant": "For one user and accountant", "plan.feature.one_user_with_accountant": "For one user and accountant",
@@ -1275,9 +1303,7 @@
"plan.feature.three_users": "Three users with your accountant", "plan.feature.three_users": "Three users with your accountant",
"plan.feature.advanced_financial_reports": "Advanced financial reports", "plan.feature.advanced_financial_reports": "Advanced financial reports",
"plan.feature.tracking_multi_locations": "Track multi-branches and locations", "plan.feature.tracking_multi_locations": "Track multi-branches and locations",
"plan.feature.all_capital_essential": "All Capital Essential features.",
"plan.feature.projects_accounting": "Projects accounting and timesheets", "plan.feature.projects_accounting": "Projects accounting and timesheets",
"plan.feature.accounting_dimensions": "Accounting dimensions.",
"plan.monthly": "Monthly", "plan.monthly": "Monthly",
"plan.yearly": "Yearly", "plan.yearly": "Yearly",
"payment_via_voucher.success_message": "Payment has been done successfully.", "payment_via_voucher.success_message": "Payment has been done successfully.",
@@ -1293,11 +1319,11 @@
"inventory_adjustment.details_drawer.title": "Inventory adjustment details", "inventory_adjustment.details_drawer.title": "Inventory adjustment details",
"setup.organization.location": "Location", "setup.organization.location": "Location",
"preferences.general.success_message": "The general preferences has been saved.", "preferences.general.success_message": "The general preferences has been saved.",
"customer.drawer.action.new_invoice": "New invoice", "customer.drawer.action.new_invoice": "New Invoice",
"customer.drawer.action.new_estimate": "New estimate", "customer.drawer.action.new_estimate": "New Estimate",
"customer.drawer.action.new_payment": "New payment", "customer.drawer.action.new_payment": "New Payment",
"customer.drawer.action.new_receipt": "New receipt", "customer.drawer.action.new_receipt": "New Receipt",
"customer.drawer.action.new_transaction": "New transaction", "customer.drawer.action.new_transaction": "New Transaction",
"customer.drawer.action.edit_opening_balance": "Edit Opening Balance", "customer.drawer.action.edit_opening_balance": "Edit Opening Balance",
"customer.drawer.action.edit": "Edit", "customer.drawer.action.edit": "Edit",
"customer.drawer.label.outstanding_receivable": "Outstanding receivable", "customer.drawer.label.outstanding_receivable": "Outstanding receivable",
@@ -1324,9 +1350,9 @@
"vendor.drawer.label.note": "Note", "vendor.drawer.label.note": "Note",
"vendor.drawer.action.edit_vendor": "Edit vendor", "vendor.drawer.action.edit_vendor": "Edit vendor",
"vendor.drawer.action.delete": "Delete", "vendor.drawer.action.delete": "Delete",
"vendor.drawer.action.new_transaction": "New transaction", "vendor.drawer.action.new_transaction": "New Transaction",
"vendor.drawer.action.new_payment": "New payment", "vendor.drawer.action.new_payment": "New Payment",
"vendor.drawer.action.new_invoice": "New purchase invoice", "vendor.drawer.action.new_invoice": "New Purchase Invoice",
"vendor.drawer.action.edit": "Edit", "vendor.drawer.action.edit": "Edit",
"vendor.drawer.action.edit_opening_balance": "Edit Opening Balance", "vendor.drawer.action.edit_opening_balance": "Edit Opening Balance",
"manual_journals.empty_status.description": "Manual journals can be used to record financial transactions manually, used by accountants to work with the ledger.", "manual_journals.empty_status.description": "Manual journals can be used to record financial transactions manually, used by accountants to work with the ledger.",
@@ -1585,6 +1611,9 @@
"refund": "Refund", "refund": "Refund",
"landed_cost.dialog.label_select_transaction": "Select transaction", "landed_cost.dialog.label_select_transaction": "Select transaction",
"landed_cost.dialog.label_select_transaction_entry": "Select transaction entry", "landed_cost.dialog.label_select_transaction_entry": "Select transaction entry",
"landed_cost.dialog.label_unallocated_cost_amount": "Unallocated cost Amount:",
"landed_cost.error.the_total_located_cost_is_bigger_than_the_transaction_line": "The total located cost is bigger than the transaction line.",
"landed_cost.once_your_delete_this_located_landed_cost": "Once your delete this located landed cost, you won't be able to restore it later, Are your sure you want to delete this transaction?",
"refund_credit_note.dialog.label": "Refund Credit Note", "refund_credit_note.dialog.label": "Refund Credit Note",
"refund_credit_note.dialog.success_message": "The customer credit note refund has been created successfully.", "refund_credit_note.dialog.success_message": "The customer credit note refund has been created successfully.",
"refund_credit_note.dialog.refund_date": "Refund date", "refund_credit_note.dialog.refund_date": "Refund date",
@@ -1939,7 +1968,6 @@
"payment_made.error.withdrawal_account_currency_invalid": "The withdrawal account currency should be same vendor currency or organization base currency.", "payment_made.error.withdrawal_account_currency_invalid": "The withdrawal account currency should be same vendor currency or organization base currency.",
"view_customer_details": "View Customer Details", "view_customer_details": "View Customer Details",
"view_vendor_details": "View Vendor Details", "view_vendor_details": "View Vendor Details",
"thanks_for_your_business_and_have_a_great_day": "Thanks for your business and have a great day!",
"terms_and_conditions.placeholder": "Enter the terms and conditions of your business to be displayed in your transaction", "terms_and_conditions.placeholder": "Enter the terms and conditions of your business to be displayed in your transaction",
"expenses.decscrption.placeholder": "Enter the description of your business to be displayed in your transaction", "expenses.decscrption.placeholder": "Enter the description of your business to be displayed in your transaction",
"make_jorunal.decscrption.placeholder": "Enter the description of your business to be displayed in your transaction", "make_jorunal.decscrption.placeholder": "Enter the description of your business to be displayed in your transaction",

View File

@@ -2,7 +2,6 @@ import { createReducer } from '@reduxjs/toolkit';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import t from 'store/types'; import t from 'store/types';
const getSubscriptionPeriods = () => [ const getSubscriptionPeriods = () => [
{ {
slug: 'month', slug: 'month',
@@ -15,79 +14,110 @@ const getSubscriptionPeriods = () => [
]; ];
const getSubscriptionPlans = () => [ const getSubscriptionPlans = () => [
{
name: intl.get('plan.capital_basic.title'),
slug: 'capital_basic',
description: [
intl.get('plan.feature.sales_invoices'),
intl.get('plan.feature.sales_estimates'),
intl.get('plan.feature.customers'),
intl.get('plan.feature.credit_notes'),
intl.get('plan.feature.manual_journals'),
intl.get('plan.feature.expenses_tracking'),
intl.get('plan.feature.basic_financial_reports'),
],
price: '55',
periods: [
{
slug: 'month',
label: intl.get('plan.monthly'),
price: '55',
},
{
slug: 'year',
label: intl.get('plan.yearly'),
price: '595',
},
],
currencyCode: 'LYD',
},
{
name: intl.get('plan.capital_plus.title'),
slug: 'capital_plus',
description: [
intl.get('plan.feature.all_capital_basic'),
intl.get('plan.feature.predefined_user_roles'),
intl.get('plan.feature.custom_tables_views'),
intl.get('plan.feature.transactions_locking'),
intl.get('plan.feature.plus_financial_reports'),
intl.get('plan.feature.custom_fields_resources'),
],
price: '75',
periods: [
{
slug: 'month',
label: intl.get('plan.monthly'),
price: '75',
},
{
slug: 'year',
label: intl.get('plan.yearly'),
price: '795',
},
],
currencyCode: 'LYD',
},
{ {
name: intl.get('plan.essential.title'), name: intl.get('plan.essential.title'),
slug: 'essentials', slug: 'essentials',
description: [ description: [
intl.get('plan.feature.sale_purchase_invoice'), intl.get('plan.feature.all_capital_plus'),
intl.get('plan.feature.receivable_payable_accounts'), intl.get('plan.feature.sales_purchases_order'),
intl.get('plan.feature.expenses_tracking'), intl.get('plan.feature.purchase_invoices'),
intl.get('plan.feature.manual_journal'), intl.get('plan.feature.inventory_tracking'),
intl.get('plan.feature.financial_reports'), intl.get('plan.feature.custom_roles'),
intl.get('plan.feature.one_user_with_accountant'), intl.get('plan.feature.multiply_currency_transcations'),
intl.get('plan.feature.inventory_reports'),
intl.get('plan.feature.landed_cost'),
], ],
price: '100', price: '95',
periods: [ periods: [
{ {
slug: 'month', slug: 'month',
label: intl.get('plan.monthly'), label: intl.get('plan.monthly'),
price: '100' price: '95',
}, },
{ {
slug: 'year', slug: 'year',
label: intl.get('plan.yearly'), label: intl.get('plan.yearly'),
price: '1,200', price: '995',
}, },
], ],
currencyCode: 'LYD', currencyCode: 'LYD',
}, },
{ {
name: intl.get('plan.professional.title'), name: intl.get('plan.capital_enterprise.title'),
slug: 'plus',
description: [
intl.get('plan.feature.all_capital_essential'),
intl.get('plan.feature.multi_currency'),
intl.get('plan.feature.purchase_sell_orders'),
intl.get('plan.feature.multi_inventory_managment'),
intl.get('plan.feature.three_users'),
intl.get('plan.feature.advanced_financial_reports'),
],
price: '200',
currencyCode: 'LYD',
periods: [
{
slug: 'month',
label: intl.get('plan.monthly'),
price: '200'
},
{
slug: 'year',
label: intl.get('plan.yearly'),
price: '1,200',
},
],
},
{
name: intl.get('plan.plus.title'),
slug: 'enterprise', slug: 'enterprise',
description: [ description: [
intl.get('plan.feture.all_capital_professional_features'), intl.get('plan.feature.all_capital_essential'),
intl.get('plan.feature.tracking_multi_locations'), intl.get('plan.feature.multiply_branches'),
intl.get('plan.feature.projects_accounting'), intl.get('plan.feature.multiply_warehouses'),
intl.get('plan.feature.accounting_dimensions'), intl.get('plan.feature.accounting_dimensions'),
intl.get('plan.feature.warehouses_reports'),
intl.get('plan.feature.branches_reports'),
], ],
price: '300', price: '120',
currencyCode: 'LYD', currencyCode: 'LYD',
periods: [ periods: [
{ {
slug: 'month', slug: 'month',
label: intl.get('plan.monthly'), label: intl.get('plan.monthly'),
price: '300' price: '120',
}, },
{ {
slug: 'year', slug: 'year',
label: intl.get('plan.yearly'), label: intl.get('plan.yearly'),
price: '1,200', price: '1,195',
}, },
], ],
}, },

View File

@@ -290,3 +290,8 @@ html[lang^='ar'] {
.font-bold { .font-bold {
font-weight: 600; font-weight: 600;
} }
span.table-tooltip-overview-target{
display: inline;
}

View File

@@ -1,6 +1,6 @@
.billing-plans{ .billing-plans{
max-width: 753px;
.paragraph{ .paragraph{
font-size: 15px; font-size: 15px;
} }