コード例 #1
0
 /**
  * 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();
         });
     }
 }