154 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Http\Controllers;
 | 
						|
 | 
						|
use App\Models\Dia;
 | 
						|
use App\Models\Evento;
 | 
						|
use App\Models\HoraFlag;
 | 
						|
use App\Models\Utils;
 | 
						|
use Illuminate\Contracts\Foundation\Application;
 | 
						|
use Illuminate\Contracts\View\Factory;
 | 
						|
use Illuminate\Contracts\View\View;
 | 
						|
use Illuminate\Http\RedirectResponse;
 | 
						|
use Illuminate\Http\Request;
 | 
						|
use Illuminate\Http\Response;
 | 
						|
 | 
						|
class EventoController extends Controller
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Display a listing of the resource.
 | 
						|
     *
 | 
						|
     * @return Response
 | 
						|
     */
 | 
						|
    public function index()
 | 
						|
    {
 | 
						|
        //
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Show the form for creating a new resource.
 | 
						|
     *
 | 
						|
     * @return Response
 | 
						|
     */
 | 
						|
    public function create()
 | 
						|
    {
 | 
						|
        //
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Store a newly created resource in storage.
 | 
						|
     *
 | 
						|
     * @param Request $request
 | 
						|
     * @return RedirectResponse
 | 
						|
     */
 | 
						|
    public function store(Request $request)
 | 
						|
    {
 | 
						|
        $request->validate([
 | 
						|
            'nombre' => 'required'
 | 
						|
        ]);
 | 
						|
        $evento = new Evento();
 | 
						|
        $evento->nombre = $request->input("nombre");
 | 
						|
        $evento->setSlug();
 | 
						|
        $evento->save();
 | 
						|
        return redirect()->route("edit", ['evento' => $evento]);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Display the specified resource.
 | 
						|
     *
 | 
						|
     * @param Evento $evento
 | 
						|
     * @return Application|Factory|View|Response
 | 
						|
     */
 | 
						|
    public function show(Evento $evento)
 | 
						|
    {
 | 
						|
        // evento->coordinar devuelve los tres mejores marzullos de los días que tiene asociados
 | 
						|
        // dia->marzullo devuelve array de
 | 
						|
            // [dia::string, cantidad::integer, inicio::integer, fin::integer, duracion::integer
 | 
						|
                // inicioLindo::string, finLindo::string, duracionLinda::string]
 | 
						|
        $marzullos = $evento->coordinar();
 | 
						|
        return view("resultado", ['marzullos' => $marzullos, 'evento' => $evento]);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Show the form for editing the specified resource.
 | 
						|
     *
 | 
						|
     * @param Evento $evento
 | 
						|
     * @return Application|Factory|View|Response
 | 
						|
     */
 | 
						|
    public function edit(Evento $evento) {
 | 
						|
        return view("edit", ['evento' => $evento]);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Update the specified resource in storage.
 | 
						|
     *
 | 
						|
     * @param Request $request
 | 
						|
     * @param Evento $evento
 | 
						|
     * @return RedirectResponse
 | 
						|
     */
 | 
						|
    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 redirect()->route("show", ['evento' => $evento]);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Remove the specified resource from storage.
 | 
						|
     *
 | 
						|
     * @param Evento $evento
 | 
						|
     * @return Response
 | 
						|
     */
 | 
						|
    public function destroy(Evento $evento)
 | 
						|
    {
 | 
						|
        //
 | 
						|
    }
 | 
						|
 | 
						|
    public function mostrarResultado(Request $request)
 | 
						|
    {
 | 
						|
        return redirect()->route('show',['evento' => Evento::find($request->id)]);
 | 
						|
    }
 | 
						|
}
 |