how to refresh magento tier price cache after sql insert - caching

I've imported new tier prices into the magento database using the sql shown below and when I view the product in the admin, the tiers are correct. However, on the front-end, the tiers are not displayed under I Save the product in the back-end.
I've deleted the var/cache, rebuilt the Catalog Index, refreshed Inventory Stock Status (?) and even tried doing a bulk Update Attributes on those products, none of which seem to refresh the price cache. I can't find any value in the product entity tables that relate to tier pricing to tweak.
I see that there is a Price object in Mage_CatalogIndex which makes me think that it needs refreshing...
I'm using Magento v1.3.2.4 and have a couple of hundred SKUs that I don't want to manually have to Save in the backend!
insert ignore into `catalog_product_entity_tier_price` (all_groups, customer_group_id, qty, entity_id, `value`) select '0','5','12',entity_id,'10' from `catalog_product_entity` where category_ids = 3;
All suggestions welcome.
Thanks,
JD

I wonder if trying something like this will help?
$productsForCatalogIndexUpdate = array(123,1231); //Add your product ids here
if (count($productsForCatalogIndexUpdate)) {
Mage::log("About to update the catalog price index on the following products " . join(', ', $productsForCatalogIndexUpdate));
Mage::getModel('catalogindex/indexer')->plainReindex(
$productsForCatalogIndexUpdate,
Mage_CatalogIndex_Model_Indexer::REINDEX_TYPE_PRICE
);
Mage::getModel("catalogindex/observer")->clearPriceAggregation();
}
If I remember correctly it rebuilds the price index tables for the specified prices.

Related

Magento: Deleting archived products - Will the products inside orders be affected?

I have a lot of archived products that I would like to delete.
But I am using a function in the frontend where users can see their old orders and what products were bought:
$orders = Mage::getResourceModel('sales/order_grid_collection')
->addFieldToFilter('store_id', $storeId)
->load();
Some of the products in the orders are already archived.
When I delete all archived products, can the products inside the orders still be accessed? Or will I lose those products?
As answered by Marius:
"Normally, the orders don't have only references to the order products, but they also keep product values (that might seam redundant) because you want to see a snapshot of the product you ordered at the time you ordered it.
This way you avoid seeing new prices or descriptions.
The order history section that magento offers by default works even if you delete ordered products.
but if you have a custom code that loads a product collection or a product to get additional info, it will be affected if you delete the products.
If the only code you use is the one you shown in the question you should be save.
I suggest trying to delete the products first on a staging server then do it on live.
and backup before doing anything."
(If you want to upvote, please consider upvoting his answer too)

magento get value from sales_flat_order_item table for print in invoice page

i am using magento 1.7.0.2.In sales_flat_order_item table i have created a field "real_original_price" where i storing product's original price(in case of special price).Price is storing properly.Now problem is how do i show the real_original_price field's data in my invoice page .Actually my target is showing user discounted amount in invoice that is (original price - sell price). How do i achieve this.any idea
https://www.sonassi.com/knowledge-base/magento-kb/display-attributes-on-invoice-or-packing-slip-in-magento/
You can write an observer on order save or invoice save event. In the observer you can fetch the original price from catalog_product_entity and update in sales_flat_order.

Is there a way to see which items are not categorized in magento?

Is there a way to see which items are not categorized in magneto on the backend? I know I can pull a report but I was wondering if there was anything easier?
You can use the free Enhanced Admin Grids extension, as the github version allows to add a categories column on the products grid, for which it is optionally possible to filter on products that are not assigned to any category.
Not natively in the Magento backend.
You could run a simple SQL query against your database to grab a list of skus that aren't assigned to a category.
Something like this:
SELECT sku FROM catalog_product_entity
WHERE entity_id
NOT IN (SELECT product_id FROM catalog_category_product)
Which will return a list of all skus not assigned to a category. From there you can save the results to a CSV using your SQL program.

Magento: Revert price data from index. False price data saved, but not indexed

