0

アイテムが在庫に戻されたかどうかを保存するために、クレジットメモページをカスタマイズする必要があります。

私はオブザーバーを次の場所で特定しました:

app\code\core\Mage\CatalogInventory\Model\Observer.php
refundOrderInventory()

これは、管理者が[在庫に戻す]チェックボックスがオンになっているクレジットメモを送信したときにトリガーされます。だから私は何かを書いたり保存したりするために自分のオブザーバーを追加できることを知っています。

しかし、クレジットメモの商品アイテムに属性を追加する方法がわかりません。

誰かが私にいくつかのポインタを教えてもらえますか?

更新:編集することで、返品テーブルセル を追加することもできます。

app\design\adminhtml\default\default\template\sales\order\creditmemo\view\items.phtml

app\design\adminhtml\default\default\template\sales\order\creditmemo\view\items\renderer\default.phtml

私にこれを与えるために: クレジットメモの商品属性にカスタム列を追加

そこに表示される「YES」の値をハードコーディングしました。これを書き込み可能/読み取り可能なクレジットメモ製品属性にする方法を見つける必要があります。

4

1 に答える 1

2

インストールスクリプトで、属性と列をクレジットメモアイテムエンティティに追加する必要があります。には関数Mage_Eav_Model_Entity_Setupがないため、必ずセットアップクラスを設定してください。addAttribute()Mage_Core_Model_Resource_Setup

$installer->addAttribute('creditmemo_item', 'returned_to_stock', array('type' => 'int', 'grid' => true, 'source' => 'adminhtml/system_config_source_yesno'));
$installer->getConnection()->addColumn($installer->getTable('sales/creditmemo_item'), 'returned_to_stock', 'TINYINT(1) unsigned DEFAULT 0');

次に、オブザーバーで(リストしたオブザーバーを変更しないでください)、値をtrueに設定します(リストした関数をコピーし、ポイントを示すために少し変更しました)。

public function refundOrderInventory($observer)
{
    $creditmemo = $observer->getEvent()->getCreditmemo();
    $items = array();
    foreach ($creditmemo->getAllItems() as $item) {
        $return = false;
        if ($item->hasBackToStock()) {
            if ($item->getBackToStock() && $item->getQty()) {
                $return = true;
            }
        } elseif (Mage::helper('cataloginventory')->isAutoReturnEnabled()) {
            $return = true;
        }
        if ($return) {
            $item->setReturnedToStock(1);
        }
    }
}
于 2012-11-16T00:22:20.503 に答える