25 November 2011

Enhanced Product Details Statistics Module v1.0

Adds a table of sold attributes grouped by quantity to the BO product details statistics module.
#  
#----------[ OPEN ]----------  
#  
modules\statsproduct\statsproduct.php  
   
#  
#----------[ FIND ]----------  
#  
      public function hookAdminStatsModules($params)  
   
#  
#----------[ BEFORE, ADD ]----------  
#  
      private function getBestAttributes($id_product)  
      {  
           return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('  
           SELECT od.product_name, SUM(od.product_quantity) as pqty  
           FROM `'._DB_PREFIX_.'orders` o  
           LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON o.id_order = od.id_order  
           WHERE o.date_add BETWEEN '.$this->getDate().'   
           AND o.valid = 1  
           AND od.product_id = '.(int)($id_product).'  
           GROUP BY od.product_attribute_id  
           ORDER BY pqty DESC');  
      }  
   
#  
#----------[ FIND ]----------  
#  
                     $this->_html .= '<h3 class="space">'.$this->l('Attribute sales distribution').'</h3><center>'.ModuleGraph::engine(array('type' => 'pie', 'option' => '3-'.$id_product)).'</center><br />  
                <p><a href="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'&export=1&exportType=2"><img src="../img/admin/asterisk.gif" />'.$this->l('CSV Export').'</a></p><br />';  
   
#  
#----------[ REPLACE WITH ]----------  
#  
                {  
                     $this->_html .= '<h3 class="space">'.$this->l('Attribute sales distribution').'</h3><center>'.ModuleGraph::engine(array('type' => 'pie', 'option' => '3-'.$id_product)).'</center><br />  
                    <p><a href="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'&export=1&exportType=2"><img src="../img/admin/asterisk.gif" />'.$this->l('CSV Export').'</a></p><br />';  
                     $top_attributes = $this->getBestAttributes($id_product);  
                     $this->_html .= '<br class="clear" />  
                     <h3>'.$this->l('Best attribute sales').'</h3>  
                     <div style="overflow-y: scroll; height: '.min(200, (count($top_attributes)+1)*32).'px;">  
                     <table class="table" border="0" cellspacing="0" cellspacing="0">  
                     <thead>  
                          <tr>  
                               <th>'.$this->l('Attribute').'</th>  
                               <th>'.$this->l('Qty').'</th>  
                          </tr>  
                     </thead><tbody>';       
                     foreach ($top_attributes as $attribute)  
                          $this->_html .= '  
                          <tr>  
                               <td>'.$attribute['product_name'].'</td>  
                               <td align="right">'.(int)($attribute['pqty']).'</td>  
                          </tr>';                                     
                     $this->_html .= '</tbody></table></div>';  
                }

2 comments:

  1. This is almost exactly what I was looking for. Now, is there one that shows all of the sales for all of the attributes on a page and not just for one product?

    ReplyDelete
  2. The stats dashboard by default (1.4+) has data for all attribute sales grouped together.

    ReplyDelete