Opencart product swapping!

This is a workflow question.

I am adding a feature to Opencart where an already bought pending order can have a product “upgraded”, which basically means that once a product has been bought another product worth more money can be swapped out for it and the user then pays the difference.

…but i’m not sure how best to do it.

Thoughts and ideas everyone?

In terms of bought/pending, has the customer paid for pre-upgraded product already?

Yes, the customer has already paid for the item(s).
They are able to login to their account and view Orders History, and when viewing a pending order they are then given the ability to “Upgrade” one of their bought items with something else in the shop (worth more) and then on checkout pay the difference.

I have not seen this functionality in other shoppingcarts. If anyone has seen a working demo of something similar, I’d love to see it! Would help me visualise what I’m making myself!

I think we’re going to need more context, for example, is this a virtual product or physical one? Will the original item be returned? Will this order require a credit note if so?

But given the information so far, I’d be leaning towards the upgrade being a different product with a completely new transaction.

The products are all “tickets for events” that will be sent to the customer(s) closer to each event the tickets are for.
A customer can buy any range of tickets for different prices. Once a customer has initially bought any ticket, they are able to “upgrade” that ticket by viewing the bought ticket in their “Order History” (under their account). They then select their “pending order” (paid for already but still pending due to the “still to come event”.
Closer to the time of each event the orders change from “pending order” to complete and the “etickets” are sent out.

Customers are therefore about to upgrade their tickets until the etickets are sent out at a later date.

That’s how I would do it too.

I don’t see how it would be possible having it as a different product as there are a few hundred products at totally different prices and that means each product would have to have all products duplicated at different exchange prices then?

I do agree that it should be a new transaction though…