Compare commits

..

7 Commits

Author SHA1 Message Date
Sergio
2484732678 Opción para descargar PDF o Excel 2022-09-05 13:23:29 -05:00
Sergio
8f74266757 Commit de respaldo 2022-09-05 13:07:35 -05:00
Sergio
3322239d42 Mostrar respuestas de todos los usuarios 2022-09-05 09:20:32 -05:00
Sergio
393020b747 Agregar botón para ver todas las respuestas de una encuesta 2022-09-02 13:00:50 -05:00
Sergio
54e18459e8 Mostrar encuesta respondida por usuario 2022-09-02 12:38:38 -05:00
Sergio
bdd7a0ba03 Vista para ver encuesta respondidad por usuario 2022-08-31 10:50:42 -05:00
Sergio
6f3d980784 Crear tabla con lista de respuestas 2022-08-31 10:19:19 -05:00
10 changed files with 891 additions and 3 deletions

View File

@ -74,6 +74,9 @@ $routes->group('admin', ['filter' => 'admin_filter'], static function ($routes)
$routes->get('encuesta/(:segment)', 'Admin::encuesta/$1', ['as' => 'admin_encuesta']); $routes->get('encuesta/(:segment)', 'Admin::encuesta/$1', ['as' => 'admin_encuesta']);
$routes->match(['get', 'post'], 'encuesta/editar/(:segment)', 'Admin::editarEncuesta/$1', ['as' => 'admin_encuesta_editar']); $routes->match(['get', 'post'], 'encuesta/editar/(:segment)', 'Admin::editarEncuesta/$1', ['as' => 'admin_encuesta_editar']);
$routes->get('encuesta/eliminar/(:segment)', 'Admin::eliminarEncuesta/$1', ['as' => 'admin_encuesta_eliminar']); $routes->get('encuesta/eliminar/(:segment)', 'Admin::eliminarEncuesta/$1', ['as' => 'admin_encuesta_eliminar']);
$routes->get('respuestas/', 'Admin::respuestas', ['as' => 'admin_respuestas']);
$routes->get('respuesta/(:segment)/(:segment)', 'Admin::respuesta/$1/$2', ['as' => 'admin_respuesta']);
$routes->get('encuesta/(:segment)/respuestas', 'Admin::respuestasEncuesta/$1', ['as' => 'admin_respuestas_encuesta']);
// PREGUNTAS // PREGUNTAS
$routes->match(['get', 'post'], 'encuesta/(:segment)/pregunta/', 'Admin::nuevaPregunta/$1', ['as' => 'admin_pregunta_nueva']); $routes->match(['get', 'post'], 'encuesta/(:segment)/pregunta/', 'Admin::nuevaPregunta/$1', ['as' => 'admin_pregunta_nueva']);

View File

@ -7,7 +7,9 @@ use App\Models\EncuestaModel;
use App\Models\PreguntaModel; use App\Models\PreguntaModel;
use App\Models\PrestadorModel; use App\Models\PrestadorModel;
use App\Models\PrestadorSolicitudModel as ModelsPrestadorSolicitudModel; use App\Models\PrestadorSolicitudModel as ModelsPrestadorSolicitudModel;
use App\Models\SurveyUserModel;
use App\Models\UserModel; use App\Models\UserModel;
use PHPUnit\Framework\MockObject\Stub\ReturnReference;
class Admin extends BaseController class Admin extends BaseController
{ {
@ -298,6 +300,84 @@ class Admin extends BaseController
)); ));
} }
public function respuestas()
{
$respuestas = model(SurveyUserModel::class)->getEncuestasContestadas();
$data = [
'respuestas' => $respuestas,
];
return view('Admin/respuestas', $data);
}
public function respuestasEncuesta($surveyId)
{
if (!$respuestas = model(RespuestaModel::class)->getRespuestasAll($surveyId)) {
return redirect()->route('admin_respuestas')->with('msg', array(
'type' => 'danger',
'body' => 'No se encontraron respuestas de para esta encuesta.',
));
}
// Agrupar respuestas por usuario
$respuestas = array_reduce($respuestas, function (array $accumulator, array $element) {
$accumulator[$element['user_id']][] = $element;
return $accumulator;
}, []);
// reset array keys
$respuestas = array_values($respuestas);
// Agrupar respuestas de opción múltiple
foreach ($respuestas as &$respuesta) {
$respuesta = array_reduce($respuesta, function (array $accumulator, array $element) {
$accumulator[$element['question_id']][] = $element;
return $accumulator;
}, []);
$respuesta = array_values($respuesta);
}
unset($respuesta);
$data = [
'tituloEncuesta' => model(EncuestaModel::class)->find($surveyId)['title'],
'preguntas' => model(PreguntaModel::class)->getPreguntas($surveyId),
'respuestas' => $respuestas,
];
// dd($respuestas);
return view('Admin/respuestasGenerales', $data);
}
public function respuesta($surveyId, $userId)
{
if (!$respuestas = model(RespuestaModel::class)->getRespuestas($surveyId, $userId)) {
return redirect()->route('admin_respuestas')->with('msg', array(
'type' => 'danger',
'body' => 'No se encontraron respuestas de este usuario.',
));
}
// Agrupar respuestas de opción múltipe
$respuestas = array_reduce($respuestas, function (array $accumulator, array $element) {
$accumulator[$element['question_id']][] = $element;
return $accumulator;
}, []);
// Datos de prestador
$prestadorId = model(UserModel::class)->find($userId)->idprestador;
$prestador = model(PrestadorModel::class)->find($prestadorId);
$data = [
'tituloEncuesta' => model(EncuestaModel::class)->find($surveyId)['title'],
'prestador' => $prestador,
'respuestas' => $respuestas,
];
return view('Admin/respuestaIndividual', $data);
}
// PREGUNTAS // PREGUNTAS
public function nuevaPregunta($id) public function nuevaPregunta($id)

