A small fix with a fairly long blast radius.
Some Cruise Planner products are billed once -- a cabana for a day, a photo package, a multi-night dining package, decorations for your stateroom, a 25th-anniversary cake. Others are billed per day -- the Deluxe Beverage Package, Surf+Stream Internet, etc. Royal Caribbean exposes which is which via a salesUnit code on each product (PERDAY, PERPACKAGE, PERSEAT, PERUNIT), but their endpoints aren't consistent about the spelling -- some endpoints underscore it, some don't -- and we had two separate normalizers that didn't agree on the variants. Result: a Couples Swedish Massage was rendering as "$313.99/day" on the bookings page instead of a one-time per-couple charge. Same shape applied to:
- Photo Packages
- Cabanas and beach club
- Cakes
- Decorations
- Multi-night Dining Packages
These all now render correctly as one-time charges, and the "per ticket" tag has been dropped from anything that isn't actually a ticket (cabanas aren't tickets). The purchased-package row on the sailing page also now shows " total" where it used to show "/ticket."
Same product can have different cadences on different sailings, by the way. RC tags the Deluxe Beverage Package as PERDAY on a 7-night Caribbean and PERPACKAGE on a 16-night Anthem transatlantic. Each row stores its own salesUnit, so each sailing displays the right shape without any special-case logic.
Small Things
- Sailing pages with empty itineraries no longer crash with a port-rendering error (a handful of placeholder sailings RC publishes with no itinerary data yet were taking the page down).