Magento模块更改仪表板图 [英] Magento module to change dashboard graph

查看:49
本文介绍了Magento模块更改仪表板图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在关注这篇帖子,以允许处理中"订单的销售显示在仪表盘图上.我的文件在正确的目录下面和内部,并且在config> advanced中显示为活动状态.我还重新索引,刷新了缓存和刷新了生命周期统计信息.我在日志中看不到任何错误.你看错了吗?我有firegento并启用了日志记录,但这也不起作用.

I am following along with this post Change the Dashboard Graph in version 1.7/1.12 of Magento to allow the sales of "processing" orders to show up on the dashboard graph. My files are below and within the right directories as well as showing up as active in config>advanced. I have also reindexed, refreshed cache, and refreshed lifetime statistics. I am seeing no errors in the logs. Can you see what is wrong? I have firegento and have enabled logging, but that's not working either.

仪表板上的总收入"似乎正确,但未反映在时间线图上.例如,在上午10点可能有一个净30个条款的价格为$ 2000的订单,但它没有显示在时间图上.凡是可以修复以下脚本以在我的时间轴上反映出来的人,都可以得到赏金!

The Revenue total on the dashboard seems correct, but its not reflecting on the timeline graph. For example there may be a net 30 terms order of $2000 at 10AM but it doesn't show on the time graph. Bounty for whoever can fix the script below to reflect on the timeline for me!

CaitlinHavener/Dashboard/etc/config.xml:

CaitlinHavener/Dashboard/etc/config.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <CaitlinHavener_Dashboard>
            <version>1.0</version>
        </CaitlinHavener_Dashboard>
    </modules>
    <global>
        <models>
            <CaitlinHavener_Dashboard>
                <class>CaitlinHavener_Dashboard_Model</class>
            </CaitlinHavener_Dashboard>
            <reports_resource>
                <rewrite>
                    <order_collection>CaitlinHavener_Dashboard_Model_Reports_Resource_Order_Collection</order_collection>
                </rewrite>
            </reports_resource>
        </models>
    </global>
</config>

CaitlinHavener/仪表板/模型/报告/资源/Order/Collection.php

CaitlinHavener/Dashboard/Model/Reports/Resource/Order/Collection.php

    <?php
/**
 * Show all orders, not only the invoiced one
 */
class CaitlinHavener_Dashboard_Model_Reports_Resource_Order_Collection extends Mage_Reports_Model_Resource_Order_Collection
{
    protected function _prepareSummaryLive($range, $customStart, $customEnd, $isFilter = 0)
    {
        $this->setMainTable('sales/order');
        $adapter = $this->getConnection(); 
        /**
         * Reset all columns, because result will group only by 'created_at' field
         */
        $this->getSelect()->reset(Zend_Db_Select::COLUMNS);

       /*  $expression = sprintf('%s - %s - %s - (%s - %s - %s)',
            $adapter->getIfNullSql('main_table.base_total_invoiced', 0),
            $adapter->getIfNullSql('main_table.base_tax_invoiced', 0),
            $adapter->getIfNullSql('main_table.base_shipping_invoiced', 0),
            $adapter->getIfNullSql('main_table.base_total_refunded', 0),
            $adapter->getIfNullSql('main_table.base_tax_refunded', 0),
            $adapter->getIfNullSql('main_table.base_shipping_refunded', 0)
        ); */

        $expression = sprintf('%s - %s - %s - (%s - %s - %s)',
            $adapter->getIfNullSql('main_table.base_total_invoiced', 'main_table.base_grand_total'),
            $adapter->getIfNullSql('main_table.base_tax_invoiced', 'main_table.base_tax_amount'),
            $adapter->getIfNullSql('main_table.base_shipping_invoiced',  'main_table.base_shipping_amount'),
            $adapter->getIfNullSql('main_table.base_total_refunded', 0),
            $adapter->getIfNullSql('main_table.base_tax_refunded', 0),
            $adapter->getIfNullSql('main_table.base_shipping_refunded', 0)
        );


        if ($isFilter == 0) {
            $this->getSelect()->columns(array(
                'revenue' => new Zend_Db_Expr(
                    sprintf('SUM((%s) * %s)', $expression,
                        $adapter->getIfNullSql('main_table.base_to_global_rate', 0)
                    )
                 )
            ));
        } else {
            $this->getSelect()->columns(array(
                'revenue' => new Zend_Db_Expr(sprintf('SUM(%s)', $expression))
            ));
        }

        $dateRange = $this->getDateRange($range, $customStart, $customEnd);

        $tzRangeOffsetExpression = $this->_getTZRangeOffsetExpression(
            $range, 'created_at', $dateRange['from'], $dateRange['to']
        );

        $this->getSelect()
            ->columns(array(
                'quantity' => 'COUNT(main_table.entity_id)',
                'range' => $tzRangeOffsetExpression,
            ))
            //BOF modification
           ->where('main_table.state NOT IN (?)', array(
                Mage_Sales_Model_Order::STATE_PENDING_PAYMENT,
               // Mage_Sales_Model_Order::STATE_NEW
               )
            )
            //EOF modification
            ->order('range', Zend_Db_Select::SQL_ASC)
            ->group($tzRangeOffsetExpression);

        $this->addFieldToFilter('created_at', $dateRange);

        return $this;
    }

