mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-18 22:00:31 +00:00
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e662bf7af9 | ||
|
|
a829ceb709 | ||
|
|
cdce00187b | ||
|
|
91a38b34cc | ||
|
|
1b97a162e8 | ||
|
|
e8e12e63ea | ||
|
|
80feba6005 | ||
|
|
cc457e1e43 | ||
|
|
2ced5dc013 | ||
|
|
dd86c2993e | ||
|
|
bd05a4a188 | ||
|
|
8160cbe402 | ||
|
|
0ef6bebfb8 | ||
|
|
91ff3fdccb | ||
|
|
edd37fff78 | ||
|
|
679f7ce96c | ||
|
|
79b3ab9ec7 | ||
|
|
e7158b7ba7 | ||
|
|
569bc1c4a4 | ||
|
|
b880732087 | ||
|
|
b1e7720bd9 |
13
CHANGELOG.md
13
CHANGELOG.md
@@ -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
|
||||||
|
|||||||
@@ -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)`
|
||||||
|
|||||||
27
src/components/DataTableCells/TextOverviewTooltipCell.js
Normal file
27
src/components/DataTableCells/TextOverviewTooltipCell.js
Normal 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>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -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,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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
45
src/config/interfaces.tsx
Normal 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;
|
||||||
@@ -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>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
[],
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|||||||
@@ -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 = () =>
|
|||||||
],
|
],
|
||||||
[],
|
[],
|
||||||
);
|
);
|
||||||
|
};
|
||||||
|
|||||||
@@ -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,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
[],
|
[],
|
||||||
);
|
);
|
||||||
|
};
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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 (
|
||||||
|
|||||||
@@ -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],
|
[],
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
[],
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|||||||
@@ -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,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
[],
|
[],
|
||||||
);
|
);
|
||||||
|
};
|
||||||
|
|||||||
@@ -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,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
[],
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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),
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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 } }) => (
|
||||||
|
|||||||
@@ -1918,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": "بدء النقل",
|
||||||
@@ -1947,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": "إجمالي",
|
||||||
@@ -1955,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": "مبلغ المستحق",
|
||||||
@@ -1976,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": "بيان",
|
||||||
@@ -2010,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}",
|
||||||
|
|||||||
@@ -1258,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": "Let’s Get Started",
|
"setup.organization.title": "Let’s 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",
|
||||||
@@ -1274,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.",
|
||||||
@@ -1941,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",
|
||||||
|
|||||||
@@ -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',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -290,3 +290,8 @@ html[lang^='ar'] {
|
|||||||
.font-bold {
|
.font-bold {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
span.table-tooltip-overview-target{
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
.billing-plans{
|
.billing-plans{
|
||||||
|
max-width: 753px;
|
||||||
.paragraph{
|
.paragraph{
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user