Mike posted while I was typing, so I'll respond to his post here;
again, this is just imho, but this is a must have for VM, rather than an additional feature. I can see your concerns about VM becoming too big and cumbersome, but that I feel is a slightly different issue, such as how to keep the core minimal, but allow people to change vm to suit them, by adding new features etc. Currently by hacking vm to bits, which is really the only way, but that puts people off upgrading, which causes more problems as people are running old systems....but I digress

How about something like this then:
1) orders are placed, stock is adjusted for those products
2) one order is cancelled, admin goes to that order, clicks 'cancel' button'
(cancelled is removed from drop down list and becomes separate button, for clarity, maybe put in red box to warn admin to nor click by mistake)
3) cancel button archives order (perhaps looking at it from the inside, placed into a new table?), returns to stock.
4) cancelled orders can not be 'uncancelled'. A new order must be created if customer returns.
AFAIK at the moment, the only way to add notes to the order history, automatically goes through the order status change process and runs processes it finds there, which is why adding notes to the history can add products back into stock multiple times. It is this coupling of 2 processes that causes one of the problems.
I think we are talking at slight cross purposes.
A straight cancelled order is fairly straightforward, problems generally occur when things do not go to plan.
A few for examples:
1 - An order is placed, paid, and shipped. Customer then reports that product arrived damaged, and returns it for a refund.We need to a.) process the refund b.) mark as cancelled c.) NOT put the stock back as it is damaged
2-An order is placed and paid for via paypal. We do not have 1 of the items in stock so we process the refund in PayPal.In this case, what I beleive happens is the stock is deducted when the payment is received by PayPal. The stock is ALL then returned then the partial refund is processed by PayPal as vm beleives it is a Full refund. Currently we then have to go into each line item and correct the stock levels.(ouch)
3- An order is placed and paid for by Worldpay. VM no longer updates the order status to paid so stock is not removed, then another order is placed for the same item, which is no longer in stock, and is paid for by paypal. a third customer then tries to order that product but it is now out of stock, so they are added to the notify/waiting list.We have to a.) send the product to the first customer, updating the status as we go, b.) refund the 2nd customer, which adds to the stock, sending out a notification to the third customer, who then orders an item that is not actually in stock, so we have to refund that one....
We have a few thousand items in our store (a lot are archived too, we cannot delete them as it will mess up order histories etc) so searching for an SKU, waiing for the product list, selecting the item, switching tabs entering new stock level, saving etc takes a while for 10 items in an order.
I like the notify feature, but its achillies heel is that its based on a stock level that too easily is incorrect.
Perhaps instead of automaticalle emailing customers, there should be a send notify list option or something that lists the customers, and the products, and what it beleives is in stock, then we could double check it and only send the notifications we want? Althought, again I fear I have drifted off topic.
Stock is such a fundamental issue, it seeps into so many other VM features.