    protected function _calculateTotalsLive($isFilter = 0)
    {
        $this->setMainTable('sales/order');
        $this->removeAllFieldsFromSelect();

        $adapter = $this->getConnection();

        // $baseTotalInvoiced    = $adapter->getIfNullSql('main_table.base_grand_total', 0);
        // $baseTotalRefunded    = $adapter->getIfNullSql('main_table.base_discount_refunded', 0);
        // $baseTaxInvoiced      = $adapter->getIfNullSql('main_table.base_tax_amount', 0);
        // $baseTaxRefunded      = $adapter->getIfNullSql('main_table.base_tax_refunded', 0);
        // $baseShippingInvoiced = $adapter->getIfNullSql('main_table.base_shipping_amount', 0);
        // $baseShippingRefunded = $adapter->getIfNullSql('main_table.base_shipping_refunded', 0);
        // $baseShippingRefunded = $adapter->getIfNullSql('main_table.base_shipping_refunded', 0);

        $baseTotalInvoiced    = $adapter->getIfNullSql('main_table.base_total_invoiced', 'main_table.base_grand_total'); // This will check if there is no invoice it will calculate based on the grand totals ( so when you generate and invoice u will have no issues with the numbers also )
$baseTotalRefunded    = $adapter->getIfNullSql('main_table.base_total_refunded', 0);
$baseTaxInvoiced      = $adapter->getIfNullSql('main_table.base_tax_invoiced', 'main_table.base_tax_amount'); // Same here for taxes
$baseTaxRefunded      = $adapter->getIfNullSql('main_table.base_tax_refunded', 0);
$baseShippingInvoiced = $adapter->getIfNullSql('main_table.base_shipping_invoiced', 'main_table.base_shipping_amount'); // Same here for shipping 
$baseShippingRefunded = $adapter->getIfNullSql('main_table.base_shipping_refunded', 0);

        $revenueExp = sprintf('%s - %s - %s - (%s - %s - %s)',
            $baseTotalInvoiced,
            $baseTaxInvoiced,
            $baseShippingInvoiced,
            $baseTotalRefunded,
            $baseTaxRefunded,
            $baseShippingRefunded
        );
        $taxExp = sprintf('%s - %s', $baseTaxInvoiced, $baseTaxRefunded);
        $shippingExp = sprintf('%s - %s', $baseShippingInvoiced, $baseShippingRefunded);

        if ($isFilter == 0) {
            $rateExp = $adapter->getIfNullSql('main_table.base_to_global_rate', 0);
            $this->getSelect()->columns(
                array(
                    'revenue'  => new Zend_Db_Expr(sprintf('SUM((%s) * %s)', $revenueExp, $rateExp)),
                    'tax'      => new Zend_Db_Expr(sprintf('SUM((%s) * %s)', $taxExp, $rateExp)),
                    'shipping' => new Zend_Db_Expr(sprintf('SUM((%s) * %s)', $shippingExp, $rateExp))
                )
            );
        } else {
            $this->getSelect()->columns(
                array(
                    'revenue'  => new Zend_Db_Expr(sprintf('SUM(%s)', $revenueExp)),
                    'tax'      => new Zend_Db_Expr(sprintf('SUM(%s)', $taxExp)),
                    'shipping' => new Zend_Db_Expr(sprintf('SUM(%s)', $shippingExp))
                )
            );
        }


        $this->getSelect()->columns(array(
            'quantity' => 'COUNT(main_table.entity_id)'
        ))
        ->where('main_table.state NOT IN (?)', array(
            Mage_Sales_Model_Order::STATE_PENDING_PAYMENT,
            //Mage_Sales_Model_Order::STATE_NEW
            )
         );

        return $this;
    }

}
?>

