1536 Commits

Author SHA1 Message Date
Ahmed Bouhuolia
52c97f1401 Merge pull request #1075 from bigcapitalhq/fix/export-i18n-column-headers
fix(server): localize i18n column headers in CSV/XLSX/PDF exports
2026-04-13 18:37:38 +02:00
Ahmed Bouhuolia
3db9061c60 fix(server): localize i18n column headers in export (CSV/XLSX/PDF)
Export column headers displayed raw i18n keys like
`expense.field.payment_account` instead of translated names like
"Payment Account" because ExportResourceService never resolved the
i18n keys before rendering.

Inject I18nService and translate column names in both
getExportableColumns() (CSV/XLSX) and getPrintableColumns() (PDF).

Closes #1073

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 18:32:24 +02:00
Ahmed Bouhuolia
a7a0a7fbe7 fix(server): use correct base currency in financial reports
Reports (Receivable Aging Summary, Payable Aging Summary, Inventory
Valuation, Sales Tax Liability Summary, Vendor Balance Summary) were
not assigning baseCurrency from meta in their constructors, causing
currency formatting to fall back to USD instead of the organization's
base currency.

Closes #1069

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 17:52:46 +02:00
Y8C68
dd58f50387 fix(server): handle missing ContentType in attachment download
GET /api/attachments/:id crashes with "Cannot read properties of
undefined (reading extension)" when the S3 object has no ContentType
metadata. This happens when files are uploaded without explicit content
type (e.g., via API integrations).

mime.extension(undefined) returns undefined, which then causes the
Content-Disposition header template to fail.

