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

ajusta_campos_moneda

La función ajusta_campos_moneda ajusta y valida los campos de tipo moneda o double en un registro, basándose en las definiciones de tipos de datos proporcionadas en el array $tipo_campos. La función se asegura de que tanto los nombres de los campos como los tipos de datos estén correctamente especificados y realiza las asignaciones correspondientes.

Signatura

final public function ajusta_campos_moneda(array $registro, array $tipo_campos): array

Parámetros

** $registro** (array): Arreglo asociativo que representa un registro donde se ajustarán y validarán los valores de los campos de tipo moneda o double.

** $tipo_campos** (array): Arreglo asociativo que define los tipos de datos de los campos del registro.

    • Formato: Cada clave es el nombre de un campo, y cada valor es un string que representa el tipo de dato esperado (double, moneda, etc.).
    • Requisitos: Las claves deben ser cadenas no vacías y los valores deben ser strings no vacíos.

Retorna

  • array: Devuelve un array que representa el registro actualizado con los valores de los campos ajustados. Si ocurre un error, el array contiene un mensaje de error.

Explicación Detallada

  • Iteración y Validación de Campos:

    • La función itera sobre el array $tipo_campos, validando cada campo y su tipo de dato.
    • Verifica si el nombre del campo ($campo) está vacío. Si es así, retorna un array con un mensaje de error.
  • Validación del Tipo de Dato:

    • Verifica si el tipo de dato asociado al campo es un string. Si no lo es, la función retorna un array con un mensaje de error y una sugerencia de corrección (fix).
    • También se asegura de que el tipo de dato no esté vacío. Si lo está, la función retorna un array con un mensaje de error y una sugerencia de corrección.
  • Asignación de Campos:

    • Si las validaciones son exitosas, la función llama a asignacion_campo_moneda para ajustar y validar el valor del campo en el registro.
    • Si ocurre un error durante la asignación, la función retorna un array con un mensaje de error.
  • Retorno

    • La función retorna un array con el registro actualizado si todas las operaciones son exitosas. En caso de error, se devuelve un array con el mensaje de error correspondiente.
  • Posibles Errores

    • Campo vacío: Si el nombre del campo es una cadena vacía, la función retorna un array con un mensaje de error.
    • Tipo de dato no string: Si el tipo de dato no es un string, la función retorna un array con un mensaje de error y una sugerencia de corrección.
    • Tipo de dato vacío: Si el tipo de dato es una cadena vacía, la función retorna un array con un mensaje de error y una sugerencia de corrección.
    • Error en la asignación: Si ocurre un error durante la asignación de un campo, la función retorna un array con un mensaje de error.

Ejemplos

// Ejemplo 1: Ajustar campos de tipo moneda en un registro
$registro = ['precio' => '123.45', 'impuesto' => '16.78'];
$tipo_campos = ['precio' => 'moneda', 'impuesto' => 'moneda'];

$resultado = $this->ajusta_campos_moneda($registro, $tipo_campos);
if (!isset($resultado['error'])) {
    echo "Ajuste exitoso: " . print_r($resultado, true);
} else {
    echo "Error: " . $resultado['error'];
}

// Ejemplo 2: Manejo de error con un campo vacío
$registro = ['precio' => '123.45'];
$tipo_campos = ['' => 'moneda'];

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

// Ejemplo 3: Manejo de error con un tipo de dato no string
$registro = ['precio' => '123.45'];
$tipo_campos = ['precio' => 123]; // Tipo de dato incorrecto

$resultado = $this->ajusta_campos_moneda($registro, $tipo_campos);
if (isset($resultado['error'])) {
    echo "Error: " . $resultado['error']; 
    echo "Fix: " . $resultado['fix']; // Salida: "Error: Error el tipo_dato debe ser un string"
}

// Ejemplo 4: Manejo de error con un tipo de dato vacío
$registro = ['precio' => '123.45'];
$tipo_campos = ['precio' => ''];

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

Código de la Función

final public function ajusta_campos_moneda(array $registro, array $tipo_campos): array
    {
        foreach($tipo_campos as $campo =>$tipo_dato){
            $campo = trim($campo);
            if($campo === ''){
                return $this->error->error(mensaje: 'Error el campo esta vacio',data:  $campo,es_final: true);
            }
            if(!is_string($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 debe ser un string', data: $tipo_dato,
                    es_final: true, fix: $fix);
            }

            $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);
            }

            $registro = $this->asignacion_campo_moneda(campo: $campo, registro: $registro,tipo_dato:  $tipo_dato);
            if(errores::$error){
                return $this->error->error(mensaje: 'Error al asignar campo ',data:  $registro);
            }
        }
        return $registro;
    }