Skip to Content
Ranlanka CRM documentation — pre-release, subject to change.
Changelog2026-09-01

2026-09-01

  • Monthly Executive Analytics & Financial Digest (MonthlyDigestScheduler.java):

    • Automated Scheduling: Scheduled to run on the final calendar day of each month at 20:00 (8:00 PM) Sri Lanka Standard Time (Asia/Colombo).
    • Financial Breakdown & Profitability: Computes Total Invoiced Sales, Cost of Sales, Gross Profit & Gross Margin %, Actual Cash Receipts Collected, Operating Expenses from the Accounting module, Net Operating Profit, and Outstanding Receivables.
    • Granular Service Revenue Breakdown: Details revenue contributions across Flight Tickets, Visa Applications, and Tour Packages.
    • Operational Pipeline Status Metrics: Aggregates real-time counts across the full lifecycle for Flight bookings (Inquiries, Docs Collected, Hold, Payment Pending, Ticketed, Cancelled) and Visa applications (Inquiries, Docs Pending, Appointments, Submitted, Processing, Approved, Passports Collected / Finalized, Rejected, and Sticker vs. eVisa split).
    • Completed Task Tickets (Full Drawer Fidelity): Tabular summary for 100% of completed Visa and Flight tasks containing all drawer fields (Client details, Traveler info, Passport numbers/expiry, Routes/Countries, Airlines, PNRs, E-Ticket/Visa numbers, Pricing, Notes, Handling Staff, Attached Files count, and Linked Invoice payment status).
    • Client Analytics & VIP Spenders: Analyzes the month’s Top 5 VIP Spenders, Top 5 Most Frequent Clients, and New Customer Acquisition growth.
    • Downloadable Multi-Section CSV Attachment: Delivers Monthly_Executive_Digest_<YYYY_MM>.csv formatted with native Excel / Google Sheets compatibility.
    • Deduplication Protection: Deduplication recorded via ReminderSendLogRepository with key MONTHLY_DIGEST.
  • Frontend Dynamic Chunk Loading Auto-Recovery:

    • lazyWithRetry.ts: Wrapped all React lazy routes with chunk-loading error interception, catching stale hash mismatches during new production deployments and triggering a single graceful session reload.
    • vite:preloadError Handler: Added global event listener in main.tsx for immediate auto-recovery on network asset 404s.
  • Seamless Visa Issuance on Finalize:

    • Inline Passport Finalization (VisaDetailPanel.tsx & TaskDetailDrawer.tsx): When finalizing passport collection on an unissued visa, the drawer directly renders the issue form and attached documents dropzone with action “Issue Visa & Finalize (Passport Collected)”, executing validation, document uploads, and finalization in one click.
    • Context-Aware Button States: Removed redundant Cancel button during mandatory first-time finalization while preserving standard Cancel behavior when editing existing issued visas.
  • Finalized Status Visual Indicators:

    • Action-Verified Green Checkmark Badges (CheckCircle2): Added distinctive green checkmark circle indicators and FINALIZED badges that appear only when final issuance is complete:
      • Visas: Only when the visa has been issued (visaNumber is present) and finalized (completed_at timestamp or status passport_collected). If a visa is moved to passport_collected without an issued visa, the indicator stays hidden until “Issue Visa & Finalize” is executed.
      • Flights: Only when the ticket has actually been issued (ticketNumber is present and non-empty) and booking is not cancelled.
      • Rendered across Task List View (TaskListView.tsx), Admin Task Table (AdminTaskTable.tsx), Client Dossier Services Panel (ServicesPanel.tsx), and Task Detail Drawer (TaskDetailDrawer.tsx).
  • Task Tracker Archive Retention Verification:

    • 7-Day Archive Window: Verified backend rule in FlightService.java and VisaService.java that automatically hides finalized tickets (TICKETED/CANCELLED) and finalized visas (passport_collected) from the active tracker board after 7 days (when invoices are settled), keeping them permanently accessible in the Customer Dossier Bookings tab.
  • File Storage Security & Verification:

    • Storage Octal Regex Fix: Fixed escape sequence in R2FileStorageServiceImpl.java regex by replacing \0 with \u0000.
    • JPEG Magic-Byte Sniffing: Updated SOI marker check to standard 2-byte sequence 0xFF 0xD8, with WebP and PDF image cross-validation support.
Last updated on