~danielside/rptfront

36b6a262945a750a85435d40dc9536cfdf9cc679 — danielside 1 year, 2 months ago c70f062
criterios de ordenación
M lib/Validator/ValidatorBuscarPuesto.php => lib/Validator/ValidatorBuscarPuesto.php +51 -5
@@ 7,7 7,20 @@ class ValidatorBuscarPuesto
{
    public $messages;

    private function validateLevels(Request $request, array &$parametros) {
    protected array $validOrdenacion;

    public function setValidOrdenacion(array $ordenacion)
    {
        $this->validOrdenacion = $ordenacion;
    }

    protected function getValidOrdenacion(): array
    {
        return $this->validOrdenacion;
    }

    private function validateLevels(Request $request, array &$parametros)
    {
        $okNivelMin = true;
        $okNivelMax = true;



@@ 31,7 44,8 @@ class ValidatorBuscarPuesto
        return [$okNivelMin, $okNivelMax, $nivelMinimo, $nivelMaximo];
    }

    private function validateGroup(Request $request, &$parametros) {
    private function validateGroup(Request $request, &$parametros)
    {
        $name = 'grupo';
        $thereIsGroup = false;
        $parametros[$name] = [];


@@ 48,7 62,8 @@ class ValidatorBuscarPuesto
        return $thereIsGroup;
    }

    private function validateOrganismo(Request $request, &$parametros) {
    private function validateOrganismo(Request $request, &$parametros)
    {
        $name = 'organismo';
        $thereIsOrg = false;
        $parametros[$name] = [];


@@ 65,7 80,8 @@ class ValidatorBuscarPuesto
        return $thereIsOrg;
    }

    private function validateEstado(Request $request, &$parametros) {
    private function validateEstado(Request $request, &$parametros)
    {
        $name = 'estado';
        $estado = trim($request->getParsedBody()[$name]);
        $estados = ['vacante', 'ocupada', 'ambos'];


@@ 75,7 91,8 @@ class ValidatorBuscarPuesto
        }
    }

    private function validateProvision(Request $request, &$parametros) {
    private function validateProvision(Request $request, &$parametros)
    {
        $name = 'provision';
        $provision = trim($request->getParsedBody()[$name]);
        $provisiones = ['C', 'I', 'L'];


@@ 84,6 101,33 @@ class ValidatorBuscarPuesto
            $parametros[$name] = "";
        }
    }

    private function validateOrdenacion(Request $request, &$parametros)
    {
        $ordenacion1 = trim($request->getParsedBody()['ordenacion_1']);
        $parametros['ordenacion_1'] = "";
        if (key_exists($ordenacion1, $this->getValidOrdenacion())) {
            $parametros['ordenacion_1'] = $ordenacion1;
        }

        $ordenacion2 = trim($request->getParsedBody()['ordenacion_2']);
        $parametros['ordenacion_2'] = "";
        if (key_exists($ordenacion2, $this->getValidOrdenacion())) {
            $parametros['ordenacion_2'] = $ordenacion2;
        }

        $ordenacion3 = trim($request->getParsedBody()['ordenacion_3']);
        $parametros['ordenacion_3'] = "";
        if (key_exists($ordenacion3, $this->getValidOrdenacion())) {
            $parametros['ordenacion_3'] = $ordenacion3;
        }
        
        $ordenacion4 = trim($request->getParsedBody()['ordenacion_4']);
        $parametros['ordenacion_4'] = "";
        if (key_exists($ordenacion4, $this->getValidOrdenacion())) {
            $parametros['ordenacion_4'] = $ordenacion4;
        }
    }
    
    public function validate(Request $request)
    {


@@ 108,6 152,8 @@ class ValidatorBuscarPuesto
            $parametros[$name] = trim($request->getParsedBody()[$name]);    
        }

        $this->validateOrdenacion($request, $parametros);

        return $parametros;
    }


M public_html/index.php => public_html/index.php +50 -10
@@ 91,7 91,28 @@ function dataForIndex($app, $isWebview)
        fn ($g) => '' === ($g['grupo']) ? ['grupo' => 'Sin grupo'] : $g,
        $grupos
    );
    return [$grupos, $organismos, $paises, $provincias];
    $ordenacion = [
        'nivel' => [
            'nombre' => 'Nivel',
        ],
        'puesto.ministerio_id' => [
            'nombre' => 'Ministerio',
        ],
        'puesto.centrodirectivo_id' => [
            'nombre' => 'Centro Directivo',
        ],
        'puesto.unidad_id' => [
            'nombre' => 'Unidad',
        ],
        'especifico' => [
            'nombre' => 'Complemento específico',
        ],
        'grupo' => [
            'nombre' => 'Grupo',
        ],
    ];

    return [$grupos, $organismos, $paises, $provincias, $ordenacion];
}

$app->get('/', function (Request $request, Response $response, $args) use ($app) {


@@ 104,7 125,13 @@ $app->get('/', function (Request $request, Response $response, $args) use ($app)
        'pais' => 0,
        'provincia' => 0,
        'provision' => '',
        'textolibre' => ''
        'textolibre' => '',
        'ordenacion_1' => 'nivel',
        'ordenacion_2' => 'puesto.ministerio_id',
        'ordenacion_3' => 'puesto.centrodirectivo_id',
        'ordenacion_4' => 'puesto.unidad_id',
        'ordenacion_5' => '',
        'ordenacion_6' => ''
    ];

    $configuracion = $app->getContainer()['configuracion'];


@@ 115,6 142,7 @@ $app->get('/', function (Request $request, Response $response, $args) use ($app)
        $organismos,
        $paises,
        $provincias,
        $ordenacion
    ) = dataForIndex($app, $isWebview);

    return $this->view->render(


@@ 128,6 156,7 @@ $app->get('/', function (Request $request, Response $response, $args) use ($app)
            'organismos' => $organismos,
            'paises' => $paises,
            'provincias' => $provincias,
            'ordenacion' => $ordenacion,
            'is_webview' => $isWebview,
            'flash' => $flash
        ]


@@ 136,7 165,18 @@ $app->get('/', function (Request $request, Response $response, $args) use ($app)

$app->post('/buscapuesto', function (Request $request, Response $response, $args) use ($app) {
    $configuracion = $app->getContainer()['configuracion'];

    $isWebview = is_requested_by_webview($configuracion);
    list(
        $grupos,
        $organismos,
        $paises,
        $provincias,
        $ordenacion
    ) = dataForIndex($app, $isWebview);
    
    $validator = new ValidatorBuscarPuesto();
    $validator->setValidOrdenacion($ordenacion);
    $parametros = $validator->validate($request);

    $formDefaultValues = [


@@ 151,14 191,6 @@ $app->post('/buscapuesto', function (Request $request, Response $response, $args
        'provision' => $parametros['provision']
    ];

    $isWebview = is_requested_by_webview($configuracion);
    list(
        $grupos,
        $organismos,
        $paises,
        $provincias,
    ) = dataForIndex($app, $isWebview);

    $flash = [];
    $flash['defaults'] = $formDefaultValues;



@@ 178,6 210,7 @@ $app->post('/buscapuesto', function (Request $request, Response $response, $args
                'organismos' => $organismos,
                'paises' => $paises,
                'provincias' => $provincias,
                'ordenacion' => $ordenacion,
                'is_webview' => $isWebview,
                'flash' => $flash
            ]


@@ 194,6 227,13 @@ $app->post('/buscapuesto', function (Request $request, Response $response, $args
    $provision = $parametros['provision'];
    $textoLibre = $parametros['textolibre'];

    $ordenacion1 = $parametros['ordenacion_1'];
    $ordenacion2 = $parametros['ordenacion_2'];
    $ordenacion3 = $parametros['ordenacion_3'];
    $ordenacion4 = $parametros['ordenacion_4'];


    die(var_export($request->getParsedBody(), true));
    $puesto = $app->getContainer()['puesto'];
    $puesto->addSearchCriteria(new NivelPuestoCriteria((int)$nivelMinimo, (int)$nivelMaximo));
    $puesto->addSearchCriteria(new OrganismoCriteria($organismo));

M templates/buscarpt.php => templates/buscarpt.php +21 -0
@@ 176,6 176,27 @@
               placeholder="Ejemplos: 'informática', 'presupuestario', 'sanidad', 'sevilla', etc."
               value="<?= htmlspecialchars($flash['defaults']['textolibre']) ?>">
    </div>

    <div class="form-group">
        <h4>Criterios de ordenación</h4>
        <?php
        for ($i = 1; $i <= 4; $i++) {
            echo "<label for='criterio-$i'>Criterio $i</label>";
            echo "<select id='select_ordenacion_$i' name='ordenacion_$i' class='form-control'>";
            echo "<option value=''></option>";            
            foreach($ordenacion as $campobd => $descripcion) {
                $etiqueta = $descripcion['nombre'];
                $selected = "";
                $campo = 'ordenacion_' . strval($i);
                if (isset($flash['defaults'][$campo]) && $campobd == $flash['defaults'][$campo]) {
                    $selected = "selected";
                }
                echo "<option value='$campo' $selected>$etiqueta</option>";
            }
            echo "</select>";
        }
        ?>
    </div>
    <?php } ?>

    <?php if (!$is_webview) { ?>

M templates/puestos.php => templates/puestos.php +1 -1
@@ 6,7 6,7 @@
  </div>

  <div class="tabla-resultados table-responsive <?= empty($puestos) ? 'hidden' : '' ?>">
    <table class="table">
    <table class="table table-striped table-responsive">
        <tr>
            <th>Nivel</th>
            <th>Puesto</th>