2

让我先说我是 Magento 以及一般数据集合的新手(最近才开始使用 OOP/框架)。

我在这里学习了优秀的教程,并且我熟悉 Alan Storm 对该主题的概述。我的目标是创建一个自定义 Magento 报告,给定开始/结束日期,将返回以下总数:

  • 应税净额(含税订单的 SUM 小计)
  • 非应税净额(不含税订单的 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_order仅在 mysql 中查找字段。

添加额外的左连接

好的,如果您想从其他表中获取信息,则需要添加 ->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),基本上从这里返回的任何内容都会放入网格中,而且我不是 100% 确定它是如何工作的,而且看起来有点对我来说很神奇。

好的,首先 $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;

将在两行上返回相同的项目。

对不起,我已经开始失去情节了,如果有什么不明白的地方就问,希望这会有所帮助。

哦,添加到 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 回答