Fix: fallback to "application/octet-stream" when ContentType is missing,
and "bin" when mime.extension() returns undefined.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 06:11:28 +00:00
Ahmed Bouhuolia
ccb34e2155 chore(webapp): add format and format:check scripts
Add Prettier scripts to webapp package for code formatting, consistent
with the existing server package setup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 18:21:23 +02:00
Ahmed Bouhuolia
b0db59a495 feat(webapp): customer/vendor form ux improvement (#1053)
* feat(webapp): customer/vendor form ux improvement
2026-03-27 16:34:52 +02:00
rmb
580392a408 fix: bulk uncategorize transactions API endpoint (#1054)
* fix: bulk uncategorize transactions - fix API endpoint and error handling

* refactor: use params object instead of URLSearchParams for delete request

Simplifies the API call by passing params object directly to the delete
method instead of manually building URLSearchParams.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Ahmed Bouhuolia <a.bouhuolia@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 16:30:19 +02:00
Ahmed Bouhuolia
a1d1f53773 fix: typescript errors 2026-03-27 16:29:44 +02:00
Ahmed Bouhuolia
f5d1800c8c wip 2026-03-27 16:11:33 +02:00
Ahmed Bouhuolia
4dc5c5abe0 wip 2026-03-27 13:14:54 +02:00
Ahmed Bouhuolia
d5cc3d1a71 wip 2026-03-27 11:29:57 +02:00
Ahmed Bouhuolia
50ba91ecf1 fix 2026-03-27 09:57:03 +02:00
Ahmed Bouhuolia
5ba753e808 wip 2026-03-27 01:08:57 +02:00
Ahmed Bouhuolia
2e90e3cc5b wip 2026-03-26 18:04:33 +02:00
Ahmed Bouhuolia
8b59f28125 wip 2026-03-26 17:40:24 +02:00
Ahmed Bouhuolia
aa89484b64 wip 2026-03-26 14:59:45 +02:00
Ahmed Bouhuolia
75699ba810 wip 2026-03-26 14:18:54 +02:00
rmb
ad0451f32d fix: resolve double slash issue in report print functionality (#1051)
* fix print button for report tab modules

* fix: resolve double slash in report print URLs - Revert ChromiumlyTenancy changes
2026-03-26 09:52:26 +02:00
Ahmed Bouhuolia
8f1af97fc0 feat(webapp): customer/vendor form ux improvement 2026-03-24 21:21:50 +02:00
Ahmed Bouhuolia
cfbfc0b746 fix(accounts): correct typos in account type constants (#1046)
- Fix 'none-current-asset' -> 'non-current-asset' in ACCOUNT_TYPE
- Fix 'non-ACCOUNT_PARENT_TYPE.CURRENT_ASSET' -> 'non-current-asset' copy-paste error
- Fix 'expene' -> 'expense' typo in ACCOUNT_ROOT_TYPE
- Add database migration to update existing records

Fixes #1041

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 02:34:41 +02:00
Ahmed Bouhuolia
5caa4bce61 Merge pull request #1045 from bigcapitalhq/self-contained-e2e-github-action
feat(ci): self contained e2e GitHub action
2026-03-15 23:49:49 +02:00
Ahmed Bouhuolia
9b31210f6d wip 2026-03-15 21:14:27 +02:00
Ahmed Bouhuolia
2f45263263 feat(server): add Query DTOs for consistent filtering across modules
- Add GetBillsQuery.dto.ts, GetCreditNotesQuery.dto.ts, GetExpensesQuery.dto.ts
- Add GetItemCategoriesQuery.dto.ts, GetManualJournalsQuery.dto.ts
- Add GetPaymentsReceivedQuery.dto.ts, GetSaleEstimatesQuery.dto.ts
- Add GetSaleInvoicesQuery.dto.ts, GetSaleReceiptsQuery.dto.ts, GetVendorCreditsQuery.dto.ts
- Update DynamicFilterQuery.dto.ts with enhanced filter options
- Refactor controllers and services to use new Query DTOs
- Update SDK schema and sale-estimates types

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 08:50:15 +02:00
Ahmed Bouhuolia
3706e048b6 refactor(server): migrate ExchangeRates module to NestJS
- Convert TypeDI services to NestJS @Injectable() pattern
- Replace Express router with NestJS @Controller() decorators
- Migrate express-validator to class-validator DTOs
- Add Swagger/OpenAPI documentation decorators
- Fix import paths for TenantMetadata and ServiceError
- Add ExchangeRatesModule to AppModule imports
2026-03-14 05:16:06 +02:00
Ahmed Bouhuolia
06d1cf3119 feat: add response DTOs for CreditNoteRefunds and Resource modules
- Add ResourceMetaResponse DTO for resource metadata
- Update CreditNoteRefunds service with proper types
- Regenerate SDK types from updated OpenAPI schema
- Update SDK bank-rules, credit-notes, and organization modules

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 23:19:22 +02:00
Ahmed Bouhuolia
48e41da345 Merge pull request #1033 from bigcapitalhq/feat/credit-note-sdk-ts-utils
feat: add response DTOs for credit note modules and SDK types
2026-03-09 07:18:36 +02:00
Ahmed Bouhuolia
b59f40d295 feat: add response DTOs for credit note modules and SDK types 2026-03-09 07:12:10 +02:00
Ahmed Bouhuolia
ee2726c0c7 feat(server): add response DTOs for Payment Links, Stripe, Credit Notes and Inventory Cost 2026-03-09 06:35:02 +02:00
Ahmed Bouhuolia
96338cc215 chore(docker): upgrade pnpm version in Dockerfiles for server and webapp
- Updated pnpm from version 8.10.2 to 9.0.5 in both server and webapp Dockerfiles to ensure compatibility with the latest features and improvements.
2026-03-08 04:55:16 +02:00
Ahmed Bouhuolia
400fec3e98 refactor(docker): simplify Dockerfile by consolidating shared package copies
- Updated Dockerfiles for server and webapp to copy all shared packages in a single command, improving maintainability.
- Removed individual package copy commands for bigcapital-utils, pdf-templates, and email-components.
- Ensured that all shared packages are included automatically during the build process.
2026-03-08 04:49:10 +02:00
Ahmed Bouhuolia
8dd895b34f feat: add credit note status translations and manual journal default views
- Add credit note view status translations (draft, published, open, closed)
- Add Manual Journal default views for draft and published statuses
- Add DEFAULT_VIEW_COLUMNS constant for reusability

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-07 21:08:48 +02:00
Ahmed Bouhuolia
806b1c374f fix(currency): use currency_code instead of id in CurrencySelectList
The CurrencySelectList component was using 'id' as the valueAccessor,
which caused the component to return the numeric currency ID (e.g., 1007)
instead of the currency code string (e.g., 'THB').

This fix changes the valueAccessor from 'id' to 'currency_code' so that
the currency code string is correctly sent to the backend, which expects
@IsString() for the currencyCode field.

Fixes #1025
2026-03-07 20:35:00 +02:00
Ahmed Bouhuolia
6d1e93e84b fix(accounts): add missing dynamic list filter properties to GetAccountsQueryDto
Add missing viewSlug, filterRoles, stringifiedFilterRoles, searchKeyword,
columnSortBy, sortOrder, customViewId, page, and pageSize properties to
GetAccountsQueryDto to enable proper filtering when selecting table views
(Assets, Liabilities, Equity, Income, Expenses) on the Accounts Chart page.

Previously, the API received view_slug but didn't process it because the
DTO lacked these properties, causing all accounts to be returned instead
of filtering by the view's root_type.

Fixes #1023

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-07 20:23:49 +02:00
Ahmed Bouhuolia
e02e143157 fix(payment-received): allow decimal amounts in paymentAmount validation
Change @IsInt() to @IsNumber() for paymentAmount field in PaymentReceivedEntryDto
to allow recording payments with cents (e.g., $1,679.80).

Fixes #1016

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-06 06:31:55 +02:00
Ahmed Bouhuolia
7dd08d6141 feat(financial-statements): add new financial report DTOs and update controllers
- Introduced new DTOs for various financial reports including Balance Sheet, Cash Flow Statement, and Aging Summaries.
- Updated existing controllers to utilize the new DTOs and enhance OpenAPI documentation with proper schema references.
- Removed unnecessary query parameters from the Bank Accounts controller.
- Enhanced response structures for better data representation in reports.
2026-03-06 05:25:44 +02:00
Ahmed Bouhuolia
8659e41e92 feat(webapp): add react-query and react-query-devtools dependencies 2026-03-05 23:36:27 +02:00
Ahmed Bouhuolia
4d1aa0aa5b fix: update pnpm-lock.yaml 2026-03-05 23:29:03 +02:00
Ahmed Bouhuolia
631df56cee feat(sdk): add banking and vendor credits SDK utilities
- Add SDK types for bank rules, cashflow accounts, and vendor credits
- Update banking controllers with proper OpenAPI annotations
- Update vendor credits controllers with new endpoints and DTOs
- Enhance banking transaction handling for categorize, recognize, pending, and exclude operations
- Add vendor credit apply bills and refund functionality

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 23:06:44 +02:00
Ahmed Bouhuolia
4c059d610e feat(sdk-ts): add authentication fetch utils 2026-03-05 19:50:38 +02:00
Ahmed Bouhuolia
e3d3da7cd9 feat(sdk): move the generate sdk ts types to nestjs command 2026-03-04 00:20:46 +02:00
Ahmed Bouhuolia
92843c7240 fix: update the pnpm-lock.yaml 2026-03-03 23:44:47 +02:00
Ahmed Bouhuolia
e3c55c5d6f feat(sdk): add OpenAPI export script and TypeScript SDK package
- Add export-openapi.ts script for server OpenAPI spec export
- Add shared/sdk-ts package with generated API clients (accounts, bills, customers, vendors, etc.)
- Update Customers and Vendors controllers
- Update ReportsEventsTracker
- Update .gitignore, package.json, and pnpm-lock

Made-with: Cursor
2026-03-03 23:26:24 +02:00
Ahmed Bouhuolia
28786712ea fix(server): Fix UnlinkAttachment model reference bug
Add missing function invocation on LinkModel to properly call query method.
The model reference was missing parentheses to invoke the factory function.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 22:35:21 +02:00
Ahmed Bouhuolia
29288c74ad fix(webapp): Money In dialog fields not showing after account selection
Fixed the Money In dialog where form fields were not appearing after
selecting the transaction type and current account.

The issue was that AccountsSuggestField (non-Formik version) was being
used instead of FAccountsSuggestField. The non-Formik version doesn't
update Formik's form values, so the condition in MoneyInContentFields
that checks values.cashflow_account_id was never satisfied.

Also updated MoneyOutDialog to use onItemChange prop for consistency.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 22:01:52 +02:00
Ahmed Bouhuolia
b98485c5f3 fix(server): PDF template logo not showing on reopen
Generate presigned URL for companyLogoKey when retrieving PDF template
to allow the logo to display when reopening the branding template drawer.

- Inject GetAttachmentPresignedUrl service in GetPdfTemplateService
- Generate companyLogoUri from companyLogoKey in template attributes
- Add companyLogoUri to transformer included attributes

Fixes the issue where logo uploads and saves but doesn't show when
reopening the branding template customization drawer.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 05:22:01 +02:00
Ahmed Bouhuolia
e2aee81a92 Merge branch 'main' into develop 2026-03-01 04:14:58 +02:00
Ahmed Bouhuolia
6089e41278 refactor(webapp): use FinancialSheet in financial report tables and simplify component
Made-with: Cursor
2026-03-01 04:08:26 +02:00
Ahmed Bouhuolia
2065afe108 fix(webapp): remove duplicated isNewMode from context 2026-02-27 04:46:59 +02:00
Ahmed Bouhuolia
7051256e60 fix(webapp): branch and warehouse select not showing saved values in edit mode
Fixed an issue where branch and warehouse select fields were not displaying
saved values when editing existing transactions. The useSetPrimaryBranchToForm
and useSetPrimaryWarehouseToForm hooks were overwriting saved values with
primary defaults on every form load.

Changes:
- Added isNewMode check to useSetPrimaryBranchToForm hook
- Added isNewMode check to useSetPrimaryWarehouseToForm hook
- Updated InvoiceFormProvider to expose isNewMode in context

Affected forms:
- Sales: Invoice, Estimate, Receipt, CreditNote, PaymentReceived
- Purchases: Bill, VendorCredit, PaymentMade
- Expense
- MakeJournal (Manual Journal)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 04:39:24 +02:00
Ahmed Bouhuolia
3575d54efa fix: add attachment support for all transaction types
Fixed attachments not showing in edit forms for various transaction types by:

1. Adding @InjectAttachable() decorator to models:
   - SaleReceipt, SaleEstimate, CreditNote, PaymentReceived
   - Bill, BillPayment, VendorCredit
   - ManualJournal, Expense

2. Fixing transformers to include attachments in API responses:
   - SaleReceiptTransformer, PaymentReceivedTransformer

3. Registering missing event subscribers in Attachment.module.ts:
   - AttachmentsOnSaleReceipts, AttachmentsOnSaleEstimates

4. Fixing DocumentLink model relation mapping:
   - Changed Document.default to Document for proper module export

5. Fixing PaymentReceived model_ref consistency:
   - Changed from 'PaymentReceive' to 'PaymentReceived' to match class name

6. Adding missing withGraphFetched('attachments') to GetPaymentReceived.service.ts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-26 23:16:12 +02:00