setDecimal($carn['DECIMAL'],$carp['DECIMAL'],$carn['GROUP'],$carp['GROUP']); // $num = $transformer->expandExponent($num); // $num = $transformer->decimalPad($num, $decimales); // $num = $transformer->process(TIPO_DECIMAL,$num); // return $num; } /** * 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 */ static function transformaNumero($num){ IgepComunicacion::transform_User2FW($num, TIPO_DECIMAL); return $num; } /** * Da formato a una fecha para presentarlo en pantalla. * Acepta como entrada la fecha en timestamp o en formato string de negocio. * Cuando recibe una fecha en timestamp, modifica el formato para que salga * el dia y mes rellenado con ceros, como hace el transformer * * @access public * @static * @param string fecha en formato timestamp * @param string tipo de formato: FECHAHORA, FECHA * @return string devuelve la fecha formateada */ static function formatoFecha($fecha,$tipo){ if ($tipo != 'FECHA' and $tipo != 'FECHAHORA') return '!!tipo fecha incorrecto!!'; return IgepComunicaUsuario::prepararPresentacion($fecha,($tipo=='FECHA'? TIPO_FECHA: TIPO_FECHAHORA)); // $fmt_dest = ConfigFramework::getDateMaskUser(); // if (is_numeric($fecha)) { // // calculo repetido en tests // $fmt_dest = str_replace('j', 'd', $fmt_dest); // $fmt_dest = str_replace('n', 'm', $fmt_dest); // if ($tipo == 'FECHAHORA') // $fmt_dest .= ' H:i:s'; // return date($fmt_dest, $fecha); // } else { // $fmt_ori = ConfigFramework::getDateMaskFW(); // $transformer = new IgepTransformer(); // $transformer->setDate($fmt_ori,$fmt_dest); // return $transformer->process(($tipo == 'FECHAHORA'? TIPO_FECHAHORA : TIPO_FECHA), $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 * - no usamos ConfIgep::transformaNegocio($str_fechaHora, TIPO_FECHAHORA) TODO * * @access public * @static * @param string fecha en formato string * @return time devuelve la fecha formateada */ static function formatoFechaNegocio($str_fechaHora) { self::setTransformErrors(array()); if (empty($str_fechaHora)) return NULL; // return ConfIgep::transformaNegocio($str_fechaHora, TIPO_FECHAHORA); $fecha_ori = ConfigFramework::getDateMaskUser(); $fecha_dest = ConfigFramework::getDateMaskFW(); $transformer = new IgepTransformer(true); $transformer->setDate($fecha_ori,$fecha_dest); $str_fechaHora = $transformer->process(TIPO_FECHAHORA, $str_fechaHora); self::setTransformErrors($transformer->getTransformErrors()); $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; } //TODO: quitar limite de strtotime, lo mantengo para el parseo de fecha pantalla return new gvHidraTimestamp($str_fechaHora); } /** * Convierte de DB a User * Si estamos convirtiendo un numero a decimal podemos indicar el numero de decimales. * * @access public * @param any $a_parametros * @param any $a_tipo * @param mixed $a_dsn * @param number $a_decimales * @return mixed */ static function prepararPresentacion( $a_parametros, $a_tipo, $a_dsn, $a_decimales=2) { if (!is_array($a_parametros) and $a_parametros!='' and $a_tipo!='') { // le doy estructura de vector para no repetir el codigo $vector = false; $a_parametros = array(array('col'=>$a_parametros,),); $a_tipo = array('col'=>array('tipo'=>$a_tipo, 'parteDecimal'=>$a_decimales),); } else $vector = true; if (is_array($a_tipo)) { $transformer = new IgepTransformer(); $carbd = IgepDB::caracteresNumericos($a_dsn); $carconf = ConfigFramework::getNumericSeparatorsUser(); $transformer->setDecimal($carbd['DECIMAL'],$carconf['DECIMAL'],$carbd['GROUP'],$carconf['GROUP']); $fechabd = IgepDB::mascaraFechas($a_dsn); $fechaconf = ConfigFramework::getDateMaskUser(); $transformer->setDate($fechabd,$fechaconf); foreach($a_parametros as $fila => $tupla) foreach($a_tipo as $campo => $descTipo){ if(isset($tupla[$campo])) { $tipo_efectivo = (empty($descTipo['tipo'])? TIPO_CARACTER: ($descTipo['tipo']==TIPO_ENTERO? TIPO_DECIMAL: $descTipo['tipo'])); if ($tipo_efectivo == TIPO_DECIMAL) $tupla[$campo] = $transformer->expandExponent($tupla[$campo], $carbd['DECIMAL'], $carbd['GROUP']); if ($descTipo['tipo'] == TIPO_DECIMAL) $tupla[$campo] = $transformer->decimalPadDatos($tupla[$campo], $descTipo['parteDecimal'], $a_dsn); $a_parametros[$fila][$campo] = $transformer->process($tipo_efectivo, $tupla[$campo]); } } } if ($vector) return $a_parametros; else return $a_parametros[0]['col']; } // Fin de prepararPresentacion function getTransformErrors() { return self::$transformErrors; } function setTransformErrors($lis) { self::$transformErrors = $lis; if (!empty($lis)) IgepDebug::setDebug(DEBUG_IGEP,'La transformación ha detectado errores en la entrada del usuario: '.var_export($lis,true)); } } ?>