src.where.filtro_fecha_base - gamboamartin/where GitHub Wiki

filtro_fecha_base

La función filtro_fecha_base es una función privada que genera una cláusula SQL basada en un conjunto de filtros de fechas. Valida cada filtro de fecha proporcionado en un array y construye la cláusula SQL correspondiente, concatenando las cláusulas generadas para cada filtro.

Signatura


private function filtro_fecha_base(array $filtro_fecha): array|string

Parámetros

  • array $filtro_fecha:
    Un array de filtros de fecha. Cada filtro de fecha dentro del array debe ser un array asociativo que contenga las claves campo_1, campo_2, y fecha.

Retorna

  • array|string:
    Retorna la cláusula SQL generada como una cadena si la validación y generación son exitosas. En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Iteración sobre el array de filtros de fecha:

    • La función itera sobre cada filtro de fecha dentro del array $filtro_fecha.
  2. Validación de cada filtro de fecha:

    • Por cada filtro de fecha, la función valida que sea un array utilizando valida_filtro_fecha().
    • Si la validación falla, se genera un mensaje de error y se retorna un array con el mensaje de error.
  3. Generación de la cláusula SQL para cada filtro de fecha:

    • Para cada filtro de fecha validado, la función llama a genera_sql_filtro_fecha() para generar la cláusula SQL correspondiente.
    • Si ocurre un error al generar la cláusula SQL, se genera un mensaje de error y se retorna un array con el mensaje de error.
  4. Concatenación de las cláusulas SQL:

    • La función concatena cada cláusula SQL generada para cada filtro de fecha, formando una sola cláusula SQL final.
  5. Retorno de la cláusula SQL final:

    • Si todo es exitoso, la función retorna la cláusula SQL completa, que incluye todos los filtros de fecha.

Ejemplos

$filtro_fecha = [
    [
        'campo_1' => 'fecha_inicio',
        'campo_2' => 'fecha_fin',
        'fecha' => '2023-08-15'
    ],
    [
        'campo_1' => 'fecha_creacion',
        'campo_2' => 'fecha_modificacion',
        'fecha' => '2023-08-16'
    ]
];

$resultado = $this->filtro_fecha_base($filtro_fecha);

// Resultado esperado:
// "AND('2023-08-15' >= fecha_inicio AND '2023-08-15' <= fecha_fin) AND ('2023-08-16' >= fecha_creacion AND '2023-08-16' <= fecha_modificacion)"

Código de la Función

private function filtro_fecha_base(array $filtro_fecha): array|string
    {
        $filtro_fecha_sql = '';
        foreach ($filtro_fecha as $fil_fecha){
            if(!is_array($fil_fecha)){
                return $this->error->error(mensaje: 'Error $fil_fecha debe ser un array',data: $fil_fecha,
                    es_final: true);
            }

            $valida = $this->valida_filtro_fecha(fil_fecha: $fil_fecha);
            if(errores::$error){
                return $this->error->error(mensaje: 'Error al validar filtro',data: $valida);
            }

            $sql = $this->genera_sql_filtro_fecha(fil_fecha: $fil_fecha, filtro_fecha_sql: $filtro_fecha_sql);
            if(errores::$error){
                return $this->error->error(mensaje: 'Error al obtener sql',data: $sql);
            }

            $filtro_fecha_sql.= $sql;

        }
        return $filtro_fecha_sql;
    }