2013-03-12 162 views
7

我跟隨此帖Change the Dashboard Graph in version 1.7/1.12 of Magento以允許「處理」訂單的銷售顯示在儀表板圖上。我的文件位於正確的目錄下方並顯示爲在config> advanced中處於活動狀態。我也重新編制索引,刷新緩存和刷新壽命統計。我看到日誌中沒有錯誤。你能看到什麼是錯的嗎?我有Firegento並啓用了日誌功能,但這也不起作用。Magento模塊更改儀表板圖

編輯:在儀表板上的收入總額似乎是正確的,但它沒有反映在時間線圖上。例如,上午10點可能有淨價30美元的條款訂單,但它不顯示在時間圖上。對於誰可以修復下面的腳本來反思我的時間線的賞金!

CaitlinHavener /儀表板的/ 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 /儀表板/型號/報告/資源/順序/ 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; 
    } 

} 
?> 
+0

是在'富/酒吧/等/ modules.xml'激活狀態(如果仍然在V1.7中存在)? – scones 2013-03-26 23:49:03

+0

是,你可以看到它列爲配置激活>高級 – CaitlinHavener 2013-03-27 00:49:10

回答

4

你必須瞭解訂單進程在Magento所以你可以完全理解如何填充圖表

  1. 訂單作爲新訂單來到商店(如發佈付款訂單 - 貨到付款,...)或待定單(信用卡訂單或PayPal等..所有在線支付方式)。
    • 可以在此步驟取消訂單(因爲沒有生成發票)。
  2. 在網上付款的情況下,支付成功(所以訂單開票 - 生成發票)。
  3. 訂單發票後發貨(發貨發貨)。
  4. 訂單已退回(部分或完整),以便生成貸記憑證。

現在,如果你看一下前面的步驟,你會看到,不應該收入來計算,如果訂單是在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 
     ) 
    ); 

所以,現在,如果你對此有何評論這條線的順序將在計數(訂單圖表圖表

,但仍沒有計算總計(因爲沒有發票/發貨/退款)

所以,你需要計算過程中使用的發票金額使用總計只改變甚至在發票的微小變化就可以實現你想要的東西沒有米斯塔KES代碼下面

更改線(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); 

所以在簡單的答案的溶液不改變的方式,但該解決方案改變的默認值計算

關注這個變化,你會得到你到底想要什麼:)

+0

謝謝!今天晚些時候我會試一試,我會跟進你的。 – CaitlinHavener 2013-04-01 17:31:02

+0

我沒時間獎勵你賞金了。我只是要繼續並獎勵你,如果可以的話,請幫我一下,我需要它! :D – CaitlinHavener 2013-04-02 01:16:01

+0

你有沒有遇到過問題?我已經測試了上方,它的工作原理,按您的問題:) – Meabed 2013-04-02 03:56:54