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.

425 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 "AppConfig.php";
  10. //--------------------------------------
  11. //-------------------------- FUNCIONES AUXILIARES VARIAS ------------------------------
  12. /** Funcion: armarOpcionesSelect
  13. * Recibe un arreglo asociativo bidimensional de tipo arreglo[n][codigo][descripcion]
  14. * Crea el esquema de opciones HTML <option value="codigo" selected="?">codigo] - descripcion</option>
  15. * El parametro $elegido indica que opcion es la seleccionada
  16. */
  17. function armarOpcionesSelect(&$appConfig, &$aDatos, $elegido, $descr)
  18. {
  19. $NIVEL_DEBUG = $appConfig->DEBUG["nivel"]; //Para manejar errores
  20. $ret_sel = ""; //retorno de la funcion
  21. //Precondicion: El arreglo no puede estar vacio
  22. $longDatos = sizeof($aDatos);
  23. if($longDatos == 1 )
  24. {
  25. $campoId = key($aDatos[0]);
  26. if($aDatos[0][$campoId] == '' )
  27. {
  28. return $ret_sel;
  29. }
  30. reset($aDatos[0]);
  31. }
  32. if($longDatos > 0)
  33. {
  34. $tagOption = ""; //String para almacenar el codigo HTML de cada opcion de select
  35. //Como el arreglo es asociativo y no conocemos los nombres, los tomamos del primer elemento
  36. $campoId = key($aDatos[0]);
  37. next($aDatos[0]); //avanza el puntero interno del arreglo pos[0] = (Id,Descripcion)
  38. $campoDesc = key($aDatos[0]);
  39. if(isset($descr))
  40. {
  41. next($aDatos[0]); //avanza el puntero interno del arreglo pos[0] = (Id,Descripcion)
  42. $campoDesc2 = key($aDatos[0]);
  43. }
  44. for($i=0;$i<$longDatos;$i++)
  45. {
  46. $tagOption = "<option value=\"{$aDatos[$i][$campoId]}\"";
  47. //Si el elemento actual es el elegido en el select, se agrega el codigo HTML para marcarlo 'selected'
  48. if( isset($elegido)
  49. && $elegido == $aDatos[$i][$campoId] )
  50. {
  51. $tagOption .= " selected style=\"font-weight: bold;\" ";
  52. }
  53. //El texto de la opcion es Id-Descripcion
  54. $tagOption .= ">{$aDatos[$i][$campoId]}] - {$aDatos[$i][$campoDesc]} {$aDatos[$i][$campoDesc2]} </option>\n";
  55. $ret_sel .= $tagOption;
  56. }
  57. reset($aDatos[0]);
  58. }
  59. else
  60. {
  61. if($NIVEL_DEBUG > 1)
  62. {
  63. $war_msg = "Error en parametros: ${$longDatos}";
  64. trigger_error($war_msg, E_USER_WARNING);
  65. }
  66. }
  67. return $ret_sel;
  68. }
  69. /** Genera el codigo JavaScript de dos arreglos de fechas 'fdes' y 'fhas' a partir de un arreglo de la
  70. * forma arreglo[codigo][descripcion][fechaDesde][fechaHasta]*/
  71. function armarArrayFechasDeVersion(&$aVersiones)
  72. {
  73. //PRECONDICION: el arreglo tiene al menos un elemento
  74. $ret_afv = ""; //retorno de la funcion
  75. $sizeArray = sizeof($aVersiones); //tamanio del arreglo
  76. if($sizeArray > 0)
  77. {
  78. $ret_afv .= "var aFechasDesde = new Array($sizeArray);\n".
  79. "var aFechasHasta = new Array($sizeArray);\n";
  80. for($i=0;$i<$sizeArray;$i++)
  81. {
  82. //crea el codigo javascript de los dos arreglos
  83. $ret_afv .= "aFechasDesde[$i] = \"{$aVersiones[$i]["mov_fdes"]}\";\n".
  84. "aFechasHasta[$i] = \"{$aVersiones[$i]["mov_fhas"]}\";\n";
  85. }
  86. }
  87. else
  88. {
  89. $err_msg = "Error en parametros de funcion armarArrayFechasDeVersion: parametro nulo";
  90. trigger_error($err_msg, E_USER_ERROR);
  91. }
  92. return $ret_afv;
  93. }
  94. //Devuelve la fecha actual en el formato seteado
  95. function verFechaActual($formato)
  96. {
  97. $ret_fecha = strftime($formato, time());
  98. return $ret_fecha;
  99. }
  100. /**
  101. * Utility function to return a value from a named array or a specified default
  102. * Codigo obtenido del soft Mambo Open Source (www.mamboserver.com)
  103. * @copyright (C) 2000 - 2004 Miro International Pty Ltd
  104. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
  105. *
  106. * @param array arreglo con los valores (POST, GET, etc) a recibir
  107. * @param string nombre del parametro
  108. * @param T valor por defecto si no existe el dato
  109. * @param int mascara a utilizar
  110. *
  111. * @return T
  112. */
  113. define('_CIG_NOTRIM' , 0x0001 );
  114. define('_CIG_ALLOWHTML', 0x0002 );
  115. define('_CIG_NOSLASHES', 0x0003 );
  116. define('_CIG_SQLSLASHES',0x0004 );
  117. function utl_getParam( &$arr, $name, $def=null, $mask=0 )
  118. {
  119. $return = null;
  120. if (isset( $arr[$name] ))
  121. {
  122. if (is_string( $arr[$name] ))
  123. {
  124. /* Elimina los espacios */
  125. if (!($mask & _CIG_NOTRIM)) {
  126. $arr[$name] = trim( $arr[$name] );
  127. }
  128. /* Elimina los tags html */
  129. if (!($mask & _CIG_ALLOWHTML)) {
  130. $arr[$name] = strip_tags( $arr[$name] );
  131. }
  132. /* Elimina las contrabarras */
  133. if ($mask & _CIG_NOSLASHES)
  134. {
  135. if (get_magic_quotes_gpc()) {
  136. $arr[$name] = stripslashes($arr[$name]);
  137. }
  138. }
  139. elseif ($mask & _CIG_SQLSLASHES)
  140. {
  141. // Stripslashes
  142. if (get_magic_quotes_gpc()) {
  143. $arr[$name] = stripslashes($arr[$name]);
  144. }
  145. // Quote if not integer
  146. if (!is_numeric($arr[$name])) {
  147. if (function_exists('mysql_real_escape_string')) {
  148. $arr[$name] = @mysql_real_escape_string($arr[$name]);
  149. } else {
  150. $arr[$name] = @mysql_escape_string($arr[$name]);
  151. }
  152. }
  153. }
  154. else
  155. {
  156. //Por defecto escapa los caracteres sin importar las Magic Quotes
  157. if (get_magic_quotes_gpc()) {
  158. $arr[$name] = stripslashes($arr[$name]);
  159. }
  160. $arr[$name] = addslashes($arr[$name]);
  161. }
  162. }
  163. return $arr[$name];
  164. }
  165. else
  166. {
  167. return $def;
  168. }
  169. }
  170. /**
  171. * Prints the page header.
  172. * @param $title The title of the page
  173. * @param $css css tag
  174. * @param $script script tag
  175. */
  176. function utl_printHeader($title = '', $css = null, $script = null) {
  177. global $appConfig;
  178. echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-Transitional.dtd\">\n";
  179. echo "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"es\" lang=\"es\">\n";
  180. echo "<head>\n";
  181. echo '<title>', htmlspecialchars($appConfig['app']['name']);
  182. if ($title != '') {
  183. echo " - {$title}";
  184. }
  185. echo "</title>\n";
  186. echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />\n";
  187. echo '<meta name="author" content="', htmlspecialchars($appConfig['app']['comp']),"\" />\n";
  188. echo '<meta name="description" content="', htmlspecialchars($appConfig['app']['desc']),"\" />\n";
  189. if ($css) {
  190. echo "{$css}\n";
  191. }
  192. if ($script) {
  193. echo "{$script}\n";
  194. }
  195. echo "</head>\n";
  196. }
  197. /**
  198. * Prints the page footer
  199. */
  200. function utl_printFooter() {
  201. echo "</body>\n</html>\n";
  202. }
  203. /**
  204. * Prints the page body.
  205. * @param $bodyClass - name of body class
  206. */
  207. function utl_printBody($bodyClass = '', $onload='', $onsubmit='')
  208. {
  209. $bodyClass = htmlspecialchars($bodyClass);
  210. echo "<body ", ($bodyClass == '' ? ' ' : " class=\"{$bodyClass}\" "),
  211. ($onload == '' ? '' : " onload=\"{$onload}\" "),
  212. ($onsubmit == '' ? '' : " onsubmit=\"{$onsubmit}\" "),
  213. ">\n";
  214. }
  215. /**
  216. * Prints the HTML header (H1,.. Hn)
  217. * @param int $size header font size
  218. * @param string $title title to print
  219. */
  220. function utl_printTitle($title, $size = 1, $class = '') {
  221. $class = ($class != '') ? " class=\"$class\"" : '';
  222. echo "<h$size".$class.">$title</h$size>\n";
  223. }
  224. /** Convierte la cadena aaaa-mm-dd a dd/mm/aaaa */
  225. function utl_Formatea_fecha( &$cadena )
  226. {
  227. if(strlen($cadena)>0)
  228. {
  229. $pattern = '/-/';
  230. $v_fecha= preg_split($pattern, trim($cadena), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
  231. $cadena = $v_fecha[2]. '/'. $v_fecha[1] . '/'. $v_fecha[0];
  232. }
  233. }
  234. /** Convierte la cadena dd/mm/aaaa a aaaa-mm-dd */
  235. function utl_Formatea_fecha_pg( &$cadena )
  236. {
  237. if(strlen($cadena)>0)
  238. {
  239. $pattern = '/\//';
  240. $v_fecha= preg_split($pattern, trim($cadena), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
  241. $cadena = $v_fecha[2]. '-'. $v_fecha[1] . '-'. $v_fecha[0];
  242. return $cadena;
  243. }
  244. }
  245. /** Calcula edad de una persona a partir de la fecha de nacimiento y una fecha actual
  246. * @param string $p_FecNac Fecha de nacimiento [AAAA-MM-DD]
  247. * @param string $p_FecAct Fecha actual [AAAA-MM-DD]
  248. * @return array Retorna una matriz de la forma matriz[item_registro][campo1][campo2]...[campon]
  249. */
  250. function utl_Calcula_Edad($p_FecNac, $p_FecAct)
  251. {
  252. if(!$p_FecAct)
  253. {
  254. $p_FecAct=date("Y-m-d");
  255. }
  256. if( strlen($p_FecNac) < 0 )
  257. {
  258. echo "La fecha de nacimiento, para el calculo de la edad, no puede ser nula<br />";
  259. return 0;
  260. }
  261. if( strlen($p_FecAct) < 0 )
  262. {
  263. echo "La fecha actual, para el calculo de la edad, no puede ser nula<br />";
  264. return 0;
  265. }
  266. $v_pattern = '/-/';
  267. $v_FecNac= preg_split($v_pattern, trim($p_FecNac), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
  268. $v_FecAct= preg_split($v_pattern, trim($p_FecAct), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
  269. if( (count($v_FecNac)!=3) )
  270. {
  271. echo "El formato de la fecha de nacimiento es INVALIDO [AAAA-MM-DD]<br />";
  272. return 0;
  273. }
  274. if( (count($v_FecAct)!=3) )
  275. {
  276. echo "El formato de la fecha actual es INVALIDO [AAAA-MM-DD]<br />";
  277. return 0;
  278. }
  279. $v_Edad = $v_FecAct[0]-$v_FecNac[0];
  280. if( ( $v_FecAct[1] < $v_FecNac[1] )
  281. || ( $v_FecAct[1] == $v_FecNac[1] && $v_FecAct[2] < $v_FecNac[2]) )
  282. $v_Edad=$v_Edad-1;
  283. return $v_Edad;
  284. }
  285. /** Funcion que Agrega un mes a una fecha dada
  286. * @param $p_FecCar: Fecha de carga, en formato dd/mm/aaaa
  287. * @param $p_mes: Meses a agregar
  288. * @return Cadena del tipo dd/mm/aaaa con el mes incrementado
  289. */
  290. function utl_AgregaMes($p_FecCar, $p_mes)
  291. {
  292. $pattern = '/\//';
  293. $v_fecha= preg_split($pattern, trim($p_FecCar), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
  294. $p_FecCar=$v_fecha[1]. "/" . $v_fecha[0] . "/" . $v_fecha[2];
  295. $my_time = strtotime($p_FecCar);
  296. $nextmonth = mktime(0, 0, 0, date("m", $my_time)+$p_mes, date("d", $my_time), date("Y", $my_time));
  297. return date("d/m/Y", $nextmonth);
  298. }
  299. /** Funcion que cuenta los registros devueltos por un query, este revisa el primer campo
  300. * que por definicion debe ser parte de la clave y no debe ser nulo */
  301. function utl_count(&$pDatos)
  302. {
  303. $longDatos = sizeof($pDatos);
  304. if($longDatos == 1 )
  305. {
  306. $campoId = key($pDatos[0]);
  307. if($pDatos[0][$campoId] == '' )
  308. {
  309. return 0;
  310. }
  311. return 1;
  312. }
  313. return $longDatos;
  314. }
  315. /** Verifica que la primer fecha sea mayor que la segunda
  316. Retorna 0 si la primera es mayor que la segunda
  317. 1 si la segunda es mayor que la primera
  318. */
  319. function utl_FechaMayorIgual( $p_fechaA, $p_fechaB )
  320. {
  321. //Cargar los arrays desde y hasta, de esta forma
  322. // array[0] = dia, array[1] = mes, array[2] = anio
  323. $v_pattern = '/\//';
  324. $v_array_fecha_A = preg_split($v_pattern, trim($p_fechaA), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
  325. $v_array_fecha_B = preg_split($v_pattern, trim($p_fechaB), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
  326. $v_dia_A=$v_array_fecha_A[0];
  327. $v_mes_A=$v_array_fecha_A[1];
  328. $v_anio_A=$v_array_fecha_A[2];
  329. $v_dia_B=$v_array_fecha_B[0];
  330. $v_mes_B=$v_array_fecha_B[1];
  331. $v_anio_B=$v_array_fecha_B[2];
  332. if( $v_anio_B < $v_anio_A) //Anio
  333. return 0;
  334. else
  335. {
  336. if( $v_anio_B == $v_anio_A)
  337. {
  338. if ( $v_mes_A > $v_mes_B ) //Mes
  339. return 0;
  340. else
  341. {
  342. if( $v_mes_B == $v_mes_A)
  343. {
  344. if( $v_dia_A > $v_dia_B) //Dia
  345. return 0;
  346. }
  347. }
  348. }
  349. }
  350. return 1;
  351. }
  352. function utl_Mensaje($ptipo, $pcod, $pmensaje, $pquery)
  353. {
  354. $return = '';
  355. $v_tipo=strtoupper($ptipo);
  356. $return .= '<strong><em style="color:#9933CC;">' . $pcod. "</em></strong> ";
  357. if(trim($v_tipo) == "OK")
  358. {
  359. $return .= '<strong><em style="color:green;">Ok</em></strong> ';
  360. }
  361. if(trim($v_tipo) == "ERROR")
  362. {
  363. $return .= '<strong><em style="color:red;">Error: </em></strong>';
  364. }
  365. if(trim($v_tipo) == "ADVERTENCIA")
  366. {
  367. $return .= '<strong><em style="color:#FF9900;">Advertencia: </em></strong>';
  368. }
  369. $return .= '<em style="color:blue;">' . $pmensaje . '</em> ';
  370. if($pquery!='')
  371. $return .= ' - Consulta: <em style="color:blue;">' . $pquery . '</em>';
  372. $return.='<br />';
  373. return $return;
  374. }
  375. ?>