Changelog
Enterprise API
Patch Changes
- - The API now serves requests when the
license, licensetoggle or licenselimit table is missing.
- At startup, the API logs an error if the license tables are missing on a schema whose
f_database_version() is 4300 or higher, and warnings below 4300.
Patch Changes
- -
InventoryOption.choices - An option's dynamic choice query now runs once per request, not once per option value or serial (EEW-678).
Inventory.serials - Filtering by status evaluates f_serial_status once per serial instead of twice (EEW-678).
- Fix a bug preventing logging to be set at the desired level.
Patch Changes
- - Fixed "Illegal mix of collations" errors, such as in the part screen's serial search, by matching each new database connection's collation to its utf8mb4 database (EEW-682).
- - Fixed refreshed OAuth access tokens losing the scope the user granted, which made MCP clients such as the ITrack Enterprise connector fail with
SCOPE_ERROR after their first token refresh (EEW-688).
Patch Changes
- - Security:
updateInventorySerial performed no permission check at all, so any authenticated session could renumber or relocate a serial at any store (EEW-675). It now requires "Can Save Parts" at the parent Inventory's store, checked before anything is changed.
- Fixed
updateInventorySerial failing with "Parent inventory not set" whenever location was supplied. The location is now looked up at the parent Inventory's store, so a real location with that name is used instead of falling back to a virtual one.
Minor Changes
- Added the ability to ignore the 'taxable' checkbox on Sales Orders when using the TaxJar integration using a setting.
- Added the ability to skip Sales Order lines if the inventory type tax code is 'SKIP'.
- Added additional license call sites.
Patch Changes
- Changed
InventoryFilter.vendorLeadTime from IntFilter to Decimal2Filter.
- Fixed Inventory location changes being silently discarded (EEW-663). Location quantity changes now go through
p_inventory_location_adjust_quantity, and a location's rank and permanence are saved alongside them. Location quantity changes on a non-depleting part (deplete = 'False') are still ignored, by design.
- Fixed creating a permanent Inventory location at zero quantity not creating the location.
- Fixed making an Inventory location permanent in the same update that set its quantity to zero deleting the location.
- Fixed clearing an Inventory location's permanent flag while setting its quantity to zero leaving it in place as a permanent location.
- Fixed
updateInventory allowing a duplicate location when the new location was given by name rather than by id.
- Fixed reordering an Inventory location landing it one position short of where it was moved to. Attachment reordering was affected by the same defect.
- Fixed a rank-only or permanence-only Inventory location update failing with "Quantity must be a number!".
- Fixed an explicit
quantity: null on an Inventory location update zeroing the location instead of leaving it alone.
- Fixed a new Inventory location with no rank being inserted at the front of the stocking list instead of appended to the end. This applied to
updateInventory, to creating a part with several locations (which saved them in reverse order), and to the locations generated from a serialized part's serials.
- Security:
updateInventory resolved its Parts permissions against the session's store rather than the store of the Inventory being edited, so a user granted a permission at their own store could make that change to a part at a store where they were denied it. Permissions are now resolved at the Inventory's store. The same "Can Save Parts" check also runs when creating a part and when updating a vehicle's unit inventory, and both now check it at the Inventory's store too.
- Security:
createInventorySerial performed no permission check at all. It now requires "Can Save Parts" at the parent Inventory's store.
- -
createTaxTransaction now applies the same tax-code preparation as taxQuote. Previously a line flagged non-taxable was excluded from the quote but still included in the committed tax transaction, so the customer was billed tax the quote did not show.
- The 'SKIP' tax code is now matched case-insensitively, the same way 'SHIP' and 'FEE' already were. An inventory type coded 'Skip' or 'skip' is now suppressed.
- DS Tax now honours 'SKIP' as well. Previously the code was sent to DS Tax as a literal tax code, which it does not recognise.
BASE_CLIENT_URL and OAUTH_ISSUER now have any trailing slash stripped. A trailing slash previously produced an MCP resource of https://host//mcp against an expected https://host/mcp (rejected as invalid_audience) and a CORS_ORIGIN entry no Origin header could match.
- Fixed a bug there
Mutation.createTaxTransaction was still paying attention to the taxable flag when it was meant to ignore.
- DSTax now also strips any lines with tax code 'SKIP'
- Made the 'SKIP' special code caps-insensitive
- Added a setting to ignore the 'taxable' checkbox when quoting taxes.
- Added ability to set an inventory type's tax code to 'SKIP' to suppress sending that line to TaxJar.
Patch Changes
- Optimized
Manufacturer.models in order to avoid OOM errors caused by large data sets.
- Changed
Vendor.leadTime from Int to Decimal2.
- Further optimized
Manufacturer.models in order to reduce load times.
Newer Older