2

私は Magento だけでなく、一般的なデータ コレクションも初めてです (ごく最近、OOP/フレームワークを使い始めたばかりです)。

私はこちらの優れたチュートリアルに従っており、この件に関する Alan Storm の概要に精通しています。私の目的は、開始日/終了日を指定すると、次の合計を返すカスタム Magento レポートを作成することです。

  • 課税対象額 (税込み注文の小計の合計)
  • 非課税ネット (税抜きの注文の小計の SUM)
  • ※総売上高(総計)
  • ※総売上高(小計)
  • *合計送料
  • *総税

*これらの数値については、既存の別のレポートで入手できるか、それらから手動で計算できることを認識していますが、このレポートの目的は、店舗の所有者が単一のページにアクセスしてファイルをエクスポートし、税のために会計士に送信できるようにすることです。目的。

日付範囲を含む基本的なレポート構造は既に Adminhtml に配置されており、必要に応じて注文ステータスなどに追加のフィルターを含めることができると確信しています。あとは、正しいデータ コレクションを取得し、関連データを取得する方法を理解する必要があります。

私の問題は、注文データがどのように保存されているか、どの結合が必要か (もしあれば)、取得したデータをどのように操作するか、または設定したグリッドとどのようにインターフェースするかについて、頭も尻も作ることができないことです。 . 私が見つけた主題に関する既存のチュートリアルはすべて、私が必要とする総売上データとは対照的に、特に製品レポートを扱っています。

Magento の販売データの操作方法を理解するのに役立つリソースや、その他の洞察を提供してくれるリソースを誰かが正しい方向に向けてくれたら、よろしくお願いします。

4

1 に答える 1

0

私は非常に似たものに取り組んでおり、そのチュートリアルをベースとして使用しました。

拡張オーダー ジョイン インナー

必要な注文情報のほとんどはsales_flat_order$this->getTable('sales/order')

これは実際には彼女のコードに既に存在しますが、配列は空なので、必要なフィールドを入力する必要があります。たとえば、私のものです:

->joinInner(
    array('order' => $this->getTable('sales/order')),
        implode(' AND ', $orderJoinCondition),
    array(
        'order_id' => 'order.entity_id',
        'store_id' => 'order.store_id',
        'currency_code' => 'order.order_currency_code',
        'state' => 'order.state',
        'status' => 'order.status',
        'shipping_amount' => 'order.shipping_amount',
        'shipping_tax_amount' => 'order.shipping_tax_amount',
        'shipping_incl_tax' => 'base_shipping_incl_tax',
        'subtotal' => 'order.subtotal',
        'subtotal_incl_tax' => 'order.subtotal_incl_tax',
        'total_item_count' => 'order.total_item_count',
        'created_at' => 'order.created_at',
        'updated_at' => 'order.updated_at'
    ))

desc sales_flat_ordermysqlでフィールドを見つけるには。

Join Left の追加

わかりましたので、他のテーブルからの情報が必要な場合は、 ->joinLeft() を追加する必要があります。たとえば、出荷追跡番号が必要でした:

結合条件を作成します。

$shipmentJoinCondition   = array(
    $orderTableAliasName . '.entity_id = shipment.order_id'
);

左結合を実行します。

->joinLeft(
    array('shipment' => $this->getTable('sales/shipment_track')),
        implode(' AND ', $shipmentJoinCondition),
    array(
        'track_number' => 'shipment.track_number'
    )
)

申し訳ありませんが、ここにスニペットをドロップするだけで、これ以上詳しく説明できませんでした。

計算の実行

グリッドに返されるデータを変更するには、モデルで addItem(Varien_Object $item) を変更する必要があります。基本的に、ここから返されるものはすべてグリッドに配置されます。私には魔法です。

まず最初に、$item はオブジェクトです。このオブジェクトに対して何を行っても、オブジェクトにとどまります (申し訳ありませんが、ひどい説明です): 例として、各注文を別の行に返し、それぞれに (1/3, 2/ 3、3/3)、私が行った変更はすべて注文オブジェクトにグローバルに適用されるため、すべて (3/3) が表示されます。ファンキーなことが起こり始めた場合は、PHP Cloneを使用してください。

$item_array = clone $item;

これで、ロジックに任意のキーを配列に追加でき、Grid.php でアクセスできるようになります。

例(subtotal_incl_taxが存在するため悪い):

$item_array['my_taxable_net_calc'] = $item['sub_total'] + $item['tax'];

次に、最後に次のようにします。

$this->_items[] = $item_array;
return $this->_items;

$this->_items[]; にデータを追加するだけで、既存のものに基づいてさらに行を追加することもできます。

$this->_items[] = $item_array;
$this->_items[] = $item_array;
return $this->_items;

2 行で同じアイテムを返します。

申し訳ありませんが、プロットを失い始めました。何か意味がない場合は、質問してください。これがお役に立てば幸いです。

ああ、Block/Adminhtml/namespace/Grid.php に追加する

$this->addColumn('my_taxable_net_calc', array(
    'header'    => Mage::helper('report')->__('Taxable Net'),
    'sortable'  => false,
    'filter'    => false,
    'index'     => 'my_taxable_net_calc'
)); 
于 2012-10-25T09:59:07.403 に答える