diff Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 242:5cc1681d3789

Combinar
author juanjose.montesdeocaarbos
date Wed, 05 Oct 2011 07:57:21 -0300
parents 51faeabfb9d9
children 59f8fa2f835e
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Wed Oct 05 07:43:09 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Wed Oct 05 07:57:21 2011 -0300
@@ -46,29 +46,23 @@
             return _eventosRepository.GetByState(EventoPublicadoState.GetInstance()) ?? new List<Evento>();
         }
 
-        public EventoResultado ModificarEvento(Guid eventoId, string titulo, Guid ponenteId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion)
+		public EventoResultado ModificarEvento(Guid eventoId, string titulo, IEnumerable<Guid> ponentesId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion)
         {
 			Evento evento = GetEvento(eventoId);
 
-			if (evento.Tipo == TipoEvento.Van && ponenteId == Guid.Empty)
+			if (evento.Tipo == TipoEvento.Van && (ponentesId == null || !ponentesId.Any(id=>id!=Guid.Empty)))
 				return new EventoResultado(false, "Debe indicar el ponente para este tipo de evento", null);
 
-			Persona persona = null;
-			if (ponenteId != Guid.Empty)
-			{
-				persona = _personaRepository.Get(ponenteId);
-				if (persona == null)
-					return new EventoResultado(false, string.Format("No se encontró el ponente indicado ({0})", ponenteId), null);
-			} 
-			
             if (evento.Titulo != titulo)
                 evento.CambiarTitulo(titulo);
 
             if (evento.FechaInicio == null && fechaInicio != null && evento.FechaTermino == null && fechaTermino != null)
-                evento.Agendar(persona, fechaInicio, fechaTermino, urlInvitacion);
-            else if (evento.FechaInicio != fechaInicio || evento.Ponente != persona || evento.UrlInvitacion != urlInvitacion ||
-                    evento.FechaTermino != fechaTermino)
-                evento.Actualizar(persona, fechaInicio, fechaTermino, urlInvitacion);
+                evento.Agendar(fechaInicio, fechaTermino, urlInvitacion);
+            else if (evento.FechaInicio != fechaInicio || evento.UrlInvitacion != urlInvitacion || evento.FechaTermino != fechaTermino)
+                evento.Actualizar(fechaInicio, fechaTermino, urlInvitacion);
+
+			var r = ActualizarPonentes(evento, ponentesId, Accion.Modificar);
+			if (!r.Succeful) return r;
 
             Notify(evento);
 
@@ -77,21 +71,20 @@
 			return new EventoResultado(true,"Evento modificado", warnings);
 		}
 
-		public EventoResultado ModificarPropuesta(Guid id, string titulo, Guid ponenteId, string urlInvitacion)
+		public EventoResultado ModificarPropuesta(Guid id, string titulo, IEnumerable<Guid> ponentesId, string urlInvitacion)
         {
-            return ModificarEvento(id, titulo, ponenteId, null, null, urlInvitacion);
+			return ModificarEvento(id, titulo, ponentesId, null, null, urlInvitacion);
         }
 
-		public EventoResultado Proponer(string titulo, Guid? ponenteId, string urlInvitacion, TipoEvento tipo)
+		public EventoResultado Proponer(string titulo, IEnumerable<Guid> ponentesId, string urlInvitacion, TipoEvento tipo)
         {
-            Persona persona = null;
-            if (ponenteId.HasValue)
-                persona = _personaRepository.Get(ponenteId.Value);
+            if (string.IsNullOrWhiteSpace(titulo))
+            	return new EventoResultado(false, "Debe indicar el título del evento", null);
 
-            var evento = Evento.Proponer(titulo, persona, urlInvitacion, tipo);
+            var evento = Evento.Proponer(titulo, urlInvitacion, tipo);
 
-            if (string.IsNullOrWhiteSpace(evento.Titulo))
-                return new EventoResultado(false,"Debe indicar el título del evento", null);
+			var r = ActualizarPonentes(evento, ponentesId, null);
+			if (!r.Succeful) return r;
 
             Notify(evento);
 
@@ -102,23 +95,15 @@
 			return new EventoResultado(true,"Evento propuesto", warnings);
 		}
 
