Commençons par penser au SQL, pas à Magento (nous y reviendrons plus tard). Je l'écrirais comme tel (en ignorant les fuseaux horaires pour plus de simplicité):
SELECT sku,SUM(qty_ordered) FROM sales_flat_order_item
WHERE created_at BETWEEN NOW()-INTERVAL 2 WEEK AND NOW()
GROUP BY sku
Cette requête fonctionne (j'ai testé). Alors, comment pourrions-nous écrire cette requête dans Magento?
- Tout d'abord, nous voyons qu'il est entièrement basé sur
sales_flat_order_item
- Magento a une collection de ressources spéciale pour cette table; nous pouvons en faire usage.
- Nous voyons qu'il utilise un
SUM
dans l'une des colonnes
WHERE
a une BETWEEN
clause - nous pouvons probablement utiliser Zend_Db_Expr
pour sortir notre calendrier personnalisé de 2 semaines.
- Enfin, il a un
GROUP
Voyons voir si nous ne pouvons pas le mettre ensemble, alors, avec un appel rapide à reset
pour nous assurer que nous obtenons uniquement les colonnes que nous définissons, et rien d'autre:
$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'));
Un simple écho de $query->getSelect()
nous montre que la requête est assez bien formatée:
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`
Autres considérations:
À l'avenir, vous souhaiterez peut-être filtrer ce rapport en fonction du statut de la commande (rejoindre une autre table) ou vous assurer que les fuseaux horaires sont exacts (en ce moment, il génère des rapports basés sur GMT).
L'adhésion est simple:
->join(array('e' => 'sales_flat_order'),'main_table.order_id = e.entity_id')
Mais l'ajout de fuseaux horaires peut devenir compliqué. Recherchez Mage_Core_Model_Date
des méthodes de conversion d'horodatage vers et depuis GMT. Consultez également la collection des rapports de vente.
J'espère que cela pourra aider! Bonne chance.