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