Exportar dados filtrados em CAKEPHP 3

15/10/2021

2

Boa tarde povo, estou com o seguinte problema: Na aplicação tenho uma tela de paginação dos resultados e possuo uma parte para o usuário aplicar os filtros, campos que o usuário pode preencher para trazer apenas o que for do seu interesse na página de listagem.
Utilizando como exemplo a entidade Colaboradores, segue o seguinte fluxo:

1º Usuário informa os dados no Filtro (Nome, CPF, Data Nascimento, etc.. );
2º Com base nesses dados informados é retornado todos os registros com base nos campos preenchidos.

Eu já tenho um que exporta todos os dados da tabela, porém preciso adaptar ele, para que quando o usuário filtrar e exportar em Excel, apenas o resultado que está sendo exibido na tela.

Resumindo... eu gostaria de exportar apenas os resultados filtrados pelo usuário e não todos os dados da tabela.
Desde já agradeço qualquer apoio.

O código abaixo exporta todos os dados da tabela
public function export(){
        try {
            $this->response = $this->response->withDownload('DADOS_EXPORTADOS.csv');
            $_header = ['Colaborador', 'Data', 'Nivel', 'Classe', 'Grau', 'Promocao'];

            $connection = ConnectionManager::get('default');
            $results = $connection->execute("
            SELECT  c.name,
                    DATE_FORMAT(l.date,GET_FORMAT(DATE,'EUR')),
            CASE
                WHEN l.level = 1 THEN 'N1'
                WHEN l.level = 2 THEN 'N2'
                WHEN l.level = 3 THEN 'N3'
                WHEN l.level = 4 THEN 'N4'
            END AS Level ,
            CASE
                WHEN l.class = 1 THEN 'A'
                WHEN l.class = 2 THEN 'B'
                WHEN l.class = 3 THEN 'C'
            END AS Classe,
            CASE
                WHEN l.degree = 1 THEN 'I'
                WHEN l.degree = 2 THEN 'II'
                WHEN l.degree = 3 THEN 'III'
                WHEN l.degree = 4 THEN 'IV'
                WHEN l.degree = 5 THEN 'V'
                WHEN l.degree = 6 THEN 'VI'
                END AS Grau ,
                IFNULL(p.title, '  -  ')
            FROM levelings l
            INNER JOIN collaborators c
            ON l.collaborator_id = c.id
            LEFT JOIN promotions p
            ON l.promotion_id = p.id
            WHERE l.flag = 1;
            ")->fetchAll();

            $_serialize = 'results';

            $this->viewBuilder()->setClassName('CsvView.Csv');
            $this->set(compact('results', '_serialize', '_header', '_extract'));
        } catch (\Exception $exc) {
            $this->Flash->error(__('Falha na conexão! Contate o administrador.'));
            return $this->redirect($this->referer()); #volta para local de origem
        }
    }
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar