diff --git a/app/File_attachment.php b/app/File_attachment.php new file mode 100644 index 0000000..2db43fc --- /dev/null +++ b/app/File_attachment.php @@ -0,0 +1,16 @@ +<?php + +namespace App; + +use Illuminate\Database\Eloquent\Model; + +class File_attachment extends Model +{ + protected $table = "file_attachments"; + + protected $fillable = ["filename", "rubro_id", "periodo", "activo"]; + + public function rubro(){ + return $this->belongsTo('App\Rubro'); + } +} diff --git a/app/Http/Controllers/FichasController.php b/app/Http/Controllers/FichasController.php index a5da318..018feed 100644 --- a/app/Http/Controllers/FichasController.php +++ b/app/Http/Controllers/FichasController.php @@ -7,25 +7,22 @@ use App\Ficha_dato; use App\Cabecera_encuesta; use App\Rubro; +use App\Traits\PeriodosTrait; use flash; class FichasController extends Controller { + use PeriodosTrait; + public function index(){ - dd("holo"); $dbData = Ficha_dato::get(); return view('fichas.list')->with('dbData', $dbData); } public function create(){ - $periodos = Cabecera_encuesta::get(); - $periodos = $periodos->map(function($item){ - $rubro = $item->rubro->descripcion; - $periodo = $item->periodo; - $item['periodo_combo'] = $periodo.' - '.$rubro; - return $item; - })->unique('periodo')->pluck('periodo_combo', 'periodo'); - $rubros = Rubro::all()->pluck('descripcion', 'id'); + $rubro = Rubro::first()->id; + $periodos = $this->getPeriodos($rubro); + $rubros = $this->getRubros(); return view('fichas.create')->with('periodos', $periodos) ->with('rubros', $rubros); } @@ -43,25 +40,21 @@ public function show($id) } public function edit($id){ - $dbData = Cargo::find($id); - $dbNivel = Nivel::all()->pluck('descripcion', 'id'); - $dbArea = Area::all()->pluck('descripcion', 'id'); - return view('cargos.edit')->with('dbData', $dbData) - ->with('dbNivel', $dbNivel) - ->with('dbArea', $dbArea); + $dbData = Ficha_dato::find($id); + $rubro = Rubro::get()->first()->id; + $periodos = $this->getPeriodos($rubro); + $rubros = $this->getRubros(); + return view('fichas.create')->with('dbData', $dbData) + ->with('periodos', $periodos) + ->with('rubros', $rubros); } public function update(Request $request, $id){ - $dbData = Cargo::find($id); - $dbData->fill($request->all()); - if(!is_null($request->is_temporal)){ - $dbData->is_temporal = 1; - }else{ - $dbData->is_temporal = 0; - } + $dbData = new Ficha_dato($request->all()); + $dbData->save(); - return redirect()->route('cargos.index'); + return redirect()->route('admin_ficha.index'); } public function destroy($id){ diff --git a/app/Http/Controllers/FileAttachmentController.php b/app/Http/Controllers/FileAttachmentController.php new file mode 100644 index 0000000..ceb5805 --- /dev/null +++ b/app/Http/Controllers/FileAttachmentController.php @@ -0,0 +1,128 @@ +<?php + +namespace App\Http\Controllers; + +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Schema; +use App\Cabecera_encuesta; +use App\Encuestas_cargo; +use App\Detalle_encuesta; +use App\Cargos_rubro; +use App\Empresa; +use App\Nivel; +use App\Cargo; +use App\Rubro; +use App\User; +use App\File_attachment; +use App\Traits\PeriodosTrait; +use Hash; +use DB; +use Auth; +use Excel; +use Session; +use Validator; + +class FileAttachmentController extends Controller +{ + use PeriodosTrait; + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + $rubros = $this->getRubros(); + // recuperamos todos los rubros + $rubro = Rubro::all()->first()->id; + $periodos = $this->getPeriodos($rubro); + // Si terminó de subir el archivo mostramos el toast correspondiente + $toast = session('upload_done'); + if($toast){ + session()->forget('upload_done'); + } + $errorUploading = session('upload_nok'); + if($errorUploading){ + session()->forget('upload_nok'); + } + + return view('file_attachment.index')->with('periodos', $periodos) + ->with('rubros', $rubros) + ->with('toast', $toast) + ->with('errorUploading', $errorUploading); + } + + + public function download(){ + $empresa = Auth::user()->empresa; + $id = $empresa->id; + if(Session::has('periodo')){ + $per = Session::get('periodo'); + $dbEncuesta = Cabecera_encuesta::where('empresa_id', $id)->whereRaw("periodo = '". $per."'")->first(); + }else{ + $dbEncuesta = Cabecera_encuesta::where('empresa_id', $id)->whereRaw('id = (select max(id) from cabecera_encuestas where empresa_id = '. $id.')')->first(); + } + $rubro = $empresa->rubro_id; + $periodo = $dbEncuesta->periodo; + $dbFile = File_attachment::where('rubro_id', $rubro)->where('periodo', $periodo)->first(); + if($dbFile){ + $filename = $dbFile->filename; + try{ + return response()->download(storage_path('app/public/uploads/'.$filename), $filename, []); + }catch(\Exception $exception){ + return view('file_attachment.notfound'); + } + + }else{ + return view('file_attachment.notfound'); + } + } + + public function upload(Request $request){ + //dd($request->all()); + // recuperamos el archivo + $file = $request->file('file'); + // validación + $rules = array( 'file' => 'required|mimes:xls,xlsx,pdf'); + $messages = array( 'file.required' => 'No se especificó ningún archivo para subir', + 'file.mimes' => 'El tipo de archivo no es correcto'); + + $validator = Validator::make($request->all(), $rules, $messages); + + if($validator->passes()){ + $filename = $file->getClientOriginalName(); + $rubro = $request->rubro_id; + $periodo = $request->periodo; + try{ + $file->storeAs('public/uploads', $filename); + $dbData = File_attachment::where('rubro_id', $rubro)->where('periodo', $periodo)->first(); + if(!$dbData){ + $dbData = new File_attachment(); + } + $dbData->rubro_id = $rubro; + $dbData->filename = $filename; + $dbData->periodo = $periodo; + $dbData->activo = 1; + $dbData->save(); + }catch(\Exception $exception){ + session(['upload_nok'=>'true']); + redirect()->back()->withInput(); + } + + }else{ + session(['upload_nok'=>'true']); + redirect()->back()->withInput(); + } + session(['upload_done'=>'true']); + return redirect()->route('file_attachment'); + + } + + public function getPeriodosAjax(Request $request){ + + $periodos = $this->getPeriodos($request->rubro_id); + + return $periodos; + } + +} diff --git a/app/Http/Controllers/ReporteController.php b/app/Http/Controllers/ReporteController.php index 022635c..49d6e8f 100644 --- a/app/Http/Controllers/ReporteController.php +++ b/app/Http/Controllers/ReporteController.php @@ -9,6 +9,7 @@ use App\Detalle_encuesta; use App\Cargos_rubro; use App\Empresa; +use App\Ficha_dato; use App\Nivel; use App\Cargo; use App\Rubro; @@ -230,21 +231,28 @@ public function ficha($id){ $dbEncuesta = Cabecera_encuesta::where('empresa_id', $id)->whereRaw('id = (select max(id) from cabecera_encuestas where empresa_id = '. $id.')')->first(); } $cargos = Encuestas_cargo::where('cabecera_encuesta_id', $dbEncuesta->id)->get()->count(); - if ($rubro == 4){ - if($per == "12/2016"){ - $cargos = 160; - }else{ - $cargos = 174; + $periodo = $dbEncuesta->periodo; + $dbFicha = Ficha_dato::where('rubro_id', $rubro)->where('periodo', $periodo)->first(); + if($dbFicha){ + $cargos = $dbFicha->cargos_emergentes; + $tipoCambio = $dbFicha = $dbFicha->tipo_cambio; + }else{ + if ($rubro == 4){ + if($per == "12/2016"){ + $cargos = 160; + }else{ + $cargos = 174; + } + }elseif($rubro == 1){ + $cargos = 400; + }elseif($rubro == 2){ + $cargos = 172; + }elseif($rubro == 3){ + $cargos = 175; } - }elseif($rubro == 1){ - $cargos = 400; - }elseif($rubro == 2){ - $cargos = 172; - }elseif($rubro == 3){ - $cargos = 175; + $tipoCambio = 5600; } - $periodo = $dbEncuesta->periodo; $participantes = Cabecera_encuesta::where('periodo', $periodo)->where('rubro_id', $rubro)->get(); $participantes = $participantes->map(function($item){ @@ -260,6 +268,7 @@ public function ficha($id){ ->with('cargos', $cargos) ->with('periodo', $periodo) ->with('club', $club) + ->with('tipoCambio', $tipoCambio) ->with('participantes', $participantes); } diff --git a/app/Traits/PeriodosTrait.php b/app/Traits/PeriodosTrait.php new file mode 100644 index 0000000..3ee238e --- /dev/null +++ b/app/Traits/PeriodosTrait.php @@ -0,0 +1,28 @@ +<?php + +namespace App\Traits; + +use App\Rubro; +use App\Cabecera_encuesta; + +trait PeriodosTrait{ + public function getRubros(){ + // recuperamos todos los rubros + $rubros = Rubro::all()->pluck('descripcion', 'id'); + return $rubros; + } + + public function getPeriodos($id){ + // recuperamos todas las encuestas del primer rubro recuperado + $periodos = Cabecera_encuesta::where('rubro_id', $id)->get(); + // filtramos los periodos para el primer rubro recuperado + $periodos = $periodos->map(function($item){ + $rubro = $item->rubro->descripcion; + $periodo = $item->periodo; + $item['periodo_combo'] = $periodo.' - '.$rubro; + return $item; + })->unique('periodo')->pluck('periodo_combo', 'periodo'); + + return $periodos; + } +} \ No newline at end of file diff --git a/database/migrations/2018_09_12_160252_create_file_attachment_table.php b/database/migrations/2018_09_12_160252_create_file_attachment_table.php new file mode 100644 index 0000000..7f1c317 --- /dev/null +++ b/database/migrations/2018_09_12_160252_create_file_attachment_table.php @@ -0,0 +1,41 @@ +<?php + +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Database\Migrations\Migration; + +class CreateFileAttachmentTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('file_attachments', function(Blueprint $table){ + $table->increments('id'); + $table->integer('rubro_id')->unsigned(); + $table->string('periodo'); + $table->string('filename'); + $table->integer('activo'); + $table->timestamps(); + + $table->foreign('rubro_id') + ->references('id') + ->on('rubros') + ->onDelete('restrict') + ->onUpdate('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/resources/views/fichas/create.blade.php b/resources/views/fichas/create.blade.php index 852e840..01f1bb5 100644 --- a/resources/views/fichas/create.blade.php +++ b/resources/views/fichas/create.blade.php @@ -10,7 +10,6 @@ <div class="row"> <div class="input-field col s6"> <select id="rubro_id" name="rubro_id"> - <option>Elija una opción</option> @foreach($rubros as $id => $descripcion) <option value = {{$id}}>{{$descripcion}}</option> @endforeach @@ -19,7 +18,6 @@ </div> <div class="input-field col s6"> <select id="periodo" name="periodo"> - <option>Elija una opción</option> @foreach($periodos as $id => $descripcion) <option value = {{$id}}>{{$descripcion}}</option> @endforeach @@ -67,6 +65,25 @@ });*/ }); + $("#rubro_id").change(function(){ + var selectPeriodo = $("#periodo"); + var rubroId = $(this).val(); + selectPeriodo.empty(); + $.post('{{route('file_attachment.periodos')}}', {"rubro_id": rubroId, "_token": "{{csrf_token()}}"}, + function(json){ + var data = $.map(json, function(text, id){ + return {text:text, id:id}; + }); + for(i = 0; i < data.length; i++){ + selectPeriodo.append( + $("<option></option>").attr("value", data[i].id) + .text(data[i].text)); + } + + $("select").select2(); + } + ); + }); </script> diff --git a/resources/views/fichas/edit.blade.php b/resources/views/fichas/edit.blade.php index 169e20d..c522c83 100644 --- a/resources/views/fichas/edit.blade.php +++ b/resources/views/fichas/edit.blade.php @@ -7,57 +7,44 @@ </div> <div class="content"> <form class="col s12" action="{{route('cargos.update', $dbData->id)}}" method="POST"> - <div class="row"> - <div class="input-field col s12"> - <input id="descripcion" type="text" class="validate" name="descripcion" value="{{$dbData->descripcion}}" > - <label for="nombres">Descripción</label> - </div> - </div> <div class="row"> <div class="input-field col s6"> - <select id="area_id" name="area_id"> - <option>Elija una opción</option> - @foreach($dbArea as $id => $descripcion) - @if($id == $dbData->area_id) + <select id="rubro_id" name="rubro_id"> + @foreach($rubros as $id => $descripcion) + @if ($id == $dbData->rubro_id) <option value = {{$id}} selected>{{$descripcion}}</option> @else - <option value = {{$id}}>{{$descripcion}}</option> - @endif - + <option value = {{$id}}>{{$descripcion}}</option> + @endif + @endforeach </select> - <label for="rubro_id">Area</label> + <label for="rubro_id" class="active">Rubro</label> </div> <div class="input-field col s6"> - <select id="nivel_id" name="nivel_id"> - <option>Elija una opción</option> - @foreach($dbNivel as $id => $descripcion) - @if($id == $dbData->nivel_id) + <select id="periodo" name="periodo"> + @foreach($periodos as $id => $descripcion) + @if ($id == $dbData->periodo) <option value = {{$id}} selected>{{$descripcion}}</option> @else - <option value = {{$id}}>{{$descripcion}}</option> - @endif - + <option value = {{$id}}>{{$descripcion}}</option> + @endif @endforeach </select> - <label for="nivel_id">Nivel</label> + <label for="periodo" class="active">Periodo</label> </div> </div> <div class="row"> - <div class="input-field"> - <label for="detalle" id="label-detalle">Descripción del Cargo</label> - <textarea name="detalle" id="detalle" class="materialize-textarea">{{$dbData->detalle}}</textarea> + <div class="input-field col s6"> + <label for="cargos_emergentes" id="cargos_emergentes">Cargos Emergentes</label> + <input type="number" name="cargos_emergentes" id="cargos_emergentes" class="validate"/> + </div> + + <div class="input-field col s6"> + <label for="tipo_cambio" id="tipo_cambio">Tipo de Cambio</label> + <input type="text" name="tipo_cambio" id="tipo_cambio" class="validate"/> </div> </div> - <div class="row"> - @if ($dbData->is_temporal == "1") - <input name="is_temporal" id="is_temporal" checked="checked" type="checkbox" class="with-gap" /> - <label for="is_temporal">Temporal</label> - @else - <input name="is_temporal" id="is_temporal" type="checkbox" class="with-gap" /> - <label for="is_temporal">Temporal</label> - @endif - </div> <input type="hidden" name="_token" value="{{{ csrf_token() }}}" /> {{ method_field('PUT') }} <button class="btn waves-effect waves-light" type="submit" name="submit">Guardar diff --git a/resources/views/file_attachment/index.blade.php b/resources/views/file_attachment/index.blade.php new file mode 100644 index 0000000..c7b459e --- /dev/null +++ b/resources/views/file_attachment/index.blade.php @@ -0,0 +1,93 @@ +@extends('layout') +@section('content') + <div class="row"> + <div class="browser-window"> + <div class="top-bar"> + <h4>Subir Archivo</h4> + </div> + <div class="content"> + <form action="{{route('file_attachment.upload')}}" method="POST" id="upload_form" enctype="multipart/form-data"> + <div class="row"> + <div class="input-field col s6"> + <select id="rubro_id" name="rubro_id"> + @foreach($rubros as $id => $descripcion) + <option value = {{$id}}>{{$descripcion}}</option> + @endforeach + </select> + <label for="rubro_id" class="active">Rubro</label> + </div> + <div class="input-field col s6"> + <select id="periodo" name="periodo"> + @foreach($periodos as $id => $descripcion) + <option value = {{$id}}>{{$descripcion}}</option> + @endforeach + </select> + <label for="periodo" class="active">Periodo</label> + </div> + <div class="file-field input-field col s6"> + <div class="btn"> + <span>Archivo<i class="material-icons left">attach_file</i></span> + <input type="file" name="file"> + </div> + <div class="file-path-wrapper"> + <input class="file-path validate" type="text"> + <input type="hidden" name="_token" value="{{{ csrf_token() }}}" /> + </div> + </div> + </div> + <div class="row"> + <button class="btn waves-effect waves-light" type="submit" name="submit_up" id="btn_up">Subir + <i class="material-icons left">cloud_upload</i> + </button> + </div> + + </form> + </div> + </div> + </div> + + @if($toast) + <div id="toast"></div> + @endif + @if ($errorUploading) + <div id="toast_error"></div> + @endif + +@stop +@push('scripts') + <script type="text/javascript"> + $(function(){ + $("select").select2(); + + }); + + $("#rubro_id").change(function(){ + var selectPeriodo = $("#periodo"); + var rubroId = $(this).val(); + selectPeriodo.empty(); + $.post('{{route('file_attachment.periodos')}}', {"rubro_id": rubroId, "_token": "{{csrf_token()}}"}, + function(json){ + var data = $.map(json, function(text, id){ + return {text:text, id:id}; + }); + for(i = 0; i < data.length; i++){ + selectPeriodo.append( + $("<option></option>").attr("value", data[i].id) + .text(data[i].text)); + } + + $("select").select2(); + } + ); + }); + + if($("#toast").length > 0){ + M.toast({html: 'Archivo Procesado'}); + } + + if($("#toast_error").length > 0){ + M.toast({html: 'Error al subir archivo'}); + } + + </script> +@endpush \ No newline at end of file diff --git a/resources/views/file_attachment/notfound.blade.php b/resources/views/file_attachment/notfound.blade.php new file mode 100644 index 0000000..85985f4 --- /dev/null +++ b/resources/views/file_attachment/notfound.blade.php @@ -0,0 +1,18 @@ +@extends('layout') +@section('content') + <div class="row"> + <div class="col s12 m6 offset-m3"> + <div class="hoverable bordered"> + <div class="card red lighten-2"> + <div class="card-content white-text" style="margin-bottom:2.5em;"> + <span class="card-title"><strong>Lo sentimos...</strong></span> + <p>El archivo solicitado no existe o hubo un error en la descarga.</p> + </div> + <div class="card-action white"> + <a href="{{route('home')}}">Volver al Inicio</a> + </div> + </div> + </div> + </div> + </div> +@stop \ No newline at end of file diff --git a/resources/views/layout.blade.php b/resources/views/layout.blade.php index e5c1610..83ecc36 100644 --- a/resources/views/layout.blade.php +++ b/resources/views/layout.blade.php @@ -45,57 +45,67 @@ </ul> - <nav> + <nav class="nav-extended"> <div class="nav-wrapper teal"> <a href="{{route('home.page')}}" class="brand-logo"><i class="material-icons left">poll</i>S&B</a> @if(Auth::check()) @if(Auth::user()->is_admin) - <ul id="nav-mobile" class="right hide-on-med-and-down"> - <li> - <a href="{{ route('usuarios.index') }}">Usuarios</a> - </li> - <li> - <a href="{{ route('empresas.index') }}">Empresas</a> - </li> - <li> - <a href="{{ route('encuestas.index') }}">Encuestas</a> - </li> - <li> - <a href="{{ route('import_export.index') }}">Importar/Exportar</a> - </li> - <li> - <a href="{{ route('admin_ficha.index') }}">Ficha</a> - </li> - <li> - <a href="{{ route('cargos.index') }}">Cargos Oficiales</a> - </li> - <li> - <a href="#!" class="dropdown-trigger" data-target="dropdown4"> - Resultados - <i class="material-icons right">arrow_drop_down</i> - </a> - </li> - <li> - <a href="#!" class="dropdown-trigger" data-target="dropdown3"> - Beneficios + <div class="row" style="margin-bottom:0px !important;"> + <ul id="nav-mobile" class="right hide-on-med-and-down"> + <li> + <a href="{{ route('usuarios.index') }}">Usuarios</a> + </li> + <li> + <a href="{{ route('empresas.index') }}">Empresas</a> + </li> + <li> + <a href="{{ route('encuestas.index') }}">Encuestas</a> + </li> + <li> + <a href="{{ route('import_export.index') }}">Importar/Exportar</a> + </li> + <li> + <a href="{{ route('admin_ficha.index') }}">Ficha</a> + </li> + <li> + <a href="{{ route('file_attachment') }}">Attachment</a> + </li> + <li> + <a href="{{ route('cargos.index') }}">Cargos Oficiales</a> + </li> + <li> + <a href="#!" class="dropdown-trigger" data-target="dropdown4"> + Resultados <i class="material-icons right">arrow_drop_down</i> </a> - </li> - <li> - <a href="#!" class="dropdown-trigger" data-target="dropdown2"> - <i class="material-icons left">account_circle</i> - {{ Auth::user()->username }} - <i class="material-icons right">arrow_drop_down</i> - </a> - </li> - <li> - <a href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">Logout - </a> - <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;"> - {{ csrf_field() }} - </form> - </li> - </ul> + </li> + <li> + <a href="#!" class="dropdown-trigger" data-target="dropdown3"> + Beneficios + <i class="material-icons right">arrow_drop_down</i> + </a> + </li> + + </ul> + </div> + <div class="row"> + <ul class="right hide-on-med-and-down"> + <li> + <a href="#!" class="dropdown-trigger" data-target="dropdown2"> + <i class="material-icons left">account_circle</i> + {{ Auth::user()->username }} + <i class="material-icons right">arrow_drop_down</i> + </a> + </li> + <li> + <a href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">Logout + </a> + <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;"> + {{ csrf_field() }} + </form> + </li> + </ul> + </div> @elseif(Auth::user()->is_benefit) @yield('nav') @else diff --git a/resources/views/report/ficha.blade.php b/resources/views/report/ficha.blade.php index 5e83728..c0e1503 100644 --- a/resources/views/report/ficha.blade.php +++ b/resources/views/report/ficha.blade.php @@ -26,7 +26,7 @@ <div id="test4"><h1> {{$periodo}} </h1></div> <div id="test5"><h1> {{$cargos}} </h1></div> <div id="test6"><h1> {{$participantes}} </h1></div> - <div id="test7"><h1> Gs. 5.600 </h1></div> + <div id="test7"><h1> Gs. {{ number_format($tipoCambio, 0, ',', '.') }} </h1></div> </div> </div> diff --git a/resources/views/report/layout.blade.php b/resources/views/report/layout.blade.php index 2c55237..f3bebc2 100644 --- a/resources/views/report/layout.blade.php +++ b/resources/views/report/layout.blade.php @@ -42,6 +42,9 @@ <li> <a href="{{ route('reportes.ficha', $dbEmpresa) }}" data-intro="Ficha Técnica" data-step="21">Ficha Técnica</a> </li> + <li> + <a href="{{ route('file_attachment.download') }}">Informe Adjunto</a> + </li> <li> <a href="#!" class="dropdown-trigger" data-target="dropdown1" id="intro-cargos"> Indicadores por Cargo diff --git a/routes/web.php b/routes/web.php index 80e33d2..b9a4f94 100644 --- a/routes/web.php +++ b/routes/web.php @@ -78,6 +78,12 @@ Route::post('import_export/periodos', 'ImportExportController@getPeriodos')->name('import_export.periodos'); Route::resource('import_export', 'ImportExportController'); + //file attachment + Route::get('file_attachment', 'FileAttachmentController@index')->name('file_attachment'); + Route::post('file_attachment/upload', 'FileAttachmentController@upload')->name('file_attachment.upload'); + Route::get('file_attachment/download', 'FileAttachmentController@download')->name('file_attachment.download'); + Route::post('file_attachment/periodos', 'FileAttachmentController@getPeriodosAjax')->name('file_attachment.periodos'); + Route::get('resultados', 'ReporteController@resultados')->name('resultados'); Route::post('resultados_excel', 'ReporteController@resultadosExcel')->name('resultados.excel'); Route::post('periodo', 'ReporteController@setSession')->name('periodo');