View File

@ -4,7 +4,7 @@ namespace App\Models;
use CodeIgniter\Model; use CodeIgniter\Model;
class PreguntaModel extends Model class RespuestaModel extends Model
{ {
protected $table = 'answers'; protected $table = 'answers';
protected $primaryKey = 'id'; protected $primaryKey = 'id';
@ -18,4 +18,30 @@ class PreguntaModel extends Model
'answer' => 'required', 'answer' => 'required',
'question_id' => 'required', 'question_id' => 'required',
]; ];
public function getRespuestas($survey_id, $user_id)
{
$db = db_connect();
$where = 'answers.survey_id = ' . $db->escape($survey_id) . ' AND answers.user_id = ' . $db->escape($user_id);
return $this
->select('answers.id, answers.survey_id, answers.user_id, answers.answer,answers.question_id, questions.question, questions.type')
->join('questions', 'answers.question_id = questions.id')
->where($where)
->findAll();
}
public function getRespuestasAll($survey_id)
{
$db = db_connect();
$where = 'answers.survey_id = ' . $db->escape($survey_id);
return $this
->select('answers.id, answers.survey_id, answers.user_id, answers.answer,answers.question_id, answers.created_at')
->select('questions.question, questions.type')
->select('prestador.idprestador, prestador.nombre, prestador.apaterno, prestador.amaterno')
->join('questions', 'answers.question_id = questions.id')
->join('users', 'answers.user_id = users.id')
->join('prestador', 'users.idprestador = prestador.idprestador')
->where($where)
->findAll();
}
} }

View File

@ -24,4 +24,14 @@ class SurveyUserModel extends Model
'user_id' => $userId, 'user_id' => $userId,
])->countAllResults(); ])->countAllResults();
} }
public function getEncuestasContestadas()
{
return $this
->join('survey_set', 'survey_user.survey_id = survey_set.id')
->join('users', 'survey_user.user_id = users.id')
->join('prestador', 'users.idprestador = prestador.idprestador')
->findAll();
}
} }

View File

