templates/student/index.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% block title %}Students List{% endblock %}
  3. {% block body %}
  4.     <div class="row">
  5.         <div class='col-lg-3 col-md-3 col-sm-4'>
  6.             <h2>Students</h2>
  7.         </div>
  8.     </div>
  9.     <div class="row">
  10.         {# crear #}
  11.         <div class='col-sm-12'>
  12.             <div class="card-header">
  13.                 <h5 class="mb-0">
  14.                     <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#newOutlay" aria-expanded="false" aria-controls="collapseExample">
  15.                         <span title="Expandir formulario de búsqueda"><i class="fa fa-arrow-right"></i></span>
  16.                         BUSCAR ESTUDIANTES
  17.                         <div class="tooltip" style="margin-left: 35px;color: #FFF;background-color: #dc3545;padding: 2px 7px;border-radius: 5px;width: auto;font-size: 1rem;">
  18.                             {#                            <span style="margin-left: 35px;color: #FFF;background-color: #dc3545;padding: 1px 6px;border-radius: 5px;">#}
  19.                             <i class="fa fa-search"></i>
  20.                             {#                        </span>#}
  21.                             <span class="tooltiptext" style="font-size: 0.7rem; width: 280px;">Presiona para expandir u ocultar el formulario</span>
  22.                         </div>
  23.                     </button>
  24.                 </h5>
  25.             </div>
  26.             <div class="collapse" id="newOutlay">
  27.                 <div class="card card-body formix">
  28.                     <form id='form-search' class="form-group" method="GET">
  29.                         <div class="form-row" style="margin-left: 1.5rem;">
  30.                             <div class="col-sm-3 form-check">
  31.                                 <input type="checkbox" class="form-check-input" id="stdChReviewTest" name='checkProcessTest' value="1" {% if checkProcessTest == 1 %} checked {% endif %}>
  32.                                 <label class="form-check-label" for="stdChReviewTest">Evaluaciones por calificar</label>
  33.                                 <div class="tooltip">?<span class="tooltiptext" style="width: 250px;">Al seleccionar se buscarán los estudiantes con<br><b>Evaluaciones por calificar</b></span></div>
  34.                             </div>
  35.                         </div>
  36.                         <div class="form-row">
  37.                             <div class="col-sm-2">
  38.                                 <label class="lblMarginButon" for="stdName">Nombre del estudiante</label>
  39.                                 {#                            <div class="tooltip">?<span class="tooltiptext">Nombre del estudiante</span></div>#}
  40.                                 <input type="text" class="form-control" id="stdName" placeholder="Nombre del estudiante" name='names' autocomplete="off" value="{{ names }}">
  41.                             </div>
  42.                             <div class="col-sm-2">
  43.                                 <label class="lblMarginButon" for="stdLastname">Apellido del estudiante</label>
  44.                                 {#                            <div class="tooltip">?<span class="tooltiptext">Nombre del estudiante</span></div>#}
  45.                                 <input type="text" class="form-control" id="stdLastname" placeholder="Apellido del estudiante" name='lastname' autocomplete="off" value="{{ lastname }}">
  46.                             </div>
  47.                             <div class="col-sm-2">
  48.                                 <label class="lblMarginButon" for="stdIdentification">Identificación del estudiante</label>
  49.                                 {#                            <div class="tooltip">?<span class="tooltiptext">Nombre del estudiante</span></div>#}
  50.                                 <input type="text" class="form-control" id="stdIdentification" placeholder="00000000" name='identification' autocomplete="off" value="{{ identification }}">
  51.                             </div>
  52.                             <div class="col-sm-2">
  53.                                 <label class="lblMarginButon" for="stdPhone">Teléfono del estudiante</label>
  54.                                 {#                            <div class="tooltip">?<span class="tooltiptext">Nombre del estudiante</span></div>#}
  55.                                 <input type="text" class="form-control" id="stdPhone" placeholder="3100000000" name='phone' autocomplete="off" value="{{ phone }}">
  56.                             </div>
  57.                             <div class="col-sm-2">
  58.                                 <label class="lblMarginButon" for="stdEmail">Email del estudiante</label>
  59.                                 {#                            <div class="tooltip">?<span class="tooltiptext">Nombre del estudiante</span></div>#}
  60.                                 <input type="text" class="form-control" id="stdEmail" placeholder="example@mail.co" name='email' autocomplete="off" value="{{ email }}">
  61.                             </div>
  62.                         </div>
  63.                         <div class="form-row">
  64.                             <div class="col-sm-2">
  65.                                 <label class="lblMarginButon" for="modality">Modalidad</label>
  66.                                 <div class="tooltip">?<span class="tooltiptext">Modalidad de estudio</span></div>
  67.                                 {#                                <input type="text" class="form-control" id="stdEmail" placeholder="example@mail.co" name='email' autocomplete="off" value="{{ email }}">#}
  68.                                 <select name="modality" id="modality" class="form-control">
  69.                                     <option value="">Todas...</option>
  70.                                     <option value="Presencial" {% if modality == 'Presencial' %}selected{% endif %}>Presencial</option>
  71.                                     <option value="Online" {% if modality == 'Online' %}selected{% endif %}>Online</option>
  72.                                     <option value="Mixta" {% if modality == 'Mixta' %}selected{% endif %}>Mixta</option>
  73.                                 </select>
  74.                             </div>
  75.                             <div class="col-sm-2">
  76.                                 <label class="lblMarginButon" for="stdCampus">Sede/Campus</label>
  77.                                 <input type="text" class="form-control" id="stdCampus" name='campus' autocomplete="off" value="{{ campus }}">
  78.                             </div>
  79.                             <div class="col-auto">
  80.                                 <button type="submit" id="outSave" class="btn btn-danger btn-small mb-2 btnTopLabel btnTop5">Buscar</button>
  81.                             </div>
  82.                         </div>
  83.                     </form>
  84.                 </div>
  85.             </div>
  86.         </div>
  87.     </div>
  88.     <div class="row" style="margin: 15px 5px;">
  89.         <div class='col-sm-5'>
  90.             <a href="{{ path('admin_student_create') }}" class="btn btn-danger btn-small">Crear Estudiantes</a>
  91.         </div>
  92.         <div class='col-sm-7'>
  93.             <div class="row">
  94.                 <div class='col-sm-6'>
  95.                     <div class="form-group">
  96.                         <label for="exampleInputEmail1">Excel para activar examenes</label><br>
  97.                         <input type="file" multiple="multiple" id="zipAttached" name="zipAttached" accept=".xlsx"/>
  98.                     </div>
  99.                     <span id="emailHelp" class="form-text text-danger" style="font-size: 1rem;"></span>
  100.                 </div>
  101.                 <div class="col-sm-3 center">
  102.                     <div class="form-group">
  103.                         <button type="submit" id="sendFile" class="btn btn-primary" style="width: 115px;" disabled><i class="fa fa-cogs"></i> Enviar</button>
  104.                         <a href="{{ path('admin_student_excel_template') }}" class="btn btn-success mt-1" target="_blank" style="width: 115px;"><i class="fa fa-file-excel-o"></i> Plantilla</a>
  105.                     </div>
  106.                 </div>
  107.                 <div id="spinsending" class="col-sm-2 hide">
  108.                     <div class="spinner-border" style="color: #7145d6!important;"></div>
  109.                 </div>
  110.             </div>
  111.         </div>
  112.         <div class="count col-4 col-sm-2">
  113.             <span class="small text-danger">Cantidad Total: {{ listdata.getTotalItemCount }}</span>
  114.         </div>
  115.         <div class="count col-3 col-sm-2">
  116.             {% if filters %}
  117.                 <a href="{{ path('admin_student_list') }}" class="">Ver Todos</a>
  118.             {% endif %}
  119.         </div>
  120.     </div>
  121.     <div class="row">
  122.         <div class="col-sm-12 table-responsive hide" style="margin-bottom: 50px;">
  123.             <table id="myTableScheduled" class="table table-striped table-hover table-sm">
  124.                 <thead class="thead-light" style="font-size: 0.9rem;">
  125.                     <tr>
  126.                         <th id="IdCard" class="center" style="width: 20%;">Card ID</th>
  127.                         <th id="Level" class="center" style="width: 15%;">Level</th>
  128.                         <th id="Dates" class="center" style="width: 25%;">Dates</th>
  129.                     </tr>
  130.                 </thead>
  131.                 <tbody></tbody>
  132.             </table>
  133.             <hr>
  134.         </div>
  135.         <div class="col-sm-12 heigthInList table-responsive">
  136.             <table id="myTable" class="table table-striped table-hover table-sm">
  137.                 <thead class="thead-light" style="font-size: 0.9rem;">
  138.                     <tr>
  139.                         <th id="tdName" class="center" style="width: 30%;">Full Name</th>
  140.                         <th class="center" style="width: 13%;"><span class="hdmovile">Dispose</span></th>
  141.                         <th class="" style="width: 17%;"><span class="hdmovile">Campus</span></th>
  142.                         <th class="" style="width: 20%;">Email/Phone</th>
  143.                         <th class="" style="width: 10%;">Level</th>
  144.                         <th class="center" style="width: 10%;"><span class="hdmovile"></span></th>
  145.                     </tr>
  146.                 </thead>
  147.                 <tbody>
  148.                     {% for student in listdata %}
  149.                         <tr>
  150.                             <td>
  151.                                 <div class="row">
  152.                                     <div class="col-12" style="line-height: 0.9;">
  153.                                         {{ student.names }} {{ student.lastname }} <br>
  154.                                         <small style="font-size: 0.75rem; padding-left: 22px;">{{ student.documentType }} {{ student.documentNumber }}</small>
  155.                                     </div>
  156.                                     <div class="col-sm-2"><a href="{{ path('admin_student_edit', {'id': student.id}) }}">Editar</a></div>
  157.                                     <div class="col-sm-2"><a href="{{ path('admin_student_modules', {'studentid': student.id}) }}">Modulos</a></div>
  158.                                 </div>
  159.                             </td>
  160.                             <td class="center" style="font-size: 0.86rem;">
  161.                                 <div class="row">
  162.                                     <div class="col-12" style="font-size: 0.7rem;">
  163.                                         {% if studentLevel[student.id] and studentLevel[student.id]['module'] and studentLevel[student.id]['module'].enableSince %}
  164.                                             {% set module = studentLevel[student.id]['module'] %}
  165.                                             <i class="fa fa-toggle-on" style="color: #23bf00;"></i> {{ module.module.level }} <br>
  166.                                             {{ module.enableSince ? module.enableSince | date('Y-m-d H:i') : '' }} <br>
  167.                                             {{ module.enableUntil ? module.enableUntil | date('Y-m-d H:i') : '' }}
  168.                                         {% endif %}
  169.                                     </div>
  170.                                 </div>
  171.                             </td>
  172.                             <td class="">
  173.                                 <div class="row">
  174.                                     <div class="col-12" style="font-size: 1rem;"><i class="fa fa-home text-primary"></i> {{ student.campus }}</div>
  175.                                     <div class="col-12" style="font-size: 0.85rem;"><i class="fa fa-thumb-tack text-primary"></i> {{ student.modality }}</div>
  176.                                 </div>
  177.                             </td>
  178.                             <td>
  179.                                 <div class="row">
  180.                                     <div class="col-12" style="font-size: 0.9rem;"><a href="mailto: {{ student.email }}"><i class="fa fa-envelope-o"></i> {{ student.email }}</a></div>
  181.                                     <div class="col-12" style="font-size: 0.9rem;"><a href="tel: +57{{ student.phone }}"><i class="fa fa-phone"></i> {{ student.phone }}</a></div>
  182.                                 </div>
  183.                             </td>
  184.                             <td>
  185.                                 <div class="row">
  186.                                     <div class="col-12" style="font-size: 0.9rem;">
  187.                                         {% if studentLevel[student.id] and studentLevel[student.id]['level'] %}
  188.                                             {{ studentLevel[student.id]['level'].level.course }}
  189.                                             {{ studentLevel[student.id]['level'].level.name }}
  190.                                         {% endif %}
  191.                                     </div>
  192.                                 </div>
  193.                             </td>
  194.                             <td>
  195.                                 {% if student.hasInProcessTest == 1 %}
  196.                                     <div class="tooltip" style="background-color: #FFF; width: 25px; border: solid 1px #ffe000; background-color: #00b024;">
  197.                                         <span class="tooltiptext">Revisar Evaluaciones</span>
  198.                                         <a href="{{ path('admin_student_modules', {'studentid': student.id}) }}" style=" font-size: 1rem; color: #ffe000;">
  199.                                             <i class="fa fa-bell-o"></i>
  200.                                         </a>
  201.                                     </div>
  202.                                 {% endif %}
  203.                             </td>
  204.                         </tr>
  205.                     {% endfor %}
  206.                 </tbody>
  207.             </table>
  208.             <div class="navigation">
  209.                 {{ knp_pagination_render(listdata) }}
  210.             </div>
  211.         </div>
  212.     </div>
  213. {% endblock %}
  214. {% block javascripts %}
  215.     {{ parent() }}
  216.     <script type="text/javascript">
  217.         $(document).ready(function () {
  218.             var fileUploadedName = '';
  219.             $('#zipAttached').change(function () {
  220.                 var zipFile = $(this);
  221.                 if ($(zipFile).val() == "") { return; }
  222.                 $('#sendFile').attr('disabled', false);
  223.             });
  224.             $('#sendFile').click(function () {
  225.                 $('#sendFile').attr('disabled', true);
  226.                 var zipFile = $('#zipAttached');
  227.                 if ($(zipFile).val() == "") { return; }
  228.                 $('.newanswer').remove();
  229.                 $('#emailHelp').text('Procesando...');
  230.                 // inicio de la lectura del archivo
  231.                 $('#preloaderView').show();
  232.                 $('#message').text('The file is being uploading and processed');
  233.                 proccessFile(2);
  234.             });
  235.             function proccessFile(proccesssSince) {
  236.                 let fd = new FormData();
  237.                 fd.append('fileUploadedName', fileUploadedName);
  238.                 fd.append('since', proccesssSince);
  239.                 if(!fileUploadedName) {
  240.                     var zipFile = $('#zipAttached');
  241.                     var files = $(zipFile)[0].files[0];
  242.                     fd.append('file', files);
  243.                 }
  244.                 $.ajax({method: 'post', url: '{{ path('admin_student_excel_activate_modules') }}',
  245.                     data: fd, contentType: false, cache: false, processData: false,
  246.                     success: function (data) {
  247.                         fileUploadedName = data.fileName;
  248.                         $('#myTableScheduled').closest('div.hide').removeClass('hide');
  249.                         appendScheduleRow(data.data);
  250.                         if(data.isdocend) {
  251.                             $('#sendFile').attr('disabled', true);
  252.                             fileUploadedName = '';
  253.                             $('#zipAttached').val('');
  254.                             hideOnloading(300);
  255.                             $('#emailHelp').text('File uploaded successfully');
  256.                             return;
  257.                         }
  258.                         proccessFile(data.since);
  259.                         
  260.                     },
  261.                     error: function (error, status, strerror) {
  262.                         $('#modalSelfContent h5.modal-title').text('ERROR en el procesamiento del documento');
  263.                         $('#modalSelfContent .modal-body').html('<p>Se presentó un error al leer el archivo Excel</p><hr>'
  264.                             + '<p>' + 'Código ' + error.status + '<br>' + error.responseJSON.response + '</p>');
  265.                         $('#modalSelfContent').modal('show');
  266.                         hideOnloading(500);
  267.                         $('#zipAttached, #company').val('');
  268.                         $('#zipAttached, #company').attr('disabled', false);
  269.                     }
  270.                 });
  271.             }
  272.         });
  273.         function appendScheduleRow(data) {
  274.             let table = $('#myTableScheduled');
  275.             
  276.             data.forEach(function(i, o) {
  277.                 let tr = $('<tr>');
  278.                 let td1 = $('<td>').text(i.fullName);
  279.                 let td2 = $('<td>').text(i.cardId);
  280.                 let td3 = $('<td>').text(i.course + ': ' + i.level);
  281.                 let exdates = '<div class="small"><small>' + i.datei + '</small></div>'
  282.                         + '<div class="small"><small>' + i.dateo + '</small></div>';
  283.                 let td4 = $('<td>').html(exdates);
  284.                 $(tr).append(td1);
  285.                 $(tr).append(td2);
  286.                 $(tr).append(td3);
  287.                 $(tr).append(td4);
  288.                 $(table).append(tr);
  289.             });
  290.         }
  291.         
  292.     </script>
  293. {% endblock %}