Vamos começar pensando no SQL, não no Magento (chegaremos lá mais tarde). Eu escreveria como tal (ignorando os fusos horários por simplicidade):
SELECT sku,SUM(qty_ordered) FROM sales_flat_order_item
WHERE created_at BETWEEN NOW()-INTERVAL 2 WEEK AND NOW()
GROUP BY sku
Essa consulta funciona (eu testei). Então, como é que vamos escrever essa consulta no Magento?
- Primeiramente, vemos que é totalmente baseado
sales_flat_order_item
- o Magento possui uma coleção de recursos especiais para esta tabela; nós podemos fazer uso disso.
- Vemos que ele usa a
SUM
em uma das colunas
WHERE
possui uma BETWEEN
cláusula - provavelmente podemos usar Zend_Db_Expr
para gerar nosso período de rolagem personalizado de duas semanas.
- Finalmente, tem um
GROUP
Vamos ver se não conseguimos montar tudo, então, com uma chamada rápida reset
para garantir que apenas recebamos as colunas que definimos e nada mais:
$query = Mage::getResourceModel('sales/order_item_collection');
$query->getSelect()->reset(Zend_Db_Select::COLUMNS)
->columns(array('sku','SUM(row_total)'))
->where(new Zend_Db_Expr('created_at BETWEEN NOW()-INTERVAL 2 WEEK AND NOW()'))
->group(array('sku'));
Um simples eco $query->getSelect()
mostra que a consulta está formatada muito bem:
SELECT `main_table`.`sku`, SUM(qty_ordered) FROM `sales_flat_order_item` AS `main_table` WHERE (created_at BETWEEN NOW()-INTERVAL 2 WEEK AND NOW()) GROUP BY `sku`
Outras considerações:
No futuro, você pode filtrar este relatório com base no status do pedido (ingressando em outra tabela) ou pode ter certeza de que os fusos horários estão corretos (no momento, são relatórios baseados no GMT).
A união é simples:
->join(array('e' => 'sales_flat_order'),'main_table.order_id = e.entity_id')
Mas adicionar fusos horários pode ser complicado. Procure Mage_Core_Model_Date
alguns métodos que convertem carimbos de data e hora de e para GMT. Examine também a coleção de relatórios de vendas.
Espero que ajude! Boa sorte.