/** * Devuelve las fechas cumplidas por algun jugador en el partido. * * @return Collection(SuspensionFechaCumplida) */ public function getFechasCumplidasEnPartidoAttribute() { $fechas_cumplidas_en_partido = SuspensionFechaCumplida::where('partido_id', $this->id)->get(); return $fechas_cumplidas_en_partido; }
/** * Te retorna la suspension activa en dicho partido * * @param int $partido_id :: partido en cuestion * * @return Suspension :: retorna una de las suspensiones activas en dicho partido */ public function suspensionActivaEnPartido($partido_id) { $suspendido = null; $suspensiones = Suspension::where("socio_id", $this->socio_id)->get(); $suspendido = $suspensiones->filter(function ($item) use($partido_id) { $cumplio_fecha_en_partido = SuspensionFechaCumplida::where("partido_id", $partido_id)->where("suspension_id", $item->id)->first(); $vale = 1; if (is_null($cumplio_fecha_en_partido)) { $vale = 0; } return $vale; })->first(); return $suspendido; }
/** * Elimina un mal ingreso. * * @param PartidoMalIngreso $mal_ingreso : mal ingreso a eliminar */ protected function eliminarPartidoMalIngreso($mal_ingreso) { if ($mal_ingreso) { DB::transaction(function () use($mal_ingreso) { $partido = Partido::findOrFail($mal_ingreso->partido->id); $suspension_padre = $mal_ingreso->suspension_padre; if (is_null($suspension_padre)) { // El mal ingresó fue generado por que el jugador no pertenece a la lista de buena fe del equipo. No hay algo que controlar. } else { // El mal ingreso fue generado por que el jugador estaba suspendido al momento de firmar la planilla del partido. // Como estoy borrando el mal ingreso, si el partido esta en un estado final (es decir en estado finalizado o suspendido), el jugador esta cumpliendo una fecha de la suspension que generó este mal ingreso. if ($suspension_padre->cumplida) { // La suspension esta cumplida, entonces cumplo fecha en este partido en lugar del ultimo partido en donde cumpli, siempre y cuando el partido este en un estado final (es decir en estado finalizado o suspendido). /** Sabiendo que: dia_partido(P1) < dia_partido(P2) < ... < dia_partido(Px) Supongamos que en el partido P1 al jugador J se le genera una suspension S1. Luego, J juega el partido P2 y se le genera un mal ingreso M a partir de S1. Posteriormente, J no juega Px y se genera el cumplimiento Cx de la fecha de S1. Si edito P2 y J al final no juega, no solo no debió haberse generado M, sino que en ese partido J debió haber cumplido una fecha de S1. Entonces, si la suspensión S1 - Aún no fue cumplida : genero el cumplimiento C2. - Ya fue cumplida : Supongamos que Px es el último partido donde se cumplió una fecha de S1. Entonces el cumplimiento Cx, no debería haberse generado ya que como vamos a agregar un cumplimiento anterior (el del partido P2), la suspensión se cumplió antes. */ $suspension_fecha_cumplida = $suspension_padre->ultimo_partido_cumplidor; $partido_cumplidor = $suspension_fecha_cumplida->partido; if ($partido_cumplidor->dia_partido > $partido->dia_partido) { // Si existe un $suspension_fecha_cumplida->paritido_id = $partido->id; $suspension_fecha_cumplida->save(); $partido_plantel = $partido_cumplidor->jugador($item_de_evento->jugador->id); } else { // Inconsistencia : La suspensión se cumplió antes de este partido, lo cual no tiene sentido ya que nunca se habria generado este mal ingreso. Me hago el sota. } } else { // La suspension no esta cumplida, entonces cumplo fecha en este partido sin algun otro control, siempre y cuando el partido este en un estado final (es decir en estado finalizado o suspendido). if ($partido->finalizado || $partido->suspendido) { $nueva_fecha_cumplida = SuspensionFechaCumplida::firstOrNew(['suspension_id' => $suspension_padre->id, 'partido_id' => $partido->id]); } } } $mal_ingreso->forceDelete(); }); } }