$sp_detail = $class_sp->retrieveDetail($spid);
 }
 if (!is_array($products)) {
     $products = explode(',', $products);
 }
 $ajaxResult = array();
 $ajaxResult['period'] = 'p-' . $period;
 $ajaxResult['period_text'] = $sp_detail['package_prefix'] . '<br />' . substr($period_start_raw, 0, 5) . ' - ' . substr($period_end_raw, 0, 5);
 if ($level == 'p') {
     $cogs_result = ReportCOGS::retrieveSummaryByProducts($products, $spid, $period_start, $period_end);
     foreach ($products as $pid) {
         $ajaxResult['row-' . $pid] = intval($cogs_result[$pid]['total_quantity']);
     }
 } else {
     $cogs_result = ReportCOGS::retrieveSummaryByArticles($products, $spid, $period_start, $period_end);
     $palist = $class_pa->retrieveAllArticlesByProducts($products);
     foreach ($palist as $pid => $pdata) {
         $row_content = '<table align="center" border="0"' . ' cellpadding="0" cellspacing="0">';
         foreach ($pdata as $aid => $adata) {
             if ($level == 'l') {
                 $left = $adata['length'] == 0 ? '<span class="notice">None</span>' : textLength($adata['length']);
             } else {
                 $left = $adata['ean'];
             }
             $row_content .= '<tr><td>' . $left . '</td><td>=</td><td>' . intval($cogs_result[$adata['ean']]['total_quantity']) . '</td></tr>';
         }
         $row_content .= '</table>';
         $ajaxResult['row-' . $pid] = $row_content;
     }
 }
 ajaxReturn($ajaxResult);