Mercurial > altnet-hispano
diff Agendas/trunk/src/Agendas.Domain/Evento.cs @ 109:6bd9be78caa0
Merge
author | Nelo@Kenia.neluz.int |
---|---|
date | Tue, 07 Jun 2011 23:21:07 -0300 |
parents | 80c22175c9b5 |
children | 90ce239cfa6d |
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs Tue Jun 07 23:07:06 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs Tue Jun 07 23:21:07 2011 -0300 @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using AltNetHispano.Agendas.Domain.Exceptions; namespace AltNetHispano.Agendas.Domain { @@ -53,36 +54,93 @@ get { return _tracks; } } - #endregion + /// <summary> + /// Estado del evento en formato string (para persistencia a DB) + /// </summary> + public virtual string Estado + { + get + { + if (_eventoState != null) + return _eventoState.GetDescripcion(); + + return string.Empty; + } + set + { + if (value != Estado) + { + if (EventoPropuestoState.GetInstance().GetDescripcion().Equals(value)) + _eventoState = EventoPropuestoState.GetInstance(); + else if (EventoAgendadoState.GetInstance().GetDescripcion().Equals(value)) + _eventoState = EventoAgendadoState.GetInstance(); + else if (EventoConfirmadoState.GetInstance().GetDescripcion().Equals(value)) + _eventoState = EventoConfirmadoState.GetInstance(); + else if (EventoPublicadoState.GetInstance().GetDescripcion().Equals(value)) + _eventoState = EventoPublicadoState.GetInstance(); + else + throw new InvalidStateException(value); + } + } + } + + private EventoState _eventoState; + + /// <summary> + /// Obtiene una instancia de la clase que representa el estado del evento + /// </summary> + public virtual EventoState GetEstado() + { + if (_eventoState == null) + SetEstado(EventoNullState.GetInstance()); + + return _eventoState; + } + + /// <summary> + /// Asigna la instancia de la clase que representa el estado del evento + /// </summary> + /// <param name="eventoState">Instancia que representa el estado</param> + public virtual void SetEstado(EventoState eventoState) + { + _eventoState = eventoState; + } + + public virtual TipoEvento Tipo { get; private set; } + + #endregion #region Acciones sobre el evento - /// <summary> - /// Propone un evento - /// </summary> - /// <param name="titulo">Título del evento propuesto</param> - /// <param name="persona">Ponente para evento propuesto</param> - /// <returns></returns> - public static Evento Proponer(string titulo, Persona persona, string urlInvitacion) + /// <summary> + /// Propone un evento + /// </summary> + /// <param name="titulo">Título del evento propuesto</param> + /// <param name="persona">Ponente para evento propuesto</param> + /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> + /// <param name="tipo">Tipo del evento</param> + /// <returns></returns> + public static Evento Proponer(string titulo, Persona persona, string urlInvitacion, TipoEvento tipo) { - var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion}; - evento.AddTrack(new Track(evento, Accion.Proponer)); + var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion, Tipo = tipo}; + evento.GetEstado().Promover(evento, Accion.Proponer); return evento; } - /// <summary> - /// Agenda un evento que no estaba propuesto - /// </summary> - /// <param name="titulo">Título del evento a agendar</param> - /// <param name="persona">Ponente para el evento</param> - /// <param name="fecha">Fecha de realización del evento</param> - /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> - /// <returns></returns> - public static Evento Agendar(string titulo, Persona persona, DateTime fecha, string urlInvitacion) - { - var evento = new Evento { Titulo = titulo }; - evento.Agendar(persona, fecha, urlInvitacion); + /// <summary> + /// Agenda un evento que no estaba propuesto + /// </summary> + /// <param name="titulo">Título del evento a agendar</param> + /// <param name="persona">Ponente para el evento</param> + /// <param name="fecha">Fecha de realización del evento</param> + /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> + /// <param name="tipo">Tipo del evento</param> + /// <returns></returns> + public static Evento Agendar(string titulo, Persona persona, DateTime fecha, string urlInvitacion, TipoEvento tipo) + { + var evento = new Evento {Titulo = titulo, Tipo = tipo}; + evento.Agendar(persona, fecha, urlInvitacion); return evento; } @@ -98,7 +156,7 @@ Ponente = persona; Fecha = fecha; UrlInvitacion = urlInvitacion; - AddTrack(new Track(this, Accion.Agendar)); + this.GetEstado().Promover(this, Accion.Agendar); } public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion) @@ -118,17 +176,19 @@ public virtual void Confirmar() { - AddTrack(new Track(this, Accion.Confirmar)); + this.GetEstado().Promover(this, Accion.Confirmar); } - public virtual void Publicar() - { - AddTrack(new Track(this, Accion.Publicar)); + public virtual void Publicar(short numeroOrden, string urlWiki) + { + this.NumeroOrden = numeroOrden; + this.UrlWiki = urlWiki; + this.GetEstado().Promover(this, Accion.Publicar); } #endregion - private void AddTrack(Track track) + protected internal virtual void AddTrack(Track track) { _newTracks.Add(track); _tracks.Add(track);