针对应税/非应税销售的自定义Magento报告

时间:2012-10-24 17:03:08

标签: magento report data-collection

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

我遵循了优秀的教程here,我熟悉Alan Storm关于这个主题的概述。我的目标是创建一个自定义的Magento报告,在给定开始/结束日期的情况下,将返回以下总数:

  • 应税网(含税订单的SUM小计)
  • 非应税网(无税订单的SUM小计)
  • *总销售额(总计)
  • *净销售总额(总小计)
  • *总运费
  • *总税金

*对于这些数据,我发现它们可以在现有的单独报告中使用,也可以从它们手动计算,但是这份报告的目的是为我们的店主提供一个页面来访问并提交导出文件发送给他税务会计师。

我在Adminhtml中已经有了基本的报告结构,包括日期范围,我相信如果订单状态需要,我可以包含额外的过滤器等。现在我只需要提取正确的数据集合并找出如何检索相关数据。

我的麻烦在于我无法对订单数据的存储方式,加入是必要的(如果有的话),如何操作数据,或者它们如何与网格I'进行交互。我们成立了。我发现的有关该主题的现有教程都专门处理产品报告,而不是我需要的总销售数据。

非常感谢,如果有人能指出我正确的方向,可以帮助我了解如何使用Magento销售数据,或提供任何其他见解。

1 个答案:

答案 0 :(得分: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'
    ))

在mysql中找到desc sales_flat_order字段。

添加额外的加入左侧

好的,如果您需要其他表格的信息,您需要添加 - > 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'
));