Zend certified PHP/Magento developer

Magento 1.9 / OpenMage 1.9 – Import Specific Store (or Website) Data Using Dataflow – Bug? Updating All Fields

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…

enter image description here

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.