Magento: захват/отображение статистики продаж клиента за все время и общего количества заказов на страницах просмотра заказов

В представлении «Заказ» (главный экран при просмотре заказа клиента) я хотел бы добавить несколько строк таблицы и добавить продажи клиента за все время (общие продажи) и общую сумму заказов.

Файл, в который я хочу добавить код, находится здесь: app/design/adminhtml/default/default/template/sales/order/view/info.phtml.

В этом файле ниже:

<?php foreach ($this->getCustomerAccountData() as $data):?>
  <tr>
    <td class="label"><label><?php echo $data['label'] ?></label></td>
    <td class="value"><strong><?php echo $data['value'] ?></strong></td>
  </tr>
<?php endforeach;?>

Здесь я бы добавил нужные мне строки/ячейки с правильной информацией. Подскажите, пожалуйста, как получить необходимые данные?


person Geoff    schedule 23.08.2011    source источник


Ответы (2)


вот как вы получаете пожизненные продажи:

$customer = Mage::getModel('customer/customer')->load($customerId);
$customerTotals = Mage::getResourceModel('sales/sale_collection')
     ->setOrderStateFilter(Mage_Sales_Model_Order::STATE_CANCELED, true)
     ->setCustomerFilter($customer)
     ->load()
     ->getTotals();
$customerLifetimeSales = $customerTotals->getLifetime();
$customerNumberOfOrders = $customerTotals->getNumOrders();

Это var_dump $customerTotals:

object(Varien_Object)[662]
  protected '_data' => 
    array
     'lifetime' => float 10503.13
     'base_lifetime' => float 10503.13
     'base_avgsale' => float 92.9480530973
     'num_orders' => int 113
     'avgsale' => float 92.9480530973
  protected '_hasDataChanges' => boolean false
  protected '_origData' => null
  protected '_idFieldName' => null
  protected '_isDeleted' => boolean false

Вы можете поместить этот код в метод своего блока и вызывать его в каждой строке. Что-то вроде:

public function getCustomerTotals(Mage_Customer_Model_Customer $customer)
{
    // TODO: Add necessary validation...
    return Mage::getResourceModel('sales/sale_collection')
        ->setOrderStateFilter(Mage_Sales_Model_Order::STATE_CANCELED, true)
        ->setCustomerFilter($customer)
        ->load()
        ->getTotals();
}

и в вашем коде вы можете добавить:

<?php $customerTotals = $this->getCustomerTotals($customer); ?>
<td><?php echo $customerTotals->getLifetime(); ?></td>
person Norberto Bezi    schedule 09.09.2011
comment
Я должен дать это попробовать в ближайшее время! Этот «проект» пока отошел на второй план, но если он сработает, то это одна вещь из списка! - person Geoff; 26.01.2012
comment
В конце концов я использовал это в модуле для добавления на страницу обзора заказа (с небольшой модификацией). Спасибо! - person Geoff; 12.09.2012

Не знаю, связано ли это с обновлением, но теперь необходимо добавить это:

->setOrderStateFilter(Mage_Sales_Model_Order::STATE_CANCELED, true)

Итак, код будет:

return Mage::getResourceModel('sales/sale_collection')
        ->setOrderStateFilter(Mage_Sales_Model_Order::STATE_CANCELED, true)
        ->setCustomerFilter($customer)
        ->load()
        ->getTotals();
person Andrea De Pirro    schedule 12.12.2011
comment
Спасибо, что добавили это, иначе данные были бы неверными (или, по крайней мере, не такими, как в учетной записи клиента). - person Geoff; 12.09.2012