I have a Magento 1.6 website which will have to import products from several CSV files provided by the suppliers. I saw that there's an import function, but it won't be flexible enough for what I have to do.
To be specific, I have to tasks to perform:
Choosing a supplier for a product, when it's sold by multiple
suppliers.
Re-map product categories.
Here are the details of the above.
Choosing a supplier
Suppliers will provide their product lists, and different lists may contain the same products. The import function will have to compare the products to be imported and, following some logic, "assign" each product to one or the other supplier.
Example: product XYZ is sold by supplier A, supplier B and supplier C. A sells it cheaper, B is the second cheapest, C is the dearest. However, A doesn't have it in stock, B has a few and C has plenty. Product should then be "assigned" to B, and its details extracted from such list.
The effect of such assignment should be that, when our Customers will place an order, it will be automatically translated into multiple orders to our suppliers (I still have to find out how, though).
Re-mapping product categories
When we receive the product lists from the suppliers, they are associated to supplier's categories. For example, a flat screen TV might be in "Home Electronics" category in one supplier's list, and in "Electronics" in another list. We have therefore created a "map", which specifies, for each supplier category, the destination category in our system.
What I need to do is going through the imported products and re-assigning them to the proper category.
The logic of both tasks is quite easy, and I'd be able to implement it without any issue, if it wasn't for the fact that I'm completely new to Magento. What would be the best approach to tackle them, in such case? Should I implement a custom module? In case, what would be the best place to start?
Thanks in advance for the answers.
you have to make new import profile for this just create new import profile,put your csv file in var/import folder and make new php file for doing this, see how magento default import works then put your php file in app/code/local/Mage/Catalog/Model/Convert/Adapter/
and make some xml changes in import profile you have created and you are done
Related
I am trying to make something like in the following link, using Magento:
http://www.gemvara.com/jewelry/cushion-cut-candace-ring-8mm-gem/cushion-diamond-14k-white-gold-ring-with-diamond/2fgxv
You can see that product main images and all other details change.
Now I tried configuring a bundled product with combination of two or more simple products, but this will create too many products.
Suppose I configure the following:
1: 3 products of stones
2: 2 products of ring base
3: Than the total number of products that I will have to create will be 3(stones) + 2(stone base) +6(3*2 bundled product with all possible combinations) = 11 products
For more options, this will be to complicated to manage.
How can we use Magento to do this efficiently?
There are two ways to approach this scenario, depending on whether or not you need to manage inventory stock for each combination.
If you don't need to manage the inventory for each possible combination, then you can use a Simple Product type and use the Custom Options to provide the various options to customers. You can put in price adjustments as well as the SKU that is generated when various selections are shown.
If you do have to manage inventory stock for each combination, then you do have to create — in your example — 6 simple products. Then you can present them using the Configurable product type. In this way if one of the rings is out of stock, the remaining 5 possible combinations are still presented to the customer. Still allowing them to choose a stone and ring base, but not allowing the combination of the one out of stock to be chosen.
So, it really boils down to whether you need to manage stock or not. With Magento CE 1.9.1, there are also more robust swatch image functions that might be helpful with what you're trying achieve, as well.
If you want unique images for every permutation, you will need to create each simple product to achieve this. To make life easier, you could create all the products in a csv and them import with Magmi.
In order to achieve the image option links, check out the latest version of Magento (1.9.1) which now supports option swatches and will load the simple product's base image which would achieve the effect you are after.
Best
Tom
I am using magmi to import products into Magento.
I have a long list of simple products in a spreadsheet and it is a right pain going through it and adding a configurable product row for each set of products manually. It is of course also error prone.
I wonder if there is a way of processing this sheet automatically to add in the configurable product rows. It's fairly easy to see when one set of products changes to another.
I've browsed lots of forums and tried to do it through excel but can't seem to find a way of doing it. Has anyone any suggestions please?
Check if this helps!
http://huztechbuzz.wordpress.com/2014/06/03/magento-add-configurable-products-dynamically/
Let me know if you anything else.
Auto creating configurables as a 'feature' may have several pitfalls:
Which sku to use for the configurable ?
What if a similar configurable sku exists:
do you want to "append" associated product list with simples listed
or replace the associated product list with ?
what if the file has :
simples with configurable product to create
AND
"real" simples that should not be associated to any configurable but share the same attribute_set
So, in a "generic" way, many questions may be left without answers and ,as such, couldn't be mass automated that easily.
However, you have a specific need , for a specific workflow, implying specific data. Then in YOUR case, you (or someone you can hire) can write a magmi plugin that would create the configurable according to YOUR specifications.
I hadn't appreciated the capabilities of the magmi configurable product plugin until I saw this: https://www.blinkdata.com/magmi-configurable-item-processor/.
This showed me it's possible to import all the simple products in one file, and then import the configurable products from another file. The "trick" is to have SKUs with two components, along the lines cccc-ssss, with each group of simple products linked together by a common prefix cccc to the SKU. The configurable product has the SKU cccc.
Creating the configurable products file is not easy (for me at least), excel doesn't seem to have the best facilities for this but I found the following helpful: Getting unique values in Excel by using formulas only. I used the macro by totymedli. [I use this as the list of simple products I have are grouped by an attribute that has the same value for all products that can be within a configurable product.]
No doubt there are better ways but the main thing is the amount of manual work I have to do, and which is error prone, is reduced.
Here's the setup (using a made-up scenario), but applicable to my real situation:
For the purposes of this explanation, let's say that i design T-shirts (Let's call them ShirtA, shirtB, shirtC). Rather than selling them myself, i have several vendors that sell the product for me (we'll call them Vendors X, Y, and Z).
I have a table in my Joomla database for the vendors, and a table for the t-shirts.
When customers are buying from this vendor, they will visit my site and based on the ID url variable, will display a different vendor's page.
Each vendor can choose to sell all of my t-shirts, or only some of them. Additionally, the vendor can override the price that i have set in the t-shirt table, with their own.
In the admin section of the component, each vendor needs to be able to select which t-shirt they want to sell, and provide an optional price override.
This is how i imagine it looking...
Each vendor will have a column in their table that will contain the serialized data of a multidimensional array. The main array contains a sub-array for each t-shirt that i have in my t-shirt table. Each of those sub-arrays contains all of the override data (price, sizes offered, etc..).
How would i write the model, view, and/or edit page in a Joomla 2.5 component so that a vendor can select all of the options in the component admin page, and have it serialized in a column?
I am sorry if this is poorly explained and PLEASE PLEASE PLEASE don't hesitate to ask if you need further information in order to assist me.
Thanks!
I hate to say it, but I don't think that there is a "standard" method to do this in Joomla 2.5. Joomla has all kinds of ways to interact with the database and use their standard classes, but none of the classes are designed to work with serialized data to the best of my knowledge, so you would be stuck building all of the pieces by hand.
That being said, in general the model, should handle retrieving and storing the serialized data, the view would request any data in the database from the model, and the edit page should unserialize the data and display it in a way that your vendors can add their overrides. Beyond that it would be up to you to code each piece in your own way.
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))
Involved classes : Mage_Sales_Model_Quote_Item and Mage_Catalog_Model_Product.
I get both of them as a result of listening an event ( on cart add ). I am trying to update the quantity information for a product from an external source.
So far I based my code only on the product information and I am not sure if this is correct.
What is the purpose of Quote Items?
How about an bundled of configurable product? Do you have any recommendation on how to get the individual items from a bundle product?
Thanks
I want to thank both responders so far for their effort but their responses are pretty far from my question. I'll try to respond myself based on the things that I've learned.
A quote is a concept related to the order, only that is previous to that in terms of work flow in Magento. A real world concept is something like a preorder, like a postIt on which you place your asked dishes in a restaurant without being an order or a bill.
I was monitoring an event (checkout_cart_product_add_after) that is sending me the $product and the $orderItem. I understand now that is sending both in order to get information about the product and information about billing and the representation of that product in the future order.
In the case of the grouped products for example where the $product is Tshirt with various associated sizes, the $product will contain the SKU of the main grouped product and the $orderItem will contain the instance of the Tshirt that was selected ( medium size SKU ).
FYI: So in order to update the information of a product at cart update you have is better to get the product info from the $item if is a complex type ( bundle, configurable or grouped )
Magento drops quote items into the cart, specifically. Those quote items are retrieved by using $product->prepareForCart. These items also include different information, such as quantity and configurable product options (on a quote item).
From a backend perspective, data for products are stored in: catalog_product_entity_*, whereas quote items are stored in sales_flat_quote_item (at least in Enterprise. someone else might want to verify this on community).
EDIT: Attaching some code that we wrote to import product inventories a while back.
$product = Mage::getModel("catalog/product")->load($productId);
$product->seStockData(array(
"qty" => (int)$yourQuantity,
"is_in_stock" => ((int)$isTheProductInStock),
"manage_stock" => $manageStock,
"is_qty_decimal" => $isQtyDecimal,
"use_config_manage_stock" => $useConfigManageStock,
));
Mage::getModel('catalog/product_api')->update($sku,$product->getData());
For your purposes you may just need to call $product->save();, but I'm including the whole snippet as written because it works.
Hope that helps. Thanks,
Joe
My first answer would be that a product and a quote for a product are two separate entities and therefore should not be modelled in a unified entity.
An example of why would be from the company I work for, and why we model these things separately:
In our e-procurement system you might have a "contract" between a specific buyer and a seller. The "quote" item models this when it comes to invoice entries. If there isn't a contract use the normal product price to create a Quote Item else adjust the price using the "contract" between supplier and buyer.