I am working on adding multicurrency support in 6.x, and have made a patch series for core that is needed to implement this fully. The four attached patches are as follows:
1. Backports the UcOrder object and use of drupal_write_record() from 7.x, reducing some code duplication and allowing other modules to work with order objects more easily.
2. Adds a currency code field to the order table/object, defaulting to the store currency. This is needed in core because there is no other way of specifying to a payment method the currency that should be used; the payment methods still need updating to use this new field. Implementing this will close #607708: Allow defining currency code per order.
3. Locks product prices at checkout time. This is a longstanding bug in core where price alterers are invoked on orders after they have left checkout, which should not happen - all order prices stored in the database should be fixed amounts. This will break compatibility with uc_vat, but I will handle fixing that later, and also possibly uc_discount, but that seems pretty broken in a number of ways anyway. It will also require an update function to alter existing prices one final time, before saving them to the database. See #854638: order products price should locked in altered price.
4. Makes full order objects available in the order admin and user order history pages. This is needed so currency formatting can be done correctly. Previously requested in #727404: Various order pane functions need to pass order in uc_price context['subject'] variable.
A number of calls to uc_price() can be simplified and cleaned up further once this patch is committed.
The multicurrency module itself is pretty much just a price alterer and a UI to administer currencies and product prices in different currencies (automatic conversion based on a conversion factor is also supported). This needs some more testing and UI polish before I am ready to upload it. This could be uploaded as contrib but I also see no reason why it shouldn't go into core for 6.x, and then we can work towards implementing it in 7.x as well.
Marking "needs work" for now as some of the items above need further implementation and testing, but discussion on the above is welcomed!
|0001-Backport-UcOrder-object-from-D7-allowing-other-modu.patch||8.17 KB||Idle||FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch 0001-Backport-UcOrder-object-from-D7-allowing-other-modu.patch. This may be a -p0 (old style) patch, which is no longer supported by the testbots.||View details | Re-test|
|0002-Add-currency-code-field-to-orders.patch||1.84 KB||Idle||FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch 0002-Add-currency-code-field-to-orders.patch. This may be a -p0 (old style) patch, which is no longer supported by the testbots.||View details | Re-test|
|0003-Lock-product-prices-at-checkout-time.patch||2.15 KB||Idle||PASSED: [[SimpleTest]]: [MySQL] 1,300 pass(es).||View details | Re-test|
|0004-Make-full-order-object-available-in-order-listings.patch||4.4 KB||Idle||FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch 0004-Make-full-order-object-available-in-order-listings.patch. This may be a -p0 (old style) patch, which is no longer supported by the testbots.||View details | Re-test|