mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-18 05:40:31 +00:00
feat(Reports): content.
This commit is contained in:
@@ -21,6 +21,7 @@ export default function DashboardContentRoute() {
|
|||||||
Component={route.component}
|
Component={route.component}
|
||||||
pageTitle={route.pageTitle}
|
pageTitle={route.pageTitle}
|
||||||
backLink={route.backLink}
|
backLink={route.backLink}
|
||||||
|
hint={route.hint}
|
||||||
sidebarShrink={route.sidebarShrink}
|
sidebarShrink={route.sidebarShrink}
|
||||||
/>
|
/>
|
||||||
</Route>
|
</Route>
|
||||||
|
|||||||
@@ -12,12 +12,14 @@ function DashboardPage({
|
|||||||
sidebarShrink,
|
sidebarShrink,
|
||||||
Component,
|
Component,
|
||||||
name,
|
name,
|
||||||
|
hint,
|
||||||
|
|
||||||
// #withDashboardActions
|
// #withDashboardActions
|
||||||
changePageTitle,
|
changePageTitle,
|
||||||
setDashboardBackLink,
|
setDashboardBackLink,
|
||||||
setSidebarShrink,
|
setSidebarShrink,
|
||||||
resetSidebarPreviousExpand,
|
resetSidebarPreviousExpand,
|
||||||
|
changePageHint,
|
||||||
}) {
|
}) {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
pageTitle && changePageTitle(pageTitle);
|
pageTitle && changePageTitle(pageTitle);
|
||||||
@@ -27,6 +29,14 @@ function DashboardPage({
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
hint && changePageHint(hint);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
hint && changePageHint('');
|
||||||
|
}
|
||||||
|
}, [hint, changePageHint]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
backLink && setDashboardBackLink(backLink);
|
backLink && setDashboardBackLink(backLink);
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ function DashboardTopbar({
|
|||||||
// #withDashboard
|
// #withDashboard
|
||||||
pageTitle,
|
pageTitle,
|
||||||
editViewId,
|
editViewId,
|
||||||
|
pageHint,
|
||||||
|
|
||||||
// #withDashboardActions
|
// #withDashboardActions
|
||||||
toggleSidebarExpend,
|
toggleSidebarExpend,
|
||||||
@@ -97,13 +98,9 @@ function DashboardTopbar({
|
|||||||
<div class="dashboard__title">
|
<div class="dashboard__title">
|
||||||
<h1>{pageTitle}</h1>
|
<h1>{pageTitle}</h1>
|
||||||
|
|
||||||
<If condition={true}>
|
<If condition={pageHint}>
|
||||||
<div class="dashboard__hint">
|
<div class="dashboard__hint">
|
||||||
<Hint
|
<Hint content={pageHint} />
|
||||||
content={
|
|
||||||
'It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.'
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</If>
|
</If>
|
||||||
|
|
||||||
@@ -119,7 +116,7 @@ function DashboardTopbar({
|
|||||||
<div class="dashboard__breadcrumbs">
|
<div class="dashboard__breadcrumbs">
|
||||||
<DashboardBreadcrumbs />
|
<DashboardBreadcrumbs />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<DashboardBackLink />
|
<DashboardBackLink />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -132,7 +129,7 @@ function DashboardTopbar({
|
|||||||
icon={<Icon icon={'search-24'} iconSize={20} />}
|
icon={<Icon icon={'search-24'} iconSize={20} />}
|
||||||
text={<T id={'quick_find'} />}
|
text={<T id={'quick_find'} />}
|
||||||
/>
|
/>
|
||||||
<QuickNewDropdown/>
|
<QuickNewDropdown />
|
||||||
<Tooltip
|
<Tooltip
|
||||||
content={<T id={'notifications'} />}
|
content={<T id={'notifications'} />}
|
||||||
position={Position.BOTTOM}
|
position={Position.BOTTOM}
|
||||||
@@ -161,10 +158,11 @@ function DashboardTopbar({
|
|||||||
|
|
||||||
export default compose(
|
export default compose(
|
||||||
withSearch,
|
withSearch,
|
||||||
withDashboard(({ pageTitle, editViewId, sidebarExpended }) => ({
|
withDashboard(({ pageTitle, pageHint, editViewId, sidebarExpended }) => ({
|
||||||
pageTitle,
|
pageTitle,
|
||||||
editViewId,
|
editViewId,
|
||||||
sidebarExpended,
|
sidebarExpended,
|
||||||
|
pageHint,
|
||||||
})),
|
})),
|
||||||
withSettings(({ organizationSettings }) => ({
|
withSettings(({ organizationSettings }) => ({
|
||||||
organizationName: organizationSettings.name,
|
organizationName: organizationSettings.name,
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
import React from 'react';
|
|
||||||
import { FormattedMessage as T } from 'react-intl';
|
|
||||||
|
|
||||||
export const financialReportMenus = [
|
export const financialReportMenus = [
|
||||||
{
|
{
|
||||||
sectionTitle: 'Financial Accounting',
|
sectionTitle: 'Financial Accounting',
|
||||||
@@ -8,43 +5,38 @@ export const financialReportMenus = [
|
|||||||
{
|
{
|
||||||
title: 'Balance Sheet Report',
|
title: 'Balance Sheet Report',
|
||||||
desc:
|
desc:
|
||||||
'Shows the average age of unresolved issues for a project or filter. This helps you see whether your backlog is being kept up to date.',
|
"Reports a company's assets, liabilities and shareholders' equity at a specific point in time with comparison period(s).",
|
||||||
link: '/financial-reports/balance-sheet',
|
link: '/financial-reports/balance-sheet',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Trial Balance Sheet',
|
title: 'Trial Balance Sheet',
|
||||||
desc:
|
desc: 'Summarizes the credit and debit balance of each account in your chart of accounts at a specific point in time.',
|
||||||
'Shows the average age of unresolved issues for a project or filter. This helps you see whether your backlog is being kept up to date.',
|
|
||||||
link: '/financial-reports/trial-balance-sheet',
|
link: '/financial-reports/trial-balance-sheet',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Journal Report',
|
title: 'Journal Report',
|
||||||
desc:
|
desc:
|
||||||
'Shows the average age of unresolved issues for a project or filter. This helps you see whether your backlog is being kept up to date.',
|
'The debit and credit entries of system transactions, sorted by date.',
|
||||||
link: '/financial-reports/journal-sheet',
|
link: '/financial-reports/journal-sheet',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Profit/Loss Report',
|
title: 'Profit/Loss Report',
|
||||||
desc:
|
desc: "Reports the revenues, costs and expenses incurred during a specific point in time with comparison period(s).",
|
||||||
'Shows the average age of unresolved issues for a project or filter. This helps you see whether your backlog is being kept up to date.',
|
|
||||||
link: '/financial-reports/profit-loss-sheet',
|
link: '/financial-reports/profit-loss-sheet',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'General Ledger Report',
|
title: 'General Ledger Report',
|
||||||
desc:
|
desc: "Reports every transaction going in and out of your accounts and organized by accounts and date to monitoring activity of accounts.",
|
||||||
'Shows the average age of unresolved issues for a project or filter. This helps you see whether your backlog is being kept up to date.',
|
|
||||||
link: '/financial-reports/general-ledger',
|
link: '/financial-reports/general-ledger',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Receivable Aging Summary',
|
title: 'Receivable Aging Summary',
|
||||||
desc:
|
desc: "Summarize total unpaid balances of customers invoices with number of days the unpaid invoice is overdue.",
|
||||||
'Shows the average age of unresolved issues for a project or filter. This helps you see whether your backlog is being kept up to date.',
|
|
||||||
link: '/financial-reports/receivable-aging-summary',
|
link: '/financial-reports/receivable-aging-summary',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Payable Aging Summary',
|
title: 'Payable Aging Summary',
|
||||||
desc:
|
desc: "Summarize total unpaid balances of vendors purchase invoices with the number of days the unpaid invoice is overdue.",
|
||||||
'Shows the average age of unresolved issues for a project or filter. This helps you see whether your backlog is being kept up to date.',
|
|
||||||
link: '/financial-reports/payable-aging-summary',
|
link: '/financial-reports/payable-aging-summary',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -64,13 +56,12 @@ export const SalesAndPurchasesReportMenus = [
|
|||||||
{
|
{
|
||||||
title: 'Sales by Items',
|
title: 'Sales by Items',
|
||||||
desc:
|
desc:
|
||||||
'Shows the average age of unresolved issues for a project or filter. This helps you see whether your backlog is being kept up to date.',
|
"Summarize the business’s sold items quantity, income and average income rate of each item during a specific point in time.",
|
||||||
link: '/financial-reports/sales-by-items',
|
link: '/financial-reports/sales-by-items',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Inventory valuation',
|
title: 'Inventory valuation',
|
||||||
desc:
|
desc: 'Summarize the business’s purchase items quantity, cost and average cost rate of each item during a specific point in time.',
|
||||||
'Shows the average age of unresolved issues for a project or filter. This helps you see whether your backlog is being kept up to date.',
|
|
||||||
link: '/financial-reports/inventory-valuation',
|
link: '/financial-reports/inventory-valuation',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Formik } from 'formik';
|
import { Formik } from 'formik';
|
||||||
import { Intent } from '@blueprintjs/core';
|
import { Intent } from '@blueprintjs/core';
|
||||||
import { FormattedMessage as T, useIntl } from 'react-intl';
|
import { useIntl } from 'react-intl';
|
||||||
import { pick, defaultTo } from 'lodash';
|
import { pick, defaultTo, omit } from 'lodash';
|
||||||
|
|
||||||
import { AppToaster } from 'components';
|
import { AppToaster } from 'components';
|
||||||
import { useQuickPaymentReceiveContext } from './QuickPaymentReceiveFormProvider';
|
import { useQuickPaymentReceiveContext } from './QuickPaymentReceiveFormProvider';
|
||||||
@@ -51,8 +51,7 @@ function QuickPaymentReceiveForm({
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Handles the form submit.
|
// Handles the form submit.
|
||||||
const handleFormSubmit = (values, { setSubmitting, setFieldError, status }) => {
|
const handleFormSubmit = (values, { setSubmitting, setFieldError }) => {
|
||||||
debugger;
|
|
||||||
const entries = [values]
|
const entries = [values]
|
||||||
.filter((entry) => entry.id && entry.payment_amount)
|
.filter((entry) => entry.id && entry.payment_amount)
|
||||||
.map((entry) => ({
|
.map((entry) => ({
|
||||||
@@ -61,7 +60,10 @@ function QuickPaymentReceiveForm({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
const form = {
|
const form = {
|
||||||
...values,
|
...omit(values, ['payment_receive_no']),
|
||||||
|
...(!paymentReceiveAutoIncrement && {
|
||||||
|
payment_receive_no: values.payment_receive_no,
|
||||||
|
}),
|
||||||
customer_id: values.customer.id,
|
customer_id: values.customer.id,
|
||||||
entries,
|
entries,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ export default [
|
|||||||
import('containers/FinancialStatements/GeneralLedger/GeneralLedger'),
|
import('containers/FinancialStatements/GeneralLedger/GeneralLedger'),
|
||||||
),
|
),
|
||||||
breadcrumb: 'General Ledger',
|
breadcrumb: 'General Ledger',
|
||||||
|
hint: "Reports every transaction going in and out of your accounts and organized by accounts and date to monitoring activity of accounts.",
|
||||||
hotkey: 'shift+4',
|
hotkey: 'shift+4',
|
||||||
pageTitle: formatMessage({ id: 'general_ledger' }),
|
pageTitle: formatMessage({ id: 'general_ledger' }),
|
||||||
backLink: true,
|
backLink: true,
|
||||||
@@ -122,6 +123,7 @@ export default [
|
|||||||
import('containers/FinancialStatements/BalanceSheet/BalanceSheet'),
|
import('containers/FinancialStatements/BalanceSheet/BalanceSheet'),
|
||||||
),
|
),
|
||||||
breadcrumb: 'Balance Sheet',
|
breadcrumb: 'Balance Sheet',
|
||||||
|
hint: "Reports a company's assets, liabilities and shareholders' equity at a specific point in time with comparison period(s).",
|
||||||
hotkey: 'shift+1',
|
hotkey: 'shift+1',
|
||||||
pageTitle: formatMessage({ id: 'balance_sheet' }),
|
pageTitle: formatMessage({ id: 'balance_sheet' }),
|
||||||
backLink: true,
|
backLink: true,
|
||||||
@@ -135,6 +137,7 @@ export default [
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
breadcrumb: 'Trial Balance Sheet',
|
breadcrumb: 'Trial Balance Sheet',
|
||||||
|
hint: "Summarizes the credit and debit balance of each account in your chart of accounts at a specific point in time. ",
|
||||||
hotkey: 'shift+5',
|
hotkey: 'shift+5',
|
||||||
pageTitle: formatMessage({ id: 'trial_balance_sheet' }),
|
pageTitle: formatMessage({ id: 'trial_balance_sheet' }),
|
||||||
backLink: true,
|
backLink: true,
|
||||||
@@ -146,6 +149,7 @@ export default [
|
|||||||
import('containers/FinancialStatements/ProfitLossSheet/ProfitLossSheet'),
|
import('containers/FinancialStatements/ProfitLossSheet/ProfitLossSheet'),
|
||||||
),
|
),
|
||||||
breadcrumb: 'Profit Loss Sheet',
|
breadcrumb: 'Profit Loss Sheet',
|
||||||
|
hint: "Reports the revenues, costs and expenses incurred during a specific point in time with comparison period(s).",
|
||||||
hotkey: 'shift+2',
|
hotkey: 'shift+2',
|
||||||
pageTitle: formatMessage({ id: 'profit_loss_sheet' }),
|
pageTitle: formatMessage({ id: 'profit_loss_sheet' }),
|
||||||
backLink: true,
|
backLink: true,
|
||||||
@@ -157,6 +161,7 @@ export default [
|
|||||||
import('containers/FinancialStatements/ARAgingSummary/ARAgingSummary'),
|
import('containers/FinancialStatements/ARAgingSummary/ARAgingSummary'),
|
||||||
),
|
),
|
||||||
breadcrumb: 'Receivable Aging Summary',
|
breadcrumb: 'Receivable Aging Summary',
|
||||||
|
hint: "Summarize total unpaid balances of customers invoices with number of days the unpaid invoice is overdue.",
|
||||||
pageTitle: formatMessage({ id: 'receivable_aging_summary' }),
|
pageTitle: formatMessage({ id: 'receivable_aging_summary' }),
|
||||||
backLink: true,
|
backLink: true,
|
||||||
sidebarShrink: true,
|
sidebarShrink: true,
|
||||||
@@ -167,6 +172,7 @@ export default [
|
|||||||
import('containers/FinancialStatements/APAgingSummary/APAgingSummary'),
|
import('containers/FinancialStatements/APAgingSummary/APAgingSummary'),
|
||||||
),
|
),
|
||||||
breadcrumb: 'Payable Aging Summary',
|
breadcrumb: 'Payable Aging Summary',
|
||||||
|
hint: "Summarize total unpaid balances of vendors purchase invoices with the number of days the unpaid invoice is overdue.",
|
||||||
pageTitle: formatMessage({ id: 'payable_aging_summary' }),
|
pageTitle: formatMessage({ id: 'payable_aging_summary' }),
|
||||||
backLink: true,
|
backLink: true,
|
||||||
sidebarShrink: true,
|
sidebarShrink: true,
|
||||||
@@ -177,6 +183,7 @@ export default [
|
|||||||
import('containers/FinancialStatements/Journal/Journal'),
|
import('containers/FinancialStatements/Journal/Journal'),
|
||||||
),
|
),
|
||||||
breadcrumb: 'Journal Sheet',
|
breadcrumb: 'Journal Sheet',
|
||||||
|
hint: "The debit and credit entries of system transactions, sorted by date.",
|
||||||
hotkey: 'shift+3',
|
hotkey: 'shift+3',
|
||||||
pageTitle: formatMessage({ id: 'journal_sheet' }),
|
pageTitle: formatMessage({ id: 'journal_sheet' }),
|
||||||
sidebarShrink: true,
|
sidebarShrink: true,
|
||||||
@@ -201,8 +208,8 @@ export default [
|
|||||||
import('containers/FinancialStatements/SalesByItems/SalesByItems'),
|
import('containers/FinancialStatements/SalesByItems/SalesByItems'),
|
||||||
),
|
),
|
||||||
breadcrumb: 'Sales by Items',
|
breadcrumb: 'Sales by Items',
|
||||||
// hotkey: '',
|
|
||||||
pageTitle: formatMessage({ id: 'sales_by_items' }),
|
pageTitle: formatMessage({ id: 'sales_by_items' }),
|
||||||
|
hint: 'Summarize the business’s sold items quantity, income and average income rate of each item during a specific point in time.',
|
||||||
backLink: true,
|
backLink: true,
|
||||||
sidebarShrink: true,
|
sidebarShrink: true,
|
||||||
},
|
},
|
||||||
@@ -214,7 +221,7 @@ export default [
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
breadcrumb: 'Inventory Valuation ',
|
breadcrumb: 'Inventory Valuation ',
|
||||||
// hotkey: '',
|
hint: 'Summerize your transactions for each inventory item and how they affect quantity, valuation and weighted average.',
|
||||||
pageTitle: formatMessage({ id: 'inventory_valuation' }),
|
pageTitle: formatMessage({ id: 'inventory_valuation' }),
|
||||||
backLink: true,
|
backLink: true,
|
||||||
sidebarShrink: true,
|
sidebarShrink: true,
|
||||||
|
|||||||
@@ -7,6 +7,13 @@ export function dashboardPageTitle(pageTitle) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function dashboardPageHint(pageHint) {
|
||||||
|
return {
|
||||||
|
type: t.CHANGE_DASHBOARD_PAGE_HINT,
|
||||||
|
pageHint,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export function openDialog(name, payload) {
|
export function openDialog(name, payload) {
|
||||||
return {
|
return {
|
||||||
type: t.OPEN_DIALOG,
|
type: t.OPEN_DIALOG,
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ const reducerInstance = createReducer(initialState, {
|
|||||||
},
|
},
|
||||||
|
|
||||||
[t.CHANGE_DASHBOARD_PAGE_HINT]: (state, action) => {
|
[t.CHANGE_DASHBOARD_PAGE_HINT]: (state, action) => {
|
||||||
state.pageHint = action.pageHint;
|
state.pageHint = action.payload.pageHint;
|
||||||
},
|
},
|
||||||
|
|
||||||
[t.CHANGE_PREFERENCES_PAGE_TITLE]: (state, action) => {
|
[t.CHANGE_PREFERENCES_PAGE_TITLE]: (state, action) => {
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
.desc {
|
.desc {
|
||||||
color: rgb(31, 50, 85);
|
color: rgb(31, 50, 85);
|
||||||
line-height: 1.55;
|
line-height: 1.55;
|
||||||
margin-top: 12px;
|
margin-top: 8px;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -271,6 +271,7 @@ export default class SaleInvoicesController extends BaseController {
|
|||||||
next(error);
|
next(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve paginated sales invoices with custom view metadata.
|
* Retrieve paginated sales invoices with custom view metadata.
|
||||||
* @param {Request} req
|
* @param {Request} req
|
||||||
|
|||||||
Reference in New Issue
Block a user