|
|
<?php /*-----------------------------------* * Proyecto : SAI * * Autor : Federico A. Ocampo * * Desc: Interfaz web de Seleccion * * para Armado de Informes * *-----------------------------------*/
//--------------------------------------
require_once 'PostgreClass.php'; require_once "AppConfig.php"; //--------------------------------------
/***************************************************************************** .::. Clase ObtieneDatosGeneral .::. @Autor: Federico A. Ocampo @Email: federico@mcanet.com.ar @Empresa: MCAnet @Descripcion: Esta clase provee los metodos para obtener, de la base de datos correspondiente, las diferentes tablas. Realiza las consultas necesarias y retorna, por cada consulta, un arreglo con toda la tabla resultado. *****************************************************************************/ class ObtieneDatosGeneral { var $AppConfig; //Configuracion de la aplicacion
var $ManejaBD; //Clase que administra la conexion con la base de datos
var $DB_CONNECT_ERROR = "FALLO AL CONECTAR CON LA BASE DE DATOS"; var $DB_QUERY_NULL = "La consulta no obtuvo resultados";
/** * Constructor: inicializa las propiedades de la clase * Recibe todos los parametros por referencia * @param AppConfig Objeto con la configuracion de la aplicacion * @param ManejadorBD clase para gestionar la conexion con la base de datos */ function ObtieneDatosGeneral(&$AppConfig, &$ManejadorBaseDatos) { $this->AppConfig =& $AppConfig; $this->ManejaBD =& $ManejadorBaseDatos; } /** * Empieza una transaccion * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip] */ /*function Begin_Transaction() { $SQL_BEGIN = 'BEGIN;'; return $this->obtenerDatos($SQL_BEGIN); }*/ /** * Termina un bloque de transaccion * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip] */ /*function End_Transaction() { $SQL_END = 'COMMIT;'; return $this->obtenerDatos($SQL_END); }*/ /** * Vuelve atras las operaciones de un bloque de transaccion * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip] */ /*function Rollback_Transaction() { $SQL_END = 'ROLLBACK;'; return $this->obtenerDatos($SQL_END); }*/ /*---Leos------------------------------------------------------------------------------*/ /** * Obtiene de la base de datos los datos de la tabla GEMITE * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip] */ function Leo_GEMITE($p_Version, $p_Clave) { $SQL_GEMITE = 'SELECT * FROM general.gemite WHERE gem_ver=' . $p_Version . ' AND gem_clave=\''. $p_Clave .'\' LIMIT 1;'; return $this->obtenerDatos($SQL_GEMITE); } /** * Obtiene de la base de datos los datos de la tabla MONEDA * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip] */ function Leo_MONEDA($p_Moneda) { $SQL_MONEDA = 'SELECT * FROM general.moneda WHERE moneda=' . $p_Moneda . ';'; return $this->obtenerDatos($SQL_MONEDA); } /** * Obtiene de la base de datos el nombre de la entidad * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip] */ function Leo_ENTIDAD($p_Enti) { $SQL_NOMENTI = 'SELECT * FROM general.entidad WHERE en_enti=' . $p_Enti . ';'; return $this->obtenerDatos($SQL_NOMENTI); } /** * Obtiene de la base de datos los datos de la tabla rentsuc * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip] */ function Leo_RENTSUC($p_Emp, $p_Suc, $p_TipEnt) { $SQL_RENTSUC = 'SELECT res_emp, res_suc, res_tip, res_entid, res_entih, res_usua FROM general.rentsuc WHERE res_emp=' . $p_Emp . ' AND res_suc='. $p_Suc . ' AND res_tip=\'' . $p_TipEnt . '\';'; return $this->obtenerDatos($SQL_RENTSUC); } /** * Obtiene de la base de datos los datos de la tabla RELNUM * @return array Retorna una matriz de la forma matriz[item_registro][campo1][campo2]...[campon] */ function Leo_RELNUM($p_Emp, $p_TipCom, $p_Ope) { $SQL_RELNUM = 'SELECT * FROM general.relnum WHERE rn_emp=' . $p_Emp . ' AND rn_tcom=\''. $p_TipCom.'\' AND rn_ope=' . $p_Ope. ';'; return $this->obtenerDatos($SQL_RELNUM); } /** * Obtiene de la base de datos los datos de la tabla TIPENT * @return array Retorna una matriz de la forma matriz[item_registro][campo1][campo2]...[campon] */ function Leo_TIPENT($p_TipEnt, $p_Ent) { $SQL_TIPENT = 'SELECT * FROM general.tipent WHERE te_tip =\''. $p_TipEnt .'\' AND te_ent=' . $p_Ent . ';'; return $this->obtenerDatos($SQL_TIPENT); } /** FUNCIONES DE NUMERACION AUTOMATICA DE COMPROBANTES */ function Leo_CodNum($p_empresa, $p_sucursal, $p_codrel) { $SQL_CODNUM = 'SELECT * FROM general.codnum WHERE empresa='.$p_empresa.' AND sucursa='.$p_sucursal.' AND numerac='.$p_codrel.' ORDER BY empresa, sucursa, numerac;'; return $this->obtenerDatos($SQL_CODNUM); } function Leo_Automat($p_empresa, $p_sucursal, $p_codrel, $p_anio, $p_mes, $p_dia) { $SQL_AUTOMAT = 'SELECT * FROM general.automat WHERE empresa='.$p_empresa.' AND sucursa='.$p_sucursal. ' AND codrel='.$p_codrel.' AND anio='.$p_anio.' AND mes='.$p_mes.' AND dia='.$p_dia. ' ORDER BY empresa, sucursa, codrel, anio, mes, dia;'; return $this->obtenerDatos($SQL_AUTOMAT); }
function Leo_Manual($p_empresa, $p_sucursal, $p_codrel, $p_anio, $p_mes, $p_nro) { $SQL_MANUAL = 'SELECT * FROM general.manual WHERE empresa='.$p_empresa.' AND sucursa='.$p_sucursal. ' AND codrel='.$p_codrel.' AND anio='.$p_anio.' AND mes='.$p_mes.' AND nro='.$p_nro. ' ORDER BY empresa, sucursa, codrel, anio, mes, nro;'; return $this->obtenerDatos($SQL_MANUAL); }
//-------------------------------------Funciones de ayuda-----------------------------------/
/** * Obtiene de la base de datos la lista de empresas disponibles * @return array Retorna un arreglo bidimensional de la forma arreglo[codigo][descrip] */ function EmpresasDisponibles() { $SQL_EMPRESAS = 'SELECT empresa, descrip FROM general.empresa ORDER BY empresa asc'; return $this->obtenerDatos($SQL_EMPRESAS); } /** * Obtiene de la base de datos la lista operaciones * @param string Tipo de comprobante * @return array Retorna un arreglo multidimensional: */ function TipEntDisponibles($p_TipEnt, $p_Ent) { //El parametro no puede ser vacio
if(!empty($p_TipEnt)) { //El parametro es opcional
if(!empty($p_Ent)) { //'Sanea' la entrada para evitar ataques SQL-Injection
$TipEntSano = $this->sanearTextoSQL($p_TipEnt); $SQL_TIPENT = "SELECT te_ent, te_tip, te_nom FROM general.tipent WHERE te_tip = " . $TipEntSano . " AND te_ent = " . $p_Ent . " ORDER BY te_ent ASC;"; // echo "seleccionando uno: $SQL_TIPENT";
} else { //'Sanea' la entrada para evitar ataques SQL-Injection
$TipEntSano = $this->sanearTextoSQL($p_TipEnt); $SQL_TIPENT = "SELECT te_ent, te_tip, te_nom FROM general.tipent WHERE te_tip='" . $p_TipEnt . "' ORDER BY te_ent ASC;"; } } else { //Si es vacio, genera el warning y devuelvo vacio
if($this->AppConfig->DEBUG["nivel"] >1) { $war_msg = "Error en parametros: p_TipEnt"; trigger_error($war_msg, E_USER_WARNING); } } return $this->obtenerDatos($SQL_TIPENT); } /** * Obtiene de la base de datos la lista operaciones * @param string Tipo de comprobante * @return array Retorna un arreglo multidimensional: */ function TipEntDisponible($p_TipEnt, $p_Ent) { //El parametro no puede ser vacio
if(!empty($p_TipEnt)) { //'Sanea' la entrada para evitar ataques SQL-Injection
$TipComSano = $this->sanearTextoSQL($p_TipEnt); if(empty($p_Ent)) $p_Ent='null'; $SQL_TIPENT = "SELECT te_ent, te_tip, te_nom FROM general.tipent WHERE te_tip = " . $TipComSano . " AND te_ent = " . $p_Ent . " ORDER BY te_ent asc"; } else { //Si es vacio, genera el warning y devuelvo vacio
if($this->AppConfig->DEBUG["nivel"] >1) { $war_msg = "Error en parametros: p_TipEnt"; trigger_error($war_msg, E_USER_WARNING); } } return $this->obtenerDatos($SQL_TIPENT); } /** * Obtiene de la base de datos la lista de tipos de entidades disponibles * @return array Retorna un arreglo bidimensional de la forma arreglo[codigo][descrip] */ function TiposDeEntidadesDisponibles() { $SQL_TIPOE = 'SELECT ti_tipo, ti_dtip FROM general.tipoe ORDER BY ti_tipo asc'; return $this->obtenerDatos($SQL_TIPOE); } /** FUNCIONES BUSCA * Funciones especificas de busqueda, reemplazan los GetRecord */ function Busca_Manual($p_empresa, $p_sucursal, $p_codrel, $p_anio, $p_mes, $p_nro) { $SQL_MANUAL = 'SELECT * FROM general.manual WHERE empresa='.$p_empresa.' AND sucursa='.$p_sucursal. ' AND codrel='.$p_codrel.' AND anio='.$p_anio.' AND mes='.$p_mes.' AND nro<='.$p_nro.' ORDER BY empresa, sucursa, codrel, anio, mes, nro;'; return $this->obtenerDatos($SQL_MANUAL); } function Busca_Manual_Inverso($p_empresa, $p_sucursal, $p_codrel, $p_anio, $p_mes, $p_nro) { $SQL_MANUAL = 'SELECT * FROM general.manual WHERE empresa='.$p_empresa.' AND sucursa='.$p_sucursal. ' AND codrel='.$p_codrel.' AND anio='.$p_anio.' AND mes='.$p_mes.' AND nro<'.$p_nro.' ORDER BY empresa, sucursa, codrel, anio, mes, nro DESC LIMIT 1;'; return $this->obtenerDatos($SQL_MANUAL); } //-------------------------------------INTERFAZ PRIVADA-------------------------------------/
/** * Accede a la BD y obtiene los resultados de la consulta identificando si existen errores * de conexion o consulta * @param string <var>consulta</var> sentencia SQL a enviar a la base de datos * @return array Retorna un arreglo bidimensional de la forma arreglo[empresa][descrip] */ function obtenerDatos(&$consulta) { //Retorno de la funcion
$ret_datos = ""; //Para manejar errores
$NIVEL_DEBUG = $this->AppConfig->DEBUG["nivel"]; $this->ManejaBD->procesoCorrecto = true; $procesoCorrecto = $this->ManejaBD->conectarBD(); if($procesoCorrecto) { $procesoCorrecto = $this->ManejaBD->consultarBD($consulta); if($procesoCorrecto) { if($NIVEL_DEBUG>2) { trigger_error("General Consulta realizada correctamente: $consulta", E_USER_NOTICE); } //Obtiene un arreglo asociativo de toda la tabla resultado
$ret_datos = $this->ManejaBD->obtenerTotalFilasArray(); } else { if($NIVEL_DEBUG>2) { trigger_error($this->DB_QUERY_NULL." (SQL ERRONEO): $consulta", E_USER_NOTICE); $this->ManejaBD->procesoCorrecto = false; } } $this->ManejaBD->liberarConsulta(); $this->ManejaBD->desconectarBD(); } else { $this->ManejaBD->procesoCorrecto = false; trigger_error("Error:". $this->DB_CONNECT_ERROR, E_USER_NOTICE); die("Error: ". $this->DB_CONNECT_ERROR);//Podria retornarse un valor especifico que indique error
} return $ret_datos; } /** *Filtra las cadenas recibidas, que formaran parte e una consulta SQL, para evitar SQL-Injection *@param string <var>Texto</var> Texto a filtrar *@return string Texto filtrado con los caracteres criticos escapados/eliminados */ function sanearTextoSQL($texto) { $ret_sts = ""; if(!empty($texto)) { //Si esta activado MagicQuotes se eliminan todas las contrabarras que escapan comillas (ej: '\"' )
if (get_magic_quotes_gpc()) { $texto = stripslashes($texto); } //Si el valor NO es numerico, se le agregan comillas simples y se escapan los caracteres criticos
if (!is_numeric($texto)) { $ret_sts = "'"; //comilla incial
//Chequea si existe la funcion mysql_real_escape_string (PHP >= 4.3) para filtrar el texto
if (function_exists("mysql_real_escape_string")) { $ret_sts .= mysql_real_escape_string($texto); } else { //Si no existe se agregan contrabarras para escapar posibles comillas
$ret_sts .= addslashes($texto); //IMPLEMENTAR UNA FUNCION ALTERNATIVA A LA INEXISTENTE
} $ret_sts .= "'"; //comilla final
} } return $ret_sts; } } ?>
|