@ -7,6 +7,7 @@
<th>Título</th> <th>Título</th>
<th colspan="3">Descripción</th> <th colspan="3">Descripción</th>
<th>Opciones</th> <th>Opciones</th>
<th>Ver respuestas</th>
</thead> </thead>
<tbody> <tbody>
<?php foreach ($encuestas as $encuesta) : ?> <?php foreach ($encuestas as $encuesta) : ?>
@ -23,11 +24,13 @@
</a> </a>
<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#eliminarModal" data-id="<?= $encuesta['id'] ?>" data-title="<?= $encuesta['title'] ?>" data-link="<?= route_to('admin_encuesta_eliminar', $encuesta['id']) ?>"> <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#eliminarModal" data-id="<?= $encuesta['id'] ?>" data-title="<?= $encuesta['title'] ?>" data-link="<?= route_to('admin_encuesta_eliminar', $encuesta['id']) ?>">
<i class="nav-icon fas fa-trash"></i> <i class="nav-icon fas fa-trash"></i>
</button> </button>
</div> </div>
</td> </td>
<td><a href="<?= route_to('admin_respuestas_encuesta', $encuesta['id']) ?>" class="btn btn-success ">
<i class="nav-icon fas fa-print"></i>
</a>
</td>
</tr> </tr>
<?php endforeach ?> <?php endforeach ?>
</tbody> </tbody>

View File

@ -0,0 +1,77 @@
<?= $this->extend('templates/baseAdmin') ?>
<?= $this->section('content') ?>
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script src="https://cdn.datatables.net/1.12.1/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.12.1/js/dataTables.bootstrap5.min.js"></script>
<h1><?= $tituloEncuesta ?></h1>
<p>Respuestas de: <span class="font-weight-bolder"><?= $prestador['nombre'] . ' ' . $prestador['apaterno'] . ' ' . $prestador['amaterno'] ?></span></p>
<div class="card">
<div class="card-body">
<table id="table-solicitudes" class="table table-bordered table-striped">
<thead>
<th>Pregunta</th>
<th>Respuesta</th>
</thead>
<tbody>
<?php foreach ($respuestas as $respuesta) : ?>
<tr>
<td><?= $respuesta[0]['question'] ?></td>
<!-- Respuestas de opción múltiple -->
<?php if ($respuesta[0]['type'] === '3') : ?>
<td>
<?php foreach ($respuesta as $opcion) : ?>
<?= $opcion['answer'] ?>
<br>
<?php endforeach ?>
</td>
<?php else : ?>
<td><?= $respuesta[0]['answer'] ?></td>
<?php endif ?>
</tr>
<?php endforeach ?>
</tbody>
</table>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
let table = new DataTable('#table-solicitudes', {
'searching': true,
'ordering': true,
'language': {
"decimal": "",
"emptyTable": "No hay información",
"info": "Mostrando _START_ a _END_ de _TOTAL_ registros",
"infoEmpty": "Mostrando 0 to 0 of 0 registros",
"infoFiltered": "(Filtrado de _MAX_ total registros)",
"infoPostFix": "",
"thousands": ",",
"lengthMenu": "Mostrar _MENU_ registros",
"loadingRecords": "Cargando...",
"processing": "Procesando...",
"search": "Buscar:",
"zeroRecords": "No se encontraron resultados",
"paginate": {
"first": "Primero",
"last": "Ultimo",
"next": "Siguiente",
"previous": "Anterior"
}
},
'order': [],
});
});
</script>
<?= $this->endSection() ?>

View File

@ -0,0 +1,70 @@
<?= $this->extend('templates/baseAdmin') ?>
<?= $this->section('content') ?>
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script src="https://cdn.datatables.net/1.12.1/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.12.1/js/dataTables.bootstrap5.min.js"></script>
<div class="card">
<div class="card-body">
<table id="table-solicitudes" class="table table-bordered table-striped">
<thead>
<th>Encuesta</th>
<th>Prestador</th>
<th>Fecha</th>
<th>Respuestas</th>
</thead>
<tbody>
<?php foreach ($respuestas as $respuesta) : ?>
<tr>
<td><?= $respuesta['title'] ?></td>
<td><?= $respuesta['nombre'] . ' ' . $respuesta['apaterno'] . ' ' . $respuesta['amaterno'] ?></td>
<td><?= $respuesta['created_at'] ?></td>
<td>
<a href="<?= route_to('admin_respuesta', $respuesta['survey_id'], $respuesta['user_id']) ?>" class="btn btn-info">Ver respuestas</a>
</td>
</tr>
<?php endforeach ?>
</tbody>
</table>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
let table = new DataTable('#table-solicitudes', {
'searching': true,
'ordering': true,
'language': {
"decimal": "",
"emptyTable": "No hay información",
"info": "Mostrando _START_ a _END_ de _TOTAL_ registros",
"infoEmpty": "Mostrando 0 to 0 of 0 registros",
"infoFiltered": "(Filtrado de _MAX_ total registros)",
"infoPostFix": "",
"thousands": ",",
"lengthMenu": "Mostrar _MENU_ registros",
"loadingRecords": "Cargando...",
"processing": "Procesando...",
"search": "Buscar:",
"zeroRecords": "No se encontraron resultados",
"paginate": {
"first": "Primero",
"last": "Ultimo",
"next": "Siguiente",
"previous": "Anterior"
}
},
'order': [],
});
});
</script>
<?= $this->endSection() ?>

