From 9d9c7c1568ff7f2fe60666fd55cab1863b9e5744 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Sun, 12 Jul 2020 12:31:12 +0200 Subject: [PATCH] - fix: store children accounts with Redux store. - fix: store expense payment date with transactions. - fix: Total assets, liabilities and equity on balance sheet. - tweaks: dashboard content and sidebar style. - fix: reset form with contact list on journal entry form. - feat: Add hints to filter accounts in financial statements. --- client/src/components/ContactsListField.js | 58 +- .../components/Dashboard/DashboardTopbar.js | 13 +- client/src/components/DataTable.js | 29 +- .../DataTableCells/ContactsListFieldCell.js | 18 +- client/src/components/FinancialSheet.js | 21 +- client/src/components/ListSelect.js | 64 ++- client/src/components/index.js | 2 + client/src/components/modifiers.js | 3 + .../Accounting/MakeJournalEntriesForm.js | 3 +- .../Accounting/ManualJournalActionsBar.js | 2 +- .../Accounting/ManualJournalsDataTable.js | 1 + .../src/containers/Accounts/AccountsChart.js | 8 + .../containers/Accounts/AccountsDataTable.js | 5 + .../src/containers/Accounts/withAccounts.js | 1 - client/src/containers/Customers/Customer.js | 10 +- .../Customers/CustomerActionsBar.js | 26 +- .../src/containers/Customers/CustomerForm.js | 11 +- ...oCustomer.js => CustomerTypeRadioField.js} | 0 .../containers/Dialogs/AccountFormDialog.js | 16 +- .../containers/Expenses/ExpenseFormHeader.js | 2 +- .../BalanceSheet/BalanceSheetHeader.js | 89 +-- .../BalanceSheet/BalanceSheetTable.js | 42 +- .../BalanceSheet/withBalanceSheetDetail.js | 2 + .../FinancialAccountsFilter.js | 73 +++ .../GeneralLedger/GeneralLedger.js | 1 - .../GeneralLedger/GeneralLedgerHeader.js | 4 +- .../GeneralLedger/GeneralLedgerTable.js | 13 +- .../Journal/JournalTable.js | 8 +- .../ProfitLossSheet/ProfitLossSheetHeader.js | 22 +- .../TrialBalanceSheetHeader.js | 66 ++- .../TrialBalanceSheetTable.js | 10 +- .../Resources/withResourceDetails.js | 4 +- client/src/lang/en/index.js | 13 +- .../src/store/accounts/accounts.selectors.js | 37 +- .../financialStatements.reducer.js | 58 +- .../src/store/resources/resources.reducer.js | 2 +- client/src/style/components/data-table.scss | 12 +- client/src/style/objects/form.scss | 11 +- client/src/style/pages/accounts-chart.scss | 5 +- client/src/style/pages/dashboard.scss | 18 +- .../src/style/pages/financial-statements.scss | 77 ++- client/src/style/views/Sidebar.scss | 13 +- client/src/utils.js | 26 +- common/utils.js | 34 +- server/bin/utils.js | 14 + server/src/data/BalanceSheetStructure.js | 62 ++ ...190822214904_create_account_types_table.js | 1 + .../src/database/seeds/seed_account_types.js | 62 +- server/src/http/controllers/Accounts.js | 104 ++-- server/src/http/controllers/Expenses.js | 1 + .../FinancialStatements/BalanceSheet.js | 209 ++++--- .../FinancialStatements/ProfitLossSheet.js | 228 ++++---- .../http/controllers/Sales/SalesEstimates.js | 0 .../http/controllers/Sales/SalesInvoicing.js | 0 .../controllers/Sales/SalesPaymentReceive.js | 0 .../http/controllers/Sales/SalesReceipt.js | 0 server/src/utils/index.js | 16 +- server/tests/routes/accounting.test.js | 2 +- server/tests/routes/balance_sheet.test.js | 541 ++++++++++++++++++ .../tests/routes/financial_statements.test.js | 441 +------------- 60 files changed, 1685 insertions(+), 929 deletions(-) rename client/src/containers/Customers/{RadioCustomer.js => CustomerTypeRadioField.js} (100%) create mode 100644 client/src/containers/FinancialStatements/FinancialAccountsFilter.js create mode 100644 server/src/data/BalanceSheetStructure.js create mode 100644 server/src/http/controllers/Sales/SalesEstimates.js create mode 100644 server/src/http/controllers/Sales/SalesInvoicing.js create mode 100644 server/src/http/controllers/Sales/SalesPaymentReceive.js create mode 100644 server/src/http/controllers/Sales/SalesReceipt.js create mode 100644 server/tests/routes/balance_sheet.test.js diff --git a/client/src/components/ContactsListField.js b/client/src/components/ContactsListField.js index 8db5fa0de..39a07d739 100644 --- a/client/src/components/ContactsListField.js +++ b/client/src/components/ContactsListField.js @@ -1,43 +1,51 @@ -import React, { useCallback, useState } from 'react'; -import { - MenuItem, - Button, -} from '@blueprintjs/core'; +import React, { useCallback, useMemo } from 'react'; +import { MenuItem, Button } from '@blueprintjs/core'; import ListSelect from 'components/ListSelect'; import { FormattedMessage as T } from 'react-intl'; export default function ContactsListField({ contacts, onContactSelected, - error, - initialContact, - defautlSelectText = () + selectedContactId, + selectedContactType, + defautlSelectText = , }) { - const [selectedContact, setSelectedContact] = useState( - initialContact || null + // Contact item of select accounts field. + const contactRenderer = useCallback( + (item, { handleClick, modifiers, query }) => ( + + ), + [], ); - // Contact item of select accounts field. - const contactItem = useCallback((item, { handleClick, modifiers, query }) => ( - - ), []); + const onContactSelect = useCallback( + (contact) => { + onContactSelected && onContactSelected(contact); + }, + [onContactSelected], + ); - const onContactSelect = useCallback((contact) => { - setSelectedContact(contact.id); - onContactSelected && onContactSelected(contact); - }, [setSelectedContact, onContactSelected]); + const items = useMemo( + () => + contacts.map((contact) => ({ + ...contact, + _id: `${contact.id}_${contact.contact_type}`, + })), + [contacts], + ); return ( } - itemRenderer={contactItem} + items={items} + noResults={} + itemRenderer={contactRenderer} popoverProps={{ minimal: true }} filterable={true} onItemSelect={onContactSelect} labelProp={'display_name'} - selectedItem={selectedContact} - selectedItemProp={'id'} - defaultText={defautlSelectText} /> + selectedItem={`${selectedContactId}_${selectedContactType}`} + selectedItemProp={'_id'} + defaultText={defautlSelectText} + /> ); -} \ No newline at end of file +} diff --git a/client/src/components/Dashboard/DashboardTopbar.js b/client/src/components/Dashboard/DashboardTopbar.js index a598c06b9..50326792a 100644 --- a/client/src/components/Dashboard/DashboardTopbar.js +++ b/client/src/components/Dashboard/DashboardTopbar.js @@ -110,10 +110,15 @@ function DashboardTopbar({ icon={} text={} /> -