Hawaii - Minor (22.16)

Release Summary


Kaptio is proud to announce this minor release for Hawaii. This release is intended to address issues with previous releases.

See Minor Changes and Bug Fixes for more information.


Sandbox Availability Date


2026-01-16


Release Type



Deployment Guide


See this page for the Hawaii Deployment guide.


Minor Changes


Feature: Bulk Operations


Bulk Manager for Operational itineraries (KT-13799)

Bulk Operations Enhancements

Itinerary Item Replacement - Field Preservation

Enhanced data preservation during bulk replacement operations for Operational Itineraries and Price Models

When replacing itinerary items in bulk operations, the system now automatically preserves critical operational fields from the original items to ensure business continuity:

  • Group Travel Settings: Quantity behaviour, group size ranges (from/to), and pricing behaviour are now carried forward to replacement items

  • Configuration Assignments: All itinerary configuration assignments are automatically transferred to the new items, maintaining your operational setup

  • Intelligent Defaults: When original values are not set, the system applies appropriate defaults (e.g., 'Auto' for quantity behaviour) Scope: This preservation applies exclusively to:

  • Operational Itineraries

  • Price Model Itineraries Benefits:

  • Eliminates manual reconfiguration after bulk replacements

  • Maintains pricing and inventory logic consistency

  • Preserves group touring operational parameters

  • Reduces risk of data loss during service replacements JSON format for replacing itinerary items

[{
    "oldItineraryItemId": "a25S9000002bvJ7IAI",
    "fields": [
        { "fieldApiName": "KaptioTravel__Item__c", "newValue": "a1gS9000007eVu7IAE" },
        { "fieldApiName": "KaptioTravel__Price_Category__c", "newValue": "a3AS9000002VfefMAC" }
    ],
    "oldFields": [
        { "fieldApiName": "KaptioTravel__ConfirmationStatus__c", "newValue": "Confirmed" },
        { "fieldApiName": "KaptioTravel__ConfirmationStatusId__c", "newValue": "11" }
    ]
}]
  • oldItineraryItemId - actual id of the itinerary item you want replaced

  • fields - a collection of fields you want to update on the new item you will create. In this example, you’re setting the new record’s lookup to service (Item__c) and price category (Price__Category__c). You can set as many fields as you like; just make sure you set the proper API name, including the namespace prefix, and that the value is correct.

  • oldFields - the mode of the itinerary item you’re replacing will be set to deleted, but it will still be there. You can use “oldFields” collection to set the values of fields on the old item. Note: The format of this JSON is very rigid and not user friendly. An extra comma or a missing bracket will cause the whole process to fail. That is by design. Be careful what you paste in.


Itinerary Item Insertion - Standalone Service Support

New capability to insert standalone services directly without requiring package components

The bulk insert operation now supports two insertion modes:

  1. Package Component Insertion (existing): Insert items linked to package components with full package metadata

  2. Standalone Service Insertion (new): Insert individual services directly by specifying:

    • Service (Item) ID

    • Price Category ID

    • Supplier and invoice-to account

    • Unit of measure (UOM)

    • Pricing and date parameters Key Features:

    • Automatic supplier and currency resolution from the service definition

    • Price category validation to ensure it matches the selected service

    • Automatic breakdown group assignment based on service type

    • Full support for occupancy, pricing, and inventory checks Use Cases:

    • Add standalone accommodation, transportation, or activity items in bulk

    • Populate itineraries with services outside of package structures

    • Streamline manual service insertion workflows JSON format for inserting a new item:

{
    "itemId": "a1gS9000007eVuUIAU",
    "priceCategoryId": "a3AS9000002VfhXMAS"
}

