Advertisement
KilzaNiko

Scripts relacionados (DataTable y add.row)

Nov 24th, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $('body').on('click', '.editarAlumno', function () { // Boton editar Datatable
  2.   $('#rut').attr('readOnly',"readOnly"); //desactivo el input RUT
  3.   $('#curso-row').removeAttr('hidden'); // muestro el row completo de select curso
  4.  
  5.   var id_alumno = $(this).data('id');
  6.   $.get("{{ route('alumno.index') }}" +'/' + id_alumno +'/edit', function (data) {
  7.     $('#header-modal-alumno').html("Editar alumno");
  8.     $('#btnSiguiente').html("Horario practico");
  9.     $('#modal-alumno').modal('show');
  10.     $('#id_alumno').val(data.id_alumno);
  11.     $('#rut').val(data.rut);
  12.     $('#nombre').val(data.nombre);
  13.     $('#apellidos').val(data.apellidos);
  14.     $('#correo').val(data.correo);
  15.     $('#telefono').val(data.telefono);
  16.     $('#licencias').attr('disabled', 'disabled');
  17.     $('#cursos').attr('disabled', 'disabled');
  18.     $('#licencia-editar').val(data.id_licencia);
  19.  
  20.     var licencias = data.licencias;
  21.     licencias.forEach(function(element) { // recorro el array "licencias" que estaba adjunto al json que tiene los datos del alumno
  22.  
  23.       var id = element.id;
  24.       var clase = element.clase;
  25.  
  26.       var licencia_selected = new Option(clase, id, false, false);
  27.       $('#licencias').append(licencia_selected).trigger('change'); // asigno las variables al select
  28.     });
  29.  
  30.     var cursos = data.cursos;
  31.     cursos.forEach(function(element) { // recorro el array "cursos" que estaba adjunto al json que tiene los datos del alumno
  32.  
  33.       var id = element.id;
  34.       var clase = element.cod_curso;
  35.  
  36.       var curso_selected = new Option(clase, id, false, false);
  37.       $('#cursos').append(curso_selected).trigger('change'); // asigno las variables al select
  38.     });
  39.    
  40.   });
  41. });
  42.  
  43. var table2 = $('#tablaAgregados').DataTable({ // Propiedades de la Datatable Horario
  44.   'paging'      : false,
  45.   'lengthChange': true,
  46.   'searching'   : false,
  47.   'ordering'    : true,
  48.   'processing'  : true,
  49.   'info'        : true,
  50.   'autoWidth'   : true,
  51.   'language'    : lenguaje_es_horario,
  52.   'responsive'  : true,
  53.   'order'       : [[ 0, "desc" ]]
  54. });
  55.  
  56. $('#add_button').click(function(){ // Boton para añadir clases al DataTable horario
  57.  
  58.   // // capturo los datos guardado en los inputs
  59.   var clase = $("#clase").val();
  60.   var fecha_clase = $("#fecha_clase").val();
  61.   var hora_clase = $("#hora_clase_input").val();
  62.  
  63.   var duracion_clase_val = $("#duracion_clase").val();
  64.   var duracion_clase_text = $("#duracion_clase").find('option[value=' + duracion_clase_val + ']').text();
  65.  
  66.   var profesor_val = $("#profesor").val();
  67.   var profesor_text = $("#profesor").find('option[value=' + profesor_val + ']').text();
  68.  
  69.   var vehiculo_val = $('#vehiculo').val();
  70.   var vehiculo_text = $("#vehiculo").find('option[value=' + vehiculo_val + ']').text();
  71.  
  72.   var id_horario_val = $('#id_horario').val();
  73.   var id_curso_val = $('#cursos').val()
  74.  
  75.   var contador = parseFloat(table2.rows().count()) + 1;
  76.   var btnEliminar = '<button type="button" class="btn btn-outline-danger elevation-1 btn_eliminar">Quitar</button>';
  77.  
  78.   // ---- validacion de formulario -----
  79.   if (fecha_clase.length <= 0) {
  80.     Toast.fire({
  81.       type: 'error',
  82.       title: 'El campo fecha esta vacío'
  83.     });
  84.     $("#fecha_clase").focus();
  85.   }else if (hora_clase <= 0) {
  86.     Toast.fire({
  87.       type: 'error',
  88.       title: 'El campo hora esta vacío'
  89.     });
  90.     $("#hora_clase_input").focus();
  91.   }else if (duracion_clase_val <= 0) {
  92.     Toast.fire({
  93.       type: 'error',
  94.       title: 'El campo duración esta vacío'
  95.     });
  96.     $("#duracion_clase").select2("open");
  97.   }else if (profesor_val == null) {
  98.     Toast.fire({
  99.       type: 'error',
  100.       title: 'No ha seleccionado un profesor'
  101.     });
  102.     $("#profesor").select2("open");
  103.   }else if (vehiculo_val == null) {
  104.     Toast.fire({
  105.       type: 'error',
  106.       title: 'No ha seleccionado un vehiculo'
  107.     });
  108.     $("#vehiculo").select2("open");
  109.   }else{ // si todo esta validado agrega la clase
  110.     table2.row.add( [
  111.         contador,
  112.         fecha_clase,
  113.         hora_clase,
  114.         duracion_clase_text.replace('\n', '').trim(duracion_clase_text), // Muestro el texto de la opcion seleccionada
  115.         profesor_text.replace('\n', '').trim(profesor_text), // Muestro el texto de la opcion seleccionada
  116.         vehiculo_text.replace('\n', '').trim(vehiculo_text), // Muestro el texto de la opcion seleccionada
  117.         btnEliminar,
  118.         profesor_val, // Adjunto el id de profesor al array
  119.         vehiculo_val,  // Adjunto el id de vehiculo al array
  120.         id_horario_val,
  121.         id_curso_val
  122.     ] ).draw();
  123.     table2.columns.adjust();// muestro modal horario con timing
  124.     $('#adicionados').html(contador);
  125.  
  126.     // SECCION HORAS TOTALES
  127.  
  128.     var cells = []; // creo un arreglo
  129.     var rows = $("#tablaAgregados").dataTable().fnGetNodes(); // obtengo los rows
  130.     for(var i=0;i<rows.length;i++){ // verifico si existe un row
  131.       cells.push($(rows[i]).find("td:eq(3)").html()); // eligo la columna (en este caso la 3) y se agrega al arreglo
  132.     }
  133.    
  134.     for (var i = 0; i < cells.length; i++) { // verifico si existe un row
  135.       cells[i] = cells[i].replace(" minutos", ''); // remplazo el " minutos" por ""
  136.     }
  137.  
  138.     var minutosTotales = eval(cells.join('+')); // sumo los minutos
  139.  
  140.     var hours = Math.floor( minutosTotales / 60); // |    
  141.     var minutes = minutosTotales % 60;            // |---> transformo los minutos en horas y asigno los minutos restantes a una variable
  142.     if (minutes == 0) {                           // |---> si los minutos son 0 los transformo a '00' para que quede asi EJ: 2:00 --> 2 horas
  143.       minutes = '00'
  144.     }
  145.     if (hours > 0) {
  146.       if (minutes > 0) {
  147.         if (hours == 1) {
  148.           $('#horas_agregadas').html(hours+' hora y '+minutes+' minutos ');
  149.         }else{
  150.           $('#horas_agregadas').html(hours+' horas y '+minutes+' minutos ');
  151.         }
  152.       }else{
  153.         if (hours == 1) {
  154.           $('#horas_agregadas').html(hours+' hora ');
  155.         }else{
  156.           $('#horas_agregadas').html(hours+' horas ');
  157.         }
  158.       }
  159.     }else{
  160.       $('#horas_agregadas').html(minutes+' minutos ');
  161.     }
  162.     // SECCION HORAS TOTALES  
  163.   }
  164.   // ---- validacion de formulario -----
  165. });
  166.  
  167. $('body').on('click','#btnCrear', function(){ // BOTON CREAR ALUMNO Y HORARIO
  168.  
  169.   var p = $("#tablaAgregados").dataTable().fnGetData();
  170.   if (p == '') {
  171.     Toast.fire({
  172.         type: 'info',
  173.         title: 'Debe tener clases practicas agregadas'
  174.       });
  175.   }else{
  176.     // SECCION HORAS TOTALES
  177.  
  178.     var cells = []; // creo un arreglo
  179.     var rows = $("#tablaAgregados").dataTable().fnGetNodes(); // obtengo los rows
  180.     for(var i=0;i<rows.length;i++){ // verifico si existe un row
  181.       cells.push($(rows[i]).find("td:eq(3)").html()); // eligo la columna (en este caso la 3) y se agrega al arreglo
  182.     }
  183.    
  184.     for (var i = 0; i < cells.length; i++) { // verifico si existe un row
  185.       cells[i] = cells[i].replace(" minutos", ''); // remplazo el " minutos" por ""
  186.     }
  187.  
  188.     var minutosTotales = eval(cells.join('+')); // sumo los minutos
  189.  
  190.     var hours = Math.floor( minutosTotales / 60); // |    
  191.     var minutes = minutosTotales % 60;            // |---> transformo los minutos en horas y asigno los minutos restantes a una variable
  192.     if (minutes == 0) {                           // |---> si los minutos son 0 los transformo a '00' para que quede asi EJ: 2:00 --> 2 horas
  193.       minutes = '00'
  194.     }
  195.  
  196.     // SECCION HORAS TOTALES
  197.  
  198.     // ---------------------------- Horas practicas de la licencia seleccionada ---------------------------------
  199.     var id_licencia = $('#licencias').val();
  200.     var view_html='';
  201.     var url = "{{ url('getHoras_practicas') }}/"+id_licencia;
  202.    
  203.     if (id_licencia == null) {
  204.       Toast.fire({
  205.         type: 'info',
  206.         title: 'Debe seleccionar una licencia en la seccion de alumno'
  207.       });
  208.     }else{
  209.       $.get(url, function (r) {
  210.         var data = $.parseJSON(r);
  211.         if(data.id_licencia>0){
  212.  
  213.           if (hours == data.horas_practicas) {
  214.             if (minutes == '00') {
  215.               Swal.fire({
  216.                   title: 'Confirmacion!',
  217.                   text: "Se creara el alumno y se le asignara al curso seleccionado",
  218.                   showCancelButton: true,
  219.                   confirmButtonColor: '#28A645',
  220.                   cancelButtonColor: '#d33',
  221.                   confirmButtonText: 'Si, registrar alumno',
  222.                   cancelButtonText: 'No, volver'
  223.               }).then((result) => {
  224.                 if (result.value) {
  225.                   // crea un array con los datos del formulario
  226.                   let form = document.forms["alumno-frm"];
  227.                   let fd = new FormData(form);
  228.                   let alumno = {};
  229.                   for (let [key, prop] of fd) {
  230.                       alumno[key] = prop;
  231.                   }
  232.                   // crea un array con los datos de la tabla
  233.                   let horarios = $("#tablaAgregados").dataTable().fnGetData();
  234.  
  235.                   // agrega ambos a la data que envías con ajax, convirtiédolos a json
  236.                   $.ajax({
  237.                     url:"{{ route('alumno.store') }}",
  238.                     type: 'POST',
  239.                     data: JSON.stringify({
  240.                         alumno: alumno,
  241.                         horarios: horarios
  242.                     }),
  243.                     contentType: 'application/json; charset=utf-8',
  244.                     success : function(response){
  245.                       $('#modal-horario-practico').removeAttr('data-backdrop');
  246.                       $('#modal-horario-practico').modal('hide');
  247.                       $('#modal-horario-practico').attr('data-backdrop', 'static');
  248.                       $('#licencias').val(null).trigger("change");
  249.                       $('#licencias').empty();
  250.                       $('#profesor').val(null).trigger("change");
  251.                       $('#profesor').empty();
  252.                       $('#duracion_clase').val(null).trigger("change");
  253.                       $('#duracion_clase').empty();
  254.                       $('#vehiculo').val(null).trigger("change");
  255.                       $('#vehiculo').empty();
  256.                       $('#cursos').val(null).trigger("change");
  257.                       $('#cursos').empty();
  258.                       $("#tablaAgregados").DataTable().clear().draw();
  259.  
  260.                       $('#alumno_dt').DataTable().ajax.reload();
  261.  
  262.                       Toast.fire({
  263.                         type: 'success',
  264.                         title: 'El alumno ha sido registrado con éxito'
  265.                       });
  266.                     },
  267.                     error: function(response){
  268.                         console.log(response)
  269.                     }
  270.                   });
  271.                 }
  272.               });
  273.  
  274.             }else if (minutes > '00') {
  275.               Toast.fire({
  276.                 type: 'warning',
  277.                 title: 'Ha excedido el total de '+ data.horas_practicas +' horas en '+ minutes + ' minutos'
  278.               });
  279.             }
  280.           }else if (hours > data.horas_practicas) {
  281.             Toast.fire({
  282.               type: 'warning',
  283.               title: 'Ha excedido el total de horas necesarias en '+ (hours-data.horas_practicas)+ ' horas'
  284.             });
  285.              
  286.           }else if (hours < data.horas_practicas) {
  287.             if (minutes == '00') {
  288.               Toast.fire({
  289.                 type: 'info',
  290.                 title: 'Faltan '+ (data.horas_practicas - hours) + ' horas para el total de '+data.horas_practicas+' horas necesarias'
  291.               });
  292.             }else if (minutes > '00') {
  293.               if (minutes < 60) {
  294.                 if (((data.horas_practicas - hours)-1) == 0) {
  295.                   Toast.fire({
  296.                     type: 'info',
  297.                     title: 'Faltan '+ (60-minutes) + ' minutos para el total de '+data.horas_practicas+' horas necesarias'
  298.                   });
  299.                 }else{
  300.                   Toast.fire({
  301.                     type: 'info',
  302.                     title: 'Faltan '+ ((data.horas_practicas - hours)-1) + ' horas y '+ (60-minutes) + ' minutos para el total de '+data.horas_practicas+' horas necesarias'
  303.                   });
  304.                 }
  305.               }
  306.             }
  307.           }
  308.         }
  309.       });
  310.     }
  311.     // ---------------------------- Horas practicas de la licencia seleccionada ---------------------------------
  312.    
  313.   }
  314. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement