I have built a model that can add some custom design info (link to pdg, design type, document id, upload location) to the quote items. The design screen is opened in a popup, and saves the design values to the session
In the sales_quote_add_item
observer I look at which design is in the session (weather that is the best idea or not is not the point)
So far so good
The problem I am facing is the following one:
On reordering 2 configurable products (same config options, same "child" sku") but with different designs only one quote-line with qty = 2 is added with the design options of the last product from the original order
This should have been 2 quote-lines with 1 qty = 2 with each their own design
I have tried debugging the problem down from
Mage_Checkout_Model_Cart::addOrderItem
Where I now force to add a different design method per item
$info->setDesignMethod((string)$orderItem->getDesignMethod());
To
Mage_Checkout_Model_Cart::addProduct
where var_dump($request);
gives 2 different design_method's for 2 products
object(Varien_Object)[1470]
protected '_data' =>
array (size=10)
'uenc' => string 'aHR0cDovL2R2Yy5kZXYubWVkaWFjdGhxLm5sL2JlYWNodmxhZy1zcGxhc2g,' (length=60)
'product' => string '3119' (length=4)
'form_key' => string 'ToaYzvESXcg2k56k' (length=16)
'related_product' => string '' (length=0)
'super_attribute' =>
array (size=6)
187 => string '1143' (length=4)
254 => string '1397' (length=4)
188 => string '121' (length=3)
186 => string '390' (length=3)
192 => string '384' (length=3)
193 => string '389' (length=3)
'productiontime_sku' => string 'production-24h' (length=14)
'idSimple' => string '73' (length=2)
'designoptions' => string 'true' (length=4)
'qty' => string '1.0000' (length=6)
'design_method' => string 'online_design' (length=13)
protected '_hasDataChanges' => boolean true
protected '_origData' => null
protected '_idFieldName' => null
protected '_isDeleted' => boolean false
protected '_oldFieldsMap' =>
array (size=0)
empty
protected '_syncFieldsMap' =>
array (size=0)
empty
object(Varien_Object)[1808]
protected '_data' =>
array (size=10)
'uenc' => string 'aHR0cDovL2R2Yy5kZXYubWVkaWFjdGhxLm5sL2JlYWNodmxhZy1zcGxhc2g,' (length=60)
'product' => string '3119' (length=4)
'form_key' => string 'ToaYzvESXcg2k56k' (length=16)
'related_product' => string '' (length=0)
'super_attribute' =>
array (size=6)
187 => string '1143' (length=4)
254 => string '1397' (length=4)
188 => string '121' (length=3)
186 => string '390' (length=3)
192 => string '384' (length=3)
193 => string '389' (length=3)
'productiontime_sku' => string 'production-24h' (length=14)
'idSimple' => string '73' (length=2)
'designoptions' => string 'true' (length=4)
'qty' => string '1.0000' (length=6)
'design_method' => string 'offline_design' (length=12)
protected '_hasDataChanges' => boolean true
protected '_origData' => null
protected '_idFieldName' => null
protected '_isDeleted' => boolean false
protected '_oldFieldsMap' =>
array (size=0)
empty
protected '_syncFieldsMap' =>
array (size=0)
empty
To
Mage_Sales_Model_Quote::addProductAdvanced
where Mage_Sales_Model_Quote::_prepareProduct
is called
Before returning $product the buy requests shows different design options for the products
$optionstest = $product->getCustomOptions();
var_dump($optionstest['info_buyRequest']->getValue());
gives:
string 'a:10:{s:4:"uenc";s:60:"aHR0cDovL2R2Yy5kZXYubWVkaWFjdGhxLm5sL2JlYWNodmxhZy1zcGxhc2g,";s:7:"product";s:4:"3119";s:8:"form_key";s:16:"ToaYzvESXcg2k56k";s:15:"related_product";s:0:"";s:15:"super_attribute";a:6:{i:187;s:4:"1143";i:254;s:4:"1397";i:188;s:3:"121";i:186;s:3:"390";i:192;s:3:"384";i:193;s:3:"389";}s:18:"productiontime_sku";s:14:"production-24h";s:8:"idSimple";s:2:"73";s:13:"designoptions";s:4:"true";s:3:"qty";s:6:"1.0000";s:13:"design_method";s:13:"online_design";}' (length=476)
string 'a:10:{s:4:"uenc";s:60:"aHR0cDovL2R2Yy5kZXYubWVkaWFjdGhxLm5sL2JlYWNodmxhZy1zcGxhc2g,";s:7:"product";s:4:"3119";s:8:"form_key";s:16:"ToaYzvESXcg2k56k";s:15:"related_product";s:0:"";s:15:"super_attribute";a:6:{i:187;s:4:"1143";i:254;s:4:"1397";i:188;s:3:"121";i:186;s:3:"390";i:192;s:3:"384";i:193;s:3:"389";}s:18:"productiontime_sku";s:14:"production-24h";s:8:"idSimple";s:2:"73";s:13:"designoptions";s:4:"true";s:3:"qty";s:6:"1.0000";s:13:"design_method";s:12:"offline_design";}' (length=475)
These options are also available in
Mage_Sales_Model_Quote::_addCatalogProduct
But for some reason Magento adds 2 of the same products with 1 design
I do not have these problems if I order 2 configurable products with different options (another "child" sku)
My guess is that my configurable just isn't unique enough
I just need to figure out how to make it unique enough for magento to make it 2 different quote items with qty = 1
My guess was that by modifying the "info_buyRequest" this could be done
Question:
How do I make configurable products unique enough to add them as separate cart lines on reordering?