2013-03-12 12 views
7

Ich bin mit diesem Post Change the Dashboard Graph in version 1.7/1.12 of Magento folgen, um den Umsatz von "Verarbeitung" Bestellungen auf dem Dashboard-Diagramm angezeigt zu ermöglichen. Meine Dateien befinden sich unterhalb und innerhalb der richtigen Verzeichnisse und werden in config> advanced als aktiv angezeigt. Ich habe auch neu indiziert, aktualisiert Cache und aktualisierte Lebensdauer Statistiken. Ich sehe keine Fehler in den Protokollen. Kannst du sehen, was falsch ist? Ich habe FireGento und habe Protokollierung aktiviert, aber das funktioniert auch nicht.Magento-Modul zu Dashboard-Diagramm ändern

BEARBEITEN: Die Umsatzsumme im Dashboard scheint korrekt zu sein, spiegelt jedoch nicht die Zeitachse wider. Zum Beispiel kann es eine 30-Terme-Ordnung von $ 2000 um 10 Uhr geben, aber es wird nicht auf dem Zeitdiagramm angezeigt. Bounty für diejenigen, die das Skript unten reparieren können, um die Zeitlinie für mich zu reflektieren!

CaitlinHavener/Armaturenbrett/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/Dashboard/Model/Berichte/Ressourcen/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; 
    } 

} 
?> 
+0

es in 'foo/bar/etc/modules.xml' (wenn das in v1.7 noch existiert) aktiviert ist? – scones

+0

Ja, und Sie können sehen, wie es in der config> erweiterte – CaitlinHavener

Antwort

4

Sie haben den Bestellprozess zu verstehen, in Magento, so können Sie vollständig verstehen, wie das Diagramm bevölkert ist

  1. Bestellung kommen zum Shop als neue Bestellung (wie post bezahlte Bestellungen - Nachnahme, ...) oder Pending Order (Kreditkartenbestellungen oder Paypal etc .. alle Online-Zahlungsmethoden).
    • Der Auftrag kann bei diesem Schritt storniert werden (da keine Rechnung generiert wird).
  2. Im Falle von Online-Zahlung, Zahlung erfolgreich durchlaufen (So wird die Bestellung in Rechnung gestellt - Rechnung generiert).
  3. Bestellung Versand nach Rechnungsstellung (Versand wird generiert).
  4. Auftrag zurückerstattet (teilweise oder vollständig), so dass Gutschriften erzeugt werden.

Nun, wenn Sie den vorherigen Schritten zu buchen, und Sie werden sehen, dass die Einnahmen berechnet werden nicht angenommen, wenn der Auftrag in NEW und ABGESAGT STATE (nicht-Status)

Es sollte sein berechnet, wenn die Bestellung in Rechnung gestellt wird (so dass Sie die Einnahmen und Versandkosten und Erstattungen erhalten)

so die Aufträge im Neuzustand in den Einnahmen zu zählen und die Grafik überschreiben die Methode

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 
     ) 
    ); 

So, jetzt, wenn Sie diese Zeile kommentieren die Reihenfolge, in der gezählten Wird (ORDERS Diagramm Graph)

aber die Summen berechnet noch nicht (weil es keine Rechnung/Sendungen/Rückerstattungen)

Sie müssen also den Berechnungsvorgang von der Verwendung des Rechnungsbetrages auf die TOTALS nur noch vor der Rechnung ändern Mit kleinen Änderungen können Sie ohne Mista das erreichen, was Sie wollen kes-Code unten

ändert die Leitungen (390 und unten wie die folgende sein):

$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); 

So In einfacher Antwort die Lösung ist der Weg der Berechnung nicht verändert, aber die Lösung, die die Standardwerte von ändern die Berechnungen

diese Änderungen folgen und Sie bekommen, was Sie genau wollen :)

+0

Vielen Dank! Ich werde es heute später ausprobieren und ich werde mit dir weitermachen. – CaitlinHavener

+0

Mir läuft die Zeit davon, dir Kopfgeld zu geben. Ich werde nur weitermachen und dir das geben, bitte hilf mir ein bisschen, wenn du kannst und ich brauche es! : D – CaitlinHavener

+0

Haben Sie ein Problem festgestellt? Ich habe das oben getestet und es funktioniert wie pro Ihre Frage :) – Meabed