Advertisement
KilzaNiko

Formulario + fnGetData() en una sola ruta Laravel 5.8

Nov 23rd, 2019
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.59 KB | None | 0 0
  1. FUNCION STORE CONTROLLER
  2. public function store(Request $request){ // STORE
  3.  
  4.   $data = json_decode($request->getContent());
  5.  
  6.   $alumno = $data['0']; // declaramos array 0 ya que este contiene el alumno
  7.  
  8.   $id_alumno = $alumno['0'];
  9.   $rut       = $alumno['1'];
  10.   $nombre    = $alumno['2'];
  11.   $apellidos = $alumno['3'];
  12.   $correo    = $alumno['4'];
  13.   $clave     = $alumno['5'];
  14.   $telefono  = $alumno['6'];
  15.   $licencia  = $alumno['7'];
  16.   $curso     = $alumno['8'];
  17.  
  18.   $id_alumno_registrado = alumnoModel::updateOrCreate(
  19.     ['id_alumno' => $id_alumno?: NULL],
  20.     [
  21.       'rut'         => $rut,
  22.       'nombre'      => $nombre,
  23.       'apellidos'   => $apellidos,
  24.       'correo'      => $correo,
  25.       'clave'       => $clave,
  26.       'telefono'    => $telefono,
  27.       'id_licencia' => $licencia,
  28.       'id_curso'    => $curso
  29.     ]
  30.   );
  31.  
  32.   $horario = $data['1']; // declaramos array 0 ya que este contiene el horario (este contiene mas arrays dentro, es un array multidimensional)
  33.  
  34.   foreach($horario as $array_data) {
  35.     $dato2 = $array_data['0']; // elegimos el array correspondiente al dato que necesitemos enviar por la tabla
  36.     $dato3 = $array_data['1'];
  37.     $dato4 = $array_data['2'];
  38.     $dato5 = 'practica';       //se pueden asignar valores personalizados
  39.     $dato6 = $array_data['3'];
  40.     $dato7 = $array_data['7'];
  41.     $dato8 = $array_data['8'];
  42.     $dato9 = $array_data['9'];
  43.     $dato10 = $array_data['10'];
  44.  
  45.     horarioModel::updateOrCreate(
  46.       ['id_horario' => $dato9?: NULL],
  47.       [
  48.          'clase'          => $dato2,
  49.          'fecha'          => $dato3,
  50.          'hora'           => $dato4,
  51.          'tipo'           => $dato5,
  52.          'minutos_bloque' => $dato6,
  53.          'id_profesor'    => $dato7,
  54.          'id_vehiculo'    => $dato8,
  55.          'id_curso'       => $dato10,
  56.          'id_alumno'      => $id_alumno_registrado->id_alumno
  57.       ]
  58.     );
  59.   }
  60.  
  61.   return response()->json();
  62. }
  63.  
  64.  
  65. BTN CREAR (GUARDAR)
  66. <script type="text/javascript">
  67.  
  68. $('body').on('click','#btnCrear', function(){ // BOTON CREAR ALUMNO Y HORARIO
  69. //Capturo valor de los input de mi formulario (en mi caso input's y select)
  70.   var id_alumno_input  = $('#id_alumno').val();
  71.   var rut_input        = $('#rut').val();
  72.   var nombre_input     = $('#nombre').val();
  73.   var apellidos_input  = $('#apellidos').val();
  74.   var correo_input     = $('#correo').val();
  75.   var clave_input      = $('#clave').val();
  76.   var telefono_input   = $('#telefono').val();
  77.   var licencias_select = $('#licencias').val();
  78.   var cursos_select    = $('#cursos').val();
  79. //obtengo los datos de la datatable con fnGetData
  80.   var p = $("#tablaAgregados").dataTable().fnGetData();
  81. //creo un array con los valores de los input mencionados arriba
  82.   var alumno = [id_alumno_input,rut_input,nombre_input,apellidos_input,correo_input,clave_input,telefono_input,licencias_select,cursos_select];
  83. //unimos los 2 array (formulario + fnGetData)
  84.   var alumno_array = [alumno, p];
  85.  
  86.   if (p == '') { //verifico si esta vacia o no la datatable
  87.     Toast.fire({
  88.         type: 'info',
  89.         title: 'Debe tener clases practicas agregadas'
  90.       });
  91.   }else{
  92.     // SECCION HORAS TOTALES
  93.  
  94.     var cells = []; // creo un arreglo
  95.     var rows = $("#tablaAgregados").dataTable().fnGetNodes(); // obtengo los rows
  96.     for(var i=0;i<rows.length;i++){ // verifico si existe un row
  97.       cells.push($(rows[i]).find("td:eq(3)").html()); // eligo la columna (en este caso la 3) y se agrega al arreglo
  98.     }
  99.    
  100.     for (var i = 0; i < cells.length; i++) { // verifico si existe un row
  101.       cells[i] = cells[i].replace(" minutos", ''); // remplazo el " minutos" por ""
  102.     }
  103.  
  104.     var minutosTotales = eval(cells.join('+')); // sumo los minutos
  105.  
  106.     var hours = Math.floor( minutosTotales / 60); // |    
  107.     var minutes = minutosTotales % 60;            // |---> transformo los minutos en horas y asigno los minutos restantes a una variable
  108.     if (minutes == 0) {                           // |---> si los minutos son 0 los transformo a '00' para que quede asi EJ: 2:00 --> 2 horas
  109.       minutes = '00'
  110.     }
  111.  
  112.     // SECCION HORAS TOTALES
  113.  
  114.     // ---------------------------- Horas practicas de la licencia seleccionada ---------------------------------
  115.     var id_licencia = $('#licencias').val();
  116.     var view_html='';
  117.     var url = "{{ url('getHoras_practicas') }}/"+id_licencia;
  118.    
  119.     if (id_licencia == null) {
  120.       Toast.fire({
  121.         type: 'info',
  122.         title: 'Debe seleccionar una licencia en la seccion de alumno'
  123.       });
  124.     }else{
  125.       $.get(url, function (r) {
  126.         var data = $.parseJSON(r);
  127.         if(data.id_licencia>0){
  128.  
  129.           if (hours == data.horas_practicas) {
  130.             if (minutes == '00') {
  131.               Swal.fire({
  132.                 title: 'Confirmacion!',
  133.                 text: "Se creara el alumno y se le asignara al curso seleccionado",
  134.                 showCancelButton: true,
  135.                 confirmButtonColor: '#28A645',
  136.                 cancelButtonColor: '#d33',
  137.                 confirmButtonText: 'Si, registrar alumno',
  138.                 cancelButtonText: 'No, volver'
  139.               }).then((result) => {
  140.                 if (result.value) {
  141.  
  142.                   $.ajax({
  143.                     url:"{{ route('alumno.store') }}",
  144.                     type: 'POST',
  145.                     dataType:'json',
  146.                     contentType: 'json',
  147.                     data: JSON.stringify(alumno_array),
  148.                     contentType: 'application/json; charset=utf-8',
  149.                     success : function(){
  150.                       $('#modal-horario-practico').removeAttr('data-backdrop');
  151.                       $('#modal-horario-practico').modal('hide');
  152.                       $('#modal-horario-practico').attr('data-backdrop', 'static');
  153.                       $('#licencias').val(null).trigger("change");
  154.                       $('#licencias').empty();
  155.                       $('#profesor').val(null).trigger("change");
  156.                       $('#profesor').empty();
  157.                       $('#duracion_clase').val(null).trigger("change");
  158.                       $('#duracion_clase').empty();
  159.                       $('#vehiculo').val(null).trigger("change");
  160.                       $('#vehiculo').empty();
  161.                       $('#cursos').val(null).trigger("change");
  162.                       $('#cursos').empty();
  163.                       $("#tablaAgregados").DataTable().clear().draw();
  164.  
  165.                       $('#alumno_dt').DataTable().ajax.reload();
  166.  
  167.                       Toast.fire({
  168.                         type: 'success',
  169.                         title: 'El alumno ha sido registrado con éxito'
  170.                       });
  171.                     },
  172.                     error: function(){
  173.                       Toast.fire({
  174.                         type: 'error',
  175.                         title: 'Ha ocurrido un problema con el registro de horario práctico'
  176.                       });
  177.                     }
  178.                   });
  179.                 }
  180.               })
  181.  
  182.             }else if (minutes > '00') {
  183.               Toast.fire({
  184.                 type: 'warning',
  185.                 title: 'Ha excedido el total de '+ data.horas_practicas +' horas en '+ minutes + ' minutos'
  186.               });
  187.             }
  188.           }else if (hours > data.horas_practicas) {
  189.             Toast.fire({
  190.               type: 'warning',
  191.               title: 'Ha excedido el total de horas necesarias en '+ (hours-data.horas_practicas)+ ' horas'
  192.             });
  193.              
  194.           }else if (hours < data.horas_practicas) {
  195.             if (minutes == '00') {
  196.               Toast.fire({
  197.                 type: 'info',
  198.                 title: 'Faltan '+ (data.horas_practicas - hours) + ' horas para el total de '+data.horas_practicas+' horas necesarias'
  199.               });
  200.             }else if (minutes > '00') {
  201.               if (minutes < 60) {
  202.                 if (((data.horas_practicas - hours)-1) == 0) {
  203.                   Toast.fire({
  204.                     type: 'info',
  205.                     title: 'Faltan '+ (60-minutes) + ' minutos para el total de '+data.horas_practicas+' horas necesarias'
  206.                   });
  207.                 }else{
  208.                   Toast.fire({
  209.                     type: 'info',
  210.                     title: 'Faltan '+ ((data.horas_practicas - hours)-1) + ' horas y '+ (60-minutes) + ' minutos para el total de '+data.horas_practicas+' horas necesarias'
  211.                   });
  212.                 }
  213.               }
  214.             }
  215.           }
  216.         }
  217.       });
  218.     }
  219.     // ---------------------------- Horas practicas de la licencia seleccionada ---------------------------------
  220.   }
  221. });
  222. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement