![]() |
Documentación GVHIDRA 3.1.5
|
Métodos públicos | |
__construct ($validate=false) | |
setDate ($from, $to) | |
setDecimal ($from, $to, $fromGroup='', $toGroup='') | |
setCharacter ($from, $to) | |
expandExponent ($num, $sep_d=null, $sep_g=null) | |
decimalPad ($num, $decimales) | |
decimalPadDatos ($num, $decimales, $dsn) | |
process ($type, $value) | |
getTransformErrors () | |
Campos de datos | |
$type_mod = array() | |
$decimal_metadata = array() | |
$character_metadata = array() | |
$date_metadata = array() | |
Métodos privados | |
isDate ($y, $m, $d) | |
_processDate ($data) | |
_processDateTime ($data) | |
_processDecimal ($data) | |
_processCharacter ($data) | |
addError ($msg) | |
Atributos privados | |
$transform_errors = array() | |
$validate |
Definición en la línea 39 del archivo IgepTransformer.php.
__construct | ( | $ | validate = false | ) |
Constructor
bool | indica si antes de transformar tiene que buscar errores en campo origen (normalmente para datos que introduce el usuario) |
Definición en la línea 57 del archivo IgepTransformer.php.
{ if (!is_bool($validate)) throw new gvHidraException('El constructor de IgepTransformer espera un booleano'); $this->validate = $validate; }
_processCharacter | ( | $ | data | ) | [private] |
Convierte cadenas
private
string | data |
Definición en la línea 438 del archivo IgepTransformer.php.
{ if (isset($this->type_mod[TIPO_CARACTER])) { foreach($this->character_metadata as $change){ $data = str_replace($change['from'],$change['to'],$data); } } return $data; }
_processDate | ( | $ | data | ) | [private] |
Convierte fechas Devuelve false si hay errores.
private
string | data |
Definición en la línea 296 del archivo IgepTransformer.php.
{ //Preparamos datos para el caso de las fechas if ($this->validate and empty($this->date_metadata['separatorIn'])) { throw new gvHidraException("Error de uso del transformer: se intenta transformar una fecha sin llamar previamente a setDate"); } $timeless = explode(' ',$data); if ($this->validate or isset($this->type_mod[TIPO_FECHA])) { // prepara el valor origen, bien para validar o para transformar $hay_error = false; if (count($timeless) > 1) { $this->addError("El campo '$data' no es una fecha sin hora vlida."); $hay_error = true; //return false; } $d=$this->date_metadata['posDay']; $j=$d; $m=$this->date_metadata['posMonth']; $n=$m; $Y=$this->date_metadata['posYear']; $date = explode($this->date_metadata['separatorIn'], $timeless[0]); if (!$hay_error and (count($date) != 3 or !$this->isDate($date[$Y], $date[$n], $date[$j]) ) ) { $this->addError("El campo '$data' no es una fecha vlida."); $hay_error = true; //return false; } } if (isset($this->type_mod[TIPO_FECHA])) { // en fechas convertidas siempre rellenamos dia y mes con ceros if (strlen($date[$j]) < 2) $date[$j] = str_pad($date[$j], 2, "0", STR_PAD_LEFT); if (strlen(@$date[$n]) < 2) $date[$n] = str_pad(@$date[$n], 2, "0", STR_PAD_LEFT); $position = $this->date_metadata['position']; return $date[$$position[0]].$this->date_metadata['separatorOut']. $date[$$position[1]].$this->date_metadata['separatorOut']. $date[$$position[2]]; } else return $timeless[0]; }
_processDateTime | ( | $ | data | ) | [private] |
Convierte fechas con hora Devuelve false si hay errores.
private
string | data |
Definición en la línea 344 del archivo IgepTransformer.php.
{ //Preparamos datos para el caso de las fechas if ($this->validate and empty($this->date_metadata['separatorIn'])) { throw new gvHidraException("Error de uso del transformer: se intenta transformar una fecha-hora sin llamar previamente a setDate"); } if ($this->validate or isset($this->type_mod[TIPO_FECHAHORA])) { // prepara el valor origen, bien para validar o para transformar $d=$this->date_metadata['posDay']; $j=$d; $m=$this->date_metadata['posMonth']; $n=$m; $Y=$this->date_metadata['posYear']; $position = $this->date_metadata['position']; $dateTime = explode(' ',$data); $date = explode($this->date_metadata['separatorIn'],$dateTime[0]); if (count($date) != 3 or !$this->isDate($date[$Y], $date[$n], $date[$j]) ) { $this->addError("El campo '$data' no es una fecha vlida."); //return false; } elseif (!empty($dateTime[1])){ $h = explode(':',$dateTime[1]); if (count($h)<2 or !is_numeric($h[0]) or $h[0]<0 or $h[0]>23 or !is_numeric($h[1]) or $h[1]<0 or $h[1]>59 or (isset($h[2]) and (!is_numeric($h[2]) or $h[2]<0 or $h[2]>59))) { $this->addError("El campo '$data' no tiene una hora vlida."); //return false; } } } if (isset($this->type_mod[TIPO_FECHAHORA])) { // en fechas convertidas siempre rellenamos dia y mes con ceros if (strlen($date[$j]) < 2) $date[$j] = str_pad($date[$j], 2, "0", STR_PAD_LEFT); if (strlen(@$date[$n]) < 2) $date[$n] = str_pad(@$date[$n], 2, "0", STR_PAD_LEFT); return $date[$$position[0]].$this->date_metadata['separatorOut']. $date[$$position[1]].$this->date_metadata['separatorOut']. $date[$$position[2]].(!empty($dateTime[1])? ' '.$dateTime[1]: ''); } else return $data; }
_processDecimal | ( | $ | data | ) | [private] |
Convierte numeros. El numero de decimales no se modifica, luego ha de recibir el numero con la cantidad deseada, aunque sea ,00 Devuelve false si hay errores.
private
string | data |
Definición en la línea 396 del archivo IgepTransformer.php.
{ if ($this->validate and empty($this->decimal_metadata['from'])) { throw new gvHidraException("Error de uso del transformer: se intenta transformar un numero sin llamar previamente a setDecimal"); } if ($this->validate or isset($this->type_mod[TIPO_DECIMAL])) { // prepara el valor origen, bien para validar o para transformar $data_orig = $data; $tmp_dec = '__dec__'; $posSeparator = strrpos($data, $this->decimal_metadata['from']); $num_dec = 0; // si hay caracter decimal, lo reemplazo temporalmente con uno especial // que no pueda provocar ambiguedad con el separador de grupos if ($posSeparator !== false) { $num_dec = strlen($data) - $posSeparator -1; $data = substr_replace($data,$tmp_dec,$posSeparator,1); } // se eliminan los grupos, si los hay if (!empty($this->decimal_metadata['fromGroup'])) $data = str_replace($this->decimal_metadata['fromGroup'], '', $data); // si habia separador decimal pongo el que maneja php (negocio) if ($posSeparator !== false) { $car = ConfigFramework::getNumericSeparatorsFW(); $data = str_replace($tmp_dec, $car['DECIMAL'], $data); } if (!is_numeric($data)) { $this->addError("El valor '$data_orig' no es un nmero vlido."); //return false; } } if (isset($this->type_mod[TIPO_DECIMAL])) return number_format($data, $num_dec, $this->decimal_metadata['to'], $this->decimal_metadata['toGroup']); else return $data; }
addError | ( | $ | msg | ) | [private] |
Registra un error de transformacion
string | msg texto del error a mostrar al usuario, cuando corresponda |
Definición en la línea 453 del archivo IgepTransformer.php.
{ $this->transform_errors[] = $msg; }
decimalPad | ( | $ | num, |
$ | decimales | ||
) |
Recibe un numero en formato negocio y completa los decimales con 0's' Viene con tipo texto, y sin exponente
public
number | num |
number | decimales |
Definición en la línea 210 del archivo IgepTransformer.php.
{ $carn = ConfigFramework::getNumericSeparatorsFW(); $partes = explode($carn['DECIMAL'],$num); $partes[1] = rtrim(@$partes[1], "0"); if (strlen($partes[1]) > $decimales) { // error, este metodo no es para truncar throw new gvHidraException("El numero $num tiene ".strlen($partes[1])." decimales y no se puede truncar a $decimales"); } return $partes[0].($decimales==0? '': $carn['DECIMAL'].str_pad($partes[1], $decimales, '0')); }
decimalPadDatos | ( | $ | num, |
$ | decimales, | ||
$ | dsn | ||
) |
Recibe un numero en formato bd y completa los decimales con 0's' Devuelve numero en bd
public
string | num |
number | decimales |
Definición en la línea 230 del archivo IgepTransformer.php.
{ $carn = IgepDB::caracteresNumericos($dsn); $partes = explode($carn['DECIMAL'],strval($num)); $partes[1] = rtrim(@$partes[1], "0"); if (strlen($partes[1]) > $decimales) { // error, este metodo no es para truncar throw new gvHidraException("El numero $num tiene ".strlen($partes[1])." decimales y no se puede truncar a $decimales"); } return $partes[0].($decimales==0? '': $carn['DECIMAL'].str_pad($partes[1], $decimales, '0')); }
expandExponent | ( | $ | num, |
$ | sep_d = null , |
||
$ | sep_g = null |
||
) |
Indica si hay alguna conversion registrada Util para optimizar los procesos donde se invoca la conversion para un conjunto de filas y columnas NO ADECUADO cuando:
public
string | o numero |
string | separador decimal |
string | separador de grupos |
Definición en la línea 170 del archivo IgepTransformer.php.
{ $snum = strval($num); if (stripos($snum,'e') > 0) { if (is_null($sep_d)) $n = ConfigFramework::getNumericSeparatorsFW(); else $n = array('DECIMAL'=>$sep_d, 'GROUP'=>$sep_g); // number_format NO FUNCIONA BIEN CUANDO TIENE QUE PONER MAS DE 5 CEROS // return rtrim(strval(number_format($snum, abs(substr($snum,$i))+2, $n['DECIMAL'], $n['GROUP']) // ), // '0'); $e = explode('e',strtolower($snum)); if (strpos($e[0],$n['DECIMAL']) === FALSE) $e[0].=$n['DECIMAL']; $snum = str_pad($e[0], abs($e[1])+4, '0', ($e[1]>=0? STR_PAD_RIGHT: STR_PAD_LEFT)); // mover el caracter decimal $d = strpos($snum,$n['DECIMAL']); if ($e[1]>=0) $snum = substr($snum,0,$d).substr($snum,$d+1,$e[1]).$n['DECIMAL'].substr($snum,$d + $e[1] + 1); else $snum = substr($snum,0,$d + $e[1] ).$n['DECIMAL'].str_replace($n['DECIMAL'],'',substr($snum,$d + $e[1])); if (strpos($snum,$n['DECIMAL']) !== false) { $snum = trim($snum, '0'); $snum = rtrim($snum, $n['DECIMAL']); } if ($snum[0]==$n['DECIMAL']) $snum = '0'.$snum; } return $snum; }
getTransformErrors | ( | ) |
Devuelve la lista de errores de transformacion
Definición en la línea 464 del archivo IgepTransformer.php.
{
return $this->transform_errors;
}
isDate | ( | $ | y, |
$ | m, | ||
$ | d | ||
) | [private] |
Comprueba los numeros de una fecha
Definición en la línea 283 del archivo IgepTransformer.php.
{
return (is_numeric($y) and is_numeric($m) and is_numeric($d)
and checkDate($m, $d, $y) and $y<=9999);
}
process | ( | $ | type, |
$ | value | ||
) |
Lanza el proceso de conversion sobre el valor que recibe, en funcion del tipo que recibe Las conversiones se hacer siempre con cadenas de texto
public
string | type |
string | value |
Definición en la línea 251 del archivo IgepTransformer.php.
{ if (empty($value)) return $value; switch ($type){ case TIPO_CARACTER: $value = $this->_processCharacter($value); break; case TIPO_DECIMAL: $value = $this->_processDecimal($value); break; case TIPO_FECHA: $value = $this->_processDate($value); break; case TIPO_FECHAHORA: $value = $this->_processDateTime($value); break; default: if (!is_string($type)) throw new gvHidraException('Tipo incorrecto en IgepTransformer: '.var_export($type,true)); if (!class_exists($type)) throw new gvHidraException('Tipo no soportado en IgepTransformer: '.$type); if (!in_array('gvHidraTypeBase', class_parents($type))) throw new gvHidraException('Tipo predefinido no hereda de gvHidraTypeBase: '.$type); } return $value; }
setCharacter | ( | $ | from, |
$ | to | ||
) |
Indica la conversion a hacer con campos cadena
public
string | from |
string | to |
Definición en la línea 128 del archivo IgepTransformer.php.
{ if($from!=$to){ $this->type_mod[TIPO_CARACTER] = true; array_push($this->character_metadata,array('from'=>$from,'to'=>$to)); } }
setDate | ( | $ | from, |
$ | to | ||
) |
Indica la conversion a hacer con fechas
public
string | from |
string | to |
Definición en la línea 72 del archivo IgepTransformer.php.
{ // este separador se usa para validacion de campo origen, // aunque los formatos origen y destino sean los mismos $this->date_metadata['separatorIn'] = substr($from,1,1); $dia = strpos($from,'d'); if ($dia === FALSE) $dia = strpos($from,'j'); $this->date_metadata['posDay'] = $dia/2; $mes = strpos($from,'m'); if ($mes === FALSE) $mes = strpos($from,'n'); $this->date_metadata['posMonth'] = $mes/2; $this->date_metadata['posYear'] = strpos($from,'Y')/2; if($from!=$to){ $this->type_mod[TIPO_FECHA] = true; $this->type_mod[TIPO_FECHAHORA] = true; $this->date_metadata['separatorOut'] = substr($to,1,1); $this->date_metadata['position'] = explode($this->date_metadata['separatorOut'],$to); } }
setDecimal | ( | $ | from, |
$ | to, | ||
$ | fromGroup = '' , |
||
$ | toGroup = '' |
||
) |
Indica la conversion a hacer con campos numericos
public
string | from |
string | to |
string | fromGroup |
string | toGroup |
Definición en la línea 104 del archivo IgepTransformer.php.
{ // esto se usa para validacion de campo origen, // aunque los formatos origen y destino sean los mismos $this->decimal_metadata['from'] = $from; $this->decimal_metadata['fromGroup'] = $fromGroup; if ($from != $to or $fromGroup != $toGroup){ $this->type_mod[TIPO_DECIMAL] = true; $this->decimal_metadata['to'] = $to; $this->decimal_metadata['toGroup'] = $toGroup; } if ($from == $fromGroup) throw new gvHidraException('El caracter decimal no puede ser el mismo que el separador de miles (from)'); if ($to == $toGroup) throw new gvHidraException('El caracter decimal no puede ser el mismo que el separador de miles (to)'); }
$character_metadata = array() |
Definición en la línea 46 del archivo IgepTransformer.php.
$date_metadata = array() |
Definición en la línea 47 del archivo IgepTransformer.php.
$decimal_metadata = array() |
Definición en la línea 45 del archivo IgepTransformer.php.
$transform_errors = array() [private] |
Definición en la línea 48 del archivo IgepTransformer.php.
$type_mod = array() |
Definición en la línea 44 del archivo IgepTransformer.php.
$validate [private] |
Definición en la línea 49 del archivo IgepTransformer.php.