Sí, es un tipo de dolor que Magento no deja ninguna historia alrededor en el registro de la orden cuando se utiliza la venta de precios con respecto a cómo se ha calculado que el precio base.
Afortunadamente es de código abierto, por lo que puede parchearlo si lo desea.
Hace poco escribí un observador que se dispara cuando se carga el registro de la orden, para solucionar este problema. Hace referencia cruzada a la línea base_price
con el precio de venta total actual del producto. Si hay una discrepancia, agrega un par de campos al elemento de pedido para ayudar a exponer esta información a cualquier script externo que esté escuchando (en nuestro caso, un script de cumplimiento de pedidos personalizado que retransmite pedidos a SAP utilizando la API SOAP de Magento).
Ésta es la idea básica - hacer un módulo en app/code/local/YourCo/SalePricing
y configurar una clase de observador en app/code/local/YourCo/SalePricing/Model/Promo/Observer.php
<?php
class YourCo_SalePricing_Model_Promo_Observer
{
public function __construct()
{
}
// tag order items that have a sale-price
// with original retail price and total sale discount for this line
public function report_sale_pricing($observer)
{
$event = $observer->getEvent();
$order = $event->getOrder();
$items = $order->getAllItems();
foreach ($items as $item) {
// heads up, you may want to do this for other types as well...
if ($item->getProductType() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
$regular_price = $this->_lookupFullRetail($item,$order->getStoreId());
$sale_price = $item->getBasePrice();
if ($regular_price - $sale_price > 0.005) {
$qty = $item->getQtyOrdered();
$total_sale_discount = ($regular_price * $qty) - ($sale_price * $qty);
$item->setFullRetailPrice((string)$regular_price);
$item->setSaleDiscount((string)$total_sale_discount);
}
}
}
}
private function _lookupFullRetail(&$item,$store_id)
{
$mpid = $item->getProductId();
$p = Mage::getModel('catalog/product')->setStoreId($store_id)->load($mpid);
return $p->getPrice();
}
}
etc/config.xml
las necesidades de su módulo de decir Magento cuándo ejecutar el observador:
<?xml version="1.0"?>
<config>
<global>
<models>
<yourco_salepricing>
<class>YourCo_SalePricing_Model</class>
</yourco_salepricing>
</models>
<events>
<sales_order_load_after>
<observers>
<yourco_salepricing>
<type>singleton</type>
<class>YourCo_SalePricing_Model_Promo_Observer</class>
<method>report_sale_pricing</method>
</yourco_salepricing>
</observers>
</sales_order_load_after>
</events>
</global>
</config>
Asegúrese de activar su nuevo módulo en app/etc/modules/...
y borre la configuración cach mi.
Ahora, cuando cargue el pedido, puede recorrer cada artículo y verificar $item->getFullRetailPrice() --
si está allí, usted sabe que el artículo estaba a la venta (bueno, o eso o el precio ha subido desde que se realizó el pedido) . Todavía no sabes por qué, es decir, qué regla de precio de venta estaba en vigencia, pero para nuestra aplicación realmente no nos importaba, y conseguir esa información para guardarla con la orden hubiera sido una modificación mucho más dura.
No se pueden obtener precios de catálogo aplicados para ordenar en absoluto. Estas reglas se aplican al catálogo por indexador de precios. La cotización recibe este precio indexado como precio del producto. – Zyava