When a coupon is either expired or has reached it's usage limit, services that coupon is applied to cannot be modified, since the system attempts to re-apply the coupon. This seems to only occur in the admin interface. There are two cases. First when service change queuing is not enabled, the admin immediately receives an error:
That coupon does not appear to be valid.
If service change queuing is enabled then the edit will succeed, but when the cron runs to perform the service change, it returns an error:
Processing service change # resulted in status: Error
If the 'Limitations do apply to service renewals' option is selected and the limit is reached or the coupon expires, then it should continue to apply the coupon regardless.
If the 'Limitations do not apply to service renewals' option is selected and the limit is reached or the coupon expires, then either the coupon should be ignored or an error message should be shown immediately even if service change queuing is enabled.
I'm not sure the description's expectation for the Limits ... apply to service renewals options are accurate to what we'd want.
It seems to me that the problem here is that we want the ability to edit a service to save the service data without causing an error about the coupon being invalid due to limitations. In this case, we can solve that problem by only applying the coupon validation iff the coupon has been changed.
We would need to have the same occur during upgrades/downgrades. Unless the coupon is changed during the upgrade/downgrade, there is no reason to validate it.
The primary problem here is in answering the question, "When does the service renew?" so that we can then, and only then, validate the coupon again based on its defined settings.