Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 要更改仪表板图形的Magento模块_Php_Magento - Fatal编程技术网

Php 要更改仪表板图形的Magento模块

Php 要更改仪表板图形的Magento模块,php,magento,Php,Magento,我跟随这篇文章是为了让“处理”订单的销售显示在仪表板图表上。我的文件在下面和正确的目录中,并且在config>advanced中显示为active。我还重新编制了索引,刷新了缓存,刷新了生存统计数据。我在日志中没有看到任何错误。你能看出哪里出了问题吗?我有firegento并启用了日志记录,但这也不起作用 编辑:仪表板上的总收入似乎是正确的,但它没有反映在时间线图上。例如,上午10点可能有2000美元的净30条款订单,但它没有显示在时间图上。悬赏谁可以修复下面的脚本,以反映对我的时间表 Cait

我跟随这篇文章是为了让“处理”订单的销售显示在仪表板图表上。我的文件在下面和正确的目录中,并且在config>advanced中显示为active。我还重新编制了索引,刷新了缓存,刷新了生存统计数据。我在日志中没有看到任何错误。你能看出哪里出了问题吗?我有firegento并启用了日志记录,但这也不起作用

编辑:仪表板上的总收入似乎是正确的,但它没有反映在时间线图上。例如,上午10点可能有2000美元的净30条款订单,但它没有显示在时间图上。悬赏谁可以修复下面的脚本,以反映对我的时间表

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>

1
CaitlinHavener_仪表板_型号
CaitlinHavener\u仪表板\u模型\u报告\u资源\u订单\u集合
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中的订单流程,以便完全了解图表的填充方式

  • 订单以新订单(如邮购订单-货到付款等)或待处理订单(信用卡订单或贝宝等,所有在线支付方式)的形式进入商店。
    • 在此步骤中可以取消订单(因为没有生成发票)
  • 如果是在线付款,则付款成功(因此订单已开具发票-发票已生成)
  • 开具发票后发货的订单(生成发货)
  • 订单已退款(部分或全部),因此生成信用备忘录
  • 现在,如果您查看前面的步骤,您将看到如果订单处于“新建”和“已取消”状态(非状态),则不应计算收入

    它应该在订单开具发票时计算(因此您将获得收入、运费和退款)

    因此,要在收入和图表中统计处于新状态的订单,请覆盖该方法

    因此,现在如果您对这一行进行注释,订单将计入(订单图表)中

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

    因此,您需要将计算过程从使用发票金额更改为仅在使用发票之前使用总计,只要稍作更改,您就可以实现您想要的结果,而不会出现以下错误代码

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

    因此,在简单回答中,解决方案不会改变计算方式,但解决方案会改变计算的默认值


    按照这些更改,您将得到您想要的:)

    它是否在
    foo/bar/etc/modules.xml中被激活(如果它在v1.7中仍然存在)?是的,您可以在config>Advanced中看到它列为已激活谢谢!今天晚些时候我会尝试一下,我会跟进你。我没时间给你奖金了。我将继续奖励你,如果你可以,请帮我一点忙,我需要它!:你面临过什么问题吗?我已经测试了上面的内容,它按照您的问题运行:)我编辑了我创建的模块中的文件,因为我不想覆盖核心文件。所以我编辑了CaitlinHavener/Dashboard/Model/Reports/Resource/Order/Collection.php。我把州新的注释掉了。我不必注释掉另一个,对吗?我还完全替换了你说的所有变量。我运行了一个大约4000美元的测试订单,净30个条款,这样我就不会感到困惑和刷新统计数据。收入数字反映了正确的金额,订单号也正确,但我在线形图“金额”选项卡中没有看到任何变化。请告知:)NVM!我成功了!你是救世主!!!
    
    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 
            )
         );
    
    $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);