A client has moved from Magento CE 1.9 to OpenMage LTS.
They used to operate a single store website on their .co.uk domain name. They have started to operate a multi-store website .ie and .eu version of their website and want to also introduce other regions.
TLDR: Price and other website/store view individual updates are being done using dataflow with the specific website view.
There is either a bug or it’s configured wrong. What’s happening here is that dataflow is un-ticking the “Use Default Value” box on every attribute with website
or store view
scope when a sku is updated via dataflow for that view.
Subsequently, any scope with website
scope is also getting un-ticked and the default data getting copied.
Expected: Dataflow to only update the single field, in our instance (below) price on a website level and name on a store view level.
Import/Export cannot be used for this because it requires the admin/default data row in row 1, unless I’m mistaken?, and always requires 2 rows to update the name` field for a specific store or website…
If we were to add name
to the dataflow import, updating he store view for name
would be expected. but it’s updating (and copying default data to) all attribute with website
or store view
scope.
For the purposes of transparency, here is the way it’s all configured:
Website | Store Group | Store View |
---|---|---|
UK & Europe (Base Currency: GBP) | UK | domain.co.uk (GBP) |
Website | Store Group | Store View |
---|---|---|
Europe (Base Currency: EUR) | Europe | domain.ie (EUR) |
domain.eu (EUR) | ||
domain.fr (EUR) | ||
domain.de (EUR) | ||
domain.nl (EUR) |
Website | Store Group | Store View |
---|---|---|
Americas (Base Currency: USD) | North America | domain.us (USD) |
domain.ca (CAD) |
Website | Store Group | Store View |
---|---|---|
Australia & NZ (Base Currency: AUD) | Australia & NZ | domain.com.au (AUD) |
domain.co.nz (NZD) |
With the following settings:
Catalog / Catalog Price Scope: “Website”
Base currency and website specific currencies are set as shown in the table above; and Fixer.io is implemented (now built into OpenMage LTS) for up to date currency conversion between the base currency and the store view currency.
This all works flawlessly and the client can edit products from stores and views as expected. The website-level base pricing also works as does the store-view currency conversion.
The client can update their products using Import/Export as explained here and here, which is great to export, edit and upload changes.
However, the client gets delta price updates from their suppliers in 4 different files, one for each region (which are represented by website in the above table(s) in the leftmost column).
There are 4 CSV files provided on a daily basis:
- import-gbp.csv
- import-eur.csv
- import-usd.csv
- import-aud.csv
Note: These are 3 different suppliers and so cannot be delivered in one file; although, even if they could be delivered in one file that would not solve the issue.
They’re formatted for Magento/OpenMage LTS by their supplier(s), and is collected from their supplier(s) FTP location.
sku | price | name |
---|---|---|
ABC123 | 249.00 | Website View Specific Name/Title for ABC123 |
ABC129 | 491.00 | Website View Specific Name/Title for ABC129 |
Here’s the dataflow profile:
<action type="dataflow/convert_adapter_io" method="load">
<var name="type">ftp</var>
<var name="path">/</var>
<var name="filename"><![CDATA[import-gbp.csv]]></var>
<var name="host"><![CDATA[ftp.gbp-supplier.com]]></var>
<var name="file_mode">1</var>
<var name="user"><![CDATA[import-gbp]]></var>
<var name="password"><![CDATA[***]]></var>
<var name="format"><![CDATA[csv]]></var>
</action>
<action type="dataflow/convert_parser_csv" method="parse">
<var name="delimiter"><![CDATA[,]]></var>
<var name="enclose"><![CDATA["]]></var>
<var name="fieldnames">true</var>
<var name="store"><![CDATA[1]]></var>
<var name="number_of_records">1</var>
<var name="decimal_separator"><![CDATA[.]]></var>
<var name="adapter">catalog/convert_adapter_product</var>
<var name="method">parse</var>
</action>
For clarity, products not in the dataflow import are unaffected. Other website and website views are not affected. This only affects the store view and it’s corresponding website scope.
EDIT:
I’m currently investigating app/code/core/Mage/Catalog/Model/Convert/Adapter/Product.php::save()
on lines 764
to 813
as this appears to be the code that is responsible for this.