Mercurial > altnet-hispano
view Agendas/trunk/src/Agendas.Domain/Evento.cs @ 80:c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
Puede que con estos cambios sea necesario borrar las tablas en la db y dejar
que se vuelvan a generar, ya sea en los test o en la aplicación web
author | nelopauselli |
---|---|
date | Tue, 24 May 2011 18:25:57 -0300 |
parents | 8df9db937434 |
children | c76661cff260 |
line wrap: on
line source
using System; using System.Collections.Generic; namespace AltNetHispano.Agendas.Domain { public class Evento : Identificable { protected Evento() { _tracks = new List<Track>(); } #region Propiedades del Evento private readonly IList<Track> _tracks; private Ponente _ponente; /// <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 Ponente Ponente { get { return _ponente; } private set { if (value == null && _ponente != null || value != _ponente && _ponente != null) _ponente.RemoveEvento(this); if (value != null) value.AddEvento(this); _ponente = value; } } /// <summary> /// Track de cambios que ha sufrido el evento /// </summary> public virtual IEnumerable<Track> Tracks { get { return _tracks; } } #endregion #region Acciones sobre el evento /// <summary> /// Propone un evento /// </summary> /// <param name="titulo">Título del evento propuesto</param> /// <param name="ponente">Ponente para evento propuesto</param> /// <returns></returns> public static Evento Proponer(string titulo, Ponente ponente, string urlInvitacion) { var evento = new Evento {Titulo = titulo, Ponente = ponente, UrlInvitacion = urlInvitacion}; evento.AddTracks(new Track(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="ponente">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, Ponente ponente, DateTime fecha, string urlInvitacion) { var evento = new Evento { Titulo = titulo }; evento.Agendar(ponente, fecha, urlInvitacion); return evento; } /// <summary> /// Agenda el evento actual /// </summary> /// <param name="ponente">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(Ponente ponente, DateTime? fecha, string urlInvitacion) { Ponente = ponente; Fecha = fecha; UrlInvitacion = urlInvitacion; AddTracks(new Track(this, Accion.Agendar)); } public virtual void Actualizar(Ponente ponente, DateTime? fecha, string urlInvitacion) { Ponente = ponente; Fecha = fecha; UrlInvitacion = urlInvitacion; AddTracks(new Track(this, Accion.Modificar)); } public virtual void CambiarTitulo(string titulo) { Titulo = titulo; AddTracks(new Track(this, Accion.CambiarTitulo)); } #endregion private void AddTracks(Track track) { _tracks.Add(track); } } }