【问题标题】:How to display pending orders in Magento dashboard graph如何在 Magento 仪表板图中显示挂单
【发布时间】:2013-03-22 10:11:37
【问题描述】:

自从从 1.4 升级到 1.7 后,我的 magento 应用程序不再像以前那样在图表中显示挂单数量和价值。

经过一番搜索,我发现它仅显示自 1.6 以来的“处理中”(已开票的订单)或“完成”订单。我意识到这在大多数情况下是有意义的,但不幸的是,我的公司不通过 magento 处理订单——它们是通过电子邮件发送并在与 magento 平台没有任何连接的本地 ERP 上处理的。

营销部门一直在骚扰我,他们发现这张图表很有用,他们希望它恢复原来的样子。不过,我似乎无法弄清楚核心代码发生了什么变化。

任何帮助将不胜感激。

【问题讨论】:

    标签: php mysql magento magento-1.7


    【解决方案1】:

    我们的结论是这个文件回答了问题。

    <?php
    
    class Mage_Reports_Model_Resource_Order_Collection extends Mage_Sales_Model_Resource_Order_Collection
    {
        /**
         * Is live
         *
         * @var boolean
         */
        protected $_isLive   = false;
    
        /**
         * Check range for live mode
         *
         * @param unknown_type $range
         * @return Mage_Reports_Model_Resource_Order_Collection
         */
        public function checkIsLive($range)
        {
            $this->_isLive = (bool)!Mage::getStoreConfig('sales/dashboard/use_aggregated_data');
            return $this;
        }
    
        /**
         * Retrieve is live flag for rep
         *
         * @return boolean
         */
        public function isLive()
        {
            return $this->_isLive;
        }
    
        public function prepareSummary($range, $customStart, $customEnd, $isFilter = 0)
        {
            $this->checkIsLive($range);
            if ($this->_isLive) {
                $this->_prepareSummaryLive($range, $customStart, $customEnd, $isFilter);
            } else {
                $this->_prepareSummaryAggregated($range, $customStart, $customEnd, $isFilter);
            }
    
            return $this;
        }
    
        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', '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,
                ))
                ->where('main_table.state NOT IN (?)', array(
                        Mage_Sales_Model_Order::STATE_HOLDED,
                        Mage_Sales_Model_Order::STATE_CANCELED)
                )
                ->order('range', Zend_Db_Select::SQL_ASC)
                ->group($tzRangeOffsetExpression);
    
            $this->addFieldToFilter('created_at', $dateRange);
    
            return $this;
        }
    
        protected function _prepareSummaryAggregated($range, $customStart, $customEnd)
        {
            $this->setMainTable('sales/order_aggregated_created');
            /**
             * Reset all columns, because result will group only by 'created_at' field
             */
            $this->getSelect()->reset(Zend_Db_Select::COLUMNS);
            $rangePeriod = $this->_getRangeExpressionForAttribute($range, 'main_table.period');
    
            $tableName = $this->getConnection()->quoteIdentifier('main_table.period');
            $rangePeriod2 = str_replace($tableName, "MIN($tableName)", $rangePeriod);
    
            $this->getSelect()->columns(array(
                'revenue'  => 'SUM(main_table.total_revenue_amount)',
                'quantity' => 'SUM(main_table.orders_count)',
                'range' => $rangePeriod2,
            ))
                ->order('range')
                ->group($rangePeriod);
    
            $this->getSelect()->where(
                $this->_getConditionSql('main_table.period', $this->getDateRange($range, $customStart, $customEnd))
            );
    
            $statuses = Mage::getSingleton('sales/config')
                ->getOrderStatusesForState(Mage_Sales_Model_Order::STATE_CANCELED);
    
            if (empty($statuses)) {
                $statuses = array(0);
            }
            $this->addFieldToFilter('main_table.order_status', array('nin' => $statuses));
    
            return $this;
        }
    
        protected function _getRangeExpression($range)
        {
            switch ($range)
            {
                case '24h':
                    $expression = $this->getConnection()->getConcatSql(array(
                        $this->getConnection()->getDateFormatSql('{{attribute}}', '%Y-%m-%d %H:'),
                        $this->getConnection()->quote('00')
                    ));
                    break;
                case '7d':
                case '1m':
                    $expression = $this->getConnection()->getDateFormatSql('{{attribute}}', '%Y-%m-%d');
                    break;
                case '1y':
                case '2y':
                case 'custom':
                default:
                    $expression = $this->getConnection()->getDateFormatSql('{{attribute}}', '%Y-%m');
                    break;
            }
    
            return $expression;
        }
    
        protected function _getRangeExpressionForAttribute($range, $attribute)
        {
            $expression = $this->_getRangeExpression($range);
            return str_replace('{{attribute}}', $this->getConnection()->quoteIdentifier($attribute), $expression);
        }
    
        protected function _getTZRangeOffsetExpression($range, $attribute, $from = null, $to = null)
        {
            return str_replace(
                '{{attribute}}',
                Mage::getResourceModel('sales/report_order')
                    ->getStoreTZOffsetQuery($this->getMainTable(), $attribute, $from, $to),
                $this->_getRangeExpression($range)
            );
        }
    
        protected function _getTZRangeExpressionForAttribute($range, $attribute, $tzFrom = '+00:00', $tzTo = null)
        {
            if (null == $tzTo) {
                $tzTo = Mage::app()->getLocale()->storeDate()->toString(Zend_Date::GMT_DIFF_SEP);
            }
            $adapter = $this->getConnection();
            $expression = $this->_getRangeExpression($range);
            $attribute  = $adapter->quoteIdentifier($attribute);
            $periodExpr = $adapter->getDateAddSql($attribute, $tzTo, Varien_Db_Adapter_Interface::INTERVAL_HOUR);
    
            return str_replace('{{attribute}}', $periodExpr, $expression);
        }
    
        public function getDateRange($range, $customStart, $customEnd, $returnObjects = false)
        {
            $dateEnd   = Mage::app()->getLocale()->date();
            $dateStart = clone $dateEnd;
    
            // go to the end of a day
            $dateEnd->setHour(23);
            $dateEnd->setMinute(59);
            $dateEnd->setSecond(59);
    
            $dateStart->setHour(0);
            $dateStart->setMinute(0);
            $dateStart->setSecond(0);
    
            switch ($range)
            {
                case '24h':
                    $dateEnd = Mage::app()->getLocale()->date();
                    $dateEnd->addHour(1);
                    $dateStart = clone $dateEnd;
                    $dateStart->subDay(1);
                    break;
    
                case '7d':
                    // substract 6 days we need to include
                    // only today and not hte last one from range
                    $dateStart->subDay(6);
                    break;
    
                case '1m':
                    $dateStart->setDay(Mage::getStoreConfig('reports/dashboard/mtd_start'));
                    break;
    
                case 'custom':
                    $dateStart = $customStart ? $customStart : $dateEnd;
                    $dateEnd   = $customEnd ? $customEnd : $dateEnd;
                    break;
    
                case '1y':
                case '2y':
                    $startMonthDay = explode(',', Mage::getStoreConfig('reports/dashboard/ytd_start'));
                    $startMonth = isset($startMonthDay[0]) ? (int)$startMonthDay[0] : 1;
                    $startDay = isset($startMonthDay[1]) ? (int)$startMonthDay[1] : 1;
                    $dateStart->setMonth($startMonth);
                    $dateStart->setDay($startDay);
                    if ($range == '2y') {
                        $dateStart->subYear(1);
                    }
                    break;
            }
    
            $dateStart->setTimezone('Etc/UTC');
            $dateEnd->setTimezone('Etc/UTC');
    
            if ($returnObjects) {
                return array($dateStart, $dateEnd);
            } else {
                return array('from' => $dateStart, 'to' => $dateEnd, 'datetime' => true);
            }
        }
    
        public function addItemCountExpr()
        {
            $this->getSelect()->columns(array('items_count' => 'total_item_count'), 'main_table');
            return $this;
        }
    
        public function calculateTotals($isFilter = 0)
        {
            if ($this->isLive()) {
                $this->_calculateTotalsLive($isFilter);
            } else {
                $this->_calculateTotalsAggregated($isFilter);
            }
    
            return $this;
        }
    
        protected function _calculateTotalsLive($isFilter = 0)
        {
            $this->setMainTable('sales/order');
            $this->removeAllFieldsFromSelect();
    
            $adapter = $this->getConnection();
    
            $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_HOLDED,
                        Mage_Sales_Model_Order::STATE_CANCELED)
                );
    
            return $this;
        }
    
        protected function _calculateTotalsAggregated($isFilter = 0)
        {
            $this->setMainTable('sales/order_aggregated_created');
            $this->removeAllFieldsFromSelect();
    
            $this->getSelect()->columns(array(
                'revenue'  => 'SUM(main_table.total_revenue_amount)',
                'tax'      => 'SUM(main_table.total_tax_amount_actual)',
                'shipping' => 'SUM(main_table.total_shipping_amount_actual)',
                'quantity' => 'SUM(orders_count)',
            ));
    
            $statuses = Mage::getSingleton('sales/config')
                ->getOrderStatusesForState(Mage_Sales_Model_Order::STATE_CANCELED);
    
            if (empty($statuses)) {
                $statuses = array(0);
            }
    
            $this->getSelect()->where('main_table.order_status NOT IN(?)', $statuses);
    
            return $this;
        }
    
        public function calculateSales($isFilter = 0)
        {
            $statuses = Mage::getSingleton('sales/config')
                ->getOrderStatusesForState(Mage_Sales_Model_Order::STATE_CANCELED);
    
            if (empty($statuses)) {
                $statuses = array(0);
            }
            $adapter = $this->getConnection();
    
            if (Mage::getStoreConfig('sales/dashboard/use_aggregated_data')) {
                $this->setMainTable('sales/order_aggregated_created');
                $this->removeAllFieldsFromSelect();
                $averageExpr = $adapter->getCheckSql(
                    'SUM(main_table.orders_count) > 0',
                    'SUM(main_table.total_revenue_amount)/SUM(main_table.orders_count)',
                    0);
                $this->getSelect()->columns(array(
                    'lifetime' => 'SUM(main_table.total_revenue_amount)',
                    'average'  => $averageExpr
                ));
    
                if (!$isFilter) {
                    $this->addFieldToFilter('store_id',
                        array('eq' => Mage::app()->getStore(Mage_Core_Model_Store::ADMIN_CODE)->getId())
                    );
                }
                $this->getSelect()->where('main_table.order_status NOT IN(?)', $statuses);
            } else {
                $this->setMainTable('sales/order');
                $this->removeAllFieldsFromSelect();
    
                $expr = 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) {
                    $expr = '(' . $expr . ') * main_table.base_to_global_rate';
                }
    
                $this->getSelect()
                    ->columns(array(
                        'lifetime' => "SUM({$expr})",
                        'average'  => "AVG({$expr})"
                    ))
                    ->where('main_table.status NOT IN(?)', $statuses)
                    ->where('main_table.state NOT IN(?)', array(
                            Mage_Sales_Model_Order::STATE_HOLDED,
                            Mage_Sales_Model_Order::STATE_CANCELED)
                    );
            }
            return $this;
        }
    
        public function setDateRange($from, $to)
        {
            $this->_reset()
                ->addFieldToFilter('created_at', array('from' => $from, 'to' => $to))
                ->addFieldToFilter('state', array('neq' => Mage_Sales_Model_Order::STATE_CANCELED))
                ->getSelect()
                ->columns(array('orders' => 'COUNT(DISTINCT(main_table.entity_id))'))
                ->group('entity_id');
    
            $this->getSelect()->columns(array(
                    'items' => 'SUM(main_table.total_qty_ordered)')
            );
    
            return $this;
        }
    
        public function setStoreIds($storeIds)
        {
            $adapter = $this->getConnection();
            $baseSubtotalInvoiced = $adapter->getIfNullSql('main_table.base_subtotal_invoiced', 0);
            $baseDiscountRefunded = $adapter->getIfNullSql('main_table.base_discount_refunded', 0);
            $baseSubtotalRefunded = $adapter->getIfNullSql('main_table.base_subtotal_refunded', 0);
            $baseDiscountInvoiced = $adapter->getIfNullSql('main_table.base_discount_invoiced', 0);
            $baseTotalInvocedCost = $adapter->getIfNullSql('main_table.base_total_invoiced_cost', 0);
            if ($storeIds) {
                $this->getSelect()->columns(array(
                    'subtotal'  => 'SUM(main_table.base_subtotal)',
                    'tax'       => 'SUM(main_table.base_tax_amount)',
                    'shipping'  => 'SUM(main_table.base_shipping_amount)',
                    'discount'  => 'SUM(main_table.base_discount_amount)',
                    'total'     => 'SUM(main_table.base_grand_total)',
                    'invoiced'  => 'SUM(main_table.base_total_paid)',
                    'refunded'  => 'SUM(main_table.base_total_refunded)',
                    'profit'    => "SUM($baseSubtotalInvoiced) "
                    . "+ SUM({$baseDiscountRefunded}) - SUM({$baseSubtotalRefunded}) "
                    . "- SUM({$baseDiscountInvoiced}) - SUM({$baseTotalInvocedCost})"
                ));
            } else {
                $this->getSelect()->columns(array(
                    'subtotal'  => 'SUM(main_table.base_subtotal * main_table.base_to_global_rate)',
                    'tax'       => 'SUM(main_table.base_tax_amount * main_table.base_to_global_rate)',
                    'shipping'  => 'SUM(main_table.base_shipping_amount * main_table.base_to_global_rate)',
                    'discount'  => 'SUM(main_table.base_discount_amount * main_table.base_to_global_rate)',
                    'total'     => 'SUM(main_table.base_grand_total * main_table.base_to_global_rate)',
                    'invoiced'  => 'SUM(main_table.base_total_paid * main_table.base_to_global_rate)',
                    'refunded'  => 'SUM(main_table.base_total_refunded * main_table.base_to_global_rate)',
                    'profit'    => "SUM({$baseSubtotalInvoiced} *  main_table.base_to_global_rate) "
                    . "+ SUM({$baseDiscountRefunded} * main_table.base_to_global_rate) "
                    . "- SUM({$baseSubtotalRefunded} * main_table.base_to_global_rate) "
                    . "- SUM({$baseDiscountInvoiced} * main_table.base_to_global_rate) "
                    . "- SUM({$baseTotalInvocedCost} * main_table.base_to_global_rate)"
                ));
            }
    
            return $this;
        }
    
        /**
         * Add group By customer attribute
         *
         * @return Mage_Reports_Model_Resource_Order_Collection
         */
        public function groupByCustomer()
        {
            $this->getSelect()
                ->where('main_table.customer_id IS NOT NULL')
                ->group('main_table.customer_id');
    
            /*
             * Allow Analytic functions usage
             */
            $this->_useAnalyticFunction = true;
    
            return $this;
        }
    
        /**
         * Join Customer Name (concat)
         *
         * @param string $alias
         * @return Mage_Reports_Model_Resource_Order_Collection
         */
        public function joinCustomerName($alias = 'name')
        {
            $fields      = array('main_table.customer_firstname', 'main_table.customer_lastname');
            $fieldConcat = $this->getConnection()->getConcatSql($fields, ' ');
            $this->getSelect()->columns(array($alias => $fieldConcat));
            return $this;
        }
    
        /**
         * Add Order count field to select
         *
         * @return Mage_Reports_Model_Resource_Order_Collection
         */
        public function addOrdersCount()
        {
            $this->addFieldToFilter('state', array('neq' => Mage_Sales_Model_Order::STATE_CANCELED));
            $this->getSelect()
                ->columns(array('orders_count' => 'COUNT(main_table.entity_id)'));
    
            return $this;
        }
    
        public function addRevenueToSelect($convertCurrency = false)
        {
            if ($convertCurrency) {
                $this->getSelect()->columns(array(
                    'revenue' => '(main_table.base_grand_total * main_table.base_to_global_rate)'
                ));
            } else {
                $this->getSelect()->columns(array(
                    'revenue' => 'base_grand_total'
                ));
            }
    
            return $this;
        }
    
        public function addSumAvgTotals($storeId = 0)
        {
            $adapter = $this->getConnection();
            $baseSubtotalRefunded = $adapter->getIfNullSql('main_table.base_subtotal_refunded', 0);
            $baseSubtotalCanceled = $adapter->getIfNullSql('main_table.base_subtotal_canceled', 0);
            $baseDiscountCanceled = $adapter->getIfNullSql('main_table.base_discount_canceled', 0);
    
            /**
             * calculate average and total amount
             */
            $expr = ($storeId == 0)
                ? "(main_table.base_subtotal -
                {$baseSubtotalRefunded} - {$baseSubtotalCanceled} - ABS(main_table.base_discount_amount) -
                {$baseDiscountCanceled}) * main_table.base_to_global_rate"
                : "main_table.base_subtotal - {$baseSubtotalCanceled} - {$baseSubtotalRefunded} -
                ABS(main_table.base_discount_amount) - {$baseDiscountCanceled}";
    
            $this->getSelect()
                ->columns(array('orders_avg_amount' => "AVG({$expr})"))
                ->columns(array('orders_sum_amount' => "SUM({$expr})"));
    
            return $this;
        }
    
        public function orderByTotalAmount($dir = self::SORT_ORDER_DESC)
        {
            $this->getSelect()->order('orders_sum_amount ' . $dir);
            return $this;
        }
    
        public function orderByOrdersCount($dir = self::SORT_ORDER_DESC)
        {
            $this->getSelect()->order('orders_count ' . $dir);
            return $this;
        }
    
        public function orderByCustomerRegistration($dir = self::SORT_ORDER_DESC)
        {
            $this->setOrder('customer_id', $dir);
            return $this;
        }
    
        public function orderByCreatedAt($dir = self::SORT_ORDER_DESC)
        {
            $this->setOrder('created_at', $dir);
            return $this;
        }
    
        public function getSelectCountSql()
        {
            $countSelect = clone $this->getSelect();
            $countSelect->reset(Zend_Db_Select::ORDER);
            $countSelect->reset(Zend_Db_Select::LIMIT_COUNT);
            $countSelect->reset(Zend_Db_Select::LIMIT_OFFSET);
            $countSelect->reset(Zend_Db_Select::COLUMNS);
            $countSelect->reset(Zend_Db_Select::GROUP);
            $countSelect->reset(Zend_Db_Select::HAVING);
            $countSelect->columns("COUNT(DISTINCT main_table.entity_id)");
    
            return $countSelect;
        }
    
        protected function _initInitialFieldsToSelect()
        {
            // No fields should be initialized
            return $this;
        }
    
        public function addCreateAtPeriodFilter($period)
        {
            list($from, $to) = $this->getDateRange($period, 0, 0, true);
    
            $this->checkIsLive($period);
    
            if ($this->isLive()) {
                $fieldToFilter = 'created_at';
            } else {
                $fieldToFilter = 'period';
            }
    
            $this->addFieldToFilter($fieldToFilter, array(
                'from'  => $from->toString(Varien_Date::DATETIME_INTERNAL_FORMAT),
                'to'    => $to->toString(Varien_Date::DATETIME_INTERNAL_FORMAT)
            ));
    
            return $this;
        }
    }
    

    可能有助于找到类似问题的答案的其他事项。

    1) 检查配置 > 销售 > 销售选项卡中的“使用聚合数据(测试版)”是否设置为“否”。此解决方案仅适用于“实时”数据(意思是,它使用销售/订单表而不是销售/订单聚合创建)。如果没有,请将其设置为“否”。

    2) 编辑 app/design/adminhtml/default/default/template/dashboard/graph.phtml 并将 getChartUrl(false) 更改为 getChartUrl(true)

    3) 确保您的 Class 被实际使用,而不是本地版本

    check_class_path.php

    <?php 
    require_once ('app/Mage.php'); 
    Mage::app("default"); 
    $reflector = new ReflectionClass('Mage_Reports_Model_Resource_Order_Collection'); 
    $t = $reflector->getFileName(); 
    echo $t;
    

    4) 在 magento 中查找任何潜在的类冲突 https://github.com/netz98/n98-magerun

    5) 清除缓存,如 apc 缓存/magento 缓存

    6) 如果您的 Magento 安装已升级,请比较新安装的 magento 和您的数据库架构

    【讨论】:

    • 我以前试过这个。它似乎不起作用。我在该文件的两个位置从 PENDING_PAYMENT 更改为 CANCELED,NEW 更改为 HOLDED,删除了缓存,刷新了生命周期统计信息,但仪表板上没有任何反应。
    • @pedropeixoto 看看这个答案stackoverflow.com/a/15675781/706466 和部分 $baseTotalInvoiced = $adapter->getIfNullSql('main_table.base_total_invoiced', 'main_table.base_grand_total');等等……
    • @pedropeixoto 是的,您还需要将 main_table.base_total_invoiced 更改为 main_table.base_grand_total (因为您还希望包括尚未开票的订单)
    • 我更改为核心文件以反映这一点。但在删除缓存和刷新统计信息后它仍然无法正常工作。你可以在这里找到我的核心文件:pastebin.com/Tzhz5Vqs
    • 终于找到解决办法了!毕竟这不是数据库问题,就像在“配置”>“销售”>“销售”选项卡中将“使用聚合数据(测试版)”更改为“否”一样简单。该代码仅在您不使用聚合数据时才有效。
    猜你喜欢
    • 2011-12-08
    • 2021-07-11
    • 2019-08-24
    • 2018-10-05
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多