Akeneo 1.6: Clone a product - clone

We need to clone a product in Akeneo 1.6 (only the SKU should change).
We used the method described in the response to my old SO question, but this seems only to work in Akeneo 1.4 and 1.5.
I've tried to normalize the product to JSON, but I haven't found an easy way to write it back into a Product. Any ideas?

Simple way is to use the ProductQueryBuilder to fetch product from the database, then normalize them in array with the ProductNormalizer, change the SKU then use the ProductBuilder to create a product. You can now update it with the ProductUpdater and save it with the ProductSaver.
Or if you don't want to develop anything you can export the desired products, change their SKU then reimport them :)

Related

Magento with Magmi - Remove unwanted numbers on product update

After updating our 6k+ products in Magento 1.7 using CSV import with Magmi the url_keys for all product get 4-digit numbers as suffix.
e.g. before it was www.domain.com/productname.html
after update it's www.dmain.com/productname-5363.html
This happens although the url_key in CSV is set as "productname"
Only way to fix it is to clear all urls from database and reindex - but after next import it's happening again.
Has anyone an idea how to prevent this on import?
The number suffix will be added when one or more url's get the same url. Since that is not possible Magento adds the suffix. Do you know if this occurs?
You try to make product names unique before processing. For example adding a color or a model or something else from your datasource
Or you could automate the step of emptying and reindexing the core_resource table (also take a look at the Magmi plugin On the fly indexer)

Importing custom attributes using Magmi

I'm currently trying to use Magmi to update around 1000 products in Magento based on their SKU. Here is an example of my CSV file:
"store","mpn","sku","cat_brand"
"admin","TA50 WR","AA0096","Aria"
I have two custom attributes called mpn / cat_brand that are currently empty on all of the products.
My question is can you update custom attributes using Magmi?
Also, is there a way to filter the SKU; in Magento the SKU's seem to be being appended with a number, so they end up looking like this: AA0096:1002. Is there a way to use a regular expression on the SKU? or do you think Magmi will still match them up?
Yes, of course, magmi can update any attribute based on its code in the header (either user custom or standard magento)
for skus, you need to use the exact magento sku. so have a line per magento sku for updating values.
magento is not "appending" anything to sku by default, in fact i suppose you have "configurable" product with root skus (AA0096) & associates simple items (AA0096:xxxx) , each being a separate reference.
Magmi has no "multiple match" mode for one item line in the csv, it would be handy but also dangerous. so you'll have to have one line per final sku in magento to have magmi update each wanted sku.

How to change in the Magento DB the prices of the product

I've troubles to figure out how to change the prices of a product in the magento DB.
I tryed to change the prices in the catalog_product_index_price table but the price doesn't change.
There is a website here that explains it in more detail, but the short answer is that you need to change the price in the catalog_product_entity_decimal table and then reindex Product Prices in the backend (and potentially Product Flat Data as well)
Magento uses variety of indexing and caching methods that make simply changing the value directly in the database not a good idea.
If you look, you can see the prices are also defined in the Price Index tables:
catalog_product_index_price_idx
And also the flat tables (if you use them):
catalog_product_flat_1 (number 1 depends on store)
If you're trying to mass update prices, I recommend either using a tool such as Magmi or the built in Magento import methods to update prices. Directly modifying the database is generally not a good idea with Magento, given it's complex database structure.

Where do you store UPC codes for products?

