comparison 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
comparison
equal deleted inserted replaced
144:a2b14da4902f 145:e6e6bfb1da9e
1 using System; 1 using System;
2 using System.Collections;
3 using System.Collections.Generic; 2 using System.Collections.Generic;
4 using System.Linq; 3 using System.Linq;
5 using AltNetHispano.Agendas.Domain.Exceptions; 4 using AltNetHispano.Agendas.Domain.Exceptions;
6 using AltNetHispano.Agendas.Domain.Repositories; 5 using AltNetHispano.Agendas.Domain.Repositories;
7 6
8 namespace AltNetHispano.Agendas.Domain 7 namespace AltNetHispano.Agendas.Domain
9 { 8 {
10 public class Agenda 9 public class Agenda
11 { 10 {
12 private readonly IEventoRepository _eventosRepository; 11 private readonly IEventoRepository _eventosRepository;
13 private readonly IPersonaRepository _personaRepository; 12 private readonly IPersonaRepository _personaRepository;
14 private readonly IPatrocinadorRepository _patrocinadorRepository; 13 private readonly IPatrocinadorRepository _patrocinadorRepository;
15 14
16 private readonly IPublicador _publicador; 15 private readonly IPublicador _publicador;
17 16
18 public Agenda(IPublicador publicador, IEventoRepository eventosRepository, 17 public Agenda(IPublicador publicador, IEventoRepository eventosRepository,
19 IPersonaRepository personaRepository, IPatrocinadorRepository patrocinadorRepository) 18 IPersonaRepository personaRepository, IPatrocinadorRepository patrocinadorRepository)
20 { 19 {
21 _publicador = publicador; 20 _publicador = publicador;
22 _patrocinadorRepository = patrocinadorRepository; 21 _patrocinadorRepository = patrocinadorRepository;
23 _personaRepository = personaRepository; 22 _personaRepository = personaRepository;
24 _eventosRepository = eventosRepository; 23 _eventosRepository = eventosRepository;
25 } 24 }
26 25
27 public Evento GetEvento(Guid eventoId) 26 public Evento GetEvento(Guid eventoId)
28 { 27 {
29 Evento evento =_eventosRepository.Get(eventoId); 28 Evento evento = _eventosRepository.Get(eventoId);
30 if (evento == null) 29 if (evento == null)
31 throw new EventoNotFoundException(eventoId); 30 throw new EventoNotFoundException(eventoId);
32 return evento; 31 return evento;
33 } 32 }
34 33
35 public IList<Evento> GetEventosActivos(EventoState state) 34 public IList<Evento> GetEventosActivos(EventoState state)
36 { 35 {
37 return _eventosRepository.GetByState(state) ?? new List<Evento>(); 36 return _eventosRepository.GetByState(state) ?? new List<Evento>();
38 } 37 }
39 38
40 public IList<Evento> GetEventosActivos() 39 public IList<Evento> GetEventosActivos()
41 { 40 {
42 return _eventosRepository.GetActivos() ?? new List<Evento>(); 41 return _eventosRepository.GetActivos() ?? new List<Evento>();
43 } 42 }
44 43
45 public IEnumerable<Evento> GetHistorico() 44 public IEnumerable<Evento> GetHistorico()
46 { 45 {
47 return _eventosRepository.GetByState(EventoPublicadoState.GetInstance()) ?? new List<Evento>(); 46 return _eventosRepository.GetByState(EventoPublicadoState.GetInstance()) ?? new List<Evento>();
48 } 47 }
49 48
50 public Resultado ModificarEvento(Guid eventoId, string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion) 49 public Resultado ModificarEvento(Guid eventoId, string titulo, Guid ponenteId, DateTime? fecha, string urlInvitacion)
51 { 50 {
52 Evento evento = GetEvento(eventoId); 51 Evento evento = GetEvento(eventoId);
53 52 Persona persona = _personaRepository.Get(ponenteId);
54 Persona persona = null; 53
55 if (!string.IsNullOrWhiteSpace(ponenteNombre)) 54 if (evento.Titulo != titulo)
56 persona = GetPonente(ponenteNombre); 55 evento.CambiarTitulo(titulo);
57 56
58 if (evento.Titulo != titulo) 57 if (evento.Fecha == null && fecha != null)
59 evento.CambiarTitulo(titulo); 58 evento.Agendar(persona, fecha, urlInvitacion);
60 59 else if (evento.Fecha != fecha || evento.Ponente != persona || evento.UrlInvitacion != urlInvitacion)
61 if (evento.Fecha == null && fecha != null) 60 evento.Actualizar(persona, fecha, urlInvitacion);
62 evento.Agendar(persona, fecha, urlInvitacion); 61
63 else if (evento.Fecha != fecha || evento.Ponente != persona || evento.UrlInvitacion != urlInvitacion) 62 Notify(evento);
64 evento.Actualizar(persona, fecha, urlInvitacion); 63
65 64 return new Resultado(true);
66 Notify(evento); 65 }
67 66
68 return new Resultado(true); 67 public Resultado ModificarPropuesta(Guid id, string titulo, Guid ponenteId, string urlInvitacion)
69 } 68 {
70 69 return ModificarEvento(id, titulo, ponenteId, null, urlInvitacion);
71 public Resultado ModificarPropuesta(Guid id, string titulo, string ponenteNombre, string urlInvitacion) 70 }
72 { 71
73 return ModificarEvento(id, titulo, ponenteNombre, null, urlInvitacion); 72 public Resultado Proponer(string titulo, Guid? ponenteId, string urlInvitacion, TipoEvento tipo)
74 } 73 {
75 74 Persona persona = null;
76 public Resultado Proponer(string titulo, string ponenteNombre, string urlInvitacion, TipoEvento tipo) 75 if (ponenteId.HasValue)
77 { 76 persona = _personaRepository.Get(ponenteId.Value);
78 Persona persona = GetPonente(ponenteNombre); 77
79 var evento = Evento.Proponer(titulo, persona, urlInvitacion, tipo); 78 var evento = Evento.Proponer(titulo, persona, urlInvitacion, tipo);
80 79
81 if (string.IsNullOrWhiteSpace(evento.Titulo)) 80 if (string.IsNullOrWhiteSpace(evento.Titulo))
82 return new Resultado(false); 81 return new Resultado(false);
83 82
84 Notify(evento); 83 Notify(evento);
85 84
86 _eventosRepository.Save(evento); 85 _eventosRepository.Save(evento);
87 _personaRepository.Save(persona); 86
88 87 return new Resultado(true);
89 return new Resultado(true); 88 }
90 } 89
91 90 public Resultado Agendar(string titulo, Guid ponenteId, DateTime? fecha, string urlInvitacion, TipoEvento tipo)
92 public Resultado Agendar(string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion, TipoEvento tipo) 91 {
93 { 92 if (!fecha.HasValue)
94 if (!fecha.HasValue) 93 return new Resultado(false);
95 return new Resultado(false); 94
96 if (string.IsNullOrWhiteSpace(ponenteNombre)) 95 Persona persona = _personaRepository.Get(ponenteId);
97 return new Resultado(false); 96 if (persona == null)
98 97 return new Resultado(false)
99 Persona persona = GetPonente(ponenteNombre); 98 {Message = string.Format("No se encontró el ponente indicado ({0})", ponenteId)};
100 99
101 Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo); 100 Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo);
102 if (evento == null) 101 if (evento == null)
103 evento = Evento.Agendar(titulo, persona, fecha.Value, urlInvitacion, tipo); 102 evento = Evento.Agendar(titulo, persona, fecha.Value, urlInvitacion, tipo);
104 else 103 else
105 evento.Agendar(persona, fecha, urlInvitacion); 104 evento.Agendar(persona, fecha, urlInvitacion);
106 105
107 Notify(evento); 106 Notify(evento);
108 107
109 _eventosRepository.Save(evento); 108 _eventosRepository.Save(evento);
110 _personaRepository.Save(persona); 109
111 110 return new Resultado(true);
112 return new Resultado(true); 111 }
113 } 112
114 113 public Resultado Confirmar(Guid eventoId)
115 public Resultado Confirmar(Guid eventoId) 114 {
116 { 115 Evento evento = GetEvento(eventoId);
117 Evento evento = GetEvento(eventoId); 116
118 117 evento.Confirmar();
119 evento.Confirmar(); 118
120 119 Notify(evento);
121 Notify(evento); 120
122 121 _eventosRepository.Save(evento);
123 _eventosRepository.Save(evento); 122
124 123 return new Resultado(true);
125 return new Resultado(true); 124 }
126 } 125
127 126 public Resultado Publicar(Guid eventoId, short numeroOrden, string urlWiki)
128 public Resultado Publicar(Guid eventoId, short numeroOrden, string urlWiki) 127 {
129 { 128 Evento evento = GetEvento(eventoId);
130 Evento evento = GetEvento(eventoId); 129
131 130 evento.Publicar(numeroOrden, urlWiki);
132 evento.Publicar(numeroOrden, urlWiki); 131
133 132 Notify(evento);
134 Notify(evento); 133
135 134 _eventosRepository.Save(evento);
136 _eventosRepository.Save(evento); 135
137 136 return new Resultado(true);
138 return new Resultado(true); 137 }
139 } 138
140 139 private void Notify(Evento evento)
141 private void Notify(Evento evento) 140 {
142 { 141 var tracks = evento.GetTrackNews();
143 var tracks = evento.GetTrackNews(); 142 if (_publicador != null)
144 if (_publicador != null) 143 _publicador.Publicar(tracks);
145 _publicador.Publicar(tracks); 144 }
146 } 145
147 146 public void RegistrarPonente(string nombre, string mail, string twitter, string blog)
148 public void RegistrarPonente(string nombre, string mail, string twitter, string blog) 147 {
149 { 148 var ponente = new Persona(nombre, mail, twitter, blog);
150 var ponente = new Persona(nombre, mail, twitter, blog); 149 _personaRepository.Save(ponente);
151 _personaRepository.Save(ponente); 150 }
152 }
153
154 private Persona GetPonente(string nombre)
155 {
156 Persona persona = _personaRepository.GetByNombre(nombre) ?? new Persona(nombre);
157 _personaRepository.Save(persona);
158 return persona;
159 }
160 151
161 public Resultado Cancelar(Guid eventoId) 152 public Resultado Cancelar(Guid eventoId)
162 { 153 {
163 Evento evento = GetEvento(eventoId); 154 Evento evento = GetEvento(eventoId);
164 155
165 evento.Cancelar(); 156 evento.Cancelar();
166 157
167 Notify(evento); 158 Notify(evento);
168 159
169 _eventosRepository.Save(evento); 160 _eventosRepository.Save(evento);
170 161
171 return new Resultado(true); 162 return new Resultado(true);
172 } 163 }
173 164
174 public Resultado Descartar(Guid eventoId) 165 public Resultado Descartar(Guid eventoId)
175 { 166 {
176 Evento evento = GetEvento(eventoId); 167 Evento evento = GetEvento(eventoId);
177 168
178 evento.Descartar(); 169 evento.Descartar();
179 170
180 Notify(evento); 171 Notify(evento);
181 172
182 _eventosRepository.Save(evento); 173 _eventosRepository.Save(evento);
183 174
184 return new Resultado(true); 175 return new Resultado(true);
185 } 176 }
186 177
187 public Resultado ReProponer(Guid eventoId) 178 public Resultado ReProponer(Guid eventoId)
188 { 179 {
189 Evento evento = GetEvento(eventoId); 180 Evento evento = GetEvento(eventoId);
190 181
191 evento.ReProponer(); 182 evento.ReProponer();
192 183
193 Notify(evento); 184 Notify(evento);
194 185
195 _eventosRepository.Save(evento); 186 _eventosRepository.Save(evento);
196 187
197 return new Resultado(true); 188 return new Resultado(true);
198 } 189 }
199 190
200 public Resultado ReAgendar(Guid eventoId) 191 public Resultado ReAgendar(Guid eventoId)
201 { 192 {
202 Evento evento = GetEvento(eventoId); 193 Evento evento = GetEvento(eventoId);
203 194
204 evento.ReAgendar(); 195 evento.ReAgendar();
205 196
206 Notify(evento); 197 Notify(evento);
207 198
208 _eventosRepository.Save(evento); 199 _eventosRepository.Save(evento);
209 200
210 return new Resultado(true); 201 return new Resultado(true);
211 } 202 }
212 203
213 public void IndicarPatrocinadores(Guid eventoId, Guid[] patrocinadores) 204 public void IndicarPatrocinadores(Guid eventoId, IEnumerable<Guid> patrocinadores)
214 { 205 {
215 var evento = GetEvento(eventoId); 206 var evento = GetEvento(eventoId);
216 207
217 var agregar = new List<Patrocinador>(); 208 var agregar = new List<Patrocinador>();
218 var quitar = new List<Patrocinador>(); 209 var quitar = new List<Patrocinador>();
219 210
220 foreach (var patrocinadorId in patrocinadores) 211 foreach (var patrocinadorId in patrocinadores)
221 { 212 {
222 if (!evento.Patrocinadores.Any(p => p.Id == patrocinadorId)) 213 if (!evento.Patrocinadores.Any(p => p.Id == patrocinadorId))
223 { 214 {
224 var patrocinador = _patrocinadorRepository.Get(patrocinadorId); 215 var patrocinador = _patrocinadorRepository.Get(patrocinadorId);
225 agregar.Add(patrocinador); 216 agregar.Add(patrocinador);
226 } 217 }
227 } 218 }
228 219
229 foreach (var patrocinador in evento.Patrocinadores) 220 foreach (var patrocinador in evento.Patrocinadores)
230 { 221 {
231 if (!patrocinadores.Any(p => p == patrocinador.Id)) 222 if (!patrocinadores.Any(p => p == patrocinador.Id))
232 quitar.Add(patrocinador); 223 quitar.Add(patrocinador);
233 } 224 }
234 225
235 foreach (var patrocinador in agregar) 226 foreach (var patrocinador in agregar)
236 evento.AddPatrocinador(patrocinador); 227 evento.AddPatrocinador(patrocinador);
237 228
238 foreach (var patrocinador in quitar) 229 foreach (var patrocinador in quitar)
239 evento.RemovePatrocinador(patrocinador); 230 evento.RemovePatrocinador(patrocinador);
240 } 231 }
241 } 232 }
242 } 233 }