Mercurial > altnet-hispano
view Agendas/trunk/src/Agendas.Domain/Evento.cs @ 120:c3573defd18f
Agregado de Fecha, Usuario y Successful en TrackLog
Modificacion de publicador de blog para usar TrackLog
Agregado de TrackLog en el test de crud de eventos
Fix en publicador de twitter para que no twitee si ya se encuentra en TrackLog pero con Successful en true
author | Jorge@Jorge-PC |
---|---|
date | Fri, 24 Jun 2011 21:18:21 -0300 |
parents | 90ce239cfa6d |
children | 6f1041301797 |
line wrap: on
line source
using System; using System.Collections.Generic; using AltNetHispano.Agendas.Domain.Exceptions; namespace AltNetHispano.Agendas.Domain { public class Evento : Identificable { protected Evento() { _tracks = new List<Track>(); } #region Propiedades del Evento private readonly IList<Track> _tracks; private ICollection<Track> _newTracks = new List<Track>(); /// <summary> /// Título del evento /// </summary> public virtual string Titulo { get; private set; } /// <summary> /// Fecha para la que se encuentra agendado el evento /// </summary> public virtual DateTime? Fecha { get; private set; } /// <summary> /// Url con la invitacion realizada por el ponente (en la mayoria de los casos va a ser un link al thread de la lista de correo) /// </summary> public virtual string UrlInvitacion { get; private set; } /// <summary> /// Url a la pagina de la wiki con el video de la reunion virtual /// </summary> public virtual string UrlWiki { get; private set; } /// <summary> /// Numero de orden en el historico de reuniones virtuales /// </summary> public virtual short NumeroOrden { get; private set; } /// <summary> /// Ponente o responsable del evento /// </summary> public virtual Persona Ponente { get; private set; } /// <summary> /// Track de cambios que ha sufrido el evento /// </summary> public virtual IEnumerable<Track> Tracks { get { return _tracks; } } /// <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> /// <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, 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> /// <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; } /// <summary> /// Agenda el evento actual /// </summary> /// <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> public virtual void Agendar(Persona persona, DateTime? fecha, string urlInvitacion) { Ponente = persona; Fecha = fecha; UrlInvitacion = urlInvitacion; this.GetEstado().Promover(this, Accion.Agendar); } public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion) { Ponente = persona; Fecha = fecha; UrlInvitacion = urlInvitacion; AddTrack(new Track(this, Accion.Modificar)); } public virtual void CambiarTitulo(string titulo) { Titulo = titulo; AddTrack(new Track(this, Accion.CambiarTitulo)); } public virtual void Confirmar() { this.GetEstado().Promover(this, Accion.Confirmar); } public virtual void Publicar(short numeroOrden, string urlWiki) { this.NumeroOrden = numeroOrden; this.UrlWiki = urlWiki; this.GetEstado().Promover(this, Accion.Publicar); } #endregion protected internal virtual void AddTrack(Track track) { _newTracks.Add(track); _tracks.Add(track); } public virtual IEnumerable<Track> GetTrackNews() { return _newTracks; } } }