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
SUMdans l'une des colonnes
WHEREa une BETWEENclause - nous pouvons probablement utiliser Zend_Db_Exprpour 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 à resetpour 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_Datedes 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.