Skip to Content
Ranlanka CRM documentation — pre-release, subject to change.
Changelog2026-07-29

2026-07-29

  • Fleet & Tours: payment gating & guider assignment — a tour can’t advance past Reviewing without an invoice, past Invoice Issued without at least a partial payment, or past In Progress until fully paid. A guider (and their vehicle) can be assigned/reassigned on a tour; the assigned guider automatically flips to On Tour on entering In Progress and back to Active on Completed.
  • Fleet & Tours: guider past trips — a guider’s profile page gained a Past Trips tab, read directly from their completed tour inquiries.
  • Fleet & Tours: custom itinerary — besides picking an admin-managed template, a tour’s itinerary can now be built custom, day-by-day, from a checkbox grid of admin-managed Tourist Locations reference data. Template and custom are mutually exclusive — picking one clears the other.
  • Fleet & Tours: confirmation email — a tour entering Confirmed now automatically emails the customer a branded confirmation listing the places they’ll visit (no day descriptions, places only).
  • Fleet & Tours: read-only itinerary at Reviewing — once a tour reaches Reviewing, its itinerary and guider/vehicle assignment become read-only; a single Back to Itinerary Planning button (Reviewing only) reverts it for edits.
  • Fleet & Tours: itinerary template pricing — itinerary templates can now have an optional price per adult and per child. Issuing an invoice for a tour with a priced template pre-fills editable “Adults”/“Children” line items from the template’s rates and the tour’s party size, the same way a visa invoice pre-fills from its pricing catalog.
  • Fleet & Tours: collecting payment on a tour — issuing an invoice now automatically advances the tour to Invoice Issued, and the Payment section gained a Record Payment button per invoice — recording a payment automatically tries to advance the tour’s status too, so the whole payment lifecycle is driven from the tour’s own detail page.
  • Quotations: Service Prices sidebar restructure — the old flat “Service Prices” (visa-only) and “Itinerary Templates” sidebar items are now one expandable Service Prices group: View Prices (all staff, read-only, searchable, Visa/Tours tabs) and Add Template (owner/manager only, full create/edit/delete for both catalogs under the same tabs).
  • Fleet & Tours: On Tour dashboard tab — the staff dashboard’s Departures/Visa Expiries widget gained a third On Tour tab showing tours currently In Progress with their assigned guider; tours arriving today also now generate a staff checklist entry.
  • Add Service modal: service request picker — no longer opens with a Visa tab pre-selected; staff now pick Visa, Ticket, or Tour from a centered 3-button chooser before a tab opens, using the same form/flow as before either way.
  • Quotations: Tour quotesTour joins Visa/Ticket as a third quote service type, in both the existing-customer and walk-in flows. No existing tour inquiry is required — staff pick a priced itinerary template or build a manual place/price list either way.
  • Quotations: Walk-in / no-customer quotes — “Generate Quote” (dashboard and Quotations page) now opens a chooser first — Existing Customer or Walk-in/No Customer. A walk-in quote needs only a contact name (email is optional, used only for sending) and supports all three service types without an onboarded customer record. The Quotations list shows both kinds together, walk-in rows marked with a badge.
  • Deployment: DB backup failure alerts — the daily Google Drive backup script now posts to a Slack webhook on any failure (dump, empty file, or rclone upload/OAuth), instead of only logging silently. Found via a real incident where rclone’s OAuth token expired (7-day expiry on an unpublished/“Testing” OAuth consent screen) and uploads failed for a week unnoticed; the deploy workflow now also persists a SLACK_WEBHOOK_URL GitHub secret into the registered cron entry so this survives future redeploys.
Last updated on