mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-21 15:20:34 +00:00
fix: financial reports.
This commit is contained in:
@@ -15,6 +15,7 @@ import {
|
|||||||
CashFlowStatementAlerts,
|
CashFlowStatementAlerts,
|
||||||
} from './components';
|
} from './components';
|
||||||
|
|
||||||
|
import { getDefaultCashFlowSheetQuery } from './utils';
|
||||||
import { compose } from 'utils';
|
import { compose } from 'utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -26,13 +27,8 @@ function CashFlowStatement({
|
|||||||
}) {
|
}) {
|
||||||
// filter
|
// filter
|
||||||
const [filter, setFilter] = useState({
|
const [filter, setFilter] = useState({
|
||||||
fromDate: moment().startOf('year').format('YYYY-MM-DD'),
|
...getDefaultCashFlowSheetQuery(),
|
||||||
toDate: moment().endOf('year').format('YYYY-MM-DD'),
|
|
||||||
basis: 'cash',
|
|
||||||
displayColumnsType: 'total',
|
|
||||||
filterByOption: 'with-transactions',
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Handle refetch cash flow after filter change.
|
// Handle refetch cash flow after filter change.
|
||||||
const handleFilterSubmit = (filter) => {
|
const handleFilterSubmit = (filter) => {
|
||||||
const _filter = {
|
const _filter = {
|
||||||
@@ -42,7 +38,6 @@ function CashFlowStatement({
|
|||||||
};
|
};
|
||||||
setFilter({ ..._filter });
|
setFilter({ ..._filter });
|
||||||
};
|
};
|
||||||
|
|
||||||
// Handle format number submit.
|
// Handle format number submit.
|
||||||
const handleNumberFormatSubmit = (values) => {
|
const handleNumberFormatSubmit = (values) => {
|
||||||
setFilter({
|
setFilter({
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import CashFlowStatementGeneralPanel from './CashFlowStatementGeneralPanel';
|
|||||||
import withCashFlowStatement from './withCashFlowStatement';
|
import withCashFlowStatement from './withCashFlowStatement';
|
||||||
import withCashFlowStatementActions from './withCashFlowStatementActions';
|
import withCashFlowStatementActions from './withCashFlowStatementActions';
|
||||||
|
|
||||||
|
import { getDefaultCashFlowSheetQuery } from './utils';
|
||||||
import { compose, transformToForm } from 'utils';
|
import { compose, transformToForm } from 'utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -29,10 +30,7 @@ function CashFlowStatementHeader({
|
|||||||
toggleCashFlowStatementFilterDrawer,
|
toggleCashFlowStatementFilterDrawer,
|
||||||
}) {
|
}) {
|
||||||
// Filter form default values.
|
// Filter form default values.
|
||||||
const defaultValues = {
|
const defaultValues = getDefaultCashFlowSheetQuery();
|
||||||
fromDate: moment().toDate(),
|
|
||||||
toDate: moment().toDate(),
|
|
||||||
};
|
|
||||||
|
|
||||||
// Initial form values.
|
// Initial form values.
|
||||||
const initialValues = transformToForm({
|
const initialValues = transformToForm({
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
import moment from 'moment';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the default cashflow sheet query.
|
||||||
|
*/
|
||||||
|
export const getDefaultCashFlowSheetQuery = () => {
|
||||||
|
return {
|
||||||
|
fromDate: moment().startOf('year').format('YYYY-MM-DD'),
|
||||||
|
toDate: moment().endOf('year').format('YYYY-MM-DD'),
|
||||||
|
basis: 'cash',
|
||||||
|
displayColumnsType: 'total',
|
||||||
|
filterByOption: 'with-transactions',
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
import * as R from 'ramda';
|
||||||
|
|
||||||
import { FinancialStatement } from 'components';
|
import { FinancialStatement } from 'components';
|
||||||
import DashboardPageContent from 'components/Dashboard/DashboardPageContent';
|
import DashboardPageContent from 'components/Dashboard/DashboardPageContent';
|
||||||
@@ -12,7 +13,7 @@ import { CustomersBalanceLoadingBar } from './components';
|
|||||||
import { CustomersBalanceSummaryProvider } from './CustomersBalanceSummaryProvider';
|
import { CustomersBalanceSummaryProvider } from './CustomersBalanceSummaryProvider';
|
||||||
import withCustomersBalanceSummaryActions from './withCustomersBalanceSummaryActions';
|
import withCustomersBalanceSummaryActions from './withCustomersBalanceSummaryActions';
|
||||||
|
|
||||||
import { compose } from 'redux';
|
import { getDefaultCustomersBalanceQuery } from './utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Customers Balance summary.
|
* Customers Balance summary.
|
||||||
@@ -22,10 +23,8 @@ function CustomersBalanceSummary({
|
|||||||
toggleCustomerBalanceFilterDrawer,
|
toggleCustomerBalanceFilterDrawer,
|
||||||
}) {
|
}) {
|
||||||
const [filter, setFilter] = useState({
|
const [filter, setFilter] = useState({
|
||||||
asDate: moment().endOf('day').format('YYYY-MM-DD'),
|
...getDefaultCustomersBalanceQuery(),
|
||||||
filterByOption: 'with-transactions',
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Handle re-fetch customers balance summary after filter change.
|
// Handle re-fetch customers balance summary after filter change.
|
||||||
const handleFilterSubmit = (filter) => {
|
const handleFilterSubmit = (filter) => {
|
||||||
const _filter = {
|
const _filter = {
|
||||||
@@ -34,7 +33,6 @@ function CustomersBalanceSummary({
|
|||||||
};
|
};
|
||||||
setFilter({ ..._filter });
|
setFilter({ ..._filter });
|
||||||
};
|
};
|
||||||
|
|
||||||
// Handle number format.
|
// Handle number format.
|
||||||
const handleNumberFormat = (values) => {
|
const handleNumberFormat = (values) => {
|
||||||
setFilter({
|
setFilter({
|
||||||
@@ -70,6 +68,6 @@ function CustomersBalanceSummary({
|
|||||||
</CustomersBalanceSummaryProvider>
|
</CustomersBalanceSummaryProvider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
export default compose(withCustomersBalanceSummaryActions)(
|
export default R.compose(withCustomersBalanceSummaryActions)(
|
||||||
CustomersBalanceSummary,
|
CustomersBalanceSummary,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import { DataTable, FinancialSheet } from 'components';
|
|||||||
import { useCustomersBalanceSummaryContext } from './CustomersBalanceSummaryProvider';
|
import { useCustomersBalanceSummaryContext } from './CustomersBalanceSummaryProvider';
|
||||||
import { useCustomersSummaryColumns } from './components';
|
import { useCustomersSummaryColumns } from './components';
|
||||||
|
|
||||||
|
import { tableRowTypesToClassnames } from 'utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* customers balance summary table.
|
* customers balance summary table.
|
||||||
*/
|
*/
|
||||||
@@ -14,29 +16,21 @@ export default function CustomersBalanceSummaryTable({
|
|||||||
companyName,
|
companyName,
|
||||||
}) {
|
}) {
|
||||||
const {
|
const {
|
||||||
isCustomersBalanceLoading,
|
|
||||||
CustomerBalanceSummary: { table },
|
CustomerBalanceSummary: { table },
|
||||||
} = useCustomersBalanceSummaryContext();
|
} = useCustomersBalanceSummaryContext();
|
||||||
|
|
||||||
const columns = useCustomersSummaryColumns();
|
const columns = useCustomersSummaryColumns();
|
||||||
|
|
||||||
const rowClassNames = (row) => {
|
|
||||||
return [`row-type--${row.original.row_types}`];
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<FinancialSheet
|
<FinancialSheet
|
||||||
name={'customers-balance-summary'}
|
|
||||||
companyName={companyName}
|
companyName={companyName}
|
||||||
sheetType={intl.get('customers_balance_summary')}
|
sheetType={intl.get('customers_balance_summary')}
|
||||||
asDate={new Date()}
|
asDate={new Date()}
|
||||||
loading={isCustomersBalanceLoading}
|
|
||||||
>
|
>
|
||||||
<DataTable
|
<DataTable
|
||||||
className="bigcapital-datatable--financial-report"
|
|
||||||
columns={columns}
|
columns={columns}
|
||||||
data={table.data}
|
data={table.data}
|
||||||
rowClassNames={rowClassNames}
|
rowClassNames={tableRowTypesToClassnames}
|
||||||
noInitialFetch={true}
|
noInitialFetch={true}
|
||||||
/>
|
/>
|
||||||
</FinancialSheet>
|
</FinancialSheet>
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
import moment from 'moment';
|
||||||
|
|
||||||
|
export const getDefaultCustomersBalanceQuery = () => {
|
||||||
|
return {
|
||||||
|
asDate: moment().endOf('day').format('YYYY-MM-DD'),
|
||||||
|
filterByOption: 'with-transactions',
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -81,7 +81,7 @@ const InventoryItemDetailsDataTable = styled(DataTable)`
|
|||||||
border-bottom: 1px solid #ddd;
|
border-bottom: 1px solid #ddd;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tr.row-type {
|
.tr.row_type {
|
||||||
&--ITEM {
|
&--ITEM {
|
||||||
.td {
|
.td {
|
||||||
&.transaction_type {
|
&.transaction_type {
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
import React, { useMemo } from 'react';
|
import React, { useMemo } from 'react';
|
||||||
import intl from 'react-intl-universal';
|
import intl from 'react-intl-universal';
|
||||||
import { getColumnWidth } from 'utils';
|
|
||||||
import { If } from 'components';
|
import { If } from 'components';
|
||||||
import { CellTextSpan } from 'components/Datatable/Cells';
|
import { CellTextSpan } from 'components/Datatable/Cells';
|
||||||
import { useInventoryValuationContext } from './InventoryValuationProvider';
|
import { useInventoryValuationContext } from './InventoryValuationProvider';
|
||||||
import FinancialLoadingBar from '../FinancialLoadingBar';
|
import FinancialLoadingBar from '../FinancialLoadingBar';
|
||||||
|
|
||||||
|
import { getColumnWidth } from 'utils';
|
||||||
|
import { Align } from 'common';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve inventory valuation table columns.
|
* Retrieve inventory valuation table columns.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export const useInventoryValuationTableColumns = () => {
|
export const useInventoryValuationTableColumns = () => {
|
||||||
|
|
||||||
|
|
||||||
// inventory valuation context
|
// inventory valuation context
|
||||||
const {
|
const {
|
||||||
inventoryValuation: { tableRows },
|
inventoryValuation: { tableRows },
|
||||||
@@ -36,6 +36,7 @@ export const useInventoryValuationTableColumns = () => {
|
|||||||
minWidth: 120,
|
minWidth: 120,
|
||||||
}),
|
}),
|
||||||
textOverview: true,
|
textOverview: true,
|
||||||
|
align: Align.Right,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Header: intl.get('asset_value'),
|
Header: intl.get('asset_value'),
|
||||||
@@ -46,6 +47,7 @@ export const useInventoryValuationTableColumns = () => {
|
|||||||
minWidth: 120,
|
minWidth: 120,
|
||||||
}),
|
}),
|
||||||
textOverview: true,
|
textOverview: true,
|
||||||
|
align: Align.Right,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Header: intl.get('average'),
|
Header: intl.get('average'),
|
||||||
@@ -56,6 +58,7 @@ export const useInventoryValuationTableColumns = () => {
|
|||||||
minWidth: 120,
|
minWidth: 120,
|
||||||
}),
|
}),
|
||||||
textOverview: true,
|
textOverview: true,
|
||||||
|
align: Align.Right,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
[tableRows],
|
[tableRows],
|
||||||
|
|||||||
@@ -2,15 +2,17 @@ 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 { Button } from '@blueprintjs/core';
|
import { Button } from '@blueprintjs/core';
|
||||||
|
|
||||||
import { Icon, If, FormattedMessage as T } from 'components';
|
import { Icon, If, FormattedMessage as T } from 'components';
|
||||||
import { useJournalSheetContext } from './JournalProvider';
|
import { useJournalSheetContext } from './JournalProvider';
|
||||||
import FinancialLoadingBar from '../FinancialLoadingBar';
|
import FinancialLoadingBar from '../FinancialLoadingBar';
|
||||||
|
|
||||||
|
import { Align } from 'common';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the journal table columns.
|
* Retrieve the journal table columns.
|
||||||
*/
|
*/
|
||||||
export const useJournalTableColumns = () => {
|
export const useJournalTableColumns = () => {
|
||||||
|
|
||||||
return React.useMemo(
|
return React.useMemo(
|
||||||
() => [
|
() => [
|
||||||
{
|
{
|
||||||
@@ -57,12 +59,12 @@ export const useJournalTableColumns = () => {
|
|||||||
{
|
{
|
||||||
Header: intl.get('credit'),
|
Header: intl.get('credit'),
|
||||||
accessor: 'formatted_credit',
|
accessor: 'formatted_credit',
|
||||||
className: 'credit',
|
align: Align.Right,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Header: intl.get('debit'),
|
Header: intl.get('debit'),
|
||||||
accessor: 'formatted_debit',
|
accessor: 'formatted_debit',
|
||||||
className: 'debit',
|
align: Align.Right,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
[],
|
[],
|
||||||
|
|||||||
@@ -54,9 +54,8 @@ const PurchasesByItemsDataTable = styled(DataTable)`
|
|||||||
.table {
|
.table {
|
||||||
.tbody {
|
.tbody {
|
||||||
.tr .td {
|
.tr .td {
|
||||||
border-bottom: 0;
|
padding-top: 0.36rem;
|
||||||
padding-top: 0.4rem;
|
padding-bottom: 0.36rem;
|
||||||
padding-bottom: 0.4rem;
|
|
||||||
}
|
}
|
||||||
.tr.row_type--total .td {
|
.tr.row_type--total .td {
|
||||||
border-top: 1px solid #bbb;
|
border-top: 1px solid #bbb;
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
|
||||||
import 'style/pages/FinancialStatements/ContactsBalanceSummary.scss';
|
|
||||||
|
|
||||||
import { FinancialStatement } from 'components';
|
import { FinancialStatement } from 'components';
|
||||||
import DashboardPageContent from 'components/Dashboard/DashboardPageContent';
|
import DashboardPageContent from 'components/Dashboard/DashboardPageContent';
|
||||||
|
|
||||||
@@ -11,10 +9,12 @@ import VendorsBalanceSummaryHeader from './VendorsBalanceSummaryHeader';
|
|||||||
|
|
||||||
import { VendorsBalanceSummaryProvider } from './VendorsBalanceSummaryProvider';
|
import { VendorsBalanceSummaryProvider } from './VendorsBalanceSummaryProvider';
|
||||||
import { VendorsSummarySheetLoadingBar } from './components';
|
import { VendorsSummarySheetLoadingBar } from './components';
|
||||||
|
import { VendorBalanceSummaryBody } from './VendorsBalanceSummaryBody';
|
||||||
|
|
||||||
import withVendorsBalanceSummaryActions from './withVendorsBalanceSummaryActions';
|
import withVendorsBalanceSummaryActions from './withVendorsBalanceSummaryActions';
|
||||||
|
|
||||||
|
import { getDefaultVendorsBalanceQuery } from './utils';
|
||||||
import { compose } from 'utils';
|
import { compose } from 'utils';
|
||||||
import { VendorBalanceSummaryBody } from './VendorsBalanceSummaryBody';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Vendors Balance summary.
|
* Vendors Balance summary.
|
||||||
@@ -24,8 +24,7 @@ function VendorsBalanceSummary({
|
|||||||
toggleVendorSummaryFilterDrawer,
|
toggleVendorSummaryFilterDrawer,
|
||||||
}) {
|
}) {
|
||||||
const [filter, setFilter] = useState({
|
const [filter, setFilter] = useState({
|
||||||
asDate: moment().endOf('day').format('YYYY-MM-DD'),
|
...getDefaultVendorsBalanceQuery(),
|
||||||
filterByOption: 'with-transactions',
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Handle refetch vendors balance summary.
|
// Handle refetch vendors balance summary.
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import intl from 'react-intl-universal';
|
import intl from 'react-intl-universal';
|
||||||
|
import styled from 'styled-components';
|
||||||
|
|
||||||
import { DataTable, FinancialSheet } from 'components';
|
import { DataTable, FinancialSheet } from 'components';
|
||||||
|
|
||||||
@@ -23,19 +24,42 @@ export default function VendorsBalanceSummaryTable({
|
|||||||
const columns = useVendorsBalanceColumns();
|
const columns = useVendorsBalanceColumns();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<FinancialSheet
|
<VendorBalanceFinancialSheet
|
||||||
companyName={organizationName}
|
companyName={organizationName}
|
||||||
name={'vendors-balance-summary'}
|
|
||||||
sheetType={intl.get('vendors_balance_summary')}
|
sheetType={intl.get('vendors_balance_summary')}
|
||||||
asDate={new Date()}
|
asDate={new Date()}
|
||||||
>
|
>
|
||||||
<DataTable
|
<VendorBalanceDataTable
|
||||||
className={'bigcapital-datatable--financial-report'}
|
|
||||||
columns={columns}
|
columns={columns}
|
||||||
data={table?.data}
|
data={table.data}
|
||||||
rowClassNames={tableRowTypesToClassnames}
|
rowClassNames={tableRowTypesToClassnames}
|
||||||
noInitialFetch={true}
|
noInitialFetch={true}
|
||||||
/>
|
/>
|
||||||
</FinancialSheet>
|
</VendorBalanceFinancialSheet>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const VendorBalanceFinancialSheet = styled(FinancialSheet)``;
|
||||||
|
|
||||||
|
const VendorBalanceDataTable = styled(DataTable)`
|
||||||
|
.table {
|
||||||
|
.tbody {
|
||||||
|
.tr:not(.no-results) {
|
||||||
|
.td {
|
||||||
|
border-bottom: 0;
|
||||||
|
padding-top: 0.4rem;
|
||||||
|
padding-bottom: 0.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.row-type--TOTAL {
|
||||||
|
font-weight: 500;
|
||||||
|
|
||||||
|
.td {
|
||||||
|
border-top: 1px solid #bbb;
|
||||||
|
border-bottom: 3px double #333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
import moment from 'moment';
|
||||||
|
|
||||||
|
export const getDefaultVendorsBalanceQuery = () => {
|
||||||
|
return {
|
||||||
|
asDate: moment().endOf('day').format('YYYY-MM-DD'),
|
||||||
|
filterByOption: 'with-transactions',
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user