/**
  * Update the specified resource in storage.
  *
  * @param  App\Http\Requests\cities\calles\UpdateCalleRequest $request
  * @param  int  $id
  * @return \Illuminate\Http\Response
  */
 public function update(UpdateTorneoRequest $request, $id)
 {
     $result["result"] = "Error";
     $result["response"] = "Error: ";
     $result = DB::transaction(function () use($request, $id, $result) {
         $torneo = Torneo::findOrFail($id);
         $torneo->fill($request->all());
         //$torneo->save();
         $partidos = Partido::with('fecha')->whereHas('fecha', function ($q) use($id) {
             $q->where('torneo_id', $id);
         })->whereIn('estado_id', [3, 4, 5, 6])->get();
         if ($partidos->count()) {
             return $result["result"] = "ERROR: Fechas empezadas";
         }
         /*
                         $fecha = TorneoFecha::where("torneo_id",$id)->forceDelete();
                         $fases  = TorneoFase::where("torneo_id",$id)->get();
                         foreach ($fases as $fase) {
                             $grupos = TorneoGrupo::where("fase_id",$fase->id)->get();
                             foreach ($grupos as $grupo) {
                                 $torneo_grupos = TorneoGrupoClub::where("grupo_id",$fase->id)->forceDelete();
                             }
                             $grupos->forceDelete();
                         }
                         $fases->forceDelete();*/
         $torneos_clubes_ant = TorneoClub::whereHas('torneo_grupos', function ($q = '') {
             $q->whereHas('torneo_grupo', function ($subq) {
                 $subq->where("fase_id", 1);
             });
         })->where("torneo_id", $id)->get();
         $cant_grupos = $request->get("cant_grupos");
         $equipos_nuevos = [];
         for ($i = 1; $i <= $cant_grupos; $i++) {
             $equipos_nuevos = array_merge($equipos_nuevos, $request->get("grupo_" . $i));
         }
         $torneos_clubes_diff = $torneos_clubes_ant->filter(function ($item) use(&$equipos_nuevos) {
             $esta = in_array($item->club_id, $equipos_nuevos);
             if ($esta) {
                 $pos = array_search($item->club_id, $equipos_nuevos);
                 unset($equipos_nuevos[$pos]);
             }
             return !$esta;
         });
         if (sizeof($torneos_clubes_diff)) {
             $equipos_grupo = [];
             for ($i = 1; $i <= $cant_grupos; $i++) {
                 $equipos_grupo = $request->get("grupo_" . $i);
                 $grupos_clubes = TorneoGrupoClub::whereIn("torneo_club_id", $torneos_clubes_diff->pluck('id'))->where("grupo_id", $i)->get();
                 if ($grupos_clubes->count()) {
                     foreach ($grupos_clubes as $grupo_club) {
                         if (sizeof($equipos_grupo)) {
                             $club_cambio = sizeof($equipos_grupo) - 1;
                             //dd("Sale: ".$grupo_club->torneo_club->club_id."  - Entra: ".$equipos_grupo[$club_cambio]);
                             /*$partido_plantel = PartidoPlantel::with("club")->where("club",function ($q) use ($grupo_club){
                                                                     
                                                                     $q->where("club_id",$grupo_club->id);
                             
                                                                 })->get();*/
                             $partido_plantel = PartidoPlantel::with("club")->select('partidos_planteles.*')->join('partidos_clubes', 'partidos_clubes.id', '=', 'partidos_planteles.club_id')->join('torneos_grupos_clubes', 'torneos_grupos_clubes.id', '=', 'partidos_clubes.club_id')->where('torneos_grupos_clubes.id', $grupo_club->id)->get();
                             /*->where("club",function ($q) use ($grupo_club){
                                                                     
                                                                     $q->where("club_id",$grupo_club->id);
                             
                                                                 })->get();*/
                             if ($partido_plantel->count()) {
                                 foreach ($partido_plantel as $pp) {
                                     $pp->forceDelete();
                                 }
                             }
                             $torneo_plantel = TorneoPlantel::where("torneo_club_id", $grupo_club->club_id)->get();
                             if ($torneo_plantel->count()) {
                                 foreach ($torneo_plantel as $tp) {
                                     // Si No esta en otro Torneo en la misma Temporada, lo borro de temporada plantel
                                     $otro_torneo_plantel = TorneoPlantel::where("jugador_id", $tp->jugador_id)->get();
                                     if (!$otro_torneo_plantel->count()) {
                                         $temporada_plantel = TemporadaPlantel::where("id", $tp->jugador_id)->first()->forceDelete();
                                     }
                                     $tp->forceDelete();
                                 }
                             }
                             $grupo_club->torneo_club->club_id = $equipos_grupo[$club_cambio];
                             $grupo_club->torneo_club->save();
                             unset($equipos_grupo[$club_cambio]);
                         }
                     }
                 }
             }
         } else {
             $result["response"] = "No se realizarion cambios";
         }
         $result["result"] = "Ok";
         $result["response"] = "";
         return $result;
     });
     if ($result["result"] == "Ok") {
         $result["response_data"] = ["redirect" => route('seasons.torneos.show', $id)];
     }
     return response()->json($result);
     //return \Redirect::route('seasons.torneos.show',$id);
 }
 public function save()
 {
     $result = DB::transaction(function () {
         $result = array("result" => '', 'response' => '');
         $result["result"] = 'nothing2do';
         //respuesta para el resultado por defecto si no debo realizar ningun cambio
         $equipo = Input::get("e");
         //arreglo de id de socios
         $torneo_id = Input::get("torneo_id");
         //id del torneo
         $torneo_club_id = Input::get("t");
         //torneo_club_id
         $torneo_club = TorneoClub::where('id', $torneo_club_id)->first();
         $tr = new Trayectoria();
         $jugadores_actuales = [];
         $plantel = [];
         $i = 0;
         // ==================
         $director_tecnico = TorneoTecnico::where('torneo_club_id', $torneo_club->id)->get();
         foreach ($director_tecnico as $tecnico) {
             $tecnico->forceDelete();
         }
         $dt = Input::get("dt");
         $socio_dt = Socio::where('id', $dt)->first();
         if ($socio_dt) {
             $director_tecnico = TorneoTecnico::firstOrNew(['tecnico_id' => $dt, 'torneo_club_id' => $torneo_club->id]);
             $director_tecnico->save();
         }
         // ==================
         //$trayectoria_club =  $tr::where('club_id',$torneo_club->club_id)->whereNull('baja')->select('socio_id')->get();
         $jugadores_club_categoria = TorneoPlantel::with('jugador.jugador')->select('torneos_planteles.*')->join('temporadas_planteles', 'torneos_planteles.jugador_id', '=', 'temporadas_planteles.id')->join('torneos_clubes', 'torneos_planteles.torneo_club_id', '=', 'torneos_clubes.id')->join('socios', 'socios.id', '=', 'temporadas_planteles.jugador_id')->where('torneos_planteles.torneo_club_id', $torneo_club_id)->get();
         $habia_jugadores = count($jugadores_club_categoria);
         if ($habia_jugadores) {
             foreach ($jugadores_club_categoria as $p) {
                 $jugadores_actuales[] = $p->jugador->jugador_id;
             }
             $i = array_intersect($jugadores_actuales, $equipo);
             //Interseccion de jugadores cargados y seleccionados
             $insertar = array_diff($equipo, $i);
             //SOCIOS a insertar en la tabla
             $remover = array_diff($jugadores_actuales, $i);
             //SOCIOS a remover de la tabla
         } else {
             $insertar = $equipo;
         }
         $torneo = Torneo::where("id", $torneo_id)->first();
         if (isset($remover)) {
             foreach ($remover as $p) {
                 //elimino los jugadores que fueron removidos de la interface.
                 /*
                 $result = $tr::where('socio_id', $p)->whereNull('baja')->first();        
                 $result->forceDelete();
                 */
                 $jugador_temporada = TemporadaPlantel::where('temporada_id', $torneo->temporada_id)->where('jugador_id', $p)->first();
                 $jugador_torneo = TorneoPlantel::where('jugador_id', $jugador_temporada->id)->where('torneo_club_id', $torneo_club->id)->first();
                 if ($jugador_torneo) {
                     $jugador_torneo->forceDelete();
                 }
                 if ($jugador_temporada) {
                     $jugador_temporada->forceDelete();
                 }
                 //$result =  DB::table('trayectorias')->where('socio_id', $p)->softDeletes();
             }
         }
         if (count($insertar)) {
             foreach ($insertar as $p) {
                 //creo el arreglo asociativo de los nuevos jugadores
                 $plantel[] = array('alta' => date("Y-m-d"), 'alta_tipo' => 1, 'socio_id' => $p, 'club_id' => $torneo_club->club_id);
                 $jugador_temporada = TemporadaPlantel::firstOrNew(['temporada_id' => $torneo->temporada_id, 'jugador_id' => $p]);
                 $jugador_temporada->save();
                 $jugador_torneo = TorneoPlantel::firstOrNew(['jugador_id' => $jugador_temporada->id, 'torneo_club_id' => $torneo_club->id]);
                 $jugador_torneo->save();
             }
         }
         $result_ldbf = ($jugador_temporada and $jugador_torneo);
         // $result_trayectoria = (count($plantel)) ? DB::table('trayectorias')->insert($plantel) : true;         //inserto los socios o si solo removi devuelvo verdadero
         if ($result_ldbf) {
             $result["result"] = "Ok";
             $result["response"] = $result_ldbf;
         } else {
             $result["result"] = "Error";
             if ($jugador_temporada) {
                 $error = '***Error al agregar a la temporada***';
             }
             if ($jugador_torneo) {
                 $error = '***Error al agregar al torneo***';
             }
             $result["response"] = $error;
         }
         $this->jugadores_compartidos($torneo_club, $torneo);
         return $result;
     });
     return response()->json($result);
 }
 /**
  * Update the specified resource in storage.
  *
  * @param  App\Http\Requests\cities\calles\UpdateCalleRequest $request
  * @param  int  $id
  * @return \Illuminate\Http\Response
  */
 public function update(Request $request)
 {
     $result["result"] = "Error";
     $id = Input::get("id");
     $suspension = Input::get("suspension");
     if ($id != null) {
         $suspension_model = Suspension::findOrFail($id);
         $suspension_model->update($suspension);
         if ($suspension_model->estado_suspension == 4) {
             //if ($suspension_model->)
         }
         $suspension_model = Suspension::with('socio')->with('estado')->with('evento.tipo_evento')->with('tipo')->findOrFail($id);
         $temporada_id = $suspension["temporada_id"];
         if ($suspension_model->tipo->id != 2 && $temporada_id != null) {
             $temporada_plantel = TemporadaPlantel::where("jugador_id", $suspension_model->socio->id)->where("temporada_id", $temporada_id)->first();
             if ($temporada_plantel != null) {
                 $suspension_model->temporada_plantel = $temporada_plantel;
             }
         }
         $suspension_model->tiempo_restante = $suspension_model->tiempo_restante;
         $result["result"] = "Ok";
         $result["response"] = $suspension_model;
     }
     return $result;
 }
 public function SeedPlantillas()
 {
     DB::transaction(function () {
         $socios = Socio::all();
         $socios_cant = $socios->count();
         $socios_temporada_cant = 0;
         $torneo = Torneo::with('temporada')->with('division.categoria.genero')->with('fases.grupos.clubes.torneo_club.club')->with('fechas.partidos.clubes.torneo_grupo_club.torneo_grupo.fase')->with('fechas.partidos.clubes.torneo_grupo_club.torneo_club.club')->with('clubes.jugadores')->with('clubes.club')->findOrFail(1);
         $cant_jugadores = 20;
         $torneo_clubes = $torneo->clubes;
         foreach ($torneo_clubes as $torneo_club) {
             for ($i = 0; $i < $cant_jugadores and $socios_temporada_cant < $socios_cant; $i++) {
                 $encontre = 0;
                 while (!$encontre) {
                     $socio = $socios->random();
                     $encontre = !$socio->participoEnTorneo($torneo->id);
                 }
                 $trayectoria = new Trayectoria();
                 $trayectoria->socio_id = $socio->id;
                 $trayectoria->club_id = $torneo_club->club->id;
                 $trayectoria->save();
                 $temporada_plantel = new TemporadaPlantel();
                 $temporada_plantel->jugador_id = $socio->id;
                 $temporada_plantel->temporada_id = $torneo_club->torneo->temporada->id;
                 $temporada_plantel->save();
                 $torneo_plantel = new TorneoPlantel();
                 $torneo_plantel->jugador_id = $temporada_plantel->id;
                 $torneo_plantel->torneo_club_id = $torneo_club->id;
                 $torneo_plantel->save();
                 /*DB::table('trayectorias')->insert(array(
                                         array (
                                             "socio_id"  => $socio->id,
                                             "club_id"   => $torneo_club->club->id,
                                         ),
                                     ));
                 
                                     DB::table('temporadas_planteles')->insert(array(
                                         array (
                                             "id"            => $temporadas_plantel_id,
                                             "jugador_id"    => $socio_id,
                                             "temporada_id"  => 1,
                                         )
                                     ));
                 
                                     DB::table('torneos_planteles')->insert(array(
                                         array (
                                             "id" => $torneos_plantele_id,
                                             "jugador_id" => $temporadas_plantel_id,
                                             "torneo_club_id" => $club_torneo,
                                         )
                                     ));*/
             }
         }
     });
 }