Validate payment type

I have a “Print invoice” button in the payment screen. I need to make sure that the user printed an invoice before been able to click on the “Credit card” payment option.

I have tried validating using a “Payment processed” rule along with the “Cancel Ticket Payments” action in case an invoice was not printed for the ticked. Unfortunately the Cancel Payments action cancels “all” the payments.

I need to prevent the user from leaving the Payment screen an amount is been payed with a credit card and no invoice was issued. When I issue an invoice I create I ticket tag on which I can later look up for.

Is there an easy way to solve this problem?

Can you not just automate the forced printing of an invoice when credit card selected?
If not you would probably want to set a ticket state on invoice printing - something like Invoice=Printed and set mapping/automation for payment type selector based on that state.