i hope i am able to describe the problem correctly here, as it is quite complex. I guess you guys are my last chance.
We have ca. 120 config products based on 600 simple products. Some days ago, we accidently overwrote all the prices of the simple products with false prices. We did not notice as in the frontend every price is still ok, they are not indexed.
So we now have the correct prices in the frontend, but the wrong prices for the simple products in the backend.
Is there any method the get the prices from the indexed frontend and write them back in the backend?
Until i reindex all proces should be ok in the frontend.
Does anyone have any idea what i could do to get the prices right again?
If you browse the database, there should be a catalog_product_flat_1 table - this is basically your product index. You should have columns for all the product attributes (including SKU and Price) so you could export this table, then do a product export from Magento, then update all the prices/SKUs accordingly and re-import. Or duplicate the flat_1 table, then write a PHP script to loop through it, updating all the prices, then re-index your data (after checking it's worked of course!)

Magento, problem with catalog_product_flat

We have a website with 2 store views: FR and EN. For some products after import catalog_product_flat for EN store view is not refreshed. In EAV tables everything is fine. Data re-index should truncate this flat table and fill it with updated data. Somehow it doesn't work for some items.
Did anyone of you had a similar problem? I'd appreciate for any clues or advices on this topic.
EDIT
I have made further checks and I was wrong about EAV tables. It turns out that catalog_product_entity_varchar is consistent with catalog_product_flat. So flat table has the same data as EAV table but in the Admin Panel values are wrong. For EN store view they are the same as default values, only for some products (magic? ;)). On my local PC I didn't encounter such issue. This is only on our production environment. As far as I know we do not use any DB replication (which could be the issue here).
EAV database model is used by Magento for easy upgrade and development as this model gives more flexibility to play with data and attributes.
When flat catalog is enabled in Magento then all the above product attributes (id, name, price) are kept in one table named like catalog_product_flat. Then Magento fetches product data from the flat table rather than joining all the other smaller tables.
There are two types of Flat Catalog:
1) Flat Catalog Product
2) Flat Catalog Category
Flat Categories are recommended for any Magento installation for improved performance.
Flat Products is designed and recommended for catalogs that have over 1000 SKU’s.
Enable Flat Catalog Category:
Go to Admin Panel->System->Cache Management->Rebuild Flat Catalog Category
Go to Admin Panel->System->Configuration->Catalog->Frontend->Use Flat Catalog Category = Yes
Enable Flat Catalog Product:
Go to Admin Panel->System->Cache Management->Rebuild Flat Catalog Product
Go to Admin Panel->System->Configuration->Catalog->Frontend->Use Flat Catalog Product = Yes
Remember that, initially the selection list of
Admin Panel->System->Configuration->Catalog->Frontend->Use Flat Catalog Product
OR,
Admin Panel->System->Configuration->Catalog->Frontend->Use Flat Catalog Product
is non-editable. You have to rebuild Flat Catalog from Cache Management. Only then the selection list becomes editable.
Make sure that while importing of the Catalog Products, the required attributes of the products are provided with correct values in the import file. If this is not done properly, then Data re-index may not function correctly.
Also before re-indexing, it is always advisable & wise to clear the cache from the "Cache Management" & from the "cache" folder of your Magento installation directory.
Hope it helps.
I was wrong about what's wrong. And everything is OK with database. The problem was an order of attributes that are retrieved from DB.
In Mage_Eav_Model_Entity_Abstract we can find:
$selects = array();
foreach ($this->getAttributesByTable() as $table=>$attributes) {
$selects[] = $this->_getLoadAttributesSelect($object, $table);
}
if (!empty($selects)) {
$values = $this->_getReadAdapter()->fetchAll(implode(' UNION ', $selects));
foreach ($values as $valueRow) {
$this->_setAttribteValue($object, $valueRow);
}
}
Line implode(' UNION ', $selects) concatenates all select statements. But there is no ORDER BY, so data can be retrieved in random order. As a matter of fact, for some of the products it is like this. That select takes values of attributes for store view 0 (always) and selected store view (current one).
Array $values contains of arrays with attributes properties. Order does matter here, because if attribute (for example 'name') for store view e.g. 1 will be proceed before one for store view 0, then it will be overwritten.
Solution is to add ORDER BY clause to the $selects or sort $values array.

Resources