mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-14 11:50:31 +00:00
Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
69f16d1977 | ||
|
|
9973693a86 | ||
|
|
3a3dd7a565 | ||
|
|
687dda1e7c | ||
|
|
bfa809c831 | ||
|
|
07145e92ab | ||
|
|
4a46c00a07 | ||
|
|
5c7ac0593d | ||
|
|
fa25fb4ede | ||
|
|
3566d3b855 | ||
|
|
c5da97bce0 | ||
|
|
0cfbe633bd | ||
|
|
55098d7b78 | ||
|
|
78610cd519 | ||
|
|
828a28b976 | ||
|
|
daf5fc8aba | ||
|
|
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
|
||||
.DS_Store
|
||||
.env
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
|
||||
32
CHANGELOG.md
32
CHANGELOG.md
@@ -2,8 +2,17 @@
|
||||
|
||||
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
|
||||
|
||||
### Added
|
||||
|
||||
- Add credit note on sales module.
|
||||
- Add vendor credit on purchases module.
|
||||
- Optimize landed costs on purchase invoices.
|
||||
@@ -15,23 +24,29 @@ All notable changes to Bigcapital server-side will be in this file.
|
||||
- Optimize readonly details style of invoice, receipt, estimate, payment receive,
|
||||
purchase invoice, expense, manual journal, inventory adjustment and cashflow transaction.
|
||||
|
||||
### Changed
|
||||
### Changed
|
||||
|
||||
- Dashboard meta boot and authenticated user request query.
|
||||
- Optimize Arabic localization.
|
||||
|
||||
## [1.4.0] - 11-09-2021
|
||||
|
||||
### Added
|
||||
|
||||
- Add SMS notification on sale invoice, receipt, customers payments modules.
|
||||
- Customer quick create in customers list.
|
||||
- Item quick create in items list.
|
||||
|
||||
### Changes
|
||||
change: BIG-171 alerts in global scope and lazy loading.
|
||||
|
||||
change: BIG-171 alerts in global scope and lazy loading.
|
||||
|
||||
### Fixed
|
||||
fix: BIG-140 - Reordering sell, cost and inventory account on item details.
|
||||
fix: BIG-144 - Typo adjustment dialog success message.
|
||||
fix: BIG-148 - Items entries ordered by index.
|
||||
fix: BIG-132 AR/AP aging summary report filter by none transactions/zero contacts.
|
||||
|
||||
fix: BIG-140 - Reordering sell, cost and inventory account on item details.
|
||||
fix: BIG-144 - Typo adjustment dialog success message.
|
||||
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
|
||||
|
||||
@@ -39,6 +54,7 @@ Here we write upgrading notes for brands. It's a team effort to make them as
|
||||
straightforward as possible.
|
||||
|
||||
### Added
|
||||
|
||||
- Add slidable sub-sidebar to improve user experience instead of sub-menu.
|
||||
- Add Subscription guard to ensure the organization's subscription is active or
|
||||
redirect all routes to subscription billing page.
|
||||
@@ -62,14 +78,16 @@ straightforward as possible.
|
||||
- Inventory adjustment publish action.
|
||||
- Customers and vendors activate and inactivate action.
|
||||
- Add refresh button on dashboard actions bar to all datatables resources.
|
||||
- Add clickable datatable rows to display each row details.
|
||||
- Add clickable datatable rows to display each row details.
|
||||
|
||||
### Changed
|
||||
|
||||
- Optimize style of datatable selection checkbox.
|
||||
- Disable animation in dashboard views tabs.
|
||||
- Optimize Arabic localization.
|
||||
|
||||
### Fixed
|
||||
|
||||
- fix: disable submit buttons in pereferences pages.
|
||||
- fix: inventory adjustment cost field max/min range to avoid out of range error.
|
||||
- fix: transactions by customers/vendors report localization.
|
||||
|
||||
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",
|
||||
"version": "1.2.0",
|
||||
"version": "1.5.3",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@babel/core": "7.8.4",
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import React from 'react';
|
||||
|
||||
import SidebarContainer from 'components/Sidebar/SidebarContainer';
|
||||
import SidebarHead from 'components/Sidebar/SidebarHead';
|
||||
import SidebarMenu from 'components/Sidebar/SidebarMenu';
|
||||
@@ -17,7 +18,20 @@ export default function Sidebar({ dashboardContentRef }) {
|
||||
<SidebarMenu menu={menu} />
|
||||
</div>
|
||||
|
||||
<div class="sidebar__version">0.0.1-beta version.</div>
|
||||
<SidebarFooterVersion />
|
||||
</SidebarContainer>
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sidebar footer version.
|
||||
* @returns {React.JSX}
|
||||
*/
|
||||
function SidebarFooterVersion() {
|
||||
const { REACT_APP_VERSION: VERSION } = process.env;
|
||||
|
||||
if (!VERSION) {
|
||||
return null;
|
||||
}
|
||||
return <div class="sidebar__version">v{VERSION}</div>;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
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 intl from 'react-intl-universal';
|
||||
@@ -79,7 +87,7 @@ export function ActionsMenu({
|
||||
* Phone number accessor.
|
||||
*/
|
||||
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} />;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
@@ -123,12 +149,20 @@ export function useCustomersTableColumns() {
|
||||
},
|
||||
{
|
||||
id: 'work_phone',
|
||||
Header: intl.get('work_phone'),
|
||||
Header: intl.get('phone_number'),
|
||||
accessor: PhoneNumberAccessor,
|
||||
className: 'phone_number',
|
||||
width: 100,
|
||||
clickable: true,
|
||||
},
|
||||
{
|
||||
id: 'note',
|
||||
Header: intl.get('note'),
|
||||
accessor: NoteAccessor,
|
||||
disableSortBy: true,
|
||||
width: 85,
|
||||
clickable: true,
|
||||
},
|
||||
{
|
||||
id: 'balance',
|
||||
Header: intl.get('receivable_balance'),
|
||||
|
||||
@@ -73,7 +73,7 @@ function MoneyInForm({
|
||||
const handleFormSubmit = (values, { setSubmitting, setErrors }) => {
|
||||
const form = {
|
||||
...omit(values, ['currency_code']),
|
||||
published: submitPayload.publish,
|
||||
published: true,
|
||||
};
|
||||
setSubmitting(true);
|
||||
createCashflowTransactionMutate(form)
|
||||
|
||||
@@ -73,7 +73,7 @@ function MoneyOutForm({
|
||||
const handleFormSubmit = (values, { setSubmitting, setErrors }) => {
|
||||
const form = {
|
||||
...omit(values, ['currency_code']),
|
||||
published: submitPayload.publish,
|
||||
published: true,
|
||||
};
|
||||
setSubmitting(true);
|
||||
createCashflowTransactionMutate(form)
|
||||
|
||||
@@ -11,8 +11,6 @@ import FinancialLoadingBar from '../FinancialLoadingBar';
|
||||
* Retrieve trial balance sheet table columns.
|
||||
*/
|
||||
export const useTrialBalanceTableColumns = () => {
|
||||
|
||||
|
||||
// Trial balance sheet context.
|
||||
const {
|
||||
trialBalanceSheet: { tableRows },
|
||||
@@ -24,7 +22,7 @@ export const useTrialBalanceTableColumns = () => {
|
||||
Header: intl.get('account_name'),
|
||||
accessor: (row) => (row.code ? `${row.name} - ${row.code}` : row.name),
|
||||
className: 'name',
|
||||
width: 180,
|
||||
width: 350,
|
||||
textOverview: true,
|
||||
},
|
||||
{
|
||||
@@ -35,12 +33,14 @@ export const useTrialBalanceTableColumns = () => {
|
||||
width: getColumnWidth(tableRows, `credit`, {
|
||||
minWidth: 80,
|
||||
}),
|
||||
textOverview: true,
|
||||
},
|
||||
{
|
||||
Header: intl.get('debit'),
|
||||
Cell: CellTextSpan,
|
||||
accessor: 'formatted_debit',
|
||||
width: getColumnWidth(tableRows, `debit`, { minWidth: 80 }),
|
||||
textOverview: true,
|
||||
},
|
||||
{
|
||||
Header: intl.get('balance'),
|
||||
@@ -50,6 +50,7 @@ export const useTrialBalanceTableColumns = () => {
|
||||
width: getColumnWidth(tableRows, `balance`, {
|
||||
minWidth: 80,
|
||||
}),
|
||||
textOverview: true,
|
||||
},
|
||||
],
|
||||
[tableRows],
|
||||
|
||||
@@ -43,7 +43,7 @@ function GlobalErrors({
|
||||
if (globalErrors.access_denied) {
|
||||
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,
|
||||
onDismiss: () => {
|
||||
globalErrorsSet({ access_denied: false });
|
||||
@@ -53,11 +53,10 @@ function GlobalErrors({
|
||||
);
|
||||
}
|
||||
if (globalErrors.transactionsLocked) {
|
||||
const lockedToDate =
|
||||
globalErrors.transactionsLocked.formatted_locked_to_date;
|
||||
|
||||
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,
|
||||
onDismiss: () => {
|
||||
globalErrorsSet({ transactionsLocked: false });
|
||||
@@ -66,7 +65,7 @@ function GlobalErrors({
|
||||
}
|
||||
if (globalErrors.userInactive) {
|
||||
AppToaster.show({
|
||||
message: 'The authorized user is inactive.',
|
||||
message: intl.get('global_error.authorized_user_inactive'),
|
||||
intent: Intent.DANGER,
|
||||
onDismiss: () => {
|
||||
globalErrorsSet({ userInactive: false });
|
||||
|
||||
@@ -48,7 +48,7 @@ function VendorFormAfterPrimarySection() {
|
||||
{({ field, meta: { error, touched } }) => (
|
||||
<InputGroup
|
||||
intent={inputIntent({ error, touched })}
|
||||
placeholder={intl.get('Mobile')}
|
||||
placeholder={intl.get('mobile')}
|
||||
{...field}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -6,7 +6,9 @@ import {
|
||||
MenuItem,
|
||||
MenuDivider,
|
||||
Position,
|
||||
Tooltip,
|
||||
Intent,
|
||||
Classes,
|
||||
} from '@blueprintjs/core';
|
||||
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} />;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
@@ -148,12 +168,20 @@ export function useVendorsTableColumns() {
|
||||
},
|
||||
{
|
||||
id: 'work_phone',
|
||||
Header: intl.get('work_phone'),
|
||||
Header: intl.get('phone_number'),
|
||||
accessor: PhoneNumberAccessor,
|
||||
className: 'work_phone',
|
||||
width: 100,
|
||||
clickable: true,
|
||||
},
|
||||
{
|
||||
id: 'note',
|
||||
Header: intl.get('note'),
|
||||
accessor: NoteAccessor,
|
||||
disableSortBy: true,
|
||||
width: 85,
|
||||
clickable: true,
|
||||
},
|
||||
{
|
||||
id: 'balance',
|
||||
Header: intl.get('receivable_balance'),
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
"new": "جديد",
|
||||
"invite_user": "دعوة مستخدم",
|
||||
"your_access_to_your_team": "سيتلقى زميلك في الفريق رسالة بريد إلكتروني تتيح له الوصول إلى فريقك.",
|
||||
"invite": "التصنيف",
|
||||
"invite": "دعوة",
|
||||
"count": "العدد",
|
||||
"item_type": "نوع المنتج",
|
||||
"item_name": "اسم المنتج",
|
||||
@@ -1753,5 +1753,9 @@
|
||||
"payment_receive.drawer.title": "تفاصيل سند الزبون ({number})",
|
||||
"payment_made.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": "المستخدم المصرح له تم تعطيلة."
|
||||
}
|
||||
@@ -1733,5 +1733,9 @@
|
||||
"payment_receive.drawer.title": "Payment receive details ({number})",
|
||||
"payment_made.drawer.title": "Payment made 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