View File

@ -0,0 +1,103 @@
<?= $this->extend('templates/baseAdmin') ?>
<?= $this->section('headLibraries') ?>
<link rel="stylesheet" href="https://cdn.datatables.net/1.12.1/css/jquery.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/1.12.1/css/jquery.dataTables.min.css">
<?= $this->endSection() ?>
<?= $this->section('content') ?>
<h1><?= $tituloEncuesta ?></h1>
<div class="card">
<div class="card-body">
<table id="table-respuestas" class="table table-bordered table-striped">
<thead>
<th>ID Prestador</th>
<th>Nombre</th>
<th>Fecha</th>
<?php foreach ($preguntas as $pregunta) : ?>
<th><?= $pregunta['question'] ?></th>
<?php endforeach ?>
</thead>
<tbody>
<?php foreach ($respuestas as $user) : ?>
<tr>
<td><?= $user[0][0]['idprestador'] ?></td>
<td><?= $user[0][0]['nombre'] . ' ' . $user[0][0]['apaterno'] . ' ' . $user[0][0]['amaterno'] ?></td>
<td><?= $user[0][0]['created_at'] ?></td>
<?php foreach ($user as $respuesta) : ?>
<!-- Respuestas de opción múltiple -->
<?php if ($respuesta[0]['type'] === '3') : ?>
<td>
<?php foreach ($respuesta as $opcion) : ?>
<?= $opcion['answer'] ?>
<br>
<?php endforeach ?>
</td>
<?php else : ?>
<td><?= $respuesta[0]['answer'] ?></td>
<?php endif ?>
<?php endforeach ?>
</tr>
<?php endforeach ?>
</tbody>
</table>
</div>
</div>
<?= $this->endSection() ?>
<?= $this->section('scripts') ?>
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script src="https://cdn.datatables.net/1.12.1/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.2.3/js/dataTables.buttons.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js"></script>
<script src="https://cdn.datatables.net/buttons/2.2.3/js/buttons.html5.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.2.3/js/buttons.print.min.js"></script>
<script>
$(document).ready(function() {
$('#table-respuestas').DataTable({
dom: 'Bfrtip',
buttons: [
'excel', 'pdf',
],
language: {
"decimal": "",
"emptyTable": "No hay información",
"info": "Mostrando _START_ a _END_ de _TOTAL_ registros",
"infoEmpty": "Mostrando 0 to 0 of 0 registros",
"infoFiltered": "(Filtrado de _MAX_ total registros)",
"infoPostFix": "",
"thousands": ",",
"lengthMenu": "Mostrar _MENU_ registros",
"loadingRecords": "Cargando...",
"processing": "Procesando...",
"search": "Buscar:",
"zeroRecords": "No se encontraron resultados",
"paginate": {
"first": "Primero",
"last": "Ultimo",
"next": "Siguiente",
"previous": "Anterior"
}
},
});
});
</script>
<?= $this->endSection() ?>

View File

