Set your print receipt action to print in a payment processed rule and it will then print when payment is taken. Add a custom constraint for remaining balance = 0 and it will only print once full value of ticket is paid and not after every payment transaction