To insert a new itinerary item, a minimum of two fields need to be provided:

  1. Id of the service

  2. Price category Id (price category needs to belong to the service, otherwise it makes no sense) You can set other fields as well. Refer to the original [https://kaptio.atlassian.net/browse/KT-12137](https://kaptio.atlassian.net/browse/KT-12137) ticket for clues on syntax for adding those additional fields. Some fields that can be set: “supplierId“, “invoiceToId“, “supplierCurrencyIsoCode“


Code Quality & Maintainability Improvements

Internal refactoring to improve system reliability and reduce technical debt

  • Centralized common bulk operation logic into reusable helper methods

  • Enhanced error handling with descriptive exception messages

  • Improved code organization and readability

  • Expanded test coverage for edge cases and error scenarios These improvements ensure faster feature development, easier troubleshooting, and more reliable bulk operations.


Technical Details (for administrators)

Updated Default SOQL Queries

The following bulk operations now include additional fields in their default queries:

  • Replace Itinerary Items

  • Pre/Post Go-Live Operations

New fields queried:

  • Item__r.Supplier__c

  • QuantityBehaviour__c

  • GroupSizeFrom__c

  • GroupSizeTo__c

  • PricingBehavior__c Custom SOQL statements are automatically validated and these fields are added if missing.

Trigger Behavior Change

The ItineraryItems before-insert trigger now preserves QuantityBehaviour__c values when explicitly provided by upstream logic (e.g., bulk replacement flows), only defaulting to 'Auto' when the field is null.


Compatibility Notes

  • All changes are backward compatible with existing bulk operations

  • No action required for existing configurations or scheduled jobs

  • Custom integrations using bulk operations will benefit from enhanced field preservation automatically ---

Preserve Field Values on Itinerary Item Replacement (KT-13896)

When operations teams replace itinerary items in Operational Itineraries or Price Models using bulk operations, critical operational and pricing configuration fields must be preserved to maintain business continuity. Previously, these field values were lost during replacement operations, requiring manual reconfiguration and creating risk of data inconsistency.

This enhancement ensures that key group travel and pricing behavior settings automatically transfer from the removed item to the newly inserted item, eliminating manual reconfiguration and maintaining operational integrity.

When replacing itinerary items in Operational Itineraries or Price Models, the following critical fields now automatically retain their values from the removed item to the newly inserted item:

Field Purpose

Quantity Behaviour

Controls how quantities are calculated for group bookings

Group Size From

Minimum group size threshold

Group Size To

Maximum group size threshold

Pricing Behaviour

Defines how pricing is applied based on group sizes


Feature: Passenger Grid, Payments


Introduce a spinner on Passengers and Payment schedule tab (ST-2440)

A spinner was added when first opening Passengers and Payments tabs to indicate the tab is loading.


Feature: Pricing controls


Pricing controls implementation with Discount__c object (KT-13738)

Added long-term Pricing Controls Discounts with a configuration screen


Add Route filter to the Pricing controls search tab (KT-13803)

Added filtering by route in Pricing Controls


"Discount configurations" tab in Pricing Controls app (KT-13828)

Added view screen for long term Pricing Controls discounts


Create and Edit discounts actions in "Discount configurations" tab (KT-13829)

Pricing controls: Added create/edit to long term discounts


Regroup search tab on Main screen in Pricing controls (KT-13842)

Pricing controls: Moved the search bar to the left side of the screen


Bug Fixes


Payment Information Modal - Email Receipt Functionality and Validation Issues (KT-13280)

Improved the checkbox help text so users can understand if they will receive the confirmation email or not.


Cancel button in Edit Supplier Agreement popup does not work as expected (KT-13380)

Issue Resolved

The Cancel button in the Edit Supplier Agreement popup now properly discards changes and restores original values. Previously, modifications made to the form would remain visible even after clicking Cancel, causing confusion about which values were actually saved.

Impact

When editing a Supplier Agreement, clicking Cancel will immediately revert all fields to their saved values. The form will consistently display the correct saved data when reopened, eliminating confusion caused by unsaved changes persisting in the interface.

Example

When the Agreement Type is changed from "Commission" to "Net Rate" and Cancel is clicked, the form now correctly reverts to displaying "Commission" rather than incorrectly showing "Net Rate" on subsequent edits.


User can select --None-- picklist value in Service Level Mode but not save it (KT-13710)

The fix ensures --None-- will not be shown as an option if the field is populated.

Note that, due to backward compatibility, this field is not required and can be set to null. In that case, --None-- will be shown as the picklist value. It cannot be saved like that, and an error will be displayed until the user selects an option.


UI improvements on Passenger tab on Operational Itinerary (KT-13761)

Several UI issues were fixed:

  • Error messages were being cut off and couldn’t be read properly.

  • Form fields were overlapping important action buttons (Save and Cancel).

  • The date picker for Date of Birth was limiting date selection, making it difficult to enter passenger information.

Issue 1: Error Messages Not Fitting in Fields

When validation errors occurred (such as removing a required value from "Channel" or entering an incorrect value in "Person Account"), the error messages would be truncated or overflow the field boundaries, making them difficult or impossible to read.

Issue 2: Date of Birth and Gender Fields Overlapping Buttons

The "Date of Birth" and "Gender" fields were positioned in a way that caused them to overlap the "Cancel" and "Save" buttons at the bottom of the form. This made it difficult to:

  • Click the Save or Cancel buttons

  • See if buttons were enabled or disabled

  • Complete the form submission workflow smoothly

Issue 3: Limited Date Selection in Date of Birth Picker

The date picker for Date of Birth was not showing all available dates, making it difficult to select birth dates for passengers, especially for:

  • Older passengers (dates far in the past)

  • Children or infants (recent dates)

  • Passengers born in certain months or years


Incorrectly sorting by occupancy rate (KT-13805)

Fixed sorting for occupancy rate column


Component Option Departure Assignment Modal displaying deleted Component Options (KT-13807)

Ensures only active (IsDeleted__c = false) component options are displayed in the “Assign Component Options to Departure” modal.


Dates are populated instead of names after Passenger import (KT-13808)

We now prevent reference codes (2024-001), room numbers, and other dash-separated identifiers from being converted to dates while still handling actual date fields correctly.


Incorrect allotment units available in inventory search response (KT-13838)

The bug was fixed for the following scenario: when searching for available inventory (such as hotel rooms, transportation seats, or activity slots), the system was incorrectly showing more units available than actually exist. This happened because the system was counting inventory from both active and inactive contracts with suppliers.

Related Support Ticket: KHELP-12178


Booking flow - Enable Advanced Price Summary is not behaving as Cruise for the custom Service Record Types (ST-1806)

We aligned additional Service record types to behave like the Cruise record type, but during implementation we identified an issue where bookings using these updated record types pulled in the cabin/price category correctly while the Booking Overview failed to display it, and the service departure produced an error indicating it was not linked; this behaviour has been traced to differences in how the new record types interact with the existing Cruise logic, as discussed in the related Slack thread.


Itinerary items get Service Level = null (ST-2107)

Resolved an issue where itinerary items created during quote or booking creation did not inherit the correct service levels when a package was configured with Service Level Mode = Cabin Levels. Previously, items were generated with a null service level despite service levels being defined on the associated price categories. This now aligns with existing behaviour for packages using Service Level Mode = Service Level, ensuring all new itinerary items correctly receive their corresponding service level.


Lead Passenger flag disappearing when set but it does save (ST-2398)

Corrected a display issue where the 'Lead Passenger' checkboxes would disappear during edit mode. The UI now updates correctly and instantly when a new lead passenger is selected, providing a smoother and more intuitive user experience.


Payment Schedules are not created/presented when Pay-per-pax is disabled (ST-2406)

When adding packages via Booking Wizard, if Pay Per Passenger is disabled at the Channel or on the Itinerary, only itinerary-level payment schedules now appear on the Payments tab


Included transfers not added when component option has 2 cabin levels assigned to 1 price category (ST-2413)

We’ve fixed an issue where included services (such as transfers) were not added to an itinerary when a package was configured with Service Level Mode = Cabin Levels and a related component had multiple cabin levels mapped to the same price category. Previously, service-level filtering could incorrectly exclude passengers, causing the included component to be skipped during itinerary creation. This filtering has been removed to ensure that included services are consistently applied when the selected cabin matches any of the configured cabin levels for the price category.


Error thrown when Modify Package in itinerary created from package with 2 cruise components (ST-2430)

We’ve fixed an issue where modifying a package that contains multiple cruise components could fail during Booking Wizard initialization. Previously, when opening Modify Package from Booking Overview, the wizard could error while processing options and pre/post stays, leaving the initialization modal stuck and displaying runtime errors. The initialization logic now correctly identifies and uses the selected main cruise component when rebuilding the previous state, ensuring cabin, price category, and service-level data are resolved consistently. As a result, Modify Package now loads and completes initialization successfully for packages with more than one cruise component.


Modify Package: null dereference when adding changes (ST-2444)

Fixed Attempt to de-reference a null object error in modify modes for itineraries with cabin levels


Temporary Hold container not created in Change Occupancy when adding room (ST-2448)

Fixed an issue where entering Change Occupancy to add a room and launching the Booking Wizard did not create an active Temporary Hold container for mandatory cruise components, even though inventory was ultimately booked on save. The system now correctly derives required price category information for existing rooms and ensures Temporary Hold containers are created as expected when entering the Booking Wizard, providing accurate visibility of held units during Change Occupancy flows.


Max Room Occupants error thrown when creating itinerary from Booking Wizard (ST-2455)

Resolved an issue causing a 'Max Room Occupants' error during itinerary creation in the Booking Wizard. This occurred with certain package configurations involving cruise components and cabin levels.


Change Occupancy redirects back to Package Search after save (ST-2504)

Fixed an issue where, after successfully saving a Change Occupancy update, users were redirected back to Package Search instead of the Booking Overview screen. The flow now correctly closes Package Search after navigation, ensuring users are returned to the Booking Overview upon save and have clear confirmation that their occupancy changes were successfully applied.


Temporary Hold not functioning consistently in case of parallel sessions targeting the same (low) inventory (ST-2519)

This release improves the reliability of inventory validation and Temporary Hold (TH) handling when entering Booking Wizard (BW) under low-inventory and concurrent-search scenarios. An issue where users could intermittently enter BW despite insufficient inventory—resulting in missing, duplicated, or lingering TH containers—has been addressed by ensuring failed TH creation attempts correctly reset the in-session initialization state. This prevents inconsistent TH behavior, avoids units being held unnecessarily, and ensures BW entry is properly blocked when requested inventory is no longer available, even across parallel sessions.


Search button disabled until Channel is reselected in Package Search filter panel (ST-2546)

Fixed an issue where the Search button in Package Search could remain disabled even after all required filters were selected. When the Channel was chosen before other filters, the button would not always enable until the Channel was reselected. The Search button now correctly becomes enabled as soon as all mandatory filters (Channel and Date) are selected, providing a smoother and more reliable search experience.


Necessary workaround for cabin levels when dataset has no departure cabins (ST-2555)

Package saves now handle missing cabin selections safely and keep per-room service levels intact for Cabin Level packages.


Temporary Hold Container not closed on Back to Search (ST-2571)

Fixed release logic to properly close Temporary Hold container related to current session


Included transfers added to unrelated components when >1 cabin selected with included transfers (ST-2574)

Included transfers were previously merged across rooms sharing the same price category, causing incorrect cabin-level assignment. This release fixes the issue by grouping selections per room, ensuring transfers apply only to the correct cabin.


Cancel from Modify or Change occ does not redirect from BW (ST-2575)

Fixed an issue where users could not exit the Booking Wizard when cancelling out of Modify or Change Occupancy modes. Previously, clicking Cancel or Back to Search did not close the Booking Wizard, leaving users stuck in the flow despite confirming the action. The Booking Wizard now correctly closes after navigation, returning users to Booking Overview (or Package Search for Change Occupancy), restoring the expected ability to abandon changes without making modifications.