Upgrade module
Status: client , pending , approved , declined
--
Page where you can select client.
Selection box where you can select clients current product
Selection box where you can select a package to upgrade/downgrade to from all upgradable/downgradable packages
Allow changing of various details, including entering in new custom field values... billing custom fields? price override? billing type? billing period? domain name?
When submitting goes into a table, display in client area, display in admin area
--
When the next invoice is processed with this item on it, it looks at the above and works out what the client would be billed. Run daily for billing cycle period decreases, we know when the client was last invoiced, we know for how much? we know when our new billing start and end date are?
Adjustment is pushed to invoice
Update is made to product
--
Client can request upgrades too, processed in same way above, put into pending queue, must be acked