Compare commits

...

31 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
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
35 changed files with 581 additions and 233 deletions

View File

@@ -2,6 +2,13 @@
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 ## [1.7.2-rc.2] - 04-04-2022
### Fixed ### Fixed

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';
import { useReceiptDetailDrawerContext } from './ReceiptDetailDrawerProvider.js';
export const useReceiptReadonlyEntriesTableColumns = () => React.useMemo(() => [ export const useReceiptReadonlyEntriesTableColumns = () => {
{ // Receipt details drawer context.
Header: intl.get('product_and_service'), const {
accessor: 'item.name', receipt: { entries },
width: 150, } = useReceiptDetailDrawerContext();
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, },
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

@@ -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

@@ -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": "تاريخ الاسترجاع",

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",
@@ -1320,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",
@@ -1351,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.",
@@ -1612,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",

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