mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-18 22:00:31 +00:00
Compare commits
31 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f1899e1ce1 | ||
|
|
76d6cd0eaa | ||
|
|
90b4f86a0d | ||
|
|
5766d25bd1 | ||
|
|
6a5d96e869 | ||
|
|
69f16d1977 | ||
|
|
9973693a86 | ||
|
|
11851d114d | ||
|
|
3a3dd7a565 | ||
|
|
687dda1e7c | ||
|
|
bfa809c831 | ||
|
|
07145e92ab | ||
|
|
21779007be | ||
|
|
4fc1ecdc2d | ||
|
|
c9b5cecf7a | ||
|
|
4a46c00a07 | ||
|
|
5c7ac0593d | ||
|
|
fa25fb4ede | ||
|
|
c31e9dcd29 | ||
|
|
3566d3b855 | ||
|
|
c5da97bce0 | ||
|
|
0cfbe633bd | ||
|
|
55098d7b78 | ||
|
|
78610cd519 | ||
|
|
828a28b976 | ||
|
|
daf5fc8aba | ||
|
|
430ab95dc3 | ||
|
|
8100a57195 | ||
|
|
97d890bcef | ||
|
|
521df8511d | ||
|
|
73ec49b36a |
1
.env.example
Normal file
1
.env.example
Normal file
@@ -0,0 +1 @@
|
|||||||
|
APP_VERSION=$npm_package_version
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
# misc
|
# misc
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
.env
|
||||||
.env.local
|
.env.local
|
||||||
.env.development.local
|
.env.development.local
|
||||||
.env.test.local
|
.env.test.local
|
||||||
|
|||||||
28
CHANGELOG.md
28
CHANGELOG.md
@@ -2,8 +2,17 @@
|
|||||||
|
|
||||||
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.5.3] - 03-01-2020
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Localize the global errors.
|
||||||
|
- Expand account name column on trial balance sheet.
|
||||||
|
|
||||||
## [1.5.0] - 20-12-2021
|
## [1.5.0] - 20-12-2021
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Add credit note on sales module.
|
- Add credit note on sales module.
|
||||||
- Add vendor credit on purchases module.
|
- Add vendor credit on purchases module.
|
||||||
- Optimize landed costs on purchase invoices.
|
- Optimize landed costs on purchase invoices.
|
||||||
@@ -16,22 +25,28 @@ All notable changes to Bigcapital server-side will be in this file.
|
|||||||
purchase invoice, expense, manual journal, inventory adjustment and cashflow transaction.
|
purchase invoice, expense, manual journal, inventory adjustment and cashflow transaction.
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Dashboard meta boot and authenticated user request query.
|
- Dashboard meta boot and authenticated user request query.
|
||||||
|
- Optimize Arabic localization.
|
||||||
|
|
||||||
## [1.4.0] - 11-09-2021
|
## [1.4.0] - 11-09-2021
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Add SMS notification on sale invoice, receipt, customers payments modules.
|
- Add SMS notification on sale invoice, receipt, customers payments modules.
|
||||||
- Customer quick create in customers list.
|
- Customer quick create in customers list.
|
||||||
- Item quick create in items list.
|
- Item quick create in items list.
|
||||||
|
|
||||||
### Changes
|
### Changes
|
||||||
change: BIG-171 alerts in global scope and lazy loading.
|
|
||||||
|
change: BIG-171 alerts in global scope and lazy loading.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
fix: BIG-140 - Reordering sell, cost and inventory account on item details.
|
|
||||||
fix: BIG-144 - Typo adjustment dialog success message.
|
fix: BIG-140 - Reordering sell, cost and inventory account on item details.
|
||||||
fix: BIG-148 - Items entries ordered by index.
|
fix: BIG-144 - Typo adjustment dialog success message.
|
||||||
fix: BIG-132 AR/AP aging summary report filter by none transactions/zero contacts.
|
fix: BIG-148 - Items entries ordered by index.
|
||||||
|
fix: BIG-132 AR/AP aging summary report filter by none transactions/zero contacts.
|
||||||
|
|
||||||
## [1.2.0-RC] - 03-09-2021
|
## [1.2.0-RC] - 03-09-2021
|
||||||
|
|
||||||
@@ -39,6 +54,7 @@ Here we write upgrading notes for brands. It's a team effort to make them as
|
|||||||
straightforward as possible.
|
straightforward as possible.
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Add slidable sub-sidebar to improve user experience instead of sub-menu.
|
- Add slidable sub-sidebar to improve user experience instead of sub-menu.
|
||||||
- Add Subscription guard to ensure the organization's subscription is active or
|
- Add Subscription guard to ensure the organization's subscription is active or
|
||||||
redirect all routes to subscription billing page.
|
redirect all routes to subscription billing page.
|
||||||
@@ -65,11 +81,13 @@ straightforward as possible.
|
|||||||
- Add clickable datatable rows to display each row details.
|
- Add clickable datatable rows to display each row details.
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Optimize style of datatable selection checkbox.
|
- Optimize style of datatable selection checkbox.
|
||||||
- Disable animation in dashboard views tabs.
|
- Disable animation in dashboard views tabs.
|
||||||
- Optimize Arabic localization.
|
- Optimize Arabic localization.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- fix: disable submit buttons in pereferences pages.
|
- fix: disable submit buttons in pereferences pages.
|
||||||
- fix: inventory adjustment cost field max/min range to avoid out of range error.
|
- fix: inventory adjustment cost field max/min range to avoid out of range error.
|
||||||
- fix: transactions by customers/vendors report localization.
|
- fix: transactions by customers/vendors report localization.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
779
package-lock.json
generated
779
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "bigcapital-client",
|
"name": "bigcapital-client",
|
||||||
"version": "1.2.0",
|
"version": "1.5.3",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "7.8.4",
|
"@babel/core": "7.8.4",
|
||||||
|
|||||||
@@ -2,7 +2,11 @@
|
|||||||
<html dir="ltr" lang="en">
|
<html dir="ltr" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<link rel="icon" href="%PUBLIC_URL%/favicons/favicon-32.ico" sizes="32x32">
|
<link
|
||||||
|
rel="icon"
|
||||||
|
href="%PUBLIC_URL%/favicons/favicon-32.ico"
|
||||||
|
sizes="32x32"
|
||||||
|
/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<meta name="theme-color" content="#000000" />
|
<meta name="theme-color" content="#000000" />
|
||||||
<meta
|
<meta
|
||||||
@@ -15,6 +19,22 @@
|
|||||||
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||||
-->
|
-->
|
||||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||||
|
<!-- Hotjar Tracking Code for https://app.bigcapital.ly/ -->
|
||||||
|
<script>
|
||||||
|
(function (h, o, t, j, a, r) {
|
||||||
|
h.hj =
|
||||||
|
h.hj ||
|
||||||
|
function () {
|
||||||
|
(h.hj.q = h.hj.q || []).push(arguments);
|
||||||
|
};
|
||||||
|
h._hjSettings = { hjid: 2774528, hjsv: 6 };
|
||||||
|
a = o.getElementsByTagName('head')[0];
|
||||||
|
r = o.createElement('script');
|
||||||
|
r.async = 1;
|
||||||
|
r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv;
|
||||||
|
a.appendChild(r);
|
||||||
|
})(window, document, 'https://static.hotjar.com/c/hotjar-', '.js?sv=');
|
||||||
|
</script>
|
||||||
<!--
|
<!--
|
||||||
Notice the use of %PUBLIC_URL% in the tags above.
|
Notice the use of %PUBLIC_URL% in the tags above.
|
||||||
It will be replaced with the URL of the `public` folder during the build.
|
It will be replaced with the URL of the `public` folder during the build.
|
||||||
@@ -41,7 +61,11 @@
|
|||||||
To create a production bundle, use `npm run build` or `yarn build`.
|
To create a production bundle, use `npm run build` or `yarn build`.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flexboxgrid/6.3.1/flexboxgrid.min.css" type="text/css" >
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="https://cdnjs.cloudflare.com/ajax/libs/flexboxgrid/6.3.1/flexboxgrid.min.css"
|
||||||
|
type="text/css"
|
||||||
|
/>
|
||||||
<!-- <link href="https://cdn.syncfusion.com/ej2/material.css" rel="stylesheet"> -->
|
<!-- <link href="https://cdn.syncfusion.com/ej2/material.css" rel="stylesheet"> -->
|
||||||
<!-- <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> -->
|
<!-- <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> -->
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import SidebarContainer from 'components/Sidebar/SidebarContainer';
|
import SidebarContainer from 'components/Sidebar/SidebarContainer';
|
||||||
import SidebarHead from 'components/Sidebar/SidebarHead';
|
import SidebarHead from 'components/Sidebar/SidebarHead';
|
||||||
import SidebarMenu from 'components/Sidebar/SidebarMenu';
|
import SidebarMenu from 'components/Sidebar/SidebarMenu';
|
||||||
@@ -17,7 +18,20 @@ export default function Sidebar({ dashboardContentRef }) {
|
|||||||
<SidebarMenu menu={menu} />
|
<SidebarMenu menu={menu} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="sidebar__version">0.0.1-beta version.</div>
|
<SidebarFooterVersion />
|
||||||
</SidebarContainer>
|
</SidebarContainer>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sidebar footer version.
|
||||||
|
* @returns {React.JSX}
|
||||||
|
*/
|
||||||
|
function SidebarFooterVersion() {
|
||||||
|
const { VERSION } = process.env;
|
||||||
|
|
||||||
|
if (!VERSION) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return <div class="sidebar__version">v{VERSION}</div>;
|
||||||
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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', {
|
||||||
|
|||||||
@@ -1,5 +1,13 @@
|
|||||||
import React, { useMemo } from 'react';
|
import React, { useMemo } from 'react';
|
||||||
import { Menu, MenuItem, MenuDivider, Intent } from '@blueprintjs/core';
|
import {
|
||||||
|
Menu,
|
||||||
|
MenuItem,
|
||||||
|
MenuDivider,
|
||||||
|
Intent,
|
||||||
|
Tooltip,
|
||||||
|
Position,
|
||||||
|
Classes,
|
||||||
|
} from '@blueprintjs/core';
|
||||||
import clsx from 'classnames';
|
import clsx from 'classnames';
|
||||||
|
|
||||||
import intl from 'react-intl-universal';
|
import intl from 'react-intl-universal';
|
||||||
@@ -79,7 +87,7 @@ export function ActionsMenu({
|
|||||||
* Phone number accessor.
|
* Phone number accessor.
|
||||||
*/
|
*/
|
||||||
export function PhoneNumberAccessor(row) {
|
export function PhoneNumberAccessor(row) {
|
||||||
return <div className={'work_phone'}>{row.work_phone}</div>;
|
return <div className={'work_phone'}>{row.personal_phone}</div>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -89,6 +97,24 @@ export function BalanceAccessor(row) {
|
|||||||
return <Money amount={row.closing_balance} currency={row.currency_code} />;
|
return <Money amount={row.closing_balance} currency={row.currency_code} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve customers table columns.
|
* Retrieve customers table columns.
|
||||||
*/
|
*/
|
||||||
@@ -123,12 +149,20 @@ export function useCustomersTableColumns() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'work_phone',
|
id: 'work_phone',
|
||||||
Header: intl.get('work_phone'),
|
Header: intl.get('phone_number'),
|
||||||
accessor: PhoneNumberAccessor,
|
accessor: PhoneNumberAccessor,
|
||||||
className: 'phone_number',
|
className: 'phone_number',
|
||||||
width: 100,
|
width: 100,
|
||||||
clickable: true,
|
clickable: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'note',
|
||||||
|
Header: intl.get('note'),
|
||||||
|
accessor: NoteAccessor,
|
||||||
|
disableSortBy: true,
|
||||||
|
width: 85,
|
||||||
|
clickable: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'balance',
|
id: 'balance',
|
||||||
Header: intl.get('receivable_balance'),
|
Header: intl.get('receivable_balance'),
|
||||||
|
|||||||
@@ -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>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -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,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ const defaultInitialValues = {
|
|||||||
cashflow_account_id: '',
|
cashflow_account_id: '',
|
||||||
credit_account_id: '',
|
credit_account_id: '',
|
||||||
description: '',
|
description: '',
|
||||||
published: '',
|
publish: '',
|
||||||
};
|
};
|
||||||
|
|
||||||
function MoneyInForm({
|
function MoneyInForm({
|
||||||
@@ -73,7 +73,7 @@ function MoneyInForm({
|
|||||||
const handleFormSubmit = (values, { setSubmitting, setErrors }) => {
|
const handleFormSubmit = (values, { setSubmitting, setErrors }) => {
|
||||||
const form = {
|
const form = {
|
||||||
...omit(values, ['currency_code']),
|
...omit(values, ['currency_code']),
|
||||||
published: submitPayload.publish,
|
publish: true,
|
||||||
};
|
};
|
||||||
setSubmitting(true);
|
setSubmitting(true);
|
||||||
createCashflowTransactionMutate(form)
|
createCashflowTransactionMutate(form)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ const Schema = Yup.object().shape({
|
|||||||
.min(3)
|
.min(3)
|
||||||
.max(DATATYPES_LENGTH.TEXT)
|
.max(DATATYPES_LENGTH.TEXT)
|
||||||
.label(intl.get('description')),
|
.label(intl.get('description')),
|
||||||
published: Yup.boolean(),
|
publish: Yup.boolean(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const CreateMoneyInFormSchema = Schema;
|
export const CreateMoneyInFormSchema = Schema;
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ const defaultInitialValues = {
|
|||||||
cashflow_account_id: '',
|
cashflow_account_id: '',
|
||||||
credit_account_id: '',
|
credit_account_id: '',
|
||||||
description: '',
|
description: '',
|
||||||
published: '',
|
publish: '',
|
||||||
};
|
};
|
||||||
|
|
||||||
function MoneyOutForm({
|
function MoneyOutForm({
|
||||||
@@ -73,7 +73,7 @@ function MoneyOutForm({
|
|||||||
const handleFormSubmit = (values, { setSubmitting, setErrors }) => {
|
const handleFormSubmit = (values, { setSubmitting, setErrors }) => {
|
||||||
const form = {
|
const form = {
|
||||||
...omit(values, ['currency_code']),
|
...omit(values, ['currency_code']),
|
||||||
published: submitPayload.publish,
|
publish: true,
|
||||||
};
|
};
|
||||||
setSubmitting(true);
|
setSubmitting(true);
|
||||||
createCashflowTransactionMutate(form)
|
createCashflowTransactionMutate(form)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ const Schema = Yup.object().shape({
|
|||||||
.min(3)
|
.min(3)
|
||||||
.max(DATATYPES_LENGTH.TEXT)
|
.max(DATATYPES_LENGTH.TEXT)
|
||||||
.label(intl.get('description')),
|
.label(intl.get('description')),
|
||||||
published: Yup.boolean(),
|
publish: Yup.boolean(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const CreateMoneyOutSchema = Schema;
|
export const CreateMoneyOutSchema = Schema;
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ import FinancialLoadingBar from '../FinancialLoadingBar';
|
|||||||
* Retrieve trial balance sheet table columns.
|
* Retrieve trial balance sheet table columns.
|
||||||
*/
|
*/
|
||||||
export const useTrialBalanceTableColumns = () => {
|
export const useTrialBalanceTableColumns = () => {
|
||||||
|
|
||||||
|
|
||||||
// Trial balance sheet context.
|
// Trial balance sheet context.
|
||||||
const {
|
const {
|
||||||
trialBalanceSheet: { tableRows },
|
trialBalanceSheet: { tableRows },
|
||||||
@@ -24,7 +22,7 @@ export const useTrialBalanceTableColumns = () => {
|
|||||||
Header: intl.get('account_name'),
|
Header: intl.get('account_name'),
|
||||||
accessor: (row) => (row.code ? `${row.name} - ${row.code}` : row.name),
|
accessor: (row) => (row.code ? `${row.name} - ${row.code}` : row.name),
|
||||||
className: 'name',
|
className: 'name',
|
||||||
width: 180,
|
width: 350,
|
||||||
textOverview: true,
|
textOverview: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -35,12 +33,14 @@ export const useTrialBalanceTableColumns = () => {
|
|||||||
width: getColumnWidth(tableRows, `credit`, {
|
width: getColumnWidth(tableRows, `credit`, {
|
||||||
minWidth: 80,
|
minWidth: 80,
|
||||||
}),
|
}),
|
||||||
|
textOverview: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Header: intl.get('debit'),
|
Header: intl.get('debit'),
|
||||||
Cell: CellTextSpan,
|
Cell: CellTextSpan,
|
||||||
accessor: 'formatted_debit',
|
accessor: 'formatted_debit',
|
||||||
width: getColumnWidth(tableRows, `debit`, { minWidth: 80 }),
|
width: getColumnWidth(tableRows, `debit`, { minWidth: 80 }),
|
||||||
|
textOverview: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Header: intl.get('balance'),
|
Header: intl.get('balance'),
|
||||||
@@ -50,6 +50,7 @@ export const useTrialBalanceTableColumns = () => {
|
|||||||
width: getColumnWidth(tableRows, `balance`, {
|
width: getColumnWidth(tableRows, `balance`, {
|
||||||
minWidth: 80,
|
minWidth: 80,
|
||||||
}),
|
}),
|
||||||
|
textOverview: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
[tableRows],
|
[tableRows],
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ function GlobalErrors({
|
|||||||
if (globalErrors.access_denied) {
|
if (globalErrors.access_denied) {
|
||||||
toastKeySomethingWrong = AppToaster.show(
|
toastKeySomethingWrong = AppToaster.show(
|
||||||
{
|
{
|
||||||
message: 'You do not have permissions to access this page.',
|
message: intl.get('global_error.you_dont_have_permissions'),
|
||||||
intent: Intent.DANGER,
|
intent: Intent.DANGER,
|
||||||
onDismiss: () => {
|
onDismiss: () => {
|
||||||
globalErrorsSet({ access_denied: false });
|
globalErrorsSet({ access_denied: false });
|
||||||
@@ -53,11 +53,10 @@ function GlobalErrors({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (globalErrors.transactionsLocked) {
|
if (globalErrors.transactionsLocked) {
|
||||||
const lockedToDate =
|
|
||||||
globalErrors.transactionsLocked.formatted_locked_to_date;
|
|
||||||
|
|
||||||
AppToaster.show({
|
AppToaster.show({
|
||||||
message: `Transactions before ${lockedToDate} has been locked. Hence action cannot be performed.`,
|
message: intl.get('global_error.transactions_locked', {
|
||||||
|
lockedToDate: globalErrors.transactionsLocked.formatted_locked_to_date,
|
||||||
|
}),
|
||||||
intent: Intent.DANGER,
|
intent: Intent.DANGER,
|
||||||
onDismiss: () => {
|
onDismiss: () => {
|
||||||
globalErrorsSet({ transactionsLocked: false });
|
globalErrorsSet({ transactionsLocked: false });
|
||||||
@@ -66,7 +65,7 @@ function GlobalErrors({
|
|||||||
}
|
}
|
||||||
if (globalErrors.userInactive) {
|
if (globalErrors.userInactive) {
|
||||||
AppToaster.show({
|
AppToaster.show({
|
||||||
message: 'The authorized user is inactive.',
|
message: intl.get('global_error.authorized_user_inactive'),
|
||||||
intent: Intent.DANGER,
|
intent: Intent.DANGER,
|
||||||
onDismiss: () => {
|
onDismiss: () => {
|
||||||
globalErrorsSet({ userInactive: false });
|
globalErrorsSet({ userInactive: false });
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ function VendorFormAfterPrimarySection() {
|
|||||||
{({ field, meta: { error, touched } }) => (
|
{({ field, meta: { error, touched } }) => (
|
||||||
<InputGroup
|
<InputGroup
|
||||||
intent={inputIntent({ error, touched })}
|
intent={inputIntent({ error, touched })}
|
||||||
placeholder={intl.get('Mobile')}
|
placeholder={intl.get('mobile')}
|
||||||
{...field}
|
{...field}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -6,7 +6,9 @@ import {
|
|||||||
MenuItem,
|
MenuItem,
|
||||||
MenuDivider,
|
MenuDivider,
|
||||||
Position,
|
Position,
|
||||||
|
Tooltip,
|
||||||
Intent,
|
Intent,
|
||||||
|
Classes,
|
||||||
} from '@blueprintjs/core';
|
} from '@blueprintjs/core';
|
||||||
import intl from 'react-intl-universal';
|
import intl from 'react-intl-universal';
|
||||||
|
|
||||||
@@ -114,6 +116,24 @@ export function BalanceAccessor({ closing_balance, currency_code }) {
|
|||||||
return <Money amount={closing_balance} currency={currency_code} />;
|
return <Money amount={closing_balance} currency={currency_code} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the vendors table columns.
|
* Retrieve the vendors table columns.
|
||||||
*/
|
*/
|
||||||
@@ -148,12 +168,20 @@ export function useVendorsTableColumns() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'work_phone',
|
id: 'work_phone',
|
||||||
Header: intl.get('work_phone'),
|
Header: intl.get('phone_number'),
|
||||||
accessor: PhoneNumberAccessor,
|
accessor: PhoneNumberAccessor,
|
||||||
className: 'work_phone',
|
className: 'work_phone',
|
||||||
width: 100,
|
width: 100,
|
||||||
clickable: true,
|
clickable: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'note',
|
||||||
|
Header: intl.get('note'),
|
||||||
|
accessor: NoteAccessor,
|
||||||
|
disableSortBy: true,
|
||||||
|
width: 85,
|
||||||
|
clickable: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'balance',
|
id: 'balance',
|
||||||
Header: intl.get('receivable_balance'),
|
Header: intl.get('receivable_balance'),
|
||||||
|
|||||||
@@ -78,7 +78,7 @@
|
|||||||
"new": "جديد",
|
"new": "جديد",
|
||||||
"invite_user": "دعوة مستخدم",
|
"invite_user": "دعوة مستخدم",
|
||||||
"your_access_to_your_team": "سيتلقى زميلك في الفريق رسالة بريد إلكتروني تتيح له الوصول إلى فريقك.",
|
"your_access_to_your_team": "سيتلقى زميلك في الفريق رسالة بريد إلكتروني تتيح له الوصول إلى فريقك.",
|
||||||
"invite": "التصنيف",
|
"invite": "دعوة",
|
||||||
"count": "العدد",
|
"count": "العدد",
|
||||||
"item_type": "نوع المنتج",
|
"item_type": "نوع المنتج",
|
||||||
"item_name": "اسم المنتج",
|
"item_name": "اسم المنتج",
|
||||||
@@ -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": "تفاصيل الفاتورة",
|
||||||
@@ -1384,7 +1383,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": "الاصناف مع معاملات",
|
||||||
@@ -1583,6 +1582,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": "تاريخ الاسترجاع",
|
||||||
@@ -1753,5 +1755,9 @@
|
|||||||
"payment_receive.drawer.title": "تفاصيل سند الزبون ({number})",
|
"payment_receive.drawer.title": "تفاصيل سند الزبون ({number})",
|
||||||
"payment_made.drawer.title": "تفاصيل سند المورد {number}",
|
"payment_made.drawer.title": "تفاصيل سند المورد {number}",
|
||||||
"manual_journal.drawer.title": "تفاصيل قيد يدوي ({number})",
|
"manual_journal.drawer.title": "تفاصيل قيد يدوي ({number})",
|
||||||
"expense.drawer.title": " تفاصيل المصروف"
|
"expense.drawer.title": " تفاصيل المصروف",
|
||||||
|
|
||||||
|
"global_error.you_dont_have_permissions": "ليس لديك صلاحية الوصول إلى هذه الصفحة.",
|
||||||
|
"global_error.transactions_locked": "تم قفل المعاملات التي تمت قبل {lockedToDate}. ومن ثم لا يمكن القيام بأي عمل.",
|
||||||
|
"global_error.authorized_user_inactive": "المستخدم المصرح له تم تعطيلة."
|
||||||
}
|
}
|
||||||
@@ -1145,7 +1145,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",
|
||||||
@@ -1288,11 +1287,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": "Edit",
|
"customer.drawer.action.edit": "Edit",
|
||||||
"customer.drawer.label.outstanding_receivable": "Outstanding receivable",
|
"customer.drawer.label.outstanding_receivable": "Outstanding receivable",
|
||||||
"customer.drawer.label.customer_name": "Customer name",
|
"customer.drawer.label.customer_name": "Customer name",
|
||||||
@@ -1318,9 +1317,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",
|
||||||
"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.",
|
||||||
"manual_journals.empty_status.title": "Create your first journal entries on accounts chart.",
|
"manual_journals.empty_status.title": "Create your first journal entries on accounts chart.",
|
||||||
@@ -1568,6 +1567,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",
|
||||||
@@ -1733,5 +1735,9 @@
|
|||||||
"payment_receive.drawer.title": "Payment receive details ({number})",
|
"payment_receive.drawer.title": "Payment receive details ({number})",
|
||||||
"payment_made.drawer.title": "Payment made details {number}",
|
"payment_made.drawer.title": "Payment made details {number}",
|
||||||
"manual_journal.drawer.title": "Manual journal details ({number})",
|
"manual_journal.drawer.title": "Manual journal details ({number})",
|
||||||
"expense.drawer.title": "Expense details"
|
"expense.drawer.title": "Expense details",
|
||||||
|
|
||||||
|
"global_error.you_dont_have_permissions": "You do not have permissions to access this page.",
|
||||||
|
"global_error.transactions_locked": "Transactions before {lockedToDate} has been locked. Hence action cannot be performed.",
|
||||||
|
"global_error.authorized_user_inactive": "The authorized user is inactive."
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user