うん、それはあなたがそのベース価格を算出した方法に関しては、販売価格設定を使用するときにMagentoの注文レコードに周りのすべての歴史を残していない痛みのようなものです。
幸運なことにオープンソースなので、好きなときにこれを修正することができます。
私は最近、この非常に問題に対処するために注文記録がロードされたときに発生するオブザーバーを書いた。製品の現在の小売価格でbase_price
という行を相互参照します。不一致がある場合は、オーダー項目に2つのフィールドを追加して、この情報をリッスンしている外部スクリプト(この場合、MagentoのSOAP APIを使用して注文をSAPに送信するカスタム注文履行スクリプト)に公開します。
ここで基本的な考え方だ - app/code/local/YourCo/SalePricing
でモジュールを作成し、あなたのオブザーバーを実行する際のMagentoを伝えるために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
ニーズをオブザーバークラスを設定します。
<?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>
app/etc/modules/...
で新しいモジュールを有効にして、設定キャッシュをクリアしてくださいe。
今、注文をロードする際に、各アイテムをループして$item->getFullRetailPrice() --
を確認することができます。アイテムが販売されていることがわかっていれば(注文が行われてから価格が上がったか、 。あなたはまだなぜ、どの販売価格ルールが効力を発揮したのかわからないのですが、私たちのアプリケーションでは本当に気にしませんでしたし、その情報を注文と一緒に保存することはずっと厳しいものでした。
注文にカタログ価格が適用されることはありません。これらの規則は、価格インデクサによるカタログに適用されます。見積りは、この索引価格を製品価格として受け取ります。 – Zyava