2013-03-12 13 views
7

Postępuję zgodnie ze stanowiskiem Change the Dashboard Graph in version 1.7/1.12 of Magento, aby umożliwić sprzedaż zamówień "przetwarzania" na wykresie deski rozdzielczej. Moje pliki znajdują się poniżej i wewnątrz odpowiednich katalogów, a także wyświetlają się jako aktywne w config> advanced. Mam również ponownie indeksowane, odświeżone pamięci podręcznej i odświeżone statystyki całego życia. Nie widzę błędów w dziennikach. Czy widzisz, co jest nie tak? Mam firegento i włączyłem logowanie, ale to też nie działa.Moduł Magento do zmiany pulpitu graficznego

EDYCJA: Łączna wartość przychodów na pulpicie nawigacyjnym jest poprawna, ale nie odzwierciedla wykresu osi czasu. Na przykład może być kolejność 30 terminów netto 2000 $ o 10 rano, ale nie jest ona wyświetlana na wykresie czasu. Bounty dla każdego, kto może naprawić poniższy scenariusz, aby zastanowić się nad linią czasu dla mnie!

CaitlinHavener/Pulpit/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/Pulpit/Model/Raporty/zasobów/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

jest ona aktywowana w 'foo/bar/etc/modules.xml' (jeśli jeszcze istnieje w v1.7)? – scones

+0

Tak i można go zobaczyć na liście jako aktywowany w config> advanced – CaitlinHavener

Odpowiedz

4

Trzeba zrozumieć proces zamówienia w Magento, dzięki czemu możesz w pełni zrozumieć, w jaki sposób jest wypełniany wykres:

  1. Zamów przyjdź do sklepu jako nowe zamówienie (np. płatne zamówienia - gotówka przy odbiorze, ...) lub zamówienia oczekujące (zamówienia kartą kredytową lub paypal itp. wszystkie metody płatności online).
    • Zamówienie można anulować na tym etapie (ponieważ nie wygenerowano faktury).
  2. W przypadku płatności online, płatność przeszła pomyślnie (Zamówienie jest zafakturowane - wygenerowana faktura).
  3. Zamówienie wysłane po wystawieniu faktury (generowana jest wysyłka).
  4. Zamówienie zostało zwrócone (częściowe lub całkowite), więc wygenerowane zostały memoriały kredytowe.

Teraz, jeśli spojrzeć na poprzednich etapach, a zobaczysz, że przychody nie powinna być obliczona, jeżeli zlecenie jest w nowych i ODWOŁANY STAN (nie status)

To powinno być obliczony gdy zamówienie zostanie zafakturowana (tak dostaniesz dochodów i wysyłki opłaty i refundacje)

więc liczyć zamówień w nowy stan w przychodach i wykres zastąpić metodę

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

Więc teraz, jeśli skomentować ten wiersz kolejności będą liczone w (ZLECEŃ wykres wykres)

ale sumy nadal nie jest obliczana (bo nie ma faktury/przesyłki/zwroty)

Musisz zmienić proces obliczania, korzystając z fakturowanej kwoty, aby wykorzystać OGRANICZENIA tylko przed fakturą. Dzięki niewielkim zmianom możesz osiągnąć to, czego chcesz, bez mista Kod kes poniżej

Zmian linie (390 i poniżej, aby być jak poniżej):

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

więc w prostych odpowiedzi roztwór nie zmienił sposób obliczania, Ale rozwiązanie zmieniać wartości domyślnej obliczenia

po tej zmiany, a otrzymasz co dokładnie chcesz :)

+0

Dziękujemy! Zamierzam wypróbować to wszystko później, a potem skontaktuję się z Tobą. – CaitlinHavener

+0

Mam za mało czasu, aby nagrodzić cię nagrodą. Po prostu chcę ci to wynagrodzić, pomóż mi, jeśli możesz i potrzebuję tego! : D – CaitlinHavener

+0

Czy spotkałeś się z problemem? testowałem powyższe i działa jak na twoje pytanie :) – Meabed