chore: close Epic #512 and tasks #507, #508 - E2E workflow tests and formatting#667
Merged
africanitem merged 18 commits intoSimpleAccounts:developfrom Feb 3, 2026
Merged
Conversation
- contact-helpers: flat ContactPersistModel payload (addressLine1, etc.);
createTestContact(page, { contactName, contactType }) overload
- financial-reporting: profitandloss/balanceSheet/trialBalanceReport URLs;
DD/MM/YYYY dates; startDate+endDate for balance/trial; relax verifyReportDataStructure;
exportReportViaUI skip when button missing
- vat-helpers: DD/MM/YYYY formatDate
- bank-account-helpers: coaCategoryId 8 (MONEY_RECEIVED_OTHERS) for deposits,
9 for withdrawals; date/amount form params; formatDateDDMMYYYY
- workflows: skip postInvoice where productId required; VAT assertion use invoiceId;
report dates DD/MM/YYYY; use page.request for API context
- bank-reconciliation/vat-filing: remove unused APIRequestContext import
…on types - Added new backend endpoint /rest/datalist/getBankTransactionTypes that returns ChartOfAccountCategory records (transaction types) instead of ChartOfAccount records - Updated frontend to use the new endpoint and map chartOfAccountCategoryId correctly - Fixed transaction type dropdown to show valid transaction types (Money Received, Expense, Sales, etc.) instead of chart of account categories (Accounts Payable, Current Asset, etc.) - Backend now receives correct chartOfAccountCategoryId (1-18) matching ChartOfAccountCategoryIdEnumConstant - Added Playwright test for creating transactions on specific bank account - All unit tests pass Co-authored-by: Cursor <cursoragent@cursor.com>
- Fixed Java compatibility issue: replaced .toList() with .collect(Collectors.toList()) - Added import for Collectors - Clear lazy-loaded relationships (parentChartOfAccount, coacoaCategoryList, coatransactionCategoryList) before JSON serialization to prevent LazyInitializationException - This fixes the 500 error when calling /rest/datalist/getBankTransactionTypes Co-authored-by: Cursor <cursoragent@cursor.com>
- Added MONEY_RECEIVED case to transaction save switch statement (was missing, causing 500 error) - Fixed expense reducer to avoid mutating read-only objects (PAY_MODE, USER_LIST, PAY_TO_LIST cases) - Changed direct mutations to create new objects/arrays to prevent 'Cannot assign to read only property' errors Co-authored-by: Cursor <cursoragent@cursor.com>
Backend: - Journal: @transactional + null-safety in JournalRestController/JournalRestHelper; fix getList response shape - Receipt: @transactional + null-safety for user.getRole() in ReceiptController - Opening balance: @transactional + null-safety in TransactionCategoryBalanceController/RestHelper; fix ORDER_BY to use entity attribute 'id' in TransactionCategoryBalanceFilterEnum; null-safe DAO for ChartOfAccount and transaction category lists - Various controllers/helpers: null-safety and query/API fixes Frontend: - Journal list: use API shape { data, count } for tableData and pageCount in journal screen - Journal detail: DetailJournal location fallback; NeuInput no longer passes children/dangerouslySetInnerHTML to input - Invoice view journal: defensive handling of listData (array vs { data }) in InvoiceViewJournalEntries and slice - Bank transactions: transaction types, dropdowns (invoices, expense category, vendor, etc.), DataTable isLoading/totalCount - Expense screens: dropdown and display fixes - package.json: engines + prestart Node 20 check; .nvmrc for Node 20 E2E: - Add invoice-sales-journal-workflow, bank-transaction, and verification Playwright specs - Add VERIFICATION_SUMMARY.md Co-authored-by: Cursor <cursoragent@cursor.com>
…product)
- Backend: return 400 with clear message when invoice line has no product (AbstractDoubleEntryRestController, InvoiceRestHelper)
- Frontend: extract message from err.data (authApi rejects with response) and pass { status, message } to tostifyAlert so toast displays correctly
Co-authored-by: Cursor <cursoragent@cursor.com>
…nd fixes
Quotation:
- ViewQuotation: use useLocation/useNavigate, guard location.state, show fallback when no id
- Quotation list: pass history adapter (path, state) => navigate(path, { state }) so View gets id
- View screen: use useReactToPrint hook (v3 has no default export), remove invalid DOM props (paperSize, fileName, scale)
- sendQuotation: @transactional on controller; null-safety and customer/supplier contact in RestHelper; getQuotationData user/currency guards
- getQuotationById: @transactional(readOnly=true), getQuotationModel null-safety (contact customer/supplier, type, getQuotationLineItemModel)
- Create: send type=6 for customer quotations so list shows created items
- List/API: getListForQuatation @transactional, null-safety, QuotationFilterEnum column name, DAO sort constant
Receipt:
- Detail: normalize contact options (label as string) to fix Objects are not valid as React child; useLocation/useNavigate; getContactList(2); safe contactId in form
- Detail: fix ternary missing false branch for option resolution
- Route name income/receipt/detail set to Customer Receipts for permissions
- Add DetailReceipt.contact-select.test.jsx (normalizeContactOption + render with object labels)
E2E and tests:
- quotation-create-and-list, receipt-navigation, record-payment and verify-fixes specs; receipt detail unit test
- Bank account, chart account, contact, product, product_category, journal, record_payment frontend fixes
Backend: ChartOfAccountCacheService, ContactController, DataListController, PaymentController, ReceiptController, TransactionCategoryRestController, VatController, PoQuatationDaoImpl, QuotationFilterEnum and related test updates.
Co-authored-by: Cursor <cursoragent@cursor.com>
…linking tests implemented Closes SimpleAccounts#507 Closes SimpleAccounts#508 Transaction linking to receipts and payments E2E tests are implemented in apps/frontend/e2e/bank-account-transaction-workflow.spec.ts: - SimpleAccounts#507: 'should link transaction to receipt' - SimpleAccounts#508: 'should link transaction to payment' Co-authored-by: Cursor <cursoragent@cursor.com>
…orkflow e2e tests All Epic SimpleAccounts#512 tasks are implemented in apps/frontend/e2e/invoice-to-payment-workflow.spec.ts and helpers (invoice-helpers.ts, receipt-helpers.ts). Closes SimpleAccounts#512 Closes SimpleAccounts#513 Closes SimpleAccounts#514 Closes SimpleAccounts#515 Closes SimpleAccounts#516 Closes SimpleAccounts#517 Closes SimpleAccounts#518 Closes SimpleAccounts#519 Closes SimpleAccounts#520 Closes SimpleAccounts#521 Closes SimpleAccounts#522 Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…tests chore: close Epic SimpleAccounts#512 and tasks SimpleAccounts#507, SimpleAccounts#508 - E2E workflow tests and formatting
Co-authored-by: Cursor <cursoragent@cursor.com>
- gitleaks: download linux_arm64 or linux_x64 by runner.arch - all workflows: use ./mvnw instead of mvn to avoid 'mvn not found' - .gitignore: add phase-4 temporary e2e files Co-authored-by: Cursor <cursoragent@cursor.com>
- build: run maven wrapper with bash and -B for backend tests - MessageUtil: return key when appContext is null (fixes VatReportFilingRestControllerTest in standalone mockmvc) - remove debug logging to .cursor path from AbstractDoubleEntryRestController and TransactionRestController - .gitignore: add .cursor/ so ide project dir is not committed Co-authored-by: Cursor <cursoragent@cursor.com>
africanitem
added a commit
that referenced
this pull request
Feb 3, 2026
* fix(e2e): phase 4 e2e fixes – contact api, reports, vat, bank helpers
- contact-helpers: flat ContactPersistModel payload (addressLine1, etc.);
createTestContact(page, { contactName, contactType }) overload
- financial-reporting: profitandloss/balanceSheet/trialBalanceReport URLs;
DD/MM/YYYY dates; startDate+endDate for balance/trial; relax verifyReportDataStructure;
exportReportViaUI skip when button missing
- vat-helpers: DD/MM/YYYY formatDate
- bank-account-helpers: coaCategoryId 8 (MONEY_RECEIVED_OTHERS) for deposits,
9 for withdrawals; date/amount form params; formatDateDDMMYYYY
- workflows: skip postInvoice where productId required; VAT assertion use invoiceId;
report dates DD/MM/YYYY; use page.request for API context
- bank-reconciliation/vat-filing: remove unused APIRequestContext import
* Fix bank account transaction types dropdown to show correct transaction types
- Added new backend endpoint /rest/datalist/getBankTransactionTypes that returns ChartOfAccountCategory records (transaction types) instead of ChartOfAccount records
- Updated frontend to use the new endpoint and map chartOfAccountCategoryId correctly
- Fixed transaction type dropdown to show valid transaction types (Money Received, Expense, Sales, etc.) instead of chart of account categories (Accounts Payable, Current Asset, etc.)
- Backend now receives correct chartOfAccountCategoryId (1-18) matching ChartOfAccountCategoryIdEnumConstant
- Added Playwright test for creating transactions on specific bank account
- All unit tests pass
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix getBankTransactionTypes endpoint - clear lazy-loaded relationships
- Fixed Java compatibility issue: replaced .toList() with .collect(Collectors.toList())
- Added import for Collectors
- Clear lazy-loaded relationships (parentChartOfAccount, coacoaCategoryList, coatransactionCategoryList) before JSON serialization to prevent LazyInitializationException
- This fixes the 500 error when calling /rest/datalist/getBankTransactionTypes
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix Money Received transaction type and expense reducer mutations
- Added MONEY_RECEIVED case to transaction save switch statement (was missing, causing 500 error)
- Fixed expense reducer to avoid mutating read-only objects (PAY_MODE, USER_LIST, PAY_TO_LIST cases)
- Changed direct mutations to create new objects/arrays to prevent 'Cannot assign to read only property' errors
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: journal, receipt, opening-balance APIs and frontend issues
Backend:
- Journal: @transactional + null-safety in JournalRestController/JournalRestHelper; fix getList response shape
- Receipt: @transactional + null-safety for user.getRole() in ReceiptController
- Opening balance: @transactional + null-safety in TransactionCategoryBalanceController/RestHelper; fix ORDER_BY to use entity attribute 'id' in TransactionCategoryBalanceFilterEnum; null-safe DAO for ChartOfAccount and transaction category lists
- Various controllers/helpers: null-safety and query/API fixes
Frontend:
- Journal list: use API shape { data, count } for tableData and pageCount in journal screen
- Journal detail: DetailJournal location fallback; NeuInput no longer passes children/dangerouslySetInnerHTML to input
- Invoice view journal: defensive handling of listData (array vs { data }) in InvoiceViewJournalEntries and slice
- Bank transactions: transaction types, dropdowns (invoices, expense category, vendor, etc.), DataTable isLoading/totalCount
- Expense screens: dropdown and display fixes
- package.json: engines + prestart Node 20 check; .nvmrc for Node 20
E2E:
- Add invoice-sales-journal-workflow, bank-transaction, and verification Playwright specs
- Add VERIFICATION_SUMMARY.md
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: show backend error when invoice posting fails (line item has no product)
- Backend: return 400 with clear message when invoice line has no product (AbstractDoubleEntryRestController, InvoiceRestHelper)
- Frontend: extract message from err.data (authApi rejects with response) and pass { status, message } to tostifyAlert so toast displays correctly
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: quotation view, send, receipt detail, and related backend/frontend fixes
Quotation:
- ViewQuotation: use useLocation/useNavigate, guard location.state, show fallback when no id
- Quotation list: pass history adapter (path, state) => navigate(path, { state }) so View gets id
- View screen: use useReactToPrint hook (v3 has no default export), remove invalid DOM props (paperSize, fileName, scale)
- sendQuotation: @transactional on controller; null-safety and customer/supplier contact in RestHelper; getQuotationData user/currency guards
- getQuotationById: @transactional(readOnly=true), getQuotationModel null-safety (contact customer/supplier, type, getQuotationLineItemModel)
- Create: send type=6 for customer quotations so list shows created items
- List/API: getListForQuatation @transactional, null-safety, QuotationFilterEnum column name, DAO sort constant
Receipt:
- Detail: normalize contact options (label as string) to fix Objects are not valid as React child; useLocation/useNavigate; getContactList(2); safe contactId in form
- Detail: fix ternary missing false branch for option resolution
- Route name income/receipt/detail set to Customer Receipts for permissions
- Add DetailReceipt.contact-select.test.jsx (normalizeContactOption + render with object labels)
E2E and tests:
- quotation-create-and-list, receipt-navigation, record-payment and verify-fixes specs; receipt detail unit test
- Bank account, chart account, contact, product, product_category, journal, record_payment frontend fixes
Backend: ChartOfAccountCacheService, ContactController, DataListController, PaymentController, ReceiptController, TransactionCategoryRestController, VatController, PoQuatationDaoImpl, QuotationFilterEnum and related test updates.
Co-authored-by: Cursor <cursoragent@cursor.com>
* chore: close #507 and #508 - transaction linking tests implemented
Closes #507
Closes #508
Transaction linking to receipts and payments E2E tests are implemented in
apps/frontend/e2e/bank-account-transaction-workflow.spec.ts:
- #507: 'should link transaction to receipt'
- #508: 'should link transaction to payment'
Co-authored-by: Cursor <cursoragent@cursor.com>
* chore: close epic #512 and tasks - invoice-to-payment workflow e2e tests
All Epic #512 tasks are implemented in apps/frontend/e2e/invoice-to-payment-workflow.spec.ts
and helpers (invoice-helpers.ts, receipt-helpers.ts).
Closes #512
Closes #513
Closes #514
Closes #515
Closes #516
Closes #517
Closes #518
Closes #519
Closes #520
Closes #521
Closes #522
Co-authored-by: Cursor <cursoragent@cursor.com>
* style: apply prettier formatting
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: resolve eslint errors blocking pre-push
Co-authored-by: Cursor <cursoragent@cursor.com>
* style: format expense screen
Co-authored-by: Cursor <cursoragent@cursor.com>
* ci: trigger tests for pr #667
Co-authored-by: Cursor <cursoragent@cursor.com>
* ci: fix gitleaks arm64 binary, use maven wrapper in workflows
- gitleaks: download linux_arm64 or linux_x64 by runner.arch
- all workflows: use ./mvnw instead of mvn to avoid 'mvn not found'
- .gitignore: add phase-4 temporary e2e files
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: backend ci and messageutil, remove ide-specific paths from code
- build: run maven wrapper with bash and -B for backend tests
- MessageUtil: return key when appContext is null (fixes VatReportFilingRestControllerTest in standalone mockmvc)
- remove debug logging to .cursor path from AbstractDoubleEntryRestController and TransactionRestController
- .gitignore: add .cursor/ so ide project dir is not committed
Co-authored-by: Cursor <cursoragent@cursor.com>
* ci(security): run codeql on ubuntu-latest (x64)
CodeQL does not support linux/arm64. Switch security workflow from
k3s-simpleaccounts-runners to ubuntu-latest so CodeQL analysis runs
on a supported x64 runner and merge can succeed.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: MohsinHashmi-DataInn <108420505+MohsinHashmi-DataInn@users.noreply.github.com>
africanitem
added a commit
that referenced
this pull request
Feb 4, 2026
… build (#669) * fix(e2e): phase 4 e2e fixes – contact api, reports, vat, bank helpers - contact-helpers: flat ContactPersistModel payload (addressLine1, etc.); createTestContact(page, { contactName, contactType }) overload - financial-reporting: profitandloss/balanceSheet/trialBalanceReport URLs; DD/MM/YYYY dates; startDate+endDate for balance/trial; relax verifyReportDataStructure; exportReportViaUI skip when button missing - vat-helpers: DD/MM/YYYY formatDate - bank-account-helpers: coaCategoryId 8 (MONEY_RECEIVED_OTHERS) for deposits, 9 for withdrawals; date/amount form params; formatDateDDMMYYYY - workflows: skip postInvoice where productId required; VAT assertion use invoiceId; report dates DD/MM/YYYY; use page.request for API context - bank-reconciliation/vat-filing: remove unused APIRequestContext import * Fix bank account transaction types dropdown to show correct transaction types - Added new backend endpoint /rest/datalist/getBankTransactionTypes that returns ChartOfAccountCategory records (transaction types) instead of ChartOfAccount records - Updated frontend to use the new endpoint and map chartOfAccountCategoryId correctly - Fixed transaction type dropdown to show valid transaction types (Money Received, Expense, Sales, etc.) instead of chart of account categories (Accounts Payable, Current Asset, etc.) - Backend now receives correct chartOfAccountCategoryId (1-18) matching ChartOfAccountCategoryIdEnumConstant - Added Playwright test for creating transactions on specific bank account - All unit tests pass Co-authored-by: Cursor <cursoragent@cursor.com> * Fix getBankTransactionTypes endpoint - clear lazy-loaded relationships - Fixed Java compatibility issue: replaced .toList() with .collect(Collectors.toList()) - Added import for Collectors - Clear lazy-loaded relationships (parentChartOfAccount, coacoaCategoryList, coatransactionCategoryList) before JSON serialization to prevent LazyInitializationException - This fixes the 500 error when calling /rest/datalist/getBankTransactionTypes Co-authored-by: Cursor <cursoragent@cursor.com> * Fix Money Received transaction type and expense reducer mutations - Added MONEY_RECEIVED case to transaction save switch statement (was missing, causing 500 error) - Fixed expense reducer to avoid mutating read-only objects (PAY_MODE, USER_LIST, PAY_TO_LIST cases) - Changed direct mutations to create new objects/arrays to prevent 'Cannot assign to read only property' errors Co-authored-by: Cursor <cursoragent@cursor.com> * fix: journal, receipt, opening-balance APIs and frontend issues Backend: - Journal: @transactional + null-safety in JournalRestController/JournalRestHelper; fix getList response shape - Receipt: @transactional + null-safety for user.getRole() in ReceiptController - Opening balance: @transactional + null-safety in TransactionCategoryBalanceController/RestHelper; fix ORDER_BY to use entity attribute 'id' in TransactionCategoryBalanceFilterEnum; null-safe DAO for ChartOfAccount and transaction category lists - Various controllers/helpers: null-safety and query/API fixes Frontend: - Journal list: use API shape { data, count } for tableData and pageCount in journal screen - Journal detail: DetailJournal location fallback; NeuInput no longer passes children/dangerouslySetInnerHTML to input - Invoice view journal: defensive handling of listData (array vs { data }) in InvoiceViewJournalEntries and slice - Bank transactions: transaction types, dropdowns (invoices, expense category, vendor, etc.), DataTable isLoading/totalCount - Expense screens: dropdown and display fixes - package.json: engines + prestart Node 20 check; .nvmrc for Node 20 E2E: - Add invoice-sales-journal-workflow, bank-transaction, and verification Playwright specs - Add VERIFICATION_SUMMARY.md Co-authored-by: Cursor <cursoragent@cursor.com> * fix: show backend error when invoice posting fails (line item has no product) - Backend: return 400 with clear message when invoice line has no product (AbstractDoubleEntryRestController, InvoiceRestHelper) - Frontend: extract message from err.data (authApi rejects with response) and pass { status, message } to tostifyAlert so toast displays correctly Co-authored-by: Cursor <cursoragent@cursor.com> * fix: quotation view, send, receipt detail, and related backend/frontend fixes Quotation: - ViewQuotation: use useLocation/useNavigate, guard location.state, show fallback when no id - Quotation list: pass history adapter (path, state) => navigate(path, { state }) so View gets id - View screen: use useReactToPrint hook (v3 has no default export), remove invalid DOM props (paperSize, fileName, scale) - sendQuotation: @transactional on controller; null-safety and customer/supplier contact in RestHelper; getQuotationData user/currency guards - getQuotationById: @transactional(readOnly=true), getQuotationModel null-safety (contact customer/supplier, type, getQuotationLineItemModel) - Create: send type=6 for customer quotations so list shows created items - List/API: getListForQuatation @transactional, null-safety, QuotationFilterEnum column name, DAO sort constant Receipt: - Detail: normalize contact options (label as string) to fix Objects are not valid as React child; useLocation/useNavigate; getContactList(2); safe contactId in form - Detail: fix ternary missing false branch for option resolution - Route name income/receipt/detail set to Customer Receipts for permissions - Add DetailReceipt.contact-select.test.jsx (normalizeContactOption + render with object labels) E2E and tests: - quotation-create-and-list, receipt-navigation, record-payment and verify-fixes specs; receipt detail unit test - Bank account, chart account, contact, product, product_category, journal, record_payment frontend fixes Backend: ChartOfAccountCacheService, ContactController, DataListController, PaymentController, ReceiptController, TransactionCategoryRestController, VatController, PoQuatationDaoImpl, QuotationFilterEnum and related test updates. Co-authored-by: Cursor <cursoragent@cursor.com> * chore: close #507 and #508 - transaction linking tests implemented Closes #507 Closes #508 Transaction linking to receipts and payments E2E tests are implemented in apps/frontend/e2e/bank-account-transaction-workflow.spec.ts: - #507: 'should link transaction to receipt' - #508: 'should link transaction to payment' Co-authored-by: Cursor <cursoragent@cursor.com> * chore: close epic #512 and tasks - invoice-to-payment workflow e2e tests All Epic #512 tasks are implemented in apps/frontend/e2e/invoice-to-payment-workflow.spec.ts and helpers (invoice-helpers.ts, receipt-helpers.ts). Closes #512 Closes #513 Closes #514 Closes #515 Closes #516 Closes #517 Closes #518 Closes #519 Closes #520 Closes #521 Closes #522 Co-authored-by: Cursor <cursoragent@cursor.com> * style: apply prettier formatting Co-authored-by: Cursor <cursoragent@cursor.com> * fix: resolve eslint errors blocking pre-push Co-authored-by: Cursor <cursoragent@cursor.com> * style: format expense screen Co-authored-by: Cursor <cursoragent@cursor.com> * ci: trigger tests for pr #667 Co-authored-by: Cursor <cursoragent@cursor.com> * ci: fix gitleaks arm64 binary, use maven wrapper in workflows - gitleaks: download linux_arm64 or linux_x64 by runner.arch - all workflows: use ./mvnw instead of mvn to avoid 'mvn not found' - .gitignore: add phase-4 temporary e2e files Co-authored-by: Cursor <cursoragent@cursor.com> * fix: backend ci and messageutil, remove ide-specific paths from code - build: run maven wrapper with bash and -B for backend tests - MessageUtil: return key when appContext is null (fixes VatReportFilingRestControllerTest in standalone mockmvc) - remove debug logging to .cursor path from AbstractDoubleEntryRestController and TransactionRestController - .gitignore: add .cursor/ so ide project dir is not committed Co-authored-by: Cursor <cursoragent@cursor.com> * ci(security): run codeql on ubuntu-latest (x64) CodeQL does not support linux/arm64. Switch security workflow from k3s-simpleaccounts-runners to ubuntu-latest so CodeQL analysis runs on a supported x64 runner and merge can succeed. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(devcontainer): allow playwright install to fail in multi-platform build Playwright install can fail under QEMU when building for linux/arm64 on amd64 (or vice versa). Make the step non-fatal so build-and-push succeeds; system chromium is already installed via apt; browsers can be installed at container start if needed. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: MohsinHashmi-DataInn <108420505+MohsinHashmi-DataInn@users.noreply.github.com>
africanitem
added a commit
that referenced
this pull request
Feb 5, 2026
…ner Playwright, DetailContact tests (#671) * fix(e2e): phase 4 e2e fixes – contact api, reports, vat, bank helpers - contact-helpers: flat ContactPersistModel payload (addressLine1, etc.); createTestContact(page, { contactName, contactType }) overload - financial-reporting: profitandloss/balanceSheet/trialBalanceReport URLs; DD/MM/YYYY dates; startDate+endDate for balance/trial; relax verifyReportDataStructure; exportReportViaUI skip when button missing - vat-helpers: DD/MM/YYYY formatDate - bank-account-helpers: coaCategoryId 8 (MONEY_RECEIVED_OTHERS) for deposits, 9 for withdrawals; date/amount form params; formatDateDDMMYYYY - workflows: skip postInvoice where productId required; VAT assertion use invoiceId; report dates DD/MM/YYYY; use page.request for API context - bank-reconciliation/vat-filing: remove unused APIRequestContext import * Fix bank account transaction types dropdown to show correct transaction types - Added new backend endpoint /rest/datalist/getBankTransactionTypes that returns ChartOfAccountCategory records (transaction types) instead of ChartOfAccount records - Updated frontend to use the new endpoint and map chartOfAccountCategoryId correctly - Fixed transaction type dropdown to show valid transaction types (Money Received, Expense, Sales, etc.) instead of chart of account categories (Accounts Payable, Current Asset, etc.) - Backend now receives correct chartOfAccountCategoryId (1-18) matching ChartOfAccountCategoryIdEnumConstant - Added Playwright test for creating transactions on specific bank account - All unit tests pass Co-authored-by: Cursor <cursoragent@cursor.com> * Fix getBankTransactionTypes endpoint - clear lazy-loaded relationships - Fixed Java compatibility issue: replaced .toList() with .collect(Collectors.toList()) - Added import for Collectors - Clear lazy-loaded relationships (parentChartOfAccount, coacoaCategoryList, coatransactionCategoryList) before JSON serialization to prevent LazyInitializationException - This fixes the 500 error when calling /rest/datalist/getBankTransactionTypes Co-authored-by: Cursor <cursoragent@cursor.com> * Fix Money Received transaction type and expense reducer mutations - Added MONEY_RECEIVED case to transaction save switch statement (was missing, causing 500 error) - Fixed expense reducer to avoid mutating read-only objects (PAY_MODE, USER_LIST, PAY_TO_LIST cases) - Changed direct mutations to create new objects/arrays to prevent 'Cannot assign to read only property' errors Co-authored-by: Cursor <cursoragent@cursor.com> * fix: journal, receipt, opening-balance APIs and frontend issues Backend: - Journal: @transactional + null-safety in JournalRestController/JournalRestHelper; fix getList response shape - Receipt: @transactional + null-safety for user.getRole() in ReceiptController - Opening balance: @transactional + null-safety in TransactionCategoryBalanceController/RestHelper; fix ORDER_BY to use entity attribute 'id' in TransactionCategoryBalanceFilterEnum; null-safe DAO for ChartOfAccount and transaction category lists - Various controllers/helpers: null-safety and query/API fixes Frontend: - Journal list: use API shape { data, count } for tableData and pageCount in journal screen - Journal detail: DetailJournal location fallback; NeuInput no longer passes children/dangerouslySetInnerHTML to input - Invoice view journal: defensive handling of listData (array vs { data }) in InvoiceViewJournalEntries and slice - Bank transactions: transaction types, dropdowns (invoices, expense category, vendor, etc.), DataTable isLoading/totalCount - Expense screens: dropdown and display fixes - package.json: engines + prestart Node 20 check; .nvmrc for Node 20 E2E: - Add invoice-sales-journal-workflow, bank-transaction, and verification Playwright specs - Add VERIFICATION_SUMMARY.md Co-authored-by: Cursor <cursoragent@cursor.com> * fix: show backend error when invoice posting fails (line item has no product) - Backend: return 400 with clear message when invoice line has no product (AbstractDoubleEntryRestController, InvoiceRestHelper) - Frontend: extract message from err.data (authApi rejects with response) and pass { status, message } to tostifyAlert so toast displays correctly Co-authored-by: Cursor <cursoragent@cursor.com> * fix: quotation view, send, receipt detail, and related backend/frontend fixes Quotation: - ViewQuotation: use useLocation/useNavigate, guard location.state, show fallback when no id - Quotation list: pass history adapter (path, state) => navigate(path, { state }) so View gets id - View screen: use useReactToPrint hook (v3 has no default export), remove invalid DOM props (paperSize, fileName, scale) - sendQuotation: @transactional on controller; null-safety and customer/supplier contact in RestHelper; getQuotationData user/currency guards - getQuotationById: @transactional(readOnly=true), getQuotationModel null-safety (contact customer/supplier, type, getQuotationLineItemModel) - Create: send type=6 for customer quotations so list shows created items - List/API: getListForQuatation @transactional, null-safety, QuotationFilterEnum column name, DAO sort constant Receipt: - Detail: normalize contact options (label as string) to fix Objects are not valid as React child; useLocation/useNavigate; getContactList(2); safe contactId in form - Detail: fix ternary missing false branch for option resolution - Route name income/receipt/detail set to Customer Receipts for permissions - Add DetailReceipt.contact-select.test.jsx (normalizeContactOption + render with object labels) E2E and tests: - quotation-create-and-list, receipt-navigation, record-payment and verify-fixes specs; receipt detail unit test - Bank account, chart account, contact, product, product_category, journal, record_payment frontend fixes Backend: ChartOfAccountCacheService, ContactController, DataListController, PaymentController, ReceiptController, TransactionCategoryRestController, VatController, PoQuatationDaoImpl, QuotationFilterEnum and related test updates. Co-authored-by: Cursor <cursoragent@cursor.com> * chore: close #507 and #508 - transaction linking tests implemented Closes #507 Closes #508 Transaction linking to receipts and payments E2E tests are implemented in apps/frontend/e2e/bank-account-transaction-workflow.spec.ts: - #507: 'should link transaction to receipt' - #508: 'should link transaction to payment' Co-authored-by: Cursor <cursoragent@cursor.com> * chore: close epic #512 and tasks - invoice-to-payment workflow e2e tests All Epic #512 tasks are implemented in apps/frontend/e2e/invoice-to-payment-workflow.spec.ts and helpers (invoice-helpers.ts, receipt-helpers.ts). Closes #512 Closes #513 Closes #514 Closes #515 Closes #516 Closes #517 Closes #518 Closes #519 Closes #520 Closes #521 Closes #522 Co-authored-by: Cursor <cursoragent@cursor.com> * style: apply prettier formatting Co-authored-by: Cursor <cursoragent@cursor.com> * fix: resolve eslint errors blocking pre-push Co-authored-by: Cursor <cursoragent@cursor.com> * style: format expense screen Co-authored-by: Cursor <cursoragent@cursor.com> * ci: trigger tests for pr #667 Co-authored-by: Cursor <cursoragent@cursor.com> * ci: fix gitleaks arm64 binary, use maven wrapper in workflows - gitleaks: download linux_arm64 or linux_x64 by runner.arch - all workflows: use ./mvnw instead of mvn to avoid 'mvn not found' - .gitignore: add phase-4 temporary e2e files Co-authored-by: Cursor <cursoragent@cursor.com> * fix: backend ci and messageutil, remove ide-specific paths from code - build: run maven wrapper with bash and -B for backend tests - MessageUtil: return key when appContext is null (fixes VatReportFilingRestControllerTest in standalone mockmvc) - remove debug logging to .cursor path from AbstractDoubleEntryRestController and TransactionRestController - .gitignore: add .cursor/ so ide project dir is not committed Co-authored-by: Cursor <cursoragent@cursor.com> * ci(security): run codeql on ubuntu-latest (x64) CodeQL does not support linux/arm64. Switch security workflow from k3s-simpleaccounts-runners to ubuntu-latest so CodeQL analysis runs on a supported x64 runner and merge can succeed. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(devcontainer): allow playwright install to fail in multi-platform build Playwright install can fail under QEMU when building for linux/arm64 on amd64 (or vice versa). Make the step non-fatal so build-and-push succeeds; system chromium is already installed via apt; browsers can be installed at container start if needed. Co-authored-by: Cursor <cursoragent@cursor.com> * test(contact): fix DetailContact tests - mock getContactById to return Promise Mock getContactById must return a Promise (not a thunk) so component's .then() runs and setLoading(false); add getInvoicesCountContact and mockContactData so form loads and cancel/update buttons are found. Co-authored-by: Cursor <cursoragent@cursor.com> * test(contact): fix DetailContact and CreateContact tests for CI - DetailContact: module mock getContactById returns thunk that resolves with full data; wait for Update/Cancel buttons with findByRole and 15s timeout; increase test timeout to 20s for form load - CreateContact: use findByText with 15s timeout and 20s test timeout for create form Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: MohsinHashmi-DataInn <108420505+MohsinHashmi-DataInn@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes
Closes #507
Closes #508
Closes #512
Closes #513
Closes #514
Closes #515
Closes #516
Closes #517
Closes #518
Closes #519
Closes #520
Closes #521
Closes #522
Closes #527
Closes #528