Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Filtre sur un rapport de vente par produit
 
exios
Jr. Member
 
Avatar
Total Posts:  8
Joined:  2009-06-30
Brest
 

Bonjour à tous,

Je suis confronté à un petit soucis, malgré mes recherches je n’arrive pas à faire ce que je souhaite.
J’ai créé un rapport de vente sur les marges par produit, il est basé sur celui de des ventes de produits.

J’aimerais pouvoir mettre un filtre (juste un input texte comme dans catalog/product) sur les noms de produit pour n’afficher que ceux qui nous intéresse, mais pas moyen de comprendre comment faire.

Pour donner un peu d’élements, du cote Grid.php pour les colonnes, j’ai ca

$this->addColumn('name',
            array(
                
'header'=> Mage::helper('catalog')->__('Name'),
                
'index' => 'name',
                
'name'      => 'name',
        ));

       
        
$this->addColumn('categorie', array(
            
'header'        => Mage::helper('catalog')->__('Category'),
            
'index'         => 'categorie',

        ));

        
$this->addColumn('ordered_qty', array(
            
'header'    =>Mage::helper('reports')->__('Quantity Ordered'),
            
'width'     =>'120px',
            
'align'     =>'right',
            
'index'     =>'ordered_qty',
            
'total'     =>'sum',
            
'type'      =>'number'
        
));

        
$this->addColumn('margin', array(
            
'header'    =>Mage::helper('reports')->__('Marge'),
            
'type'      =>'currency',
            
'index'     =>'margin',
            
'currency_code' => $this->getCurrentCurrencyCode(),
            
'total'     =>'sum',
            
'renderer'  =>'adminhtml/report_grid_column_renderer_currency'
        
));

Pour le calcul de la marge :
Mage/Reports/Model/Mysql4/Product/Collection.php

public function addCost($from ''$to '')
    
{
        $qtyOrderedTableName 
$this->getTable('sales/order_item');
        
$qtyOrderedFieldName 'qty_ordered';
        
$qtyMarginFieldName 'cost';

        
$productIdTableName $this->getTable('sales/order_item');
        
$productIdFieldName 'product_id';

        
$compositeTypeIds Mage::getSingleton('catalog/product_type')->getCompositeTypes();
        
$productTypes $this->getConnection()->quoteInto(' AND (e.type_id NOT IN (?))'$compositeTypeIds);

        if (
$from != '' && $to != ''{
            $dateFilter 
" AND `order`.created_at BETWEEN '{$from}' AND '{$to}'";
        
else {
            $dateFilter 
"";
        
}

        $this
->getSelect()->reset()->from(
            array(
'order_items' => $qtyOrderedTableName),
            array(
             
'ordered_qty' => "SUM(order_items.{$qtyOrderedFieldName})"
            
)
        );



        
$order Mage::getResourceSingleton('sales/order');
        
/* @var $order Mage_Sales_Model_Entity_Order */
        
$stateAttr $order->getAttribute('state');
        if (
$stateAttr->getBackend()->isStatic()) {

            $_joinCondition 
$this->getConnection()->quoteInto(
                
'order.entity_id = order_items.order_id AND order.state<>?'Mage_Sales_Model_Order::STATE_CANCELED
            
);
            
$_joinCondition .= $dateFilter;

            
$this->getSelect()->joinInner(
                array(
'order' => $this->getTable('sales/order')),
                
$_joinCondition,
                array()
            );
        
else {

            $_joinCondition 
'order.entity_id = order_state.entity_id';
            
$_joinCondition .= $this->getConnection()->quoteInto(' AND order_state.attribute_id=? '$stateAttr->getId());
            
$_joinCondition .= $this->getConnection()->quoteInto(' AND order_state.value<>? 'Mage_Sales_Model_Order::STATE_CANCELED);

            
$this->getSelect()
                ->
joinInner(
                    array(
'order' => $this->getTable('sales/order')),
                    
'order.entity_id = order_items.order_id' $dateFilter,
                    array())
                ->
joinInner(
                    array(
'order_state' => $stateAttr->getBackend()->getTable()),
                    
$_joinCondition,
                    array());
        
}


        $this
->getSelect()
            ->
joinInner(array('e' => $this->getProductEntityTableName()),
                
"e.entity_id = order_items.{$productIdFieldName} AND e.entity_type_id = {$this->getProductEntityTypeId()}{$productTypes}")
            ->
group('e.entity_id')
            ->
having('ordered_qty > 0')
           ;

                    
$this->getSelect()
            ->
joinLeft(array('ed' => "catalog_product_entity_decimal"),
                
"ed.entity_id = order_items.{$productIdFieldName} AND ed.attribute_id = 64",
                        array(
"margin" => "(( order_items.price - ed.value) * SUM(order_items.{$qtyOrderedFieldName}))")
                        );
                
// On recupere lesnoms des categories

//                $this->getSelect()
//            ->joinLeft(array('cce' => "catalog_category_entity"),
//                "cce.entity_id = e.category_ids", array());

                 
$this->getSelect()
            ->
joinLeft(array('ccev' => "catalog_category_entity_varchar"),
                
"e.category_ids = ccev.entity_id AND ccev.attribute_id = 31", array("categorie" => 'ccev.value'))
                         ->
order("categorie desc");
       ;
//echo $this->getSelect()->__toString();exit;

        
return $this;
    
}

Merci de votre aide. Bonne journée.

François

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top