Я следую за этим сообщением. Измените диаграмму Dashboard в версии 1.7 / 1.12 Magento, чтобы разрешить продажу «обработки» заказов на графике панели. Мои файлы находятся ниже и внутри правильных каталогов, а также отображаются как активные в config> advanced. Я также переиндексировал, обновил кеш и обновил статистику времени. Я не вижу ошибок в журналах. Вы видите, что не так? У меня есть firegento, и вы включили ведение журнала, но это тоже не работает.
РЕДАКТИРОВАТЬ: сумма выручки на панели инструментов кажется правильной, но ее не отражается на графике временной шкалы. Например, может быть чистый 30-дневный порядок в 2000 долларов в 10 утра, но он не отображается на графике времени. Bounty для тех, кто может исправить сценарий ниже, чтобы задуматься о временной шкале для меня!
CaitlinHavener / Панель управления / и т.д. / 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 / Панель управления / модель / Отчеты / 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, чтобы вы могли полностью понять, как заполняется диаграмма
Теперь, если вы посмотрите на предыдущие шаги, и вы увидите, что доход не должен рассчитываться, если заказ находится в NEW и ОТМЕНА СОСТОЯНИЯ (не статус)
Он должен быть рассчитан, когда Заказ будет выставлен счет (так что вы получите комиссионные с доходами и доставкой и возмещение)
Таким образом, чтобы подсчитать заказы в NEW STATE в доход и график Переопределить метод
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 )
но итоговые суммы еще не рассчитаны (поскольку нет счетов / отправлений / возмещений)
Таким образом, вам нужно изменить процесс расчета с использованием суммы счета-фактуры, чтобы использовать TOTALS только до счета-фактуры. С небольшими изменениями вы можете достичь того, чего хотите, без ошибок. Код ниже
Измените строки (390 и ниже) следующим образом:
$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);
Таким образом, в простом ответе решение не изменило способ вычисления, но решение изменило значения по умолчанию для вычислений
Следуйте этим изменениям, и вы получите то, что вы точно хотите 🙂