推荐答案

您必须了解Magento中的订购流程,才能完全了解图表的填充方式

You have to understand the Order process in Magento so you can fully understand how the chart being populated

  1. 定单以新定单(如后付定单-货到付款,...)或待定定单(信用卡定单或贝宝等.所有在线支付方式)的形式进入商店.
    • 可以在此步骤取消订单(因为未生成发票).
  1. Order come to the Store as new Order ( like post paid orders - Cash on Delivery, ... ) or Pending order ( credit card orders or paypal etc.. all online payment methods ).
    • Order can be canceled at this step ( as no invoice generated ).

现在,如果您查看前面的步骤,将会发现如果订单处于 NEW并且已取消 STATE (不是状态)下,则不应该计算收入

Now if you look at the previous steps and you will see that the Revenue not supposed to be calculated if the Order is in NEW and CANCELED STATE ( not status )

应该在订单开具发票时进行计算(这样您将获得收入,运费和退款)

It should be calculated when the Order gets invoiced ( so you will get the revenue and shipping fees and the refunds )

因此要计算收入中"NEW STATE"中的订单,并使用"Override the method"(覆盖方法)图

So to count the orders in NEW STATE in the revenue and the graph Override the method

app/code/core/Mage/Reports/Model/Resource/Order/Collection.php
/**
 * Calculate totals live report
 *
 * @param int $isFilter
 * @return Mage_Reports_Model_Resource_Order_Collection
 */
protected function _calculateTotalsLive($isFilter = 0){}

   // Line 430
    ->where('main_table.state NOT IN (?)', array(
        Mage_Sales_Model_Order::STATE_PENDING_PAYMENT,
        Mage_Sales_Model_Order::STATE_NEW // Comment this line 
        )
     );

现在,如果您对此行发表评论,则订单将计入( ORDERS图表图形)

So now if you comment this line the order Will be counted in the ( ORDERS chart graph )

但仍未计算总计(因为没有发票/发货/退款)

but the totals is still not calculated ( because there is no invoice / shipments / refunds )

因此,您需要将计算过程从使用发票金额更改为仅在使用发票之前就使用总计,只需进行很小的更改就可以实现所需的内容而不会出现错误

So you need to change the calculation process from using the invoiced amount to use the TOTALS only even before invoice With small changes you can achieve what you want without mistakes Code below

更改行(390及以下,如下所示):

Change the lines ( 390 and below to be like the following ):

$baseTotalInvoiced    = $adapter->getIfNullSql('main_table.base_total_invoiced', 'main_table.base_grand_total'); // This will check if there is no invoice it will calculate based on the grand totals ( so when you generate and invoice u will have no issues with the numbers also )
$baseTotalRefunded    = $adapter->getIfNullSql('main_table.base_total_refunded', 0);
$baseTaxInvoiced      = $adapter->getIfNullSql('main_table.base_tax_invoiced', 'main_table.base_tax_amount'); // Same here for taxes
$baseTaxRefunded      = $adapter->getIfNullSql('main_table.base_tax_refunded', 0);
$baseShippingInvoiced = $adapter->getIfNullSql('main_table.base_shipping_invoiced', 'main_table.base_shipping_amount'); // Same here for shipping 
$baseShippingRefunded = $adapter->getIfNullSql('main_table.base_shipping_refunded', 0);

所以简单来说,解决方案不会更改计算方式,但是解决方案会更改计算的默认值

So In simple answer the solution is not changed the Way of calculation, But the solution change the Default values of the calculations

按照此更改,您将得到您真正想要的:)

Follow this changes and you will get what you exactly want :)

这篇关于Magento模块更改仪表板图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