@arathron/n8n-nodes-zoho-books
Version:
n8n community nodes for Zoho Books and Zoho Inventory API integration - Complete CRUD operations for Sales Orders, Invoices, Items, Vendors, Credit Notes, Payments, Purchase Orders, Bills, Composite Items, and Assemblies
456 lines (369 loc) • 22.2 kB
Markdown
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [2.7.7] - 2025-01-08
### Added
- **Reason Field for Sent Invoice Updates**: Added required reason field when updating sent invoices to comply with Zoho Books API requirements
- **NEW FIELD**: Added "Reason for Update" field in invoice update operation UI
- **VALIDATION**: Automatically validates reason is provided when updating sent invoices
- **ERROR HANDLING**: Enhanced error messages for Zoho error code 110701 (reason required for sent invoice updates)
- **USER EXPERIENCE**: Clear guidance when reason is missing for sent invoice updates
### Fixed
- **Form-data Encoding**: Requests that only contain `JSONString` are now sent as form data (URL-encoded / multipart) instead of raw JSON.
- Automatically handled in `zohoApiRequest` when the body shape is `{ JSONString: ... }`.
- Ensures Zoho Books interprets payload correctly on create/update endpoints.
## [2.7.6] - 2025-08-04
### Fixed
- **Form-data Encoding**: Requests that only contain `JSONString` are now sent as form data (URL-encoded / multipart) instead of raw JSON.
- Automatically handled in `zohoApiRequest` when the body shape is `{ JSONString: ... }`.
- Ensures Zoho Books interprets payload correctly on create/update endpoints.
## [2.7.5] - 2025-01-28
### Fixed
- **Invoice Date Update Issue**: Fixed critical bug where invoice date updates were being silently ignored by Zoho API
- **ROOT CAUSE**: Zoho Books API requires complete payload with all mandatory fields for successful updates
- **COMPREHENSIVE SOLUTION**: Implemented fetch-then-update pattern that includes all required fields:
- `customer_id` (required at all times)
- `currency_id` (required for foreign currency invoices)
- `line_items` (at least one item required)
- `date` and `due_date` (must be a valid pair)
- All other fields being updated
- **REMOVED ARTIFICIAL LIMITS**: Eliminated 100-character JSONString limit that was preventing proper updates
- **ENHANCED ERROR HANDLING**: Added proper validation for missing invoices and line items
- **BACKWARD COMPATIBLE**: Maintains existing behavior while ensuring date updates work correctly
- **COMPREHENSIVE TESTS**: Updated both unit and integration tests to reflect new behavior
## [2.7.4] - 2025-01-28
### Fixed
- **Invoice Update JSONString Limit**: Fixed "JSONString has more than 100 characters" error (Zoho API error code 15)
- **100-CHARACTER LIMIT**: Implemented smart payload sizing to stay under Zoho's JSONString character limit
- **MINIMAL PAYLOAD**: Creates optimal payload with essential fields (customer_id) and update fields only
- **ADAPTIVE LOGIC**: Dynamically adjusts payload size by removing optional fields when approaching limit
- **ERROR HANDLING**: Clear error messages when update data exceeds limit constraints
- **MAINTAINED FIX**: Preserves the date update fix while complying with API character restrictions
- **COMPREHENSIVE TESTS**: Updated all tests to verify 100-character limit compliance
## [2.7.3] - 2025-01-28
### Fixed
- **Invoice Update Date Issue**: Fixed critical bug where invoice date updates were being silently ignored
- **MANDATORY FIELDS**: Modified invoice update to fetch existing invoice data first and include all mandatory fields (customer_id, line_items)
- **API COMPLIANCE**: Ensures Zoho Books API requirements are met for successful date updates
- **DATA PRESERVATION**: Existing line items and essential fields are preserved during updates
- **BACKWARD COMPATIBLE**: Maintains existing behavior while fixing the date update issue
- **COMPREHENSIVE TESTS**: Updated test suite to verify the new fetch-then-update pattern
- **ERROR HANDLING**: Added proper error handling when invoice is not found during update
## [2.7.2] - 2025-01-28
### Fixed
- **Invoice Update Date Handling**: Fixed timezone-related date issues for IST (India Standard Time)
- **DATE PROCESSING**: Improved date field processing to avoid timezone conversion issues
- **IST SUPPORT**: All dates now properly handled assuming India Time zone (IST +05:30)
- **TIMEZONE SAFETY**: Prevents off-by-one day errors when updating invoices with ISO datetime strings
- **STRING EXTRACTION**: Uses string slicing instead of Date constructor to maintain calendar date accuracy
- **COMPREHENSIVE TESTS**: Added unit tests covering various date input formats
## [2.7.1] - 2025-01-26
### Fixed
- **UI Configuration**: Fixed "Mark as Sent" operation to only appear for Invoice resources
- **RESOURCE FILTERING**: Separated Invoice operations from general operations list
- **USER EXPERIENCE**: "Mark as Sent" operation now only shows when Invoice resource is selected
- **INVOICE ID FIELD**: Invoice ID parameter now properly displays for markAsSent operation
## [2.7.0] - 2025-01-26
### Added
- **Invoice Mark as Sent Operation**: Added ability to mark invoices as sent
- **NEW OPERATION**: "Mark as Sent" operation for invoices to track delivery status
- **API ENDPOINT**: POST `/invoices/{invoice_id}/status/sent` integration
- **STATUS TRACKING**: Changes invoice status to "sent" for workflow management
- **DOCUMENTATION**: Complete operation guide with examples in OPERATIONS.md
- **TESTING**: Full unit test coverage for markAsSent functionality
### Enhanced
- **Invoice Resource**: Added markAsSent method to Invoice.resource.ts
- **Node Interface**: Updated ZohoBooks.node.ts with new operation option
- **User Experience**: Clear operation description and validation
## [2.6.0] - 2025-01-08
### Added
- **Invoice Update Operations**: Enhanced update functionality with comprehensive field support
- **NEW FIELDS**: Added editable fields for invoice updates:
- Date (invoice date in YYYY-MM-DD format)
- Invoice Number (custom invoice numbering)
- Place of Supply (for tax calculations)
- GST Treatment (business_gst, consumer, overseas, sezwp, sez, unregistered)
- GST Number (GSTIN for tax compliance)
- Due Date, Reference Number, Notes, and Terms
- **LINE ITEMS**: Added support for updating invoice line items during update operation
- **FLEXIBLE UPDATES**: All update fields are optional - only provide fields you want to change
- **GST COMPLIANCE**: Enhanced support for Indian tax requirements with GST treatment options
- **DOCUMENTATION**: Comprehensive examples and workflow guides for invoice updates
- **TESTING**: Full unit and integration test coverage for all new update fields
### Enhanced
- **Invoice Resource**: Improved update method to handle new field collection seamlessly
- **User Experience**: Clear field descriptions and validation messages
- **API Integration**: Maintains backward compatibility while adding powerful new capabilities
## [2.5.5] - 2025-01-08
### Fixed
- **Invoice Operations**: ULTIMATE FIX for "Create invoice from sales order" operation
- **CRITICAL CHANGE**: Changed `salesorder_id` from request body to query parameter as per Zoho API documentation
- Now sends `salesorder_id` as URL query parameter: `/invoices/fromsalesorder?salesorder_id=123456`
- This resolves the "Invalid value passed for salesorder_id" error (code 4)
- Enhanced sales order validation to check status before invoice creation
- Improved error handling with more specific validation messages
- Updated all test cases to reflect the correct API usage
## [2.5.4] - 2025-01-08
### Fixed
- **Invoice Operations**: Previous attempt using body parameters (superseded by 2.5.5)
## [2.5.3] - 2025-01-08
### Fixed
- **Invoice Operations**: Previous iteration (superseded by 2.5.4)
## [2.5.2] - 2025-01-08
### Fixed
- **Invoice Operations**: Incorrect attempt using `salesorder_ids` parameter (superseded by 2.5.3)
## [2.5.1] - 2025-01-08
### Fixed
- **Invoice Operations**: Partial fix for "Create invoice from sales order" operation (superseded by 2.5.2)
## [2.4.0] - 2025-01-22
### Added
- **Invoice Operations**: Complete invoice management functionality
- Added new Invoice resource with full CRUD operations (create, get, getAll, update, delete, list)
- **Create Instant Invoice from Sales Order**: New operation to convert sales orders to invoices instantly
- Uses Zoho's `/invoices/fromsalesorder` endpoint for efficient conversion
- Supports additional fields like due date, notes, terms, discount, and exchange rate
- Includes automatic sales order validation before invoice creation
- Provides detailed error handling and user-friendly error messages
- Added comprehensive invoice utility functions for validation and data normalization
- Full test coverage with 26+ unit tests and 5 integration tests
- Enhanced error handling with context-aware error messages
### Enhanced
- **Node Structure**: Updated ZohoBooks node to properly handle invoice operations
- Added dynamic Invoice resource importing for better performance
- Integrated invoice operations with existing node architecture
- Improved parameter validation for invoice-specific fields
## [2.3.2] - 2025-03-08
### Fixed
- **Contact Date Filtering**: Fixed Contact getAll operation with proper Zoho API parameters
- Added `filter_by: 'Last Modified Time'` parameter required by Zoho Books API
- Updated date formatting to use ISO-8601 timestamps instead of plain dates
- Fixed "Invalid value passed for last_modified_time" error when using "Updated After" filter
- Enhanced date handling to support both date-only and full timestamp inputs
- Improved empty/whitespace parameter validation to prevent API errors
### Enhanced
- **Date Formatting**: Added new `formatDateTime()` function for ISO-8601 timestamp conversion
- Converts any valid date/time input to proper ISO-8601 format
- Handles plain dates (YYYY-MM-DD) by adding time component
- Removes milliseconds for Zoho API compatibility
- Maintains backward compatibility with existing `formatDate()` function
### Technical
- **API Compatibility**: Updated Contact getAll operation to use correct Zoho Books API parameters
- **Test Coverage**: Updated all Contact-related tests to reflect new API parameter structure
- **Error Handling**: Improved validation to prevent empty parameter errors
- **Type Safety**: Enhanced type checking for date parameters and API responses
## [2.3.1] - 2025-03-08
### Fixed
- **Contact Date Filtering**: Fixed Contact getAll operation error with empty `last_modified_time` parameter
- **Parameter Validation**: Improved date filtering logic to only include `last_modified_time` when valid date is provided
- **Error Handling**: Added proper validation for empty and whitespace `updatedAfter` parameters
- **Date Formatting**: Enhanced `formatDate` function to handle edge cases better
- **Test Coverage**: Fixed test expectations to match actual function call signatures
- **Edge Cases**: Added comprehensive tests for empty and invalid date parameter handling
### Technical
- **Test Suite**: All 27 ContactsUtils tests now passing with proper error handling
- **Validation**: Enhanced parameter validation in getAllContacts function
- **Type Safety**: Improved type checking for date parameters
## [2.3.0] - 2025-03-08
### Added
- **Contact Search by Name**: New search operation for Contact resource
- Search contacts by full or partial name using Zoho Books search API
- Returns normalized contact data in camelCase format
- Includes raw API response for advanced processing
- Supports partial name matching (e.g., "John" finds "John Doe", "John Smith")
- Auto-pagination for complete search results
- Comprehensive error handling and validation
### Enhanced
- **Contact Operations**: Extended Contact resource with search functionality
- Added "Search" operation to Contact resource options
- New "Search Name" parameter for contact name search
- Integrated with existing Contact utilities and normalization
- Maintains consistency with other Contact operations
### Documentation
- **Search Documentation**: Added search operation to OPERATIONS.md Contact section
- **JSON Guide Update**: Enhanced CONTACT_JSON_GUIDE.md with search examples
- **Response Examples**: Detailed examples of search request and response formats
- **Best Practices**: Guidelines for effective contact searching
### Testing
- **Search Tests**: Comprehensive unit tests for search functionality
- Tests for successful search with multiple results
- Error handling tests for empty search terms
- Mock coverage for search API calls and response handling
## [2.2.1] - 2025-03-08
### Fixed
- **Contact Date Filtering**: Fixed Contact getAll operation error with empty `last_modified_time` parameter
- Improved date filtering logic to only include `last_modified_time` when valid date is provided
- Added proper validation for empty and whitespace `updatedAfter` parameters
- Prevents API errors when no date filter is specified
## [2.2.0] - 2025-01-15
### Added
- **NEW FEATURE**: Contact Resource with Full CRUD Operations
- Complete Contact management with Create, Read, Update, Delete operations
- Support for all Contact fields: name, company, email, phone, website, currency, balance
- Billing and Shipping address management with structured address fields
- Custom fields support for flexible contact data
- Pagination support with "Return All" and "Limit" options
- Date filtering with "Updated After" parameter
- Normalized response format with camelCase keys for easier integration
- Comprehensive error handling and validation
- Full TypeScript support with proper type definitions
### Enhanced
- **Contact Utilities**: New `ContactsUtils.ts` with helper functions
- `buildContactPayload()` for parameter to API payload conversion
- `normalizeContact()` for response normalization
- `createContact()`, `getContact()`, `getAllContacts()`, `updateContact()`, `deleteContact()` API functions
- Proper error handling with NodeApiError for validation failures
- Support for address structures and custom fields
### Documentation
- **Contact Operations Guide**: Added comprehensive Contact section to OPERATIONS.md
- **Contact JSON Guide**: New CONTACT_JSON_GUIDE.md with detailed examples
- **Field Descriptions**: Complete documentation of all Contact fields and their usage
- **Integration Examples**: CRM and e-commerce integration examples
- **Best Practices**: Contact naming, email validation, address formatting guidelines
- **Troubleshooting**: Common issues and validation checklist
### Testing
- **Unit Tests**: Comprehensive test coverage for ContactsUtils functions
- **Resource Tests**: Full test suite for Contact resource operations
- **Error Handling**: Tests for validation errors, API errors, and edge cases
- **Mock Coverage**: Proper mocking of API calls and response handling
### Technical Changes
- Added Contact resource to node JSON configuration
- Extended execute method with Contact operation handling
- Added Contact fields with proper displayOptions and validation
- Implemented dynamic import for ContactsUtils to maintain performance
- Added Contact to resource options and operation display conditions
## [2.1.1] - 2025-01-15
### Fixed
- **Customer Dropdown Population**: Improved customer field loading in Form and Hybrid modes
- Now specifically queries for `contact_type=customer` to ensure proper customer list
- Added fallback to all contacts if no customers found
- Enhanced error handling to prevent UI issues when API calls fail
- Better reliability for customer dropdown pre-population
## [2.1.0] - 2025-01-15
### Added
- **Enhanced Form Fields**: Added Sales Order Date and Sales Order Number fields to Form and Hybrid input methods
- Sales Order Date: Document date field with automatic YYYY-MM-DD formatting
- Sales Order Number: Custom sales order number field (auto-numbered if left blank)
- Both fields are available in Form and Hybrid input methods
- In Hybrid mode, form fields override corresponding JSON values for better user control
- **Date Formatting Utility**: New `formatDate` helper function for consistent date formatting across input methods
### Enhanced
- **Hybrid Method**: Form fields now take precedence over JSON data for date and sales order number
- **Customer Field**: Pre-populated customer dropdown now consistently available in Hybrid mode
- **Documentation**: Updated sales order guide with new field descriptions and usage examples
## [1.4.1] - 2024-12-19
### Fixed
- **Sales Order Search by Number**: Fixed exact matching issue where partial matches were returned
- Now performs client-side filtering to ensure exact sales order number matches
- Uses dual approach: criteria search first, then fallback to search_text with exact filtering
- Prevents returning wrong sales orders with similar numbers (e.g., searching for "404-3495320-8661951" no longer returns "408-0914562-5185938")
- Enhanced test coverage for exact matching scenarios
## [1.4.0] - 2024-12-19
### Added
- **Enhanced Sales Order Get Operation**: Added flexible search capabilities
- New "Search Type" option allows searching by Sales Order ID or Sales Order Number
- Search by Sales Order Number uses Zoho's criteria API for exact matches
- Graceful "not found" handling: Returns `{ sales_order_found: false }` instead of throwing errors
- Backward compatible: Existing workflows using ID search continue to work unchanged
- New utility function `findSalesOrderByNumber()` for reusable number-based lookups
- Comprehensive test coverage for both search modes and edge cases
### Fixed
- Added legacy compatibility exports for existing test infrastructure
- Improved error handling for resource not found scenarios
- Added missing `getTaxes` load options method for form dropdowns
## [1.3.11] - 2024-08-02
### Added
- **NEW FEATURE**: Get Item by SKU operation for both Zoho Books and Zoho Inventory
- Added `getBySku` operation to Item resource in both nodes
- Supports case-insensitive SKU code lookup
- Comprehensive error handling for edge cases:
- Empty or whitespace SKU codes
- SKU not found scenarios
- Multiple items with duplicate SKUs
- Invalid API response handling
- Performance optimized with single API call and client-side filtering
- Full test coverage with 40+ unit tests covering all scenarios
### Enhanced
- Added Item resource support to ZohoInventory node with full CRUD operations
- Improved error messages with specific HTTP status codes
- Added support for special characters and Unicode in SKU codes
- Enhanced documentation with usage examples and troubleshooting guide
### Technical Changes
- Created `getItemBySku` helper function in GenericFunctions for both nodes
- Added comprehensive TypeScript type definitions
- Implemented proper error wrapping with NodeApiError
- Added SKU input field with validation and placeholder text
- Extended execute methods to handle new getBySku operation
## [1.2.7] - 2024-12-19
### Fixed
- **CRITICAL**: Fixed parameter dependency resolution error for Bill Create Record operation
- Resolved "Could not resolve parameter dependencies. Max iterations reached!" error
- Split single additionalFields collection into resource-specific collections to eliminate displayOptions on child parameters
- Updated all execute method references to use new parameter names
- Added proper TypeScript type casting for all additionalFields parameters
### Technical Changes
- Replaced single additionalFields collection with separate collections for each resource:
- billAdditionalFields
- invoiceAdditionalFields
- salesOrderAdditionalFields
- purchaseOrderAdditionalFields
- itemAdditionalFields
- compositeItemAdditionalFields
- vendorAdditionalFields
- paymentAdditionalFields
- creditNoteAdditionalFields
- Removed all displayOptions from child parameters in collection/fixedCollection types
- Added proper IDataObject type casting for all additionalFields parameters
## [Unreleased]
### Added
- Initial release of n8n-nodes-zoho-books
- OAuth2 authentication support for all Zoho data centers
- Support for 6 main resources:
- Sales Orders - Create, read, update, and void operations
- Invoices - Full CRUD operations with line items support
- Items - Complete product/service management
- Payments - Customer payment recording and tracking
- Vendors - Supplier management functionality
- Credit Notes - Returns and adjustments handling
- Rate limiting with automatic retry and exponential backoff
- Comprehensive error handling with detailed messages
- Load options for dynamic dropdowns (customers, items, taxes)
- Pagination support for all list operations
- Filtering capabilities for date ranges and status
- Additional fields support for extended functionality
- Full test coverage with unit and integration tests
### Security
- Secure OAuth2 implementation
- Organization ID validation
- Proper credential handling
## [0.1.0] - 2024-01-XX
### Added
- Beta release for testing
- Core functionality for all 6 resources
- Basic documentation and examples
### Known Issues
- Some advanced Zoho Books features not yet implemented
- Custom fields support is limited
## Roadmap
### Version 0.2.0 (Planned)
- [ ] Purchase Order support
- [ ] Bill management
- [ ] Bank transaction reconciliation
- [ ] Journal entries
- [ ] Enhanced custom field support
### Version 0.3.0 (Planned)
- [ ] Bulk operations support
- [ ] Webhook trigger node
- [ ] Report generation
- [ ] Tax configuration management
- [ ] Multi-currency support
### Version 1.0.0 (Planned)
- [ ] Complete API coverage
- [ ] Performance optimizations
- [ ] Advanced filtering options
- [ ] Comprehensive error recovery
- [ ] Production-ready release
## Contributing
Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to contribute to this project.
## Support
For issues and feature requests, please use the [GitHub issue tracker](https://github.com/your-username/n8n-nodes-zoho-books/issues).