Hawaii - Minor (22.16)
Kaptio is proud to announce this minor release for Hawaii. This release is intended to address issues with previous releases.
Bulk Manager for Operational itineraries (KT-13799)
Bulk Manager for Operational itineraries Bulk Operations ## 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** ```json [{ "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 (PriceCategory*_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 [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)
Preserve Field Values on Itinerary Item Replacement Bulk Operations 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 |
Introduce a spinner on Passengers and Payment schedule tab (ST-2440)
Introduce a spinner on Passengers and Payment schedule tab Passenger Grid, Payments A spinner was added when first opening Passengers and Payments tabs to indicate the tab is loading.
Pricing controls implementation with Discount__c object (KT-13738)
Pricing controls implementation with Discount__c object Pricing controls Added long-term Pricing Controls Discounts with a configuration screen
Add Route filter to the Pricing controls search tab (KT-13803)
Add Route filter to the Pricing controls search tab Pricing controls Added filtering by route in Pricing Controls
"Discount configurations" tab in Pricing Controls app (KT-13828)
"Discount configurations" tab in Pricing Controls app Pricing controls Added view screen for long term Pricing Controls discounts
Create and Edit discounts actions in "Discount configurations" tab (KT-13829)
Create and Edit discounts actions in "Discount configurations" tab Pricing controls Pricing controls: Added create/edit to long term discounts
Regroup search tab on Main screen in Pricing controls (KT-13842)
Regroup search tab on Main screen in Pricing controls Pricing controls Pricing controls: Moved the search bar to the left side of the screen
Payment Information Modal - Email Receipt Functionality and Validation Issues (KT-13280)
Payment Information Modal - Email Receipt Functionality and Validation Issues Improved the checkbox help text so users can understand if they will receive the confirmation email or not.
Cancel Button in Edit Supplier Agreement (KT-13380)
Cancel button in Edit Supplier Agreement popup does not work as expected NX-1102 Supplier Agreements ### 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)
User can select --None-- picklist value in Service Level Mode but not save it 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)
UI improvements on Passenger tab on Operational Itinerary 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.
Incorrectly sorting by occupancy rate (KT-13805)
Incorrectly sorting by occupancy rate Fixed sorting for occupancy rate column
Component Option Departure Assignment Modal displaying deleted Component Options (KT-13807)
Component Option Departure Assignment Modal displaying deleted Component Options 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)
Dates are populated instead of names after Passenger import 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)
Incorrect allotment units available in inventory search response 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. KHELP-12178
Booking flow - Enable Advanced Price Summary is not behaving as Cruise for the custom Service Record Types (ST-1806)
Booking flow - Enable Advanced Price Summary is not behaving as Cruise for the custom Service Record Types 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)
Itinerary items get Service Level = null 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)
Lead Passenger flag disappearing when set but it does save 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)
Payment Schedules are not created/presented when Pay-per-pax is disabled 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)
Included transfers not added when component option has 2 cabin levels assigned to 1 price category 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)
Error thrown when Modify Package in itinerary created from package with 2 cruise components 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)
Modify Package: null dereference when adding changes 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)
Temporary Hold container not created in Change Occupancy when adding room 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)
Max Room Occupants error thrown when creating itinerary from Booking Wizard 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)
Change Occupancy redirects back to Package Search after save 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)
Temporary Hold not functioning consistently in case of parallel sessions targeting the same (low) inventory 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)
Search button disabled until Channel is reselected in Package Search filter panel 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)
Necessary workaround for cabin levels when dataset has no departure cabins 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)
Temporary Hold Container not closed on Back to Search 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 added to unrelated components when >1 cabin selected with included transfers 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)
Cancel from Modify or Change occ does not redirect from BW 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.