diff Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 138:62791999ad01

Agregando relación entre Evento y Patrocinador
author nelopauselli
date Thu, 28 Jul 2011 10:13:28 -0300
parents 6f1041301797
children e6e6bfb1da9e
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -1,5 +1,7 @@
 using System;
+using System.Collections;
 using System.Collections.Generic;
+using System.Linq;
 using AltNetHispano.Agendas.Domain.Exceptions;
 using AltNetHispano.Agendas.Domain.Repositories;
 
@@ -9,12 +11,15 @@
 	{
 		private readonly IEventoRepository _eventosRepository;
 		private readonly IPersonaRepository _personaRepository;
+		private readonly IPatrocinadorRepository _patrocinadorRepository;
+
 		private readonly IPublicador _publicador;
 
 		public Agenda(IPublicador publicador, IEventoRepository eventosRepository,
-		              IPersonaRepository personaRepository)
+		              IPersonaRepository personaRepository, IPatrocinadorRepository patrocinadorRepository)
 		{
 			_publicador = publicador;
+			_patrocinadorRepository = patrocinadorRepository;
 			_personaRepository = personaRepository;
 			_eventosRepository = eventosRepository;
 		}
@@ -204,5 +209,34 @@
 
             return new Resultado(true);
 	    }
+
+		public void IndicarPatrocinadores(Guid eventoId, Guid[] patrocinadores)
+		{
+			var evento = GetEvento(eventoId);
+
+			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 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 quitar)
+				evento.RemovePatrocinador(patrocinador);
+		}
 	}
 }
\ No newline at end of file