administrador.base.orm.data_format.asignacion_campo_moneda - gamboamartin/administrador GitHub Wiki

asignacion_campo_moneda

La función asignacion_campo_moneda asigna un valor de un campo de tipo monetario a un registro dado, validando que el campo y el tipo de dato sean correctos. Esta función es útil para asegurar que los campos relacionados con valores monetarios sean correctamente procesados y validados en un registro.

Signatura

private function asignacion_campo_moneda(string $campo, array $registro, string $tipo_dato): array

Parámetros

** $campo** (string): Nombre del campo en el registro que se desea procesar.

    • Requisitos: No debe estar vacío. Se realiza un trim para eliminar espacios en blanco.

** $registro** (array): Arreglo que contiene los datos del registro, donde se almacenará el valor procesado del campo.

    • Requisitos: Debe contener el campo especificado en $campo si se desea realizar la asignación.

** $tipo_dato** (string): Tipo de dato esperado para el campo (double o moneda).

    • Requisitos: Debe ser una cadena no vacía.
    • Comportamiento: Si está vacío, la función retorna un error con un mensaje de corrección (fix) que explica cómo debería estar estructurado el tipo de dato en el modelo.

Retorna

  • array: Siempre se devuelve un array. Si la asignación es exitosa, el array contiene el registro actualizado con el valor del campo convertido a double. Si ocurre un error, el array contiene el mensaje de error correspondiente.

Explicación Detallada

  • Validación del Campo:

    • La función verifica si el nombre del campo ($campo) está vacío. Si es así, retorna un array con un mensaje de error indicando que el campo no debe estar vacío.
  • Validación del Tipo de Dato:

    • Luego, se valida que el tipo de dato ($tipo_dato) no esté vacío. Si lo está, la función retorna un array con un mensaje de error y un mensaje de corrección.
  • Asignación del Campo:

    • Si el campo existe en el registro y el tipo de dato es double o moneda, la función realiza la asignación y convierte el valor a double.
  • Manejo de Errores:

    • Si ocurre un error durante la asignación del campo, la función retorna un array con el mensaje de error especificando el problema.

Ejemplos

// Ejemplo 1: Asignar un campo de tipo moneda en un registro
$registro = ['precio' => 100.00];
$tipo_dato = 'moneda';
$campo = 'precio';

$resultado = $this->asignacion_campo_moneda($campo, $registro, $tipo_dato);
if (!isset($resultado['error'])) {
    echo "Asignación exitosa: " . print_r($resultado, true);
} else {
    echo "Error: " . $resultado['error'];
}

// Ejemplo 2: Manejo de error al pasar un campo vacío
$registro = ['precio' => 100.00];
$tipo_dato = 'moneda';
$campo = '';

$resultado = $this->asignacion_campo_moneda($campo, $registro, $tipo_dato);
if (isset($resultado['error'])) {
    echo "Error: " . $resultado['error']; // Salida: "Error: Error el campo está vacío"
}

// Ejemplo 3: Manejo de error al pasar un tipo de dato vacío
$registro = ['precio' => 100.00];
$tipo_dato = '';
$campo = 'precio';

$resultado = $this->asignacion_campo_moneda($campo, $registro, $tipo_dato);
if (isset($resultado['error'])) {
    echo "Error: " . $resultado['error']; 
    echo "Fix: " . $resultado['fix']; // Salida: "Error: Error el tipo_dato está vacío"
}

// Ejemplo 4: Asignación exitosa y retorno del valor convertido a double
$registro = ['precio' => '123.45'];
$tipo_dato = 'moneda';
$campo = 'precio';

$resultado = $this->asignacion_campo_moneda($campo, $registro, $tipo_dato);
if (!isset($resultado['error'])) {
    echo "Valor convertido a double: " . print_r($resultado, true); 
    // Ejemplo de salida: ["precio" => 123.45]
}

Código de la Función

private function asignacion_campo_moneda(string $campo, array $registro, string $tipo_dato): array
    {
        $campo = trim($campo);
        if($campo === ''){
            return $this->error->error(mensaje: 'Error el campo esta vacio',data:  $campo, es_final: true);
        }


        $tipo_dato = trim($tipo_dato);
        if($tipo_dato === ''){
            $fix = 'modelo->tipo_campos debe llevar esta forma $modelo->tipo_campos[campo] = regex 
                donde el regex debe existir en el paquete de validaciones en validacion->patterns';
            return $this->error->error(mensaje: 'Error el tipo_dato esta vacio', data: $tipo_dato,
                es_final: true, fix: $fix);
        }
        if(isset($registro[$campo]) && ($tipo_dato === 'double' || $tipo_dato === 'moneda')){
            $registro = $this->asigna_campo_moneda(campo: $campo, registro: $registro);
            if(errores::$error){
                return $this->error->error(mensaje: 'Error al asignar campo ',data:  $registro);
            }
        }
        return $registro;
    }