I am working on an install of AspDotNetStoreFront (version 9.3.1.0). Currently, the company stores their own SKU's from their business system in the provided SKU field. They often use Manufacturer Part Number to store their vendors part number.
Example:
The above example is a variant of a product where we would like to store UPC information.
I searched the AspDotNetStoreFront manuals and could not find a recommended strategy for storing UPC codes. Its easy enough to add a field to the database and bulk import the data, however, an admin needs to be able to maintain them from within the stores user interface.
Is there a way to add a UPC field without modifying core ASPDNSF code and still allow users to maintain it from within the UI? Or do I have to use the SKU or MPN fields?
Update
I do see that there are 5 fields for "ExtensionData" that I could possibly use, but I don't see those fields as editable for Variants in the UI the way ExtensionData is for the Products themselves.
I don't think we have had customers who didn't use sku for their UPC code. In the event that you need to modify the table by adding another column, you can modify the admin to show this.
You should be ab able to edit entityEditProducts.aspx and entityEditProducts.aspx.cs to edit this in the admin area. You will just need to modify the sql scripts and the view.
I'm not sure if it's important enough for you to upgrade over, but version 9.4 added fields for UPC. From the 9.4 release notes (http://partners.vortx.com/t-summer2013releasenotes.aspx):
"Added new GTIN field to the product variant information for unique product identification. This new field holds up to 14 characters and can be used for EAN, UPC, ISBN, etc. This new field is included in WSI, Excel & XML Imports, and supported by DotFeed."
The GTIN field works for both variant and size/color.
you can use one of the 5 extension field given by default in the product table to store UPC code. By default it has also UI in edit product under Extension Data tab.

Magento: Add a "fake" product to cart/quote

I understand how to programmatically create a product and also add to cart. I know this might sound dumb but is it is possible to generate a product on the fly and add that to the cart/quote but never actually save it in the database.
We want to create a made to order interface and I was thinking at the end it could add a bundle product with all the selections but that bundle product wouldn't actually exist in the backend.
I figured as long as you can make sure the quote and order has what it needs in terms of the product it would be ok, but obviously there is probably a lot that is tied to looking up stuff in the db on a specific sku or ID. I know that if you delete a product and then look at an order in the admin that causes issues, at least it did for this one scenario I was dealing with.
I was thinking of creating a giant bundle product that had like 6 different bundle items and each item could potentially have like 500 products and then based on what the user selects I programmatically add the bundle to cart. But then I wasn't sure if there would be a negative affect with having a gigantic bundle product like that as well.
UPDATE:
I don't think this will work, obviously there are a lot of information tied to the product in the database and we setup a test and right away we get an error for $item->getProduct(). We are moving forward with creating a giant bundle product and also the generic product with adding custom options on the fly, which Anda pointed out below. Any other suggestions will be greatly appreciated.
I'm not sure that clockworkgeek's approach is going to work. On every page load, Magento loads the items from the cart to make sure that they are still valid (in-stock, prices correct, etc), and amends the cart to reflect those values. My understanding of the system in the past has been that a product in the cart needs to have a corresponding database value to survive this process.
The "giant bundle product" approach is a pain, but in the past has been the best approach I have found. Attempting to change the values of the product (such as price or attributes) will be overridden by the cart checks, so you need a product w/ maximal flexibility, such as an overly-customized bundle product or configurable product.
Hope that helps!
Thanks,
Joe
Why not create a generic product in db and then set the product customization as custom options (additional_options) on the fly depending on the user selection. You can add custom options to the product (actually to the quote item) without having to save them in the database. I did this once for a website that sells glasses with prescription. The prescription was added as an option.
You can programmatically create Mage_Sales_Model_Quote_Items and add them to the cart. You've noticed it needs a product to match it's product ID but it needn't be a useful one. It could be a blank, disabled product, also created in code. All that's needed is a stub.
The necessary stuff for the cart is stored in the quote item - fields like name, value and quantity. Those fields are then copied directly to the order without using a product.
Mage::getModel('catalog/product')
creates a new product. you can add it to a cart, by doing something like this:
$cart = Mage::getSingleton('checkout/cart');
$product = Mage::getModel('catalog/product')
->setStoreId($storeid)
->setTypeId($type_id)
->setQty($quantyty)
->setWhatAttributYouWant($attribute);
$cart->addProduct($product);
product attributes you can find in the DB in tables that start like catalog_product_... or take an already created product, and see what attributes it has in the _data array (with debugger or just print_r($product->getData))

Resources