public CambioEstadoTurno(EstadoTurno currentState, EventoTurno eventoTurno) { Estado = currentState; Evento = eventoTurno; }
private DateTime? ObtenerFechaEstado(EventoTurno evento) { var cambioEstado = ObtenerCambioEstado(evento); if (cambioEstado == null) return null; return cambioEstado.Fecha; }
private Persona ObtenerResponsableEstado(EventoTurno evento) { var cambioEstado = ObtenerCambioEstado(evento); if (cambioEstado == null) return null; return cambioEstado.Responsable; }
private CambioEstadoTurno ObtenerCambioEstado(EventoTurno evento) { return CambiosDeEstado.SingleOrDefault(x => x.Evento == evento); }
protected virtual EstadoTurno ProximoEstado(EventoTurno eventoTurno) { var transicion = new CambioEstadoTurno(Estado, eventoTurno); EstadoTurno proximoEstado; if (!Transiciones.TryGetValue(transicion, out proximoEstado)) throw new Exception("Cambio de Estado inválido: " + Estado + " -> " + eventoTurno); return proximoEstado; }
protected virtual EstadoTurno MoverEstado(EventoTurno eventoTurno, Persona persona) { var estado = ProximoEstado(eventoTurno); var fecha = DateTime.Now; var cambioEstado = new CambioEstadoTurno(estado, eventoTurno) { Fecha = fecha, Responsable = persona }; CambiosDeEstado.Add(cambioEstado); Estado = estado; FechaEstado = fecha; return estado; }
public virtual bool PuedeAplicar(EventoTurno eventoTurno) { var transicion = new CambioEstadoTurno(Estado, eventoTurno); return Transiciones.ContainsKey(transicion); }
public static EstadoTurno[] EstadosAplicaEvento(EventoTurno eventoTurno) { return Enum.GetValues(typeof(EstadoTurno)) .Cast<EstadoTurno>() .Where(estado => PuedeAplicar(estado, eventoTurno)).ToArray(); }