2015-12-03 7 views
5

私はモジュールや休閑状況に対処する方法を探してきた:は、Magentoのレポートにカスタム列を追加し、販売ダッシュボード

顧客は100 $で、$ 10の出荷を支払う製品を注文します。それは彼に総額110 $を請求するでしょう。製品が到着する頃には、製品に少し傷がついていることに気付き、それを返送するのではなく、割引を受け取ることに同意します。

これが適切に行われるためには、30ドルと言う調整払いでクレジットメモを作成します。

この操作後に残っている合計額(80 $)は、レポートまたは販売ダッシュボードの別の列で確認する必要があります。

このタスクでは、「IksanikaによるAdvanced Orders Manager」というモジュールもインストールしましたが、これはすでにデータベースに存在するデータを取得するだけで、変数を使用して減算を行うことはできません。

また、Magentoのレポートでは、Reports> Sales> Ordersを使用していますが、合計数値のみが表示されます。正確な最終数値(80 $)を求める「合計金額」は見つかりません。

これは、オンラインストアの会計dptの特別な要求です。

+0

独自のソリューションをコーディングしたいのですか、拡張機能を探していますか? – Enigmativity

+0

@Enigmativityはどちらでもよいでしょう – Mike

答えて

4

カスタムグリッド列を受注グリッドに追加します。

Magentoはデータベーステーブルsales_flat_orderを使用して、受注グリッドの値を入力します。残念ながら、sales_flat_orderテーブルでは、必要な情報(払い戻し額から払い戻し額を差し引いたもの)ではなく、両方の値を別々に(grand_totalとtotal_refunded)提供しています。

  • がテーブル sales_flat_orderを拡張:そのため、あなたは複数のオプションがあります。
  • カスタム受注グリッド列にカスタムレンダラーを追加します。

この世界のすべてにおいて、両方の方法には長所と短所があります。

sales_flat_orderテーブルを拡張する場合は、新しい注文を作成するときに新しいデータベース列の値が設定されていることを確認する必要があります。一方、値はデータベースに保持されているため、他の拡張機能の列を使用することができます。

カスタムレンダラでは、永続性を気にする必要はありません。オペレーションを行い、結果を返す機会があります。これは、カスタム受注グリッドの列に表示されます。 grand_totalとtotal_refundedの両方が既に保存されているので、払い戻し額を差し引いた額を返すことができます。

カスタム注文レンダリング列を追加し、grandtotalから払い戻し額を引いた値を返すカスタムレンダラーを追加する方法について説明します。

パート1:カスタム列をバックエンドの受注グリッドに追加するにはどうすればよいですか?最初に、独自の販売注文グリッドブロックXX_ModuleName_Block_Adminhtml_Order_Gridを追加し、販売注文のグリッドにカスタム列を追加するには

magentos ** Mage_Adminhtml_Block_Sales_Order_Grid *(app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php)を書き直し、受注グリッドで延長してください。

カスタム列のオーバーライドを追加するには_prepareColumns()メソッド。上書きされた_prepareColumns()の中で、最初に親クラスの列を追加します。最後に、カスタム列を追加してください。

注:download the example moduleです。

$this->addColumn('my_column', array(
    'header' => Mage::helper('sales')->__('My Column'), 
    'index' => 'my_column', 
    'type' => 'text', 
    'renderer' => 'XX_ModuleName_Block_Adminhtml_Order_Grid' 
)); 

例など/ config.xmlに:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <EG_AdminSalesOrder> 
      <version>1.0.0</version> 
     </EG_AdminSalesOrder> 
    </modules> 
    <global> 
     <blocks> 
      <eg_adminsalesorder> 
       <class>EG_AdminSalesOrder_Block</class> 
      </eg_adminsalesorder> 
      <adminhtml> 
       <rewrite> 
        <sales_order_grid>EG_AdminSalesOrder_Block_Adminhtml_Order_Grid</sales_order_grid> 
       </rewrite> 
      </adminhtml> 
     </blocks> 
     <helpers> 
      <eg_adminsalesorder> 
       <class>EG_AdminSalesOrder_Helper</class> 
      </eg_adminsalesorder> 
     </helpers> 
    </global> 
</config> 

例カスタム販売注文グリッド・ブロック:

