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

4 years ago
  1. <?php
  2. /*-----------------------------------*
  3. * Proyecto : SAI *
  4. * Autor : Federico A. Ocampo *
  5. * Desc: Interfaz web de Seleccion *
  6. * para Armado de Informes *
  7. *-----------------------------------*/
  8. //--------------------------------------
  9. require_once 'PostgreClass.php';
  10. require_once "AppConfig.php";
  11. //--------------------------------------
  12. /*****************************************************************************
  13. .::. Clase ObtieneDatosGeneral .::.
  14. @Autor: Federico A. Ocampo
  15. @Email: federico@mcanet.com.ar
  16. @Empresa: MCAnet
  17. @Descripcion: Esta clase provee los metodos para obtener, de la base de datos
  18. correspondiente, las diferentes tablas. Realiza las consultas
  19. necesarias y retorna, por cada consulta, un arreglo con toda la
  20. tabla resultado.
  21. *****************************************************************************/
  22. class ObtieneDatosGeneral
  23. {
  24. var $AppConfig; //Configuracion de la aplicacion
  25. var $ManejaBD; //Clase que administra la conexion con la base de datos
  26. var $DB_CONNECT_ERROR = "FALLO AL CONECTAR CON LA BASE DE DATOS";
  27. var $DB_QUERY_NULL = "La consulta no obtuvo resultados";
  28. /**
  29. * Constructor: inicializa las propiedades de la clase
  30. * Recibe todos los parametros por referencia
  31. * @param AppConfig Objeto con la configuracion de la aplicacion
  32. * @param ManejadorBD clase para gestionar la conexion con la base de datos
  33. */
  34. function ObtieneDatosGeneral(&$AppConfig, &$ManejadorBaseDatos)
  35. {
  36. $this->AppConfig =& $AppConfig;
  37. $this->ManejaBD =& $ManejadorBaseDatos;
  38. }
  39. /**
  40. * Empieza una transaccion
  41. * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip]
  42. */
  43. /*function Begin_Transaction()
  44. {
  45. $SQL_BEGIN = 'BEGIN;';
  46. return $this->obtenerDatos($SQL_BEGIN);
  47. }*/
  48. /**
  49. * Termina un bloque de transaccion
  50. * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip]
  51. */
  52. /*function End_Transaction()
  53. {
  54. $SQL_END = 'COMMIT;';
  55. return $this->obtenerDatos($SQL_END);
  56. }*/
  57. /**
  58. * Vuelve atras las operaciones de un bloque de transaccion
  59. * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip]
  60. */
  61. /*function Rollback_Transaction()
  62. {
  63. $SQL_END = 'ROLLBACK;';
  64. return $this->obtenerDatos($SQL_END);
  65. }*/
  66. /*---Leos------------------------------------------------------------------------------*/
  67. /**
  68. * Obtiene de la base de datos los datos de la tabla GEMITE
  69. * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip]
  70. */
  71. function Leo_GEMITE($p_Version, $p_Clave)
  72. {
  73. $SQL_GEMITE = 'SELECT * FROM general.gemite WHERE gem_ver=' . $p_Version . ' AND gem_clave=\''. $p_Clave .'\'
  74. LIMIT 1;';
  75. return $this->obtenerDatos($SQL_GEMITE);
  76. }
  77. /**
  78. * Obtiene de la base de datos los datos de la tabla MONEDA
  79. * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip]
  80. */
  81. function Leo_MONEDA($p_Moneda)
  82. {
  83. $SQL_MONEDA = 'SELECT * FROM general.moneda WHERE moneda=' . $p_Moneda . ';';
  84. return $this->obtenerDatos($SQL_MONEDA);
  85. }
  86. /**
  87. * Obtiene de la base de datos el nombre de la entidad
  88. * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip]
  89. */
  90. function Leo_ENTIDAD($p_Enti)
  91. {
  92. $SQL_NOMENTI = 'SELECT * FROM general.entidad WHERE en_enti=' . $p_Enti . ';';
  93. return $this->obtenerDatos($SQL_NOMENTI);
  94. }
  95. /**
  96. * Obtiene de la base de datos los datos de la tabla rentsuc
  97. * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip]
  98. */
  99. function Leo_RENTSUC($p_Emp, $p_Suc, $p_TipEnt)
  100. {
  101. $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 . '\';';
  102. return $this->obtenerDatos($SQL_RENTSUC);
  103. }
  104. /**
  105. * Obtiene de la base de datos los datos de la tabla RELNUM
  106. * @return array Retorna una matriz de la forma matriz[item_registro][campo1][campo2]...[campon]
  107. */
  108. function Leo_RELNUM($p_Emp, $p_TipCom, $p_Ope)
  109. {
  110. $SQL_RELNUM = 'SELECT * FROM general.relnum WHERE rn_emp=' . $p_Emp . ' AND rn_tcom=\''. $p_TipCom.'\' AND rn_ope=' . $p_Ope. ';';
  111. return $this->obtenerDatos($SQL_RELNUM);
  112. }
  113. /**
  114. * Obtiene de la base de datos los datos de la tabla TIPENT
  115. * @return array Retorna una matriz de la forma matriz[item_registro][campo1][campo2]...[campon]
  116. */
  117. function Leo_TIPENT($p_TipEnt, $p_Ent)
  118. {
  119. $SQL_TIPENT = 'SELECT * FROM general.tipent WHERE te_tip =\''. $p_TipEnt .'\' AND te_ent=' . $p_Ent . ';';
  120. return $this->obtenerDatos($SQL_TIPENT);
  121. }
  122. /** FUNCIONES DE NUMERACION AUTOMATICA DE COMPROBANTES */
  123. function Leo_CodNum($p_empresa, $p_sucursal, $p_codrel)
  124. {
  125. $SQL_CODNUM = 'SELECT * FROM general.codnum WHERE empresa='.$p_empresa.' AND sucursa='.$p_sucursal.' AND numerac='.$p_codrel.' ORDER BY empresa, sucursa, numerac;';
  126. return $this->obtenerDatos($SQL_CODNUM);
  127. }
  128. function Leo_Automat($p_empresa, $p_sucursal, $p_codrel, $p_anio, $p_mes, $p_dia)
  129. {
  130. $SQL_AUTOMAT = 'SELECT * FROM general.automat WHERE empresa='.$p_empresa.' AND sucursa='.$p_sucursal.
  131. ' AND codrel='.$p_codrel.' AND anio='.$p_anio.' AND mes='.$p_mes.' AND dia='.$p_dia.
  132. ' ORDER BY empresa, sucursa, codrel, anio, mes, dia;';
  133. return $this->obtenerDatos($SQL_AUTOMAT);
  134. }
  135. function Leo_Manual($p_empresa, $p_sucursal, $p_codrel, $p_anio, $p_mes, $p_nro)
  136. {
  137. $SQL_MANUAL = 'SELECT * FROM general.manual WHERE empresa='.$p_empresa.' AND sucursa='.$p_sucursal.
  138. ' AND codrel='.$p_codrel.' AND anio='.$p_anio.' AND mes='.$p_mes.' AND nro='.$p_nro.
  139. ' ORDER BY empresa, sucursa, codrel, anio, mes, nro;';
  140. return $this->obtenerDatos($SQL_MANUAL);
  141. }
  142. //-------------------------------------Funciones de ayuda-----------------------------------/
  143. /**
  144. * Obtiene de la base de datos la lista de empresas disponibles
  145. * @return array Retorna un arreglo bidimensional de la forma arreglo[codigo][descrip]
  146. */
  147. function EmpresasDisponibles()
  148. {
  149. $SQL_EMPRESAS = 'SELECT empresa, descrip FROM general.empresa ORDER BY empresa asc';
  150. return $this->obtenerDatos($SQL_EMPRESAS);
  151. }
  152. /**
  153. * Obtiene de la base de datos la lista operaciones
  154. * @param string Tipo de comprobante
  155. * @return array Retorna un arreglo multidimensional:
  156. */
  157. function TipEntDisponibles($p_TipEnt, $p_Ent)
  158. {
  159. //El parametro no puede ser vacio
  160. if(!empty($p_TipEnt))
  161. {
  162. //El parametro es opcional
  163. if(!empty($p_Ent))
  164. {
  165. //'Sanea' la entrada para evitar ataques SQL-Injection
  166. $TipEntSano = $this->sanearTextoSQL($p_TipEnt);
  167. $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;";
  168. // echo "seleccionando uno: $SQL_TIPENT";
  169. }
  170. else
  171. {
  172. //'Sanea' la entrada para evitar ataques SQL-Injection
  173. $TipEntSano = $this->sanearTextoSQL($p_TipEnt);
  174. $SQL_TIPENT = "SELECT te_ent, te_tip, te_nom FROM general.tipent WHERE te_tip='" . $p_TipEnt . "' ORDER BY te_ent ASC;";
  175. }
  176. }
  177. else
  178. {
  179. //Si es vacio, genera el warning y devuelvo vacio
  180. if($this->AppConfig->DEBUG["nivel"] >1)
  181. {
  182. $war_msg = "Error en parametros: p_TipEnt";
  183. trigger_error($war_msg, E_USER_WARNING);
  184. }
  185. }
  186. return $this->obtenerDatos($SQL_TIPENT);
  187. }
  188. /**
  189. * Obtiene de la base de datos la lista operaciones
  190. * @param string Tipo de comprobante
  191. * @return array Retorna un arreglo multidimensional:
  192. */
  193. function TipEntDisponible($p_TipEnt, $p_Ent)
  194. {
  195. //El parametro no puede ser vacio
  196. if(!empty($p_TipEnt))
  197. {
  198. //'Sanea' la entrada para evitar ataques SQL-Injection
  199. $TipComSano = $this->sanearTextoSQL($p_TipEnt);
  200. if(empty($p_Ent))
  201. $p_Ent='null';
  202. $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";
  203. }
  204. else
  205. {
  206. //Si es vacio, genera el warning y devuelvo vacio
  207. if($this->AppConfig->DEBUG["nivel"] >1)
  208. {
  209. $war_msg = "Error en parametros: p_TipEnt";
  210. trigger_error($war_msg, E_USER_WARNING);
  211. }
  212. }
  213. return $this->obtenerDatos($SQL_TIPENT);
  214. }
  215. /**
  216. * Obtiene de la base de datos la lista de tipos de entidades disponibles
  217. * @return array Retorna un arreglo bidimensional de la forma arreglo[codigo][descrip]
  218. */
  219. function TiposDeEntidadesDisponibles()
  220. {
  221. $SQL_TIPOE = 'SELECT ti_tipo, ti_dtip FROM general.tipoe ORDER BY ti_tipo asc';
  222. return $this->obtenerDatos($SQL_TIPOE);
  223. }
  224. /** FUNCIONES BUSCA
  225. * Funciones especificas de busqueda, reemplazan los GetRecord
  226. */
  227. function Busca_Manual($p_empresa, $p_sucursal, $p_codrel, $p_anio, $p_mes, $p_nro)
  228. {
  229. $SQL_MANUAL = 'SELECT * FROM general.manual WHERE empresa='.$p_empresa.' AND sucursa='.$p_sucursal.
  230. ' AND codrel='.$p_codrel.' AND anio='.$p_anio.' AND mes='.$p_mes.' AND nro<='.$p_nro.'
  231. ORDER BY empresa, sucursa, codrel, anio, mes, nro;';
  232. return $this->obtenerDatos($SQL_MANUAL);
  233. }
  234. function Busca_Manual_Inverso($p_empresa, $p_sucursal, $p_codrel, $p_anio, $p_mes, $p_nro)
  235. {
  236. $SQL_MANUAL = 'SELECT * FROM general.manual WHERE empresa='.$p_empresa.' AND sucursa='.$p_sucursal.
  237. ' AND codrel='.$p_codrel.' AND anio='.$p_anio.' AND mes='.$p_mes.' AND nro<'.$p_nro.'
  238. ORDER BY empresa, sucursa, codrel, anio, mes, nro DESC LIMIT 1;';
  239. return $this->obtenerDatos($SQL_MANUAL);
  240. }
  241. //-------------------------------------INTERFAZ PRIVADA-------------------------------------/
  242. /**
  243. * Accede a la BD y obtiene los resultados de la consulta identificando si existen errores
  244. * de conexion o consulta
  245. * @param string <var>consulta</var> sentencia SQL a enviar a la base de datos
  246. * @return array Retorna un arreglo bidimensional de la forma arreglo[empresa][descrip]
  247. */
  248. function obtenerDatos(&$consulta)
  249. {
  250. //Retorno de la funcion
  251. $ret_datos = "";
  252. //Para manejar errores
  253. $NIVEL_DEBUG = $this->AppConfig->DEBUG["nivel"];
  254. $this->ManejaBD->procesoCorrecto = true;
  255. $procesoCorrecto = $this->ManejaBD->conectarBD();
  256. if($procesoCorrecto)
  257. {
  258. $procesoCorrecto = $this->ManejaBD->consultarBD($consulta);
  259. if($procesoCorrecto)
  260. {
  261. if($NIVEL_DEBUG>2)
  262. {
  263. trigger_error("General Consulta realizada correctamente: $consulta", E_USER_NOTICE);
  264. }
  265. //Obtiene un arreglo asociativo de toda la tabla resultado
  266. $ret_datos = $this->ManejaBD->obtenerTotalFilasArray();
  267. }
  268. else
  269. {
  270. if($NIVEL_DEBUG>2)
  271. {
  272. trigger_error($this->DB_QUERY_NULL." (SQL ERRONEO): $consulta", E_USER_NOTICE);
  273. $this->ManejaBD->procesoCorrecto = false;
  274. }
  275. }
  276. $this->ManejaBD->liberarConsulta();
  277. $this->ManejaBD->desconectarBD();
  278. }
  279. else
  280. {
  281. $this->ManejaBD->procesoCorrecto = false;
  282. trigger_error("Error:". $this->DB_CONNECT_ERROR, E_USER_NOTICE);
  283. die("Error: ". $this->DB_CONNECT_ERROR);//Podria retornarse un valor especifico que indique error
  284. }
  285. return $ret_datos;
  286. }
  287. /**
  288. *Filtra las cadenas recibidas, que formaran parte e una consulta SQL, para evitar SQL-Injection
  289. *@param string <var>Texto</var> Texto a filtrar
  290. *@return string Texto filtrado con los caracteres criticos escapados/eliminados
  291. */
  292. function sanearTextoSQL($texto)
  293. {
  294. $ret_sts = "";
  295. if(!empty($texto))
  296. {
  297. //Si esta activado MagicQuotes se eliminan todas las contrabarras que escapan comillas (ej: '\"' )
  298. if (get_magic_quotes_gpc())
  299. {
  300. $texto = stripslashes($texto);
  301. }
  302. //Si el valor NO es numerico, se le agregan comillas simples y se escapan los caracteres criticos
  303. if (!is_numeric($texto))
  304. {
  305. $ret_sts = "'"; //comilla incial
  306. //Chequea si existe la funcion mysql_real_escape_string (PHP >= 4.3) para filtrar el texto
  307. if (function_exists("mysql_real_escape_string"))
  308. {
  309. $ret_sts .= mysql_real_escape_string($texto);
  310. }
  311. else
  312. {
  313. //Si no existe se agregan contrabarras para escapar posibles comillas
  314. $ret_sts .= addslashes($texto); //IMPLEMENTAR UNA FUNCION ALTERNATIVA A LA INEXISTENTE
  315. }
  316. $ret_sts .= "'"; //comilla final
  317. }
  318. }
  319. return $ret_sts;
  320. }
  321. }
  322. ?>