Модуль Magento для изменения диаграммы приборной панели

Я следую за этим сообщением. Измените диаграмму 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, чтобы вы могли полностью понять, как заполняется диаграмма

  1. Заказ приходит в магазин как новый заказ (например, оплаченные заказы – Наличные деньги при доставке, …) или Отложенный ордер (заказы на кредитные карты или PayPal и т. Д. Все способы онлайн-платежей).
    • Заказ может быть отменен на этом этапе (поскольку никакой счет-фактура не генерируется).
  2. В случае онлайн-оплаты оплата прошла успешно (так что заказ выставлен счет-фактура).
  3. Заказ отправлен после выставления счета (произведена отправка).
  4. Заказ возвращен (частично или полностью), так что сгенерированы кредитные авизо.

Теперь, если вы посмотрите на предыдущие шаги, и вы увидите, что доход не должен рассчитываться, если заказ находится в 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); 

Таким образом, в простом ответе решение не изменило способ вычисления, но решение изменило значения по умолчанию для вычислений

Следуйте этим изменениям, и вы получите то, что вы точно хотите 🙂