class EG_AdminSalesOrder_Block_Adminhtml_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid 
{ 
    /** 
    * Add custom column to sales order grid 
    * 
    * @return Mage_Adminhtml_Block_Widget_Grid 
    * @throws Exception 
    */ 
    protected function _prepareColumns() 
    { 
     $this->addColumn('real_order_id', array(
      'header'=> Mage::helper('sales')->__('Order #'), 
      'width' => '80px', 
      'type' => 'text', 
      'index' => 'increment_id', 
     )); 

     if (!Mage::app()->isSingleStoreMode()) { 
      $this->addColumn('store_id', array(
       'header' => Mage::helper('sales')->__('Purchased From (Store)'), 
       'index'  => 'store_id', 
       'type'  => 'store', 
       'store_view'=> true, 
       'display_deleted' => true, 
      )); 
     } 

     $this->addColumn('created_at', array(
      'header' => Mage::helper('sales')->__('Purchased On'), 
      'index' => 'created_at', 
      'type' => 'datetime', 
      'width' => '100px', 
     )); 

     $this->addColumn('billing_name', array(
      'header' => Mage::helper('sales')->__('Bill to Name'), 
      'index' => 'billing_name', 
     )); 

     $this->addColumn('shipping_name', array(
      'header' => Mage::helper('sales')->__('Ship to Name'), 
      'index' => 'shipping_name', 
     )); 

     $this->addColumn('base_grand_total', array(
      'header' => Mage::helper('sales')->__('G.T. (Base)'), 
      'index' => 'base_grand_total', 
      'type' => 'currency', 
      'currency' => 'base_currency_code', 
     )); 

     $this->addColumn('grand_total', array(
      'header' => Mage::helper('sales')->__('G.T. (Purchased)'), 
      'index' => 'grand_total', 
      'type' => 'currency', 
      'currency' => 'order_currency_code', 
     )); 


     $this->addColumn('refunded', array(
      'header' => Mage::helper('sales')->__('Total - Refund'), 
      'index' => 'refunded', 
      'type' => 'text', 
      'renderer' => 'EG_AdminSalesOrder_Block_Adminhtml_Sales_Order_Grid_Widget_Renderer_Refunded' 
     )); 

     parent::_prepareColumns(); 
    } 
} 

パート2:用のカスタムレンダラを追加する方法私のカスタム列?

カスタムレンダラーを追加して、カスタム受注グリッド列に値を入力することができます。

最初に追加レンダラークラスXX_ModuleName_Block_Adminhtml_Sales_Order_Grid_Widget_Renderer_MyColumnを追加します。

Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract

レンダリング(Varien_Object $ row)メソッドをオーバーライドします。ここでは、特定の操作を行い、グリッドに表示される文字列を返します。あなたの場合、現在の$行 paramのオーダーコレクションを読み込み、合計払い戻し金額を取得し、払い戻し金額で払い戻し金額を引いて値を返却したいとします。

例のカスタムレンダラブロック:

class EG_AdminSalesOrder_Block_Adminhtml_Sales_Order_Grid_Widget_Renderer_Refunded 
    extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract 
{ 
    /** 
    * @param Varien_Object $row 
    * @return string 
    */ 
    public function render(Varien_Object $row) 
    { 
     $currentOrderId = $row->getId(); 
     $currentOrderGrandTotal = $row->getGrandTotal(); 

     $orderCollection = Mage::getModel('sales/order')->getCollection(); 
     $orderCollection->addFieldToSelect('total_refunded'); 
     $orderCollection->addFieldToFilter('entity_id', array('eq' => $currentOrderId)); 
     $orderCollectionItem = $orderCollection->getFirstItem(); 
     $refundedAmount = $orderCollectionItem->getTotalRefunded(); 

     $grandTotalWithoutRefundedAmount = (float)$currentOrderGrandTotal - (float)$refundedAmount; 
     $grandTotalWithoutRefundedAmount = Mage::helper('core')->currency($grandTotalWithoutRefundedAmount); 

     return (string)$grandTotalWithoutRefundedAmount; 
    } 
} 

することができますdownload the example module

+0

答えを更新して、編集する必要のあるファイルの場所を指摘してください。 – Mike

+0

@mugur:ファイルパスを追加しましたが、コアファイルを直接編集しないでください。ここに記載されているように、コアブロックを書き直す必要があります:http://inchoo.net/magento/overriding-magento-blocks-models-helpers-and-controllers/ – clinical

+0

何らかの理由で動作していません。これをGrid.php http://pastebin.com/GkRtxmiYとこれをRendererフォルダhttp://pastebin.com/fCgWGcc1の新しいファイルに追加しました。ログはきれいであり、構文エラーも論理的な問題もありません。 – Mike

関連する問題