How to handle free and paid orders with post processing? I'm going around in circles trying to use Drupal Commerce to make an ecommerce site where some orders cost money and some don't (because some users have coupons that make products free).

I've set up the Checkout process as seen in the screenshot below and have created a rule as such


Rules Event: Process checkout pane
Rules Conditions: Price comparison (commerce
order = $0)
Rules Actions:


Change pane properties (disable billing
information, off-site payment redirect, Payment)
Update the order state to (pending/complete)





With this setup when the user goes through without a coupon it all works fine. When the user uses a coupon to get the price to zero on the Checkout page the user presses the Continue to next step button and goes to an empty Review page (the panes have been set to disabled so there is nothing to see) and they can't progress any further.

Pressing the Continue button on that page just bounces them back to the same page. If they press Cancel and go back to the shopping cart, then on through checkout and press "Continue to next step" again (the coupon has been remembered and the total is still $0) then get sent to the Checkout Complete page and hook_commerce_checkout_complete($order) is called.

I've tried adding extra actions to the rule, to complete the checkout or change the order status, but they have strange side effects like going to the Review page anyway, or calling that hook twice.

Can anyone help me set up the checkout and rules so that a free order goes straight to complete from the checkout page, whilst still maintaining the normal path for orders that require payments?
You would be better to implement a custom payment method that can be active when the order has a 0 balance.

If the order has payment required, use the standard payment method.
If the order has no payment required, complete checkout.

e.g: https://drupal.org/project/commerce_no_payment