/**
  * Esta funcion hace un query consultando segun el modulo y la vista que se esta viendo
  * actualmente, la cantidad de pestañas, formularios, paneles y campos para luego
  * armar el formulario HTML.
  *
  * @param  string
  * @return array
  */
 public function cargar_formulario($valores = array())
 {
     $module_config_path = empty(self::$module) ? "" : self::$module_path . self::$module . "/config/";
     include $module_config_path . "/config.php";
     $clause = array("v.id_modulo" => CRM_Controller::$id_modulo, "v.vista" => self::$modulo_vista, "uc.estado" => "activo", "p.estado" => "activo");
     /**
      * Se realiza este querpara verificar sin errores
      * cuando se esta cargando una vista completa
      * o cuando se esta cargando una vista parcial
      */
     $moduloINFO = self::$ci->db->select()->distinct()->from('modulos')->where("nombre", $config['modulo_config']['nombre'])->get()->result_array();
     if (!empty($moduloINFO)) {
         $clause["v.id_modulo"] = $moduloINFO[0]["id"];
     }
     $tabla_campos = $config['modulo_config']['prefijo'] == '' ? self::$controller . '_campos' : $config['modulo_config']['prefijo'] . '_' . self::$controller . '_campos';
     //Destruir variable
     unset($config);
     self::$values_from_DB = array();
     //Si $valores viene con data
     //inicializar variable global
     if (!empty($valores)) {
         self::$values_from_DB = $valores;
     }
     self::$modulo_campos = array();
     //Query
     $fields = array("v.id_vista", "v.id_modulo", "v.vista", "p.id_pestana", "p.pestana", "f.id_formulario", "f.nombre_formulario", "pa.id_panel", "pa.panel", "pc.id_panel_campo", "pc.id_campo", "uc.nombre_campo", "uc.etiqueta", "uc.longitud", "tc.nombre AS tipo", "uc.estado", "uc.atributos", "uc.agrupador_campo", "uc.tabla_relacional", "uc.contenedor", "uc.requerido", "uc.link_url", "uc.fecha_cracion", "uc.posicion");
     $results = self::$ci->db->select($fields)->from('mod_vistas v')->join('mod_pestanas p', 'p.id_vista = v.id_vista', 'LEFT OUTER')->join('mod_formularios f', 'f.id_pestana = p.id_pestana', 'LEFT OUTER')->join('mod_paneles pa', 'pa.id_formulario = f.id_formulario', 'LEFT OUTER')->join('mod_panel_campos pc', 'pc.id_panel=pa.id_panel', 'LEFT OUTER')->join($tabla_campos . "  uc", "uc.id_campo = pc.id_campo", 'LEFT OUTER')->join('mod_tipo_campos tc', 'tc.id_tipo_campo = uc.id_tipo_campo', 'LEFT OUTER')->where($clause)->order_by('uc.posicion', 'ASC')->get()->result_array();
     //echo  self::$ci->db->last_query();
     if (!empty($results)) {
         $i = 0;
         foreach ($results as $result) {
             if (!empty($result["contenedor"]) && $result["contenedor"] == "tabla-dinamica" || !empty($result["contenedor"]) && $result["contenedor"] == "tabla-dinamica-sumativa") {
                 $existing_key = Util::array_search_key(self::$modulo_campos, $result["agrupador_campo"]);
                 if (!empty(self::$modulo_campos[$existing_key])) {
                     self::$modulo_campos[$existing_key][$result["agrupador_campo"]][] = $result;
                 } else {
                     self::$modulo_campos[$i]["tipo"] = $result["contenedor"];
                     self::$modulo_campos[$i][$result["agrupador_campo"]][] = $result;
                 }
             } else {
                 self::$modulo_campos[$i] = $result;
             }
             $i++;
         }
     }
     /*if(!empty($result)){
     			if($moduloINFO[0]["nombre"] == "Contactos")
     			{
     				echo "<pre>";
     				print_r($results);
     				echo "</pre>";
     			}
     		}*/
     /*echo "<pre>";
     		print_r(self::$modulo_campos);
     		echo "</pre>";
     		die();*/
     echo self::armar_html();
 }