Issue #3611922: Cancelling a completed order wrongly marks the order cancelled
cancelTransaction() unconditionally stamped the order cancelled even when no line was cancellable, so a completed (or no-show) order was flipped to cancelled while its bookings stayed completed. It now refuses a settled or already-cancelled order (returns 0, no state change), with a re-check under the row lock against a concurrent settle. Kernel-tested.