Seems like you could do it pretty easily in Workflow. I'd try having the action invoke when the order status is set to "Payment Received" and add a condition to check if the order's weight is zero, or maybe if it has products from the downloadable classes. Then, set the action to update the status to "Completed"
argh. I thought this would be easy too. I tried this method, but it's not working for me.
I have the member role stuff working meaning i have:
- workflow-ng and workflow-ng-ui installed
- a product called "yearly membership" that is in the product class "memberships". This "yearly membership" product, will set the role "paid member" on the user (i do not allow anon purchasing for this product) when the order status is changed to "payment received".
- payment via paypal (sandbox) IPN is working, so that when a user completes the checkout successfully, the order status is changed from "in checkout" to "payment received".
Now, based on manatwo's comments and some digging of my own, i created a new workflow-ng rule that has:
- name: "automatically update order status from 'paid' to 'completed'"
- weight: 1 (to make sure it goes after the "update order status on full payment" rule).
- Invoked on event: Order status gets updated
- Order status: "payment received" AND
- Check an order's products (inclusive mode, "yearly membership")
- set order status to "completed"
This doesn't work. The rule is never fired.
I've also tried setting the second condition to:
- Order has a product of a particular class (and set the class to "memberships")
This also didn't work.
I removed the second condition altogether so the rule only had one condition:
- Order status: "payment received"
And the rule fired (but obviously, this rule isn't very useful).
Perhaps i'm not entering the second condition properly.