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
SUMem uma das colunas
WHEREpossui uma BETWEENcláusula - provavelmente podemos usar Zend_Db_Exprpara 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 resetpara 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_Datealguns 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.