@ -0,0 +1,504 @@
<link rel="stylesheet" href="https://cdn.datatables.net/1.12.1/css/jquery.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/1.12.1/css/jquery.dataTables.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script src="https://cdn.datatables.net/1.12.1/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.2.3/js/dataTables.buttons.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js"></script>
<script src="https://cdn.datatables.net/buttons/2.2.3/js/buttons.html5.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.2.3/js/buttons.print.min.js"></script>
<table id="example" class="display nowrap" style="width:100%">
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</thead>
<tbody>
<tr>
<td>Tiger Nixon</td>
<td>System Architect</td>
<td>Edinburgh</td>
<td>61</td>
<td>2011-04-25</td>
<td>$320,800</td>
</tr>
<tr>
<td>Garrett Winters</td>
<td>Accountant</td>
<td>Tokyo</td>
<td>63</td>
<td>2011-07-25</td>
<td>$170,750</td>
</tr>
<tr>
<td>Ashton Cox</td>
<td>Junior Technical Author</td>
<td>San Francisco</td>
<td>66</td>
<td>2009-01-12</td>
<td>$86,000</td>
</tr>
<tr>
<td>Cedric Kelly</td>
<td>Senior Javascript Developer</td>
<td>Edinburgh</td>
<td>22</td>
<td>2012-03-29</td>
<td>$433,060</td>
</tr>
<tr>
<td>Airi Satou</td>
<td>Accountant</td>
<td>Tokyo</td>
<td>33</td>
<td>2008-11-28</td>
<td>$162,700</td>
</tr>
<tr>
<td>Brielle Williamson</td>
<td>Integration Specialist</td>
<td>New York</td>
<td>61</td>
<td>2012-12-02</td>
<td>$372,000</td>
</tr>
<tr>
<td>Herrod Chandler</td>
<td>Sales Assistant</td>
<td>San Francisco</td>
<td>59</td>
<td>2012-08-06</td>
<td>$137,500</td>
</tr>
<tr>
<td>Rhona Davidson</td>
<td>Integration Specialist</td>
<td>Tokyo</td>
<td>55</td>
<td>2010-10-14</td>
<td>$327,900</td>
</tr>
<tr>
<td>Colleen Hurst</td>
<td>Javascript Developer</td>
<td>San Francisco</td>
<td>39</td>
<td>2009-09-15</td>
<td>$205,500</td>
</tr>
<tr>
<td>Sonya Frost</td>
<td>Software Engineer</td>
<td>Edinburgh</td>
<td>23</td>
<td>2008-12-13</td>
<td>$103,600</td>
</tr>
<tr>
<td>Jena Gaines</td>
<td>Office Manager</td>
<td>London</td>
<td>30</td>
<td>2008-12-19</td>
<td>$90,560</td>
</tr>
<tr>
<td>Quinn Flynn</td>
<td>Support Lead</td>
<td>Edinburgh</td>
<td>22</td>
<td>2013-03-03</td>
<td>$342,000</td>
</tr>
<tr>
<td>Charde Marshall</td>
<td>Regional Director</td>
<td>San Francisco</td>
<td>36</td>
<td>2008-10-16</td>
<td>$470,600</td>
</tr>
<tr>
<td>Haley Kennedy</td>
<td>Senior Marketing Designer</td>
<td>London</td>
<td>43</td>
<td>2012-12-18</td>
<td>$313,500</td>
</tr>
<tr>
<td>Tatyana Fitzpatrick</td>
<td>Regional Director</td>
<td>London</td>
<td>19</td>
<td>2010-03-17</td>
<td>$385,750</td>
</tr>
<tr>
<td>Michael Silva</td>
<td>Marketing Designer</td>
<td>London</td>
<td>66</td>
<td>2012-11-27</td>
<td>$198,500</td>
</tr>
<tr>
<td>Paul Byrd</td>
<td>Chief Financial Officer (CFO)</td>
<td>New York</td>
<td>64</td>
<td>2010-06-09</td>
<td>$725,000</td>
</tr>
<tr>
<td>Gloria Little</td>
<td>Systems Administrator</td>
<td>New York</td>
<td>59</td>
<td>2009-04-10</td>
<td>$237,500</td>
</tr>
<tr>
<td>Bradley Greer</td>
<td>Software Engineer</td>
<td>London</td>
<td>41</td>
<td>2012-10-13</td>
<td>$132,000</td>
</tr>
<tr>
<td>Dai Rios</td>
<td>Personnel Lead</td>
<td>Edinburgh</td>
<td>35</td>
<td>2012-09-26</td>
<td>$217,500</td>
</tr>
<tr>
<td>Jenette Caldwell</td>
<td>Development Lead</td>
<td>New York</td>
<td>30</td>
<td>2011-09-03</td>
<td>$345,000</td>
</tr>
<tr>
<td>Yuri Berry</td>
<td>Chief Marketing Officer (CMO)</td>
<td>New York</td>
<td>40</td>
<td>2009-06-25</td>
<td>$675,000</td>
</tr>
<tr>
<td>Caesar Vance</td>
<td>Pre-Sales Support</td>
<td>New York</td>
<td>21</td>
<td>2011-12-12</td>
<td>$106,450</td>
</tr>
<tr>
<td>Doris Wilder</td>
<td>Sales Assistant</td>
<td>Sydney</td>
<td>23</td>
<td>2010-09-20</td>
<td>$85,600</td>
</tr>
<tr>
<td>Angelica Ramos</td>
<td>Chief Executive Officer (CEO)</td>
<td>London</td>
<td>47</td>
<td>2009-10-09</td>
<td>$1,200,000</td>
</tr>
<tr>
<td>Gavin Joyce</td>
<td>Developer</td>
<td>Edinburgh</td>
<td>42</td>
<td>2010-12-22</td>
<td>$92,575</td>
</tr>
<tr>
<td>Jennifer Chang</td>
<td>Regional Director</td>
<td>Singapore</td>
<td>28</td>
<td>2010-11-14</td>
<td>$357,650</td>
</tr>
<tr>
<td>Brenden Wagner</td>
<td>Software Engineer</td>
<td>San Francisco</td>
<td>28</td>
<td>2011-06-07</td>
<td>$206,850</td>
</tr>
<tr>
<td>Fiona Green</td>
<td>Chief Operating Officer (COO)</td>
<td>San Francisco</td>
<td>48</td>
<td>2010-03-11</td>
<td>$850,000</td>
</tr>
<tr>
<td>Shou Itou</td>
<td>Regional Marketing</td>
<td>Tokyo</td>
<td>20</td>
<td>2011-08-14</td>
<td>$163,000</td>
</tr>
<tr>
<td>Michelle House</td>
<td>Integration Specialist</td>
<td>Sydney</td>
<td>37</td>
<td>2011-06-02</td>
<td>$95,400</td>
</tr>
<tr>
<td>Suki Burks</td>
<td>Developer</td>
<td>London</td>
<td>53</td>
<td>2009-10-22</td>
<td>$114,500</td>
</tr>
<tr>
<td>Prescott Bartlett</td>
<td>Technical Author</td>
<td>London</td>
<td>27</td>
<td>2011-05-07</td>
<td>$145,000</td>
</tr>
<tr>
<td>Gavin Cortez</td>
<td>Team Leader</td>
<td>San Francisco</td>
<td>22</td>
<td>2008-10-26</td>
<td>$235,500</td>
</tr>
<tr>
<td>Martena Mccray</td>
<td>Post-Sales support</td>
<td>Edinburgh</td>
<td>46</td>
<td>2011-03-09</td>
<td>$324,050</td>
</tr>
<tr>
<td>Unity Butler</td>
<td>Marketing Designer</td>
<td>San Francisco</td>
<td>47</td>
<td>2009-12-09</td>
<td>$85,675</td>
</tr>
<tr>
<td>Howard Hatfield</td>
<td>Office Manager</td>
<td>San Francisco</td>
<td>51</td>
<td>2008-12-16</td>
<td>$164,500</td>
</tr>
<tr>
<td>Hope Fuentes</td>
<td>Secretary</td>
<td>San Francisco</td>
<td>41</td>
<td>2010-02-12</td>
<td>$109,850</td>
</tr>
<tr>
<td>Vivian Harrell</td>
<td>Financial Controller</td>
<td>San Francisco</td>
<td>62</td>
<td>2009-02-14</td>
<td>$452,500</td>
</tr>
<tr>
<td>Timothy Mooney</td>
<td>Office Manager</td>
<td>London</td>
<td>37</td>
<td>2008-12-11</td>
<td>$136,200</td>
</tr>
<tr>
<td>Jackson Bradshaw</td>
<td>Director</td>
<td>New York</td>
<td>65</td>
<td>2008-09-26</td>
<td>$645,750</td>
</tr>
<tr>
<td>Olivia Liang</td>
<td>Support Engineer</td>
<td>Singapore</td>
<td>64</td>
<td>2011-02-03</td>
<td>$234,500</td>
</tr>
<tr>
<td>Bruno Nash</td>
<td>Software Engineer</td>
<td>London</td>
<td>38</td>
<td>2011-05-03</td>
<td>$163,500</td>
</tr>
<tr>
<td>Sakura Yamamoto</td>
<td>Support Engineer</td>
<td>Tokyo</td>
<td>37</td>
<td>2009-08-19</td>
<td>$139,575</td>
</tr>
<tr>
<td>Thor Walton</td>
<td>Developer</td>
<td>New York</td>
<td>61</td>
<td>2013-08-11</td>
<td>$98,540</td>
</tr>
<tr>
<td>Finn Camacho</td>
<td>Support Engineer</td>
<td>San Francisco</td>
<td>47</td>
<td>2009-07-07</td>
<td>$87,500</td>
</tr>
<tr>
<td>Serge Baldwin</td>
<td>Data Coordinator</td>
<td>Singapore</td>
<td>64</td>
<td>2012-04-09</td>
<td>$138,575</td>
</tr>
<tr>
<td>Zenaida Frank</td>
<td>Software Engineer</td>
<td>New York</td>
<td>63</td>
<td>2010-01-04</td>
<td>$125,250</td>
</tr>
<tr>
<td>Zorita Serrano</td>
<td>Software Engineer</td>
<td>San Francisco</td>
<td>56</td>
<td>2012-06-01</td>
<td>$115,000</td>
</tr>
<tr>
<td>Jennifer Acosta</td>
<td>Junior Javascript Developer</td>
<td>Edinburgh</td>
<td>43</td>
<td>2013-02-01</td>
<td>$75,650</td>
</tr>
<tr>
<td>Cara Stevens</td>
<td>Sales Assistant</td>
<td>New York</td>
<td>46</td>
<td>2011-12-06</td>
<td>$145,600</td>
</tr>
<tr>
<td>Hermione Butler</td>
<td>Regional Director</td>
<td>London</td>
<td>47</td>
<td>2011-03-21</td>
<td>$356,250</td>
</tr>
<tr>
<td>Lael Greer</td>
<td>Systems Administrator</td>
<td>London</td>
<td>21</td>
<td>2009-02-27</td>
<td>$103,500</td>
</tr>
<tr>
<td>Jonas Alexander</td>
<td>Developer</td>
<td>San Francisco</td>
<td>30</td>
<td>2010-07-14</td>
<td>$86,500</td>
</tr>
<tr>
<td>Shad Decker</td>
<td>Regional Director</td>
<td>Edinburgh</td>
<td>51</td>
<td>2008-11-13</td>
<td>$183,000</td>
</tr>
<tr>
<td>Michael Bruce</td>
<td>Javascript Developer</td>
<td>Singapore</td>
<td>29</td>
<td>2011-06-27</td>
<td>$183,000</td>
</tr>
<tr>
<td>Donna Snider</td>
<td>Customer Support</td>
<td>New York</td>
<td>27</td>
<td>2011-01-25</td>
<td>$112,000</td>
</tr>
</tbody>
<tfoot>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</tfoot>
</table>
<script>
$(document).ready(function() {
$('#example').DataTable({
dom: 'Bfrtip',
buttons: [
'copy', 'csv', 'excel', 'pdf', 'print'
]
});
});
</script>

