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