guarda días, salidas y llegadas asociadas a un evento
This commit is contained in:
		
							parent
							
								
									a90827365b
								
							
						
					
					
						commit
						8f16b70b17
					
				
					 4 changed files with 138 additions and 11 deletions
				
			
		|  | @ -2,8 +2,13 @@ | |||
| 
 | ||||
| namespace App\Http\Controllers; | ||||
| 
 | ||||
| use App\Models\Dia; | ||||
| use App\Models\Evento; | ||||
| use App\Models\HoraFlag; | ||||
| use App\Models\Utils; | ||||
| use Dotenv\Validator; | ||||
| use Illuminate\Http\Request; | ||||
| use mysql_xdevapi\Exception; | ||||
| 
 | ||||
| class EventoController extends Controller | ||||
| { | ||||
|  | @ -73,9 +78,54 @@ class EventoController extends Controller | |||
|      * @param  \App\Models\Evento  $evento | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function update(Request $request, Evento $evento) | ||||
|     { | ||||
|         dd($request); | ||||
|     public function update(Request $request, Evento $evento) { | ||||
| 
 | ||||
|         // Validación.
 | ||||
|         request()->validate([ | ||||
|             'dia' => 'array', | ||||
|             'dia.*' => 'required|string|max:100', | ||||
|             'salida' => 'array', | ||||
|             'llegada.*' => 'required|date_format:H:i', | ||||
|             'llegada' => 'array', | ||||
|             'salida.*' => 'required|date_format:H:i|after:llegada.*' | ||||
|         ],[ | ||||
|             'salida.*.after' => 'La hora de llegada debe ser anterior a la de salida.' | ||||
|             ]); | ||||
| 
 | ||||
|         // Adición de días y horas.
 | ||||
|         foreach ($request->input('dia') as $i => $dia) { | ||||
| 
 | ||||
|             // Busqueda en la lista de días del evento, y adición en su defecto.
 | ||||
|             $diaNombre = strtolower(trim($dia)); // ¿HACER FUNCIÓN PARA NORMALIZAR NOMBRES?
 | ||||
|             $arrayAux = $evento->dias()->where('nombre',$diaNombre)->get(); | ||||
|             $diaID = null; | ||||
|             if ($arrayAux->count() == 0) { | ||||
|                 $nuevo = new Dia(['nombre' => $diaNombre]); | ||||
|                 $nuevo->evento_id = $evento->id; | ||||
|                 $nuevo->save(); | ||||
|                 $diaID = $nuevo->id; | ||||
|             } else { | ||||
|                 $diaID = $arrayAux[0]->id; | ||||
|             } | ||||
| 
 | ||||
|             // Creación de hora_flags ingresados para cada día.
 | ||||
|             $llegadaDia = new HoraFlag([ | ||||
|                 'dia_id' => $diaID, | ||||
|                 'minutoDelDia' => Utils::formatMinutos($request->input('llegada')[$i]), | ||||
|                 'flag' => 1 | ||||
|             ]); | ||||
|             $salidaDia = new HoraFlag([ | ||||
|                 'dia_id' => $diaID, | ||||
|                 'minutoDelDia' => Utils::formatMinutos($request->input('salida')[$i]), | ||||
|                 'flag' => -1 | ||||
|             ]); | ||||
| 
 | ||||
|             // Adición de hora_flags ingresados para cada día.
 | ||||
|             $llegadaDia->save(); | ||||
|             $salidaDia->save(); | ||||
|         } | ||||
| 
 | ||||
|         return view("resultado"); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|  |  | |||
|  | @ -4,12 +4,16 @@ namespace App\Models; | |||
| 
 | ||||
| class Utils { | ||||
| 
 | ||||
| 
 | ||||
|     private function formatMinutos() { | ||||
| 
 | ||||
|     // El input es un string de forma 'hh:mm' con hh entre 00 y 23 y mm entre 00 y 59
 | ||||
|     public static function formatMinutos($horaMinuto) { | ||||
|         $hora_minuto_array = explode(':', $horaMinuto); | ||||
|         $horas = (int) $hora_minuto_array[0]; | ||||
|         $minutos = (int) $hora_minuto_array[1]; | ||||
|         $cantMinutos = ($horas*60) + $minutos; | ||||
|         return $cantMinutos; | ||||
|     } | ||||
| 
 | ||||
|     private function parseHora() { | ||||
|     public static function parseHora() { | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -57,15 +57,26 @@ | |||
|                         </div> | ||||
| 
 | ||||
|                         <div class="p-6 border-t border-gray-200 dark:border-gray-700 md:border-t-0 md:border-l"> | ||||
|                             <form id="horarios" method="post" action="{{route('update')}}"> | ||||
| 
 | ||||
|                             @if ($errors->any()) | ||||
|                                 <div class="alert alert-danger"> | ||||
|                                     <ul> | ||||
|                                         @foreach ($errors->all() as $error) | ||||
|                                             <li>{{ $error }}</li> | ||||
|                                         @endforeach | ||||
|                                     </ul> | ||||
|                                 </div> | ||||
|                             @endif | ||||
| 
 | ||||
|                             <form id="horarios" method="post" action="{{route('update', ['evento' => $evento])}}"> | ||||
|                                 @csrf | ||||
|                                 <div class="horario-container"> | ||||
|                                     <div class="columna1"> | ||||
|                                         <input required name="horario[]dia" type="text" class="formulario dia"> | ||||
|                                         <input required name="dia[]" type="text" class="formulario dia"> | ||||
|                                         <div class="horas"> | ||||
|                                             <div> | ||||
|                                                 <input required name="horario[]llegada" type="time" class="formulario hora"> | ||||
|                                                 <input required name="horario[]salida" type="time" class="formulario hora"> | ||||
|                                                 <input required name="llegada[]" type="time" class="formulario hora"> | ||||
|                                                 <input required name="salida[]" type="time" class="formulario hora"> | ||||
|                                             </div> | ||||
|                                         </div> | ||||
|                                     </div> | ||||
|  |  | |||
							
								
								
									
										62
									
								
								resources/views/resultado.blade.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								resources/views/resultado.blade.php
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,62 @@ | |||
| <!DOCTYPE html> | ||||
| <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> | ||||
| <head> | ||||
|     <meta charset="utf-8"> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| 
 | ||||
|     <title>Planifibot</title> | ||||
| 
 | ||||
|     <!-- Fonts --> | ||||
|     <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap" rel="stylesheet"> | ||||
|     <link href='css/welcome.css' rel="stylesheet"> | ||||
| 
 | ||||
|     <!-- Styles --> | ||||
|     <style> | ||||
|         /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ | ||||
|         html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}a{background-color:transparent}[hidden]{display:none}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{box-sizing:border-box;border:0 solid #e2e8f0}a{color:inherit;text-decoration:inherit}svg,video{display:block;vertical-align:middle}video{max-width:100%;height:auto}.bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.border-t{border-top-width:1px}.flex{display:flex}.grid{display:grid}.hidden{display:none}.items-center{align-items:center}.justify-center{justify-content:center}.font-semibold{font-weight:600}.h-5{height:1.25rem}.h-8{height:2rem}.h-16{height:4rem}.text-sm{font-size:.875rem}.text-lg{font-size:1.125rem}.leading-7{line-height:1.75rem}.mx-auto{margin-left:auto;margin-right:auto}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.ml-2{margin-left:.5rem}.mt-4{margin-top:1rem}.ml-4{margin-left:1rem}.mt-8{margin-top:2rem}.ml-12{margin-left:3rem}.-mt-px{margin-top:-1px}.max-w-6xl{max-width:72rem}.min-h-screen{min-height:100vh}.overflow-hidden{overflow:hidden}.p-6{padding:1.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.pt-8{padding-top:2rem}.fixed{position:fixed}.relative{position:relative}.top-0{top:0}.right-0{right:0}.shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.text-center{text-align:center}.text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.underline{text-decoration:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.w-5{width:1.25rem}.w-8{width:2rem}.w-auto{width:auto}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width:640px){.sm\:rounded-lg{border-radius:.5rem}.sm\:block{display:block}.sm\:items-center{align-items:center}.sm\:justify-start{justify-content:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:h-20{height:5rem}.sm\:ml-0{margin-left:0}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pt-0{padding-top:0}.sm\:text-left{text-align:left}.sm\:text-right{text-align:right}}@media (min-width:768px){.md\:border-t-0{border-top-width:0}.md\:border-l{border-left-width:1px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1024px){.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (prefers-color-scheme:dark){.dark\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.dark\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.dark\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.dark\:text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.dark\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}}
 | ||||
|     </style> | ||||
| 
 | ||||
|     <style> | ||||
|         body { | ||||
|             font-family: 'Nunito', sans-serif; | ||||
|         } | ||||
|     </style> | ||||
| </head> | ||||
| <body class="antialiased"> | ||||
| <div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center py-4 sm:pt-0"> | ||||
|     @if (Route::has('login')) | ||||
|         <div class="hidden fixed top-0 right-0 px-6 py-4 sm:block"> | ||||
|             @auth | ||||
|                 <a href="{{ url('/home') }}" class="text-sm text-gray-700 underline">Home</a> | ||||
|             @else | ||||
|                 <a href="{{ route('login') }}" class="text-sm text-gray-700 underline">Log in</a> | ||||
| 
 | ||||
|                 @if (Route::has('register')) | ||||
|                     <a href="{{ route('register') }}" class="ml-4 text-sm text-gray-700 underline">Register</a> | ||||
|                 @endif | ||||
|             @endauth | ||||
|         </div> | ||||
|     @endif | ||||
| 
 | ||||
|     <div class="max-w-6xl mx-auto sm:px-6 lg:px-8"> | ||||
|         <div class="flex justify-center pt-8 sm:justify-start sm:pt-0"> | ||||
|             <img id= "logo" src="assets/logoMPS.png" alt="Mercado Popular de Subsitencia"> | ||||
|         </div> | ||||
| 
 | ||||
|         <div class="mt-8 bg-white dark:bg-gray-800 overflow-hidden shadow sm:rounded-lg"> | ||||
|             <div class="grid grid-cols-1 md:grid-cols-2"> | ||||
|                 <div class="p-6"> | ||||
| 
 | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
| 
 | ||||
|         <div class="flex justify-center mt-4 sm:items-center sm:justify-between"> | ||||
|             <div class="ml-4 text-center text-sm text-gray-500 sm:text-right sm:ml-0"> | ||||
|                 Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
		Loading…
	
	Add table
		
		Reference in a new issue