View File

@ -18,6 +18,9 @@ scratch. This page gets rid of all links and provides the needed markup only.
<!-- Theme style --> <!-- Theme style -->
<link rel="stylesheet" href="dist/css/adminlte.min.css"> <link rel="stylesheet" href="dist/css/adminlte.min.css">
<?= $this->renderSection('headLibraries') ?>
</head> </head>
<body class="hold-transition sidebar-mini"> <body class="hold-transition sidebar-mini">
@ -85,6 +88,12 @@ scratch. This page gets rid of all links and provides the needed markup only.
<p>Lista</p> <p>Lista</p>
</a> </a>
</li> </li>
<li class="nav-item">
<a href="<?= route_to('admin_respuestas') ?>" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Respuestas</p>
</a>
</li>
</ul> </ul>
</li> </li>
<li class="nav-item"> <li class="nav-item">
@ -157,6 +166,9 @@ scratch. This page gets rid of all links and provides the needed markup only.
<script src="plugins/bootstrap/js/bootstrap.bundle.min.js"></script> <script src="plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- AdminLTE App --> <!-- AdminLTE App -->
<script src="dist/js/adminlte.min.js"></script> <script src="dist/js/adminlte.min.js"></script>
<?= $this->renderSection('scripts') ?>
</body> </body>
</html> </html>