diff Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 145:e6e6bfb1da9e

En la edición de un evento (nuevo, propuesta, modificación), el ponente se selecciona desde un combo.
author Nelo@Guinea.neluz.int
date Mon, 01 Aug 2011 11:42:24 -0300
parents 62791999ad01
children c1062de96845
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Mon Aug 01 10:25:23 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Mon Aug 01 11:42:24 2011 -0300
@@ -1,5 +1,4 @@
 using System;
-using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using AltNetHispano.Agendas.Domain.Exceptions;
@@ -7,159 +6,151 @@
 
 namespace AltNetHispano.Agendas.Domain
 {
-	public class Agenda
-	{
-		private readonly IEventoRepository _eventosRepository;
-		private readonly IPersonaRepository _personaRepository;
-		private readonly IPatrocinadorRepository _patrocinadorRepository;
+    public class Agenda
+    {
+        private readonly IEventoRepository _eventosRepository;
+        private readonly IPersonaRepository _personaRepository;
+        private readonly IPatrocinadorRepository _patrocinadorRepository;
 
-		private readonly IPublicador _publicador;
+        private readonly IPublicador _publicador;
 
-		public Agenda(IPublicador publicador, IEventoRepository eventosRepository,
-		              IPersonaRepository personaRepository, IPatrocinadorRepository patrocinadorRepository)
-		{
-			_publicador = publicador;
-			_patrocinadorRepository = patrocinadorRepository;
-			_personaRepository = personaRepository;
-			_eventosRepository = eventosRepository;
-		}
+        public Agenda(IPublicador publicador, IEventoRepository eventosRepository,
+                      IPersonaRepository personaRepository, IPatrocinadorRepository patrocinadorRepository)
+        {
+            _publicador = publicador;
+            _patrocinadorRepository = patrocinadorRepository;
+            _personaRepository = personaRepository;
+            _eventosRepository = eventosRepository;
+        }
 
-		public Evento GetEvento(Guid eventoId)
-		{
-			Evento evento =_eventosRepository.Get(eventoId);
-			if (evento == null)
-				throw new EventoNotFoundException(eventoId);
-			return evento;
-		}
+        public Evento GetEvento(Guid eventoId)
+        {
+            Evento evento = _eventosRepository.Get(eventoId);
+            if (evento == null)
+                throw new EventoNotFoundException(eventoId);
+            return evento;
+        }
 
-		public IList<Evento> GetEventosActivos(EventoState state)
-		{
-			return _eventosRepository.GetByState(state) ?? new List<Evento>();
-		}
+        public IList<Evento> GetEventosActivos(EventoState state)
+        {
+            return _eventosRepository.GetByState(state) ?? new List<Evento>();
+        }
 
-		public IList<Evento> GetEventosActivos()
-		{
-			return _eventosRepository.GetActivos() ?? new List<Evento>();
-		}
+        public IList<Evento> GetEventosActivos()
+        {
+            return _eventosRepository.GetActivos() ?? new List<Evento>();
+        }
 
-		public IEnumerable<Evento> GetHistorico()
-		{
-			return _eventosRepository.GetByState(EventoPublicadoState.GetInstance()) ?? new List<Evento>();
-		}
+        public IEnumerable<Evento> GetHistorico()
+        {
+            return _eventosRepository.GetByState(EventoPublicadoState.GetInstance()) ?? new List<Evento>();
+        }
 
-		public Resultado ModificarEvento(Guid eventoId, string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion)
-		{
-			Evento evento = GetEvento(eventoId);
+        public Resultado ModificarEvento(Guid eventoId, string titulo, Guid ponenteId, DateTime? fecha, string urlInvitacion)
+        {
+            Evento evento = GetEvento(eventoId);
+            Persona persona = _personaRepository.Get(ponenteId);
 
-			Persona persona = null;
-			if (!string.IsNullOrWhiteSpace(ponenteNombre))
-				persona = GetPonente(ponenteNombre);
+            if (evento.Titulo != titulo)
+                evento.CambiarTitulo(titulo);
 
-			if (evento.Titulo != titulo)
-				evento.CambiarTitulo(titulo);
+            if (evento.Fecha == null && fecha != null)
+                evento.Agendar(persona, fecha, urlInvitacion);
+            else if (evento.Fecha != fecha || evento.Ponente != persona || evento.UrlInvitacion != urlInvitacion)
+                evento.Actualizar(persona, fecha, urlInvitacion);
 
-			if (evento.Fecha == null && fecha != null)
-				evento.Agendar(persona, fecha, urlInvitacion);
-			else if (evento.Fecha != fecha || evento.Ponente != persona || evento.UrlInvitacion != urlInvitacion)
-				evento.Actualizar(persona, fecha, urlInvitacion);
+            Notify(evento);
 
-			Notify(evento);
-
-			return new Resultado(true);
-		}
+            return new Resultado(true);
+        }
 
-		public Resultado ModificarPropuesta(Guid id, string titulo, string ponenteNombre, string urlInvitacion)
-		{
-			return ModificarEvento(id, titulo, ponenteNombre, null, urlInvitacion);
-		}
+        public Resultado ModificarPropuesta(Guid id, string titulo, Guid ponenteId, string urlInvitacion)
+        {
+            return ModificarEvento(id, titulo, ponenteId, null, urlInvitacion);
+        }
 
-		public Resultado Proponer(string titulo, string ponenteNombre, string urlInvitacion, TipoEvento tipo)
-		{
-			Persona persona = GetPonente(ponenteNombre);
-      var evento = Evento.Proponer(titulo, persona, urlInvitacion, tipo);
+        public Resultado Proponer(string titulo, Guid? ponenteId, string urlInvitacion, TipoEvento tipo)
+        {
+            Persona persona = null;
+            if (ponenteId.HasValue)
+                persona = _personaRepository.Get(ponenteId.Value);
 
-			if (string.IsNullOrWhiteSpace(evento.Titulo))
-				return new Resultado(false);
+            var evento = Evento.Proponer(titulo, persona, urlInvitacion, tipo);
 
-			Notify(evento);
+            if (string.IsNullOrWhiteSpace(evento.Titulo))
+                return new Resultado(false);
 
-			_eventosRepository.Save(evento);
-			_personaRepository.Save(persona);
+            Notify(evento);
 
-			return new Resultado(true);
-		}
+            _eventosRepository.Save(evento);
 
-    public Resultado Agendar(string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion, TipoEvento tipo)
-		{
-			if (!fecha.HasValue)
-				return new Resultado(false);
-			if (string.IsNullOrWhiteSpace(ponenteNombre))
-				return new Resultado(false);
+            return new Resultado(true);
+        }
 
-			Persona persona = GetPonente(ponenteNombre);
+        public Resultado Agendar(string titulo, Guid ponenteId, DateTime? fecha, string urlInvitacion, TipoEvento tipo)
+        {
+            if (!fecha.HasValue)
+                return new Resultado(false);
 
-			Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo);
-			if (evento == null)
-				evento = Evento.Agendar(titulo, persona, fecha.Value, urlInvitacion, tipo);
-			else
-				evento.Agendar(persona, fecha, urlInvitacion);
-
-			Notify(evento);
+            Persona persona = _personaRepository.Get(ponenteId);
+            if (persona == null)
+                return new Resultado(false)
+                           {Message = string.Format("No se encontró el ponente indicado ({0})", ponenteId)};
 
-			_eventosRepository.Save(evento);
-			_personaRepository.Save(persona);
-
-			return new Resultado(true);
-		}
+            Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo);
+            if (evento == null)
+                evento = Evento.Agendar(titulo, persona, fecha.Value, urlInvitacion, tipo);
+            else
+                evento.Agendar(persona, fecha, urlInvitacion);
 
-		public Resultado Confirmar(Guid eventoId)
-		{
-			Evento evento = GetEvento(eventoId);
+            Notify(evento);
 
-			evento.Confirmar();
+            _eventosRepository.Save(evento);
+
+            return new Resultado(true);
+        }
 
-			Notify(evento);
+        public Resultado Confirmar(Guid eventoId)
+        {
+            Evento evento = GetEvento(eventoId);
 
-			_eventosRepository.Save(evento);
+            evento.Confirmar();
 
-			return new Resultado(true);
-		}
+            Notify(evento);
 
-		public Resultado Publicar(Guid eventoId, short numeroOrden, string urlWiki)
-		{
-			Evento evento = GetEvento(eventoId);
+            _eventosRepository.Save(evento);
 
-			evento.Publicar(numeroOrden, urlWiki);
+            return new Resultado(true);
+        }
 
-			Notify(evento);
+        public Resultado Publicar(Guid eventoId, short numeroOrden, string urlWiki)
+        {
+            Evento evento = GetEvento(eventoId);
 
-			_eventosRepository.Save(evento);
-
-			return new Resultado(true);
-		}
+            evento.Publicar(numeroOrden, urlWiki);
 
-		private void Notify(Evento evento)
-		{
-			var tracks = evento.GetTrackNews();
-			if (_publicador != null)
-				_publicador.Publicar(tracks);
-		}
+            Notify(evento);
+
+            _eventosRepository.Save(evento);
+
+            return new Resultado(true);
+        }
 
-		public void RegistrarPonente(string nombre, string mail, string twitter, string blog)
-		{
-			var ponente = new Persona(nombre, mail, twitter, blog);
-			_personaRepository.Save(ponente);
-		}
+        private void Notify(Evento evento)
+        {
+            var tracks = evento.GetTrackNews();
+            if (_publicador != null)
+                _publicador.Publicar(tracks);
+        }
 
-		private Persona GetPonente(string nombre)
-		{
-			Persona persona = _personaRepository.GetByNombre(nombre) ?? new Persona(nombre);
-			_personaRepository.Save(persona);
-			return persona;
-		}
+        public void RegistrarPonente(string nombre, string mail, string twitter, string blog)
+        {
+            var ponente = new Persona(nombre, mail, twitter, blog);
+            _personaRepository.Save(ponente);
+        }
 
         public Resultado Cancelar(Guid eventoId)
-	    {
+        {
             Evento evento = GetEvento(eventoId);
 
             evento.Cancelar();
@@ -169,10 +160,10 @@
             _eventosRepository.Save(evento);
 
             return new Resultado(true);
-	    }
+        }
 
-	    public Resultado Descartar(Guid eventoId)
-	    {
+        public Resultado Descartar(Guid eventoId)
+        {
             Evento evento = GetEvento(eventoId);
 
             evento.Descartar();
@@ -182,10 +173,10 @@
             _eventosRepository.Save(evento);
 
             return new Resultado(true);
-	    }
+        }
 
-	    public Resultado ReProponer(Guid eventoId)
-	    {
+        public Resultado ReProponer(Guid eventoId)
+        {
             Evento evento = GetEvento(eventoId);
 
             evento.ReProponer();
@@ -195,10 +186,10 @@
             _eventosRepository.Save(evento);
 
             return new Resultado(true);
-	    }
+        }
 
-	    public Resultado ReAgendar(Guid eventoId)
-	    {
+        public Resultado ReAgendar(Guid eventoId)
+        {
             Evento evento = GetEvento(eventoId);
 
             evento.ReAgendar();
@@ -208,35 +199,35 @@
             _eventosRepository.Save(evento);
 
             return new Resultado(true);
-	    }
+        }
 
-		public void IndicarPatrocinadores(Guid eventoId, Guid[] patrocinadores)
-		{
-			var evento = GetEvento(eventoId);
+        public void IndicarPatrocinadores(Guid eventoId, IEnumerable<Guid> patrocinadores)
+        {
+            var evento = GetEvento(eventoId);
 
-			var agregar = new List<Patrocinador>();
-			var quitar = new List<Patrocinador>();
+            var agregar = new List<Patrocinador>();
+            var quitar = new List<Patrocinador>();
 
-			foreach (var patrocinadorId in patrocinadores)
-			{
-				if (!evento.Patrocinadores.Any(p => p.Id == patrocinadorId))
-				{
-					var patrocinador = _patrocinadorRepository.Get(patrocinadorId);
-					agregar.Add(patrocinador);
-				}
-			}
+            foreach (var patrocinadorId in patrocinadores)
+            {
+                if (!evento.Patrocinadores.Any(p => p.Id == patrocinadorId))
+                {
+                    var patrocinador = _patrocinadorRepository.Get(patrocinadorId);
+                    agregar.Add(patrocinador);
+                }
+            }
 
-			foreach (var patrocinador in evento.Patrocinadores)
-			{
-				if (!patrocinadores.Any(p => p == patrocinador.Id))
-					quitar.Add(patrocinador);
-			}
+            foreach (var patrocinador in evento.Patrocinadores)
+            {
+                if (!patrocinadores.Any(p => p == patrocinador.Id))
+                    quitar.Add(patrocinador);
+            }
 
-			foreach (var patrocinador in agregar)
-				evento.AddPatrocinador(patrocinador);
+            foreach (var patrocinador in agregar)
+                evento.AddPatrocinador(patrocinador);
 
-			foreach (var patrocinador in quitar)
-				evento.RemovePatrocinador(patrocinador);
-		}
-	}
+            foreach (var patrocinador in quitar)
+                evento.RemovePatrocinador(patrocinador);
+        }
+    }
 }
\ No newline at end of file