-    	public EventoResultado Agendar(string titulo, Guid ponenteId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion, TipoEvento tipo, IEnumerable<Guid> colaboradoresId = null)
+    	public EventoResultado Agendar(string titulo, IEnumerable<Guid> ponentesId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion, TipoEvento tipo)
         {
             if (!fechaInicio.HasValue)
                 return new EventoResultado(false, "Debe indicar la fecha", null);
             if (!fechaTermino.HasValue)
                 return new EventoResultado(false, "Debe indicar la hora y duración", null);
-			if (tipo==TipoEvento.Van && ponenteId == Guid.Empty)
+			if (tipo == TipoEvento.Van && (ponentesId == null || !ponentesId.Any(id => id != Guid.Empty)))
 				return new EventoResultado(false, "Debe indicar el ponente para este tipo de evento", null);
 
-    		Persona persona = null;
-			if (ponenteId != Guid.Empty)
-    		{
-    			persona = _personaRepository.Get(ponenteId);
-    			if (persona == null)
-    				return new EventoResultado(false, string.Format("No se encontró el ponente indicado ({0})", ponenteId), null);
-    		}
-
     		var existeOtroEvento = _eventosRepository.GetNoPropuestoByTitulo(titulo);
             if (existeOtroEvento != null)
                 return new EventoResultado(false,
@@ -137,23 +122,12 @@
 			}
 
 			if (evento == null)
-                evento = Evento.Agendar(titulo, persona, fechaInicio.Value, fechaTermino.Value, urlInvitacion, tipo);
+                evento = Evento.Agendar(titulo, fechaInicio.Value, fechaTermino.Value, urlInvitacion, tipo);
             else
-                evento.Agendar(persona, fechaInicio, fechaTermino, urlInvitacion);
+                evento.Agendar(fechaInicio, fechaTermino, urlInvitacion);
 
-    		var colaboradores = new List<Persona>();
-			if (colaboradoresId!=null)
-			{
-				foreach (var colaboradorId in colaboradoresId)
-				{
-					var colaborador = _personaRepository.Get(colaboradorId);
-					if (colaborador == null)
-						return new EventoResultado(false, string.Format("No se encontró el colaborador indicado ({0})", colaboradorId),
-						                           null);
-					colaboradores.Add(colaborador);
-				}
-				evento.ActualizarOtrosPonentes(colaboradores);
-			}
+    		var r = ActualizarPonentes(evento, ponentesId, null);
+			if (!r.Succeful) return r;
 
     		Notify(evento);
 
@@ -164,7 +138,25 @@
 			return new EventoResultado(true, "Evento creado", warnings);
 		}
 
-		public EventoResultado Confirmar(Guid eventoId)
+    	private EventoResultado ActualizarPonentes(Evento evento, IEnumerable<Guid> ponentesId, Accion? action)
+    	{
+    		var ponentes = new List<Persona>();
+    		if (ponentesId != null)
+    		{
+    			foreach (var ponenteId in ponentesId.Where(id=>id!=Guid.Empty))
+    			{
+    				var colaborador = _personaRepository.Get(ponenteId);
+    				if (colaborador == null)
+    					return new EventoResultado(false, string.Format("No se encontró el colaborador indicado ({0})", ponenteId),
+    					                           null);
+    				ponentes.Add(colaborador);
+    			}
+    			evento.ActualizarPonentes(ponentes, action);
+    		}
+    		return new EventoResultado(true, "Ponentes actualizados", null);
+    	}
+
+    	public EventoResultado Confirmar(Guid eventoId)
         {
             Evento evento = GetEvento(eventoId);