',','GROUP'=>'.'); } /** * Define los carácteres usados en internamente (PHP) para los números * * @access public * @static * @return mixed array asociativo con entrada 'DECIMAL' y 'GROUP' */ function caracteresNumericosNegocio(){ return array('DECIMAL'=>'.','GROUP'=>'se usa??'); } /** * Da formato a un número desde PHP para presentarlo en pantalla. * * @access public * @static * @param numero numero a formatear * @param numero decimales a considerar * @return string devuelve el número formateado */ function formatoNumero($num,$decimales=2){ $car = ConfIgep::caracteresNumericos(); $numf = number_format($num, $decimales, $car['DECIMAL'], $car['GROUP']); return $numf; } /** * Da formato a un número de pantalla para manejarlo en el php * Independientemente de la configuracion de bds y de presentación, * el php maneja el punto decimal. * Anteriormente este metodo solo eliminaba el separador de grupos * si habia sep. de grupos y de decimales; de esta forma si el numero venia * con puntos decimales los aceptaba como comas. * En adelante se eliminan siempre los separadores de grupos. * * @access public * @static * @param numero a formatear * @return string devuelve el número para PHP */ function transformaNumero($num){ $carp = ConfIgep::caracteresNumericos(); $carn = ConfIgep::caracteresNumericosNegocio(); $posGroup = strrpos($num,$carp['GROUP']); $posUltDec = strrpos($num,$carp['DECIMAL']); if (!($posGroup === false)) { $num = str_replace($carp['GROUP'], '', $num); $posUltDec = strrpos($num,$carp['DECIMAL']); } // reemplazamos el caracter decimal si es distinto del actual if ($carp['DECIMAL'] != $carn['DECIMAL']) { if (!($posUltDec === false)) $num = substr_replace($num,$carn['DECIMAL'],$posUltDec,1); } return $num; } /** * Define la mascara de representación de fechas * * @access public * @static * @return string */ static function mascaraRepresentacionFechas(){ return 'd/m/Y'; } /** * Define la mascara de representación de fechas en negocio (PHP) * * @access public * @static * @return string */ function mascaraFechasNegocio(){ return 'Y/m/d'; } /** * Da formato a una fecha para presentarlo en pantalla. * Acepta como entrada la fecha en timestamp o en formato string de negocio. * * @access public * @static * @param string fecha en formato timestamp * @param string tipo de formato: FECHAHORA, FECHA * @return string devuelve la fecha formateada */ function formatoFecha($fecha,$tipo){ if ($tipo != 'FECHA' and $tipo != 'FECHAHORA') return '!!tipo fecha incorrecto!!'; $fmt_dest = ConfIgep::mascaraRepresentacionFechas(); if (is_numeric($fecha)) { if ($tipo == 'FECHAHORA') $fmt_dest .= ' H:i:s'; return date($fmt_dest, $fecha); } else { $fmt_ori = ConfIgep::mascaraFechasNegocio(); if ($fmt_ori != $fmt_dest) { $transformer = new IgepTransformer(); $transformer->setDate($fmt_ori,$fmt_dest); return $transformer->process(($tipo == 'FECHAHORA'? TIPO_FECHAHORA : TIPO_FECHA), $fecha); } return $fecha; } } /** * Da formato a una fecha pantalla para tratarla en negocio * Devuelve false si es incorrecta, o null si el valor es vacio * Hay algunas fechas como '30/02/2007' que no dan error con la funcion * strtotime sino que equivale a 2/3/2007. Por ese motivo añadimos mas * controles y asi poder validar la entrada del usuario. * * @access public * @static * @param string fecha en formato string * @return time devuelve la fecha formateada */ function formatoFechaNegocio($str_fechaHora){ if ($str_fechaHora=='' or $str_fechaHora==NULL or !isset($str_fechaHora)) return NULL; $fecha_ori = ConfIgep::mascaraRepresentacionFechas(); $fecha_dest = ConfIgep::mascaraFechasNegocio(); if ($fecha_ori != $fecha_dest) { $transformer = new IgepTransformer(); $transformer->setDate($fecha_ori,$fecha_dest); $str_fechaHora = $transformer->process(TIPO_FECHAHORA, $str_fechaHora); } $res = strtotime($str_fechaHora); if (!$res) return false; list($f, $h) = explode(" ",$str_fechaHora); if ($f != date($fecha_dest, $res)) return false; if (isset($h)) { list($hh, $hm, $hs) = explode(':',$h); if ($hh<0 || $hh>23 || $hm<0 || $hm>59 || (isset($hs) && ($hs<0 || $hs>59)) ) return false; } return $res; } /** * Compara dos fechas en formato string, de la capa interfaz * Devuelve un número positivo si la segunda fecha es posterior a la primera * * @access public * @static * @param string fecha (interfaz) * @param string fecha (interfaz) * @return int (timestamp) */ function comparaFechas($str_fechaHora1, $str_fechaHora2){ $fecha1 = ConfIgep::formatoFechaNegocio($str_fechaHora1); $fecha2 = ConfIgep::formatoFechaNegocio($str_fechaHora2); return ($fecha2-$fecha1); } // Fin de comparaFechas /** * Este método prepara los datos que vienen de una consulta de la BD antes de mostrarse en * el formato propio de IGEP. Generalmente, las fechas y los decimales en los sistemas que * tengan mascaras diferentes a las de IGEP (p.e. MySQL). * Este método puede ser invocado por el usuario, o bien se puede llamar opcionalmente con los metodos * 'consultar' de IgepNegocio e IgepConexion si le pasamos un segundo parámetro indicandole el NODO_INTERFAZ. * Se puede optimizar controlando que en el array de tipos haya fechas o numeros decimales. * * @access public * @param any $a_parametros * @param any $a_tipo * @return none */ static function prepararPresentacion( $a_parametros, $a_tipo, $dsn) { $transforma = false; $transformer = new IgepTransformer(); $carbd = IgepDB::caracteresNumericos($dsn); $carconf = ConfIgep::caracteresNumericos(); if ($carbd['DECIMAL'] != $carconf['DECIMAL']) { $transformer->setDecimal($carbd['DECIMAL'],$carconf['DECIMAL']); $transforma = true; } $fechabd = IgepDB::mascaraFechas($dsn); $fechaconf = ConfIgep::mascaraRepresentacionFechas(); if ($fechabd != $fechaconf) { $transformer->setDate($fechabd,$fechaconf); $transforma = true; } if ($transforma) { if(is_array($a_parametros)) foreach($a_parametros as $fila => $tupla){ //REVIEW: Toni Cambio código en prepararPresentación. Validar funcionamiento /* cambio el recorrido del array para economizar. Sustituyo el anterior que es: foreach($tupla as $campo => $valor) $a_parametros[$fila][$campo] = $transformer->process($a_tipo[$campo]['tipo'],$valor); */ if(is_array($a_tipo)){ foreach($a_tipo as $campo => $descTipo){ if(isset($tupla[$campo])) $a_parametros[$fila][$campo] = $transformer->process($descTipo['tipo'],$tupla[$campo]); } } } elseif($a_parametros!='' and $a_tipo!='') $a_parametros = $transformer->process($a_tipo,$a_parametros); } return $a_parametros; } // Fin de prepararPresentacion /** * Este método prepara los datos que vienen de una consulta de la BD antes de operar en PHP. * Generalmente, las fechas y los decimales en los sistemas que tengan mascaras diferentes a las de PHP. * Este método puede ser invocado por el usuario, o bien se puede llamar opcionalmente con los metodos * 'consultar' de IgepNegocio e IgepConexion si le pasamos un segundo parámetro indicandole el NODO_NEGOCIO. * Se puede optimizar controlando que en el array de tipos haya fechas o numeros decimales. * * @access public * @param any $a_parametros * @param any $a_tipo * @param mixed $dsn * @return mixed */ function prepararNegocio( $a_parametros, $a_tipo, $dsn) { $transforma = false; $transformer = new IgepTransformer(); $carbd = IgepDB::caracteresNumericos($dsn); $carconf = ConfIgep::caracteresNumericosNegocio(); if ($carbd['DECIMAL'] != $carconf['DECIMAL']) { $transformer->setDecimal($carbd['DECIMAL'],$carconf['DECIMAL']); $transforma = true; } $fechabd = IgepDB::mascaraFechas($dsn); $fechaconf = ConfIgep::mascaraFechasNegocio(); if ($fechabd != $fechaconf) { $transformer->setDate($fechabd,$fechaconf); $transforma = true; } if ($transforma) { if(is_array($a_parametros)){ foreach($a_parametros as $fila => $tupla){ //REVIEW: Toni Cambio código en prepararPresentación. Validar funcionamiento /* cambio el recorrido del array para economizar. Sustituyo el anterior que es: foreach($tupla as $campo => $valor) $a_parametros[$fila][$campo] = $transformer->process($a_tipo[$campo]['tipo'],$valor); */ if(is_array($a_tipo)){ foreach($a_tipo as $campo => $descTipo) $a_parametros[$fila][$campo] = $transformer->process($descTipo['tipo'],$tupla[$campo]); } } } elseif($a_parametros!='' and $a_tipo!='') $a_parametros = $transformer->process($a_tipo,$a_parametros); } return $a_parametros; } // Fin de prepararNegocio function obtenerDefVentanaGeneral($constanteConstruccion){ switch($constanteConstruccion){ case 'PROVINCIAS': //Ventana de Selección de Provincias $datosVentana['consulta'] = 'select cpro, dpro from tcom_provincias'; $datosVentana['camposBusqueda'] = array('cpro','dpro'); break; case 'SERVICIOS': //Ventana de Seleccion para los Servicios $datosVentana['consulta'] = 'select cdg, cserv, dserv from vcom_servicios'; $datosVentana['camposBusqueda'] = array('cdg','cserv','dserv'); break; default: return -1; } return $datosVentana; } function obtenerDefListaGeneral($nombre){ switch($nombre){ case 'MUNICIPIOS': //Lista de Municipios $consulta = 'select cmun as "valor",dmun as "descripcion" from tcom_municipios'; break; case 'MUNICIPIOS-CV': //Lista de Municipios-CV $consulta = 'select cmun as "valor",dmun as "descripcion" from tcom_municipios where cpro in (\'03\',\'12\',\'46\')'; break; case 'COMARCAS': //Lista de Comarcas $consulta = ' select DISTINCT tcom_comarcas.ccom as "valor",dcom as "descripcion" from tcom_comarcas, tcom_municipios WHERE tcom_municipios.ccom = tcom_comarcas.ccom'; break; case 'PROVINCIAS': //Lista de Provincias. $consulta = 'select cpro as "valor",dpro as "descripcion" from tcom_provincias'; break; case 'PROVINCIAS-CV': //Lista de Provincias. $consulta = 'select cpro as "valor",dpro as "descripcion" from tcom_provincias where cpro in (\'03\',\'12\',\'46\')'; break; case 'DIRGRAL': //Lista de Direcciones Generales. $consulta = ' select cdg as "valor",ddg as "descripcion" from tcom_dirgral WHERE cdg in (\'01\',\'05\',\'06\',\'03\',\'04\',\'17\',\'18\')'; break; case 'VERSIONESAPLICACION': $str_aplicacion = ComunSession::dameAplicacion(); $str_modulo = ComunSession::hayModulo('M_INTRANET'); $consulta = " select numver as \"valor\", case when numver like '%ctual' THEN ' Otros' ELSE numver END as \"descripcion\", coalesce(max(fver),current_date-10000) from tptc_peticiones WHERE (numver LIKE '%.%' OR numver like '%ctual' or ('".$str_modulo."'='1' and numver='Próxima')) and estado='SO' and VISIBLEUSER = 'S' AND APLICACION = '".$str_aplicacion."' GROUP BY NUMVER ORDER BY 3 DESC"; break; case 'PETICIONES': $consulta = 'select estado as "valor", desc_estado as "descripcion" from tptc_estado_peticiones'; break; default: $consulta = -1; } return $consulta; }//Fin de obtenerDefListaGenerales } /** Variable que indica el nivel de log que se va a registrar. * Los valores posibles son: * LOG_NONE * LOG_ERRORS * LOG_AUDIT * LOG_ALL */ $g_log = LOG_ERRORS; ?>