You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

372 lines
12 KiB

<?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;
}
}
?>