00001 <?php
00030 class Report {
00031
00032 static function generate($form){
00033
00034 $config = Config::read();
00035
00036 $weightArray = array();
00037 $headerArray = array();
00038 $selectedFields = "";
00039 $tables = "";
00040 $whereCondition = "";
00041 $maxCondition = "";
00042 $n = 0;
00043 $db = db::raw_connect();
00044
00045 if(isset($form['dataFilter'])&&$form['dataFilter']){
00046 if(strpos($form['dataFilter'], '@')){
00047 ereg("[\@][A-Za-z0-9_]+", $form['dataFilter'], $regs);
00048 foreach($regs as $reg){
00049 $form['dataFilter'] = str_replace($reg, $_REQUEST["fl_".str_replace("@", "", $reg)], $form['dataFilter']);
00050 }
00051 }
00052 }
00053 if($form['type']=='standard'){
00054 if(isset($form['joinTables'])&&$form['joinTables']) {
00055 $tables = $form['joinTables'];
00056 }
00057 if(isset($form['joinConditions'])&&$form['joinConditions']) {
00058 $whereCondition = " ".$form['joinConditions'];
00059 }
00060 foreach($form['components'] as $name => $com){
00061 if(!isset($com['attributes']['value'])){
00062 $com['attributes']['value'] = "";
00063 }
00064 if($_REQUEST['fl_'.$name]==$com['attributes']['value']){
00065 $_REQUEST['fl_'.$name] = "";
00066 }
00067 if(trim($_REQUEST["fl_".$name])&&$_REQUEST["fl_".$name]!='@'){
00068 if($form['components'][$name]['valueType']=='date'){
00069 $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'";
00070 } else {
00071 if($form['components'][$name]['valueType']=='numeric'){
00072 $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'";
00073 } else {
00074 if($form['components'][$name]['type']=='hidden'){
00075 $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'";
00076 } else {
00077 if($com['type']=='check'){
00078 if($_REQUEST["fl_".$name]==$form['components'][$name]['checkedValue'])
00079 $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'";
00080 } else {
00081 if($com['type']=='time'){
00082 if($_REQUEST["fl_".$name]!='00:00'){
00083 $whereCondition.=" and {$form['source']}.$name = '".$_REQUEST["fl_".$name]."'";
00084 }
00085 } else {
00086 if($com['primary']||$com['type']=='combo'){
00087 $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'";
00088 } else {
00089 $whereCondition.=" and ".$form['source'].".$name like '%".$_REQUEST["fl_".$name]."%'";
00090 }
00091 }
00092 }
00093 }
00094 }
00095 }
00096 }
00097 }
00098 }
00099
00100
00101
00102 ActiveRecord::sql_item_sanizite($_REQUEST['reportTypeField']);
00103 if (substr($_REQUEST['reportTypeField'],strlen($_REQUEST['reportTypeField']) -3,strlen($_REQUEST['reportTypeField'])) == "_id"){
00104 $OrderFields = substr($_REQUEST['reportTypeField'],0,strlen($_REQUEST['reportTypeField'])-3);
00105 }else{
00106 $OrderFields =$_REQUEST['reportTypeField'];
00107 }
00108 $maxCondition = $whereCondition;
00109 $n = 0;
00110 foreach($form['components'] as $name => $com){
00111 if(!isset($com['notReport'])){
00112 $com['notReport'] = false;
00113 }
00114 if(!isset($com['class'])){
00115 $com['class'] = false;
00116 }
00117 if(!$com['notReport']){
00118 if(isset($com['caption'])&&$com['caption']){
00119 $headerArray[$n] = str_replace("ó", "ó", $com['caption']);
00120 $headerArray[$n] = str_replace("á", "á", $headerArray[$n]);
00121 $headerArray[$n] = str_replace("é", "é", $headerArray[$n]);
00122 $headerArray[$n] = str_replace("í", "í", $headerArray[$n]);
00123 $headerArray[$n] = str_replace("ú", "ú", $headerArray[$n]);
00124 $headerArray[$n] = str_replace("<br/>", " ", $headerArray[$n]);
00125 } else {
00126 $com['caption'] = "";
00127 }
00128 if($com['type']=='combo'&&$com['class']=='dynamic'){
00129 if(isset($com['extraTables'])&&$com['extraTables']){
00130 $tables.="{$com['extraTables']},";
00131 }
00132 if(isset($com['whereConditionOnQuery'])&&$com['whereConditionOnQuery']){
00133 $whereCondition.=" and {$com['whereConditionOnQuery']}";
00134 }
00135 if(strpos(" ".$com['detailField'], "concat(")){
00136 $selectedFields.=$com['detailField'].",";
00137 } else {
00138 $selectedFields.=$com['foreignTable'].".".$com['detailField'].",";
00139
00140
00141 if ($com['foreignTable'] == $OrderFields){
00142 $OrderFields = $com['foreignTable'].".".$com['detailField'];
00143 }
00144 }
00145 $tables.=$com['foreignTable'].",";
00146 if($com['column_relation']){
00147 $whereCondition.=" and ".$com['foreignTable'].".".$com['column_relation']." = ".$form['source'].".".$name;
00148 } else {
00149 $whereCondition.=" and ".$com['foreignTable'].".".$name." = ".$form['source'].".".$name;
00150 }
00151 $weightArray[$n] = strlen($headerArray[$n])+2;
00152 $n++;
00153 } else {
00154 if($com['type']!='hidden'){
00155 if($com['class']=='static' && isset($com['type']) && $com['type']=='combo'){
00156 $weightArray[$n] = strlen($headerArray[$n])+2;
00157 if($config->type=='pgsql'){
00158 $selectedFields.="case ";
00159 }
00160 if($config->type=='mysql'){
00161 for($i=0;$i<=count($com['items'])-2;$i++){
00162 $selectedFields.="if(".$form['source'].".".$name."='".$com['items'][$i][0]."', '".$com['items'][$i][1]."', ";
00163 if($weightArray[$n]<strlen($com['items'][$i][1])) {
00164 $weightArray[$n] = strlen($com['items'][$i][1])+1;
00165 }
00166 }
00167 }
00168
00169 if($config->type=='pgsql'){
00170 for($i=0;$i<=count($com['items'])-1;$i++){
00171 $selectedFields.=" when ".$form['source'].".".$name."='".$com['items'][$i][0]."' THEN '".$com['items'][$i][1]."' ";
00172 if($weightArray[$n]<strlen($com['items'][$i][1])) {
00173 $weightArray[$n] = strlen($com['items'][$i][1])+1;
00174 }
00175 }
00176 }
00177
00178
00179 $n++;
00180 if($config->type=='mysql'){
00181 $selectedFields.="'".$com['items'][$i][1]."')";
00182 for($j=0;$j<=$i-2;$j++) {
00183 $selectedFields.=")";
00184 }
00185 }
00186 if($config->type=='pgsql'){
00187 $selectedFields.=" end ";
00188 }
00189 $selectedFields.=",";
00190 } else {
00191 $selectedFields.=$form['source'].".".$name.",";
00192
00193
00194 if ($name == $OrderFields){
00195 $OrderFields = $form['source'].".".$OrderFields;
00196 }
00197 $weightArray[$n] = strlen($headerArray[$n])+2;
00198 $n++;
00199 }
00200 }
00201 }
00202 }
00203 }
00204 $tables.=$form['source'];
00205 $selectedFields = substr($selectedFields, 0, strlen($selectedFields)-1);
00206
00207 if(isset($form['dataRequisite'])&&$form['dataRequisite']){
00208 $whereCondition.=" and {$form['dataFilter']}";
00209 }
00210
00211
00212 if($OrderFields){
00213 $OrderCondition = "Order By ".$OrderFields;
00214 } else {
00215 $OrderCondition = "";
00216 }
00217
00218 $query = "select $selectedFields from $tables where 1 = 1 ".$whereCondition. " " .$OrderCondition;
00219
00220 $q = $db->query($query);
00221 if(!is_bool($q)){
00222 if(!$db->num_rows($q)){
00223 Flash::notice("No hay información para listar");
00224 return;
00225 }
00226 } else {
00227 Flash::error($db->error());
00228 return;
00229 }
00230
00231 $result = array();
00232 $n = 0;
00233 while($row = $db->fetch_array($q, db::DB_NUM)){
00234 $result[$n++] = $row;
00235 }
00236
00237 foreach($result as $row){
00238 for($i=0;$i<=count($row)-1;$i++){
00239 if($weightArray[$i]<strlen(trim($row[$i]))){
00240 $weightArray[$i] = strlen(trim($row[$i]));
00241 }
00242 }
00243 }
00244
00245 for($i=0;$i<=count($weightArray)-1;$i++){
00246 $weightArray[$i]*= 1.8;
00247 }
00248
00249 $sumArray = array_sum($weightArray);
00250
00251 if(!$_REQUEST['reportType']){
00252 $_REQUEST['reportType'] = 'pdf';
00253 }
00254
00255 if($_REQUEST['reportType']!='html'){
00256 $title = str_replace("ó", "ó", $form['caption']);
00257 $title = str_replace("á", "á", $title);
00258 $title = str_replace("é", "é", $title);
00259 $title = str_replace("í", "í", $title);
00260 $title = str_replace("ú", "ú", $title);
00261 } else {
00262 $title = $form['caption'];
00263 }
00264
00265 switch($_REQUEST['reportType']){
00266 case 'pdf':
00267 require_once CORE_PATH . 'extensions/report/format/pdf.php';
00268 pdf($result, $sumArray, $title, $weightArray, $headerArray);
00269 break;
00270 case 'xls':
00271 require_once CORE_PATH . 'extensions/report/format/xls.php';
00272 xls($result, $sumArray, $title, $weightArray, $headerArray);
00273 break;
00274 case 'html':
00275 require_once CORE_PATH . 'extensions/report/format/htm.php';
00276 htm($result, $sumArray, $title, $weightArray, $headerArray);
00277 break;
00278 case 'doc':
00279 require_once CORE_PATH . 'extensions/report/format/doc.php';
00280 doc($result, $sumArray, $title, $weightArray, $headerArray);
00281 break;
00282 default:
00283 require_once CORE_PATH . 'extensions/report/format/pdf.php';
00284 pdf($result, $sumArray, $title, $weightArray, $headerArray);
00285 break;
00286 }
00287
00288 }
00289 }
00290
00291 ?>