Hi,
I'm using 9.3 Multi-Store, and have the c# code.

Problem:
Orders_ShoppingCart does not store the discounted product price when a promotion is used. We have financial reporting outside of the store that, therefore, recreates the discount logic for reporting purposes. So, for example, if we are running $2 off a single product, the Orders table reflects the discount, but not the Orders_ShoppingCart. If it is a cart of mixed products, this means that I need to use the promotion rules for that coupon to determine the sale price of each item.

My administrators frequently forget some part of how to properly set up a promotion, realize it when an order comes in for an unexpected amount, and go back to fix it. Many times, the code has been emailed or used in printed materials.

When a coupon's rules change, this messes up our financial reporting. Therefore, I want to do two things:

1) prevent rule changes to a coupon that has been used
2) allow coupon code to be changed, but update all existing orders using the code to show the new code.

This will allow the admin to rename the coupon, and then recreate the original coupon code with the correct rules. I can see multiple ways of implementing this, but I'm not sure which of them is most aligned with best practices.

1) Modify web screen only to prevent rule changes, and set a trigger on the database
2) Build logic in the web project and promotions object to handle it
3) Have someone correct me about needing the coupon code rules in order to figure out item-level pricing at the time of sale, and just modify my reports

Any input?