comparison Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 280:1caba33bd0b7

Cambiandos espacios por tabuladores, etc.
author juanjose.montesdeocaarbos
date Mon, 26 Dec 2011 13:39:45 -0300
parents 72a96459f910
children bc8dfbde0523
comparison
equal deleted inserted replaced
279:1e889a2e45c5 280:1caba33bd0b7
4 using AltNetHispano.Agendas.Domain.Exceptions; 4 using AltNetHispano.Agendas.Domain.Exceptions;
5 using AltNetHispano.Agendas.Domain.Repositories; 5 using AltNetHispano.Agendas.Domain.Repositories;
6 6
7 namespace AltNetHispano.Agendas.Domain 7 namespace AltNetHispano.Agendas.Domain
8 { 8 {
9 public class Agenda 9 public class Agenda
10 { 10 {
11 private readonly IEventoRepository _eventosRepository; 11 private readonly IEventoRepository _eventosRepository;
12 private readonly IPersonaRepository _personaRepository; 12 private readonly IPersonaRepository _personaRepository;
13 private readonly IPatrocinadorRepository _patrocinadorRepository; 13 private readonly IPatrocinadorRepository _patrocinadorRepository;
14 14
15 private readonly IPublicador _publicador; 15 private readonly IPublicador _publicador;
16 16
17 public Agenda(IPublicador publicador, IEventoRepository eventosRepository, 17 public Agenda(IPublicador publicador, IEventoRepository eventosRepository,
18 IPersonaRepository personaRepository, IPatrocinadorRepository patrocinadorRepository) 18 IPersonaRepository personaRepository, IPatrocinadorRepository patrocinadorRepository)
19 { 19 {
20 _publicador = publicador; 20 _publicador = publicador;
21 _patrocinadorRepository = patrocinadorRepository; 21 _patrocinadorRepository = patrocinadorRepository;
22 _personaRepository = personaRepository; 22 _personaRepository = personaRepository;
23 _eventosRepository = eventosRepository; 23 _eventosRepository = eventosRepository;
24 } 24 }
25 25
26 public Evento GetEvento(Guid eventoId) 26 public Evento GetEvento(Guid eventoId)
27 { 27 {
28 Evento evento = _eventosRepository.Get(eventoId); 28 Evento evento = _eventosRepository.Get(eventoId);
29 if (evento == null) 29 if (evento == null)
30 throw new EventoNotFoundException(eventoId); 30 throw new EventoNotFoundException(eventoId);
31 return evento; 31 return evento;
32 } 32 }
33 33
34 public IList<Evento> GetEventosActivos(EventoState state) 34 public IList<Evento> GetEventosActivos(EventoState state)
35 { 35 {
36 return _eventosRepository.GetByState(state) ?? new List<Evento>(); 36 return _eventosRepository.GetByState(state) ?? new List<Evento>();
37 } 37 }
38 38
39 public IList<Evento> GetEventosActivos() 39 public IList<Evento> GetEventosActivos()
40 { 40 {
41 return _eventosRepository.GetActivos() ?? new List<Evento>(); 41 return _eventosRepository.GetActivos() ?? new List<Evento>();
42 } 42 }
43 43
44 public IEnumerable<Evento> GetHistorico() 44 public IEnumerable<Evento> GetHistorico()
45 { 45 {
46 return _eventosRepository.GetByState(EventoPublicadoState.GetInstance()) ?? new List<Evento>(); 46 return _eventosRepository.GetByState(EventoPublicadoState.GetInstance()) ?? new List<Evento>();
47 } 47 }
48 48
49 public EventoResultado ModificarEvento(Guid eventoId, string titulo, IEnumerable<Guid> ponentesId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion) 49 public EventoResultado ModificarEvento(Guid eventoId, string titulo, IEnumerable<Guid> ponentesId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion)
50 { 50 {
51 Evento evento = GetEvento(eventoId); 51 Evento evento = GetEvento(eventoId);
52 52
53 if (evento.Tipo == TipoEvento.Van && (ponentesId == null || !ponentesId.Any(id=>id!=Guid.Empty))) 53 if (evento.Tipo == TipoEvento.Van && (ponentesId == null || !ponentesId.Any(id => id != Guid.Empty)))
54 return new EventoResultado(false, "Debe indicar el ponente para este tipo de evento", null); 54 return new EventoResultado(false, "Debe indicar el ponente para este tipo de evento", null);
55 55
56 if (evento.Titulo != titulo) 56 if (evento.Titulo != titulo)
57 evento.CambiarTitulo(titulo); 57 evento.CambiarTitulo(titulo);
58 58
59 if (evento.FechaInicio == null && fechaInicio != null && evento.FechaTermino == null && fechaTermino != null) 59 if (evento.FechaInicio == null && fechaInicio != null && evento.FechaTermino == null && fechaTermino != null)
60 evento.Agendar(fechaInicio, fechaTermino, urlInvitacion); 60 evento.Agendar(fechaInicio, fechaTermino, urlInvitacion);
61 else if (evento.FechaInicio != fechaInicio || evento.UrlInvitacion != urlInvitacion || evento.FechaTermino != fechaTermino) 61 else if (evento.FechaInicio != fechaInicio || evento.UrlInvitacion != urlInvitacion || evento.FechaTermino != fechaTermino)
62 evento.Actualizar(fechaInicio, fechaTermino, urlInvitacion); 62 evento.Actualizar(fechaInicio, fechaTermino, urlInvitacion);
63 63
64 var r = ActualizarPonentes(evento, ponentesId, Accion.Modificar); 64 var r = ActualizarPonentes(evento, ponentesId, Accion.Modificar);
65 if (!r.Succeful) return r; 65 if (!r.Succeful) return r;
66 66
67 Notify(evento); 67 Notify(evento);
68 68
69 var warnings = evento.GetLogsNews().Where(l => !l.Successful); 69 var warnings = evento.GetLogsNews().Where(l => !l.Successful);
70 70
71 return new EventoResultado(true,"Evento modificado", warnings); 71 return new EventoResultado(true, "Evento modificado", warnings);
72 } 72 }
73 73
74 public EventoResultado ModificarPropuesta(Guid id, string titulo, IEnumerable<Guid> ponentesId, string urlInvitacion) 74 public EventoResultado ModificarPropuesta(Guid id, string titulo, IEnumerable<Guid> ponentesId, string urlInvitacion)
75 { 75 {
76 return ModificarEvento(id, titulo, ponentesId, null, null, urlInvitacion); 76 return ModificarEvento(id, titulo, ponentesId, null, null, urlInvitacion);
77 } 77 }
78 78
79 public EventoResultado Proponer(string titulo, IEnumerable<Guid> ponentesId, string urlInvitacion, TipoEvento tipo) 79 public EventoResultado Proponer(string titulo, IEnumerable<Guid> ponentesId, string urlInvitacion, TipoEvento tipo)
80 { 80 {
81 if (string.IsNullOrWhiteSpace(titulo)) 81 if (string.IsNullOrWhiteSpace(titulo))
82 return new EventoResultado(false, "Debe indicar el título del evento", null); 82 return new EventoResultado(false, "Debe indicar el título del evento", null);
83 83
84 var evento = Evento.Proponer(titulo, urlInvitacion, tipo); 84 var evento = Evento.Proponer(titulo, urlInvitacion, tipo);
85 85
86 var r = ActualizarPonentes(evento, ponentesId, null); 86 var r = ActualizarPonentes(evento, ponentesId, null);
87 if (!r.Succeful) return r; 87 if (!r.Succeful) return r;
88 88
89 Notify(evento); 89 Notify(evento);
90 90
91 _eventosRepository.Save(evento); 91 _eventosRepository.Save(evento);
92 92
93 var warnings = evento.GetLogsNews().Where(l => !l.Successful); 93 var warnings = evento.GetLogsNews().Where(l => !l.Successful);
94 94
95 return new EventoResultado(true,"Evento propuesto", warnings); 95 return new EventoResultado(true, "Evento propuesto", warnings);
96 } 96 }
97 97
98 public EventoResultado Agendar(string titulo, IEnumerable<Guid> ponentesId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion, TipoEvento tipo) 98 public EventoResultado Agendar(string titulo, IEnumerable<Guid> ponentesId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion, TipoEvento tipo)
99 { 99 {
100 if (!fechaInicio.HasValue) 100 if (!fechaInicio.HasValue)
101 return new EventoResultado(false, "Debe indicar la fecha", null); 101 return new EventoResultado(false, "Debe indicar la fecha", null);
102 if (!fechaTermino.HasValue) 102 if (!fechaTermino.HasValue)
103 return new EventoResultado(false, "Debe indicar la hora y duración", null); 103 return new EventoResultado(false, "Debe indicar la hora y duración", null);
104 if (tipo == TipoEvento.Van && (ponentesId == null || !ponentesId.Any(id => id != Guid.Empty))) 104 if (tipo == TipoEvento.Van && (ponentesId == null || !ponentesId.Any(id => id != Guid.Empty)))
105 return new EventoResultado(false, "Debe indicar el ponente para este tipo de evento", null); 105 return new EventoResultado(false, "Debe indicar el ponente para este tipo de evento", null);
106 106
107 var existeOtroEvento = _eventosRepository.GetNoPropuestoByTitulo(titulo); 107 var existeOtroEvento = _eventosRepository.GetNoPropuestoByTitulo(titulo);
108 if (existeOtroEvento != null) 108 if (existeOtroEvento != null)
109 return new EventoResultado(false, 109 return new EventoResultado(false,
110 string.Format( 110 string.Format(
111 "Ya existe un evento con el mismo título ({0}) del {1}, por favor ingrese otro.", 111 "Ya existe un evento con el mismo título ({0}) del {1}, por favor ingrese otro.",
112 titulo, existeOtroEvento.FechaInicio.Value.ToShortDateString()), null); 112 titulo, existeOtroEvento.FechaInicio.Value.ToShortDateString()), null);
113 113
114 Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo); 114 Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo);
115 115
116 foreach (var e in _eventosRepository.GetActivos()) 116 foreach (var e in _eventosRepository.GetActivos())
117 { 117 {
118 if (!e.Equals(evento) && fechaInicio <= e.FechaTermino && fechaTermino >= e.FechaInicio) 118 if (!e.Equals(evento) && fechaInicio <= e.FechaTermino && fechaTermino >= e.FechaInicio)
119 { 119 {
120 return new EventoResultado(false, string.Format("El evento que está intentando agendar entra en conflicto con '{0}'", e.Titulo), null); 120 return new EventoResultado(false, string.Format("El evento que está intentando agendar entra en conflicto con '{0}'", e.Titulo), null);
121 } 121 }
122 } 122 }
123 123
124 if (evento == null) 124 if (evento == null)
125 evento = Evento.Agendar(titulo, fechaInicio.Value, fechaTermino.Value, urlInvitacion, tipo); 125 evento = Evento.Agendar(titulo, fechaInicio.Value, fechaTermino.Value, urlInvitacion, tipo);
126 else 126 else
127 evento.Agendar(fechaInicio, fechaTermino, urlInvitacion); 127 evento.Agendar(fechaInicio, fechaTermino, urlInvitacion);
128 128
129 var r = ActualizarPonentes(evento, ponentesId, null); 129 var r = ActualizarPonentes(evento, ponentesId, null);
130 if (!r.Succeful) return r; 130 if (!r.Succeful) return r;
131 131
132 Notify(evento); 132 Notify(evento);
133 133
134 _eventosRepository.Save(evento); 134 _eventosRepository.Save(evento);
135 135
136 var warnings = evento.GetLogsNews().Where(l => !l.Successful); 136 var warnings = evento.GetLogsNews().Where(l => !l.Successful);
137 137
138 return new EventoResultado(true, "Evento creado", warnings); 138 return new EventoResultado(true, "Evento creado", warnings);
139 } 139 }
140 140
141 private EventoResultado ActualizarPonentes(Evento evento, IEnumerable<Guid> ponentesId, Accion? action) 141 private EventoResultado ActualizarPonentes(Evento evento, IEnumerable<Guid> ponentesId, Accion? action)
142 { 142 {
143 var ponentes = new List<Persona>(); 143 var ponentes = new List<Persona>();
144 if (ponentesId != null) 144 if (ponentesId != null)
145 { 145 {
146 foreach (var ponenteId in ponentesId.Where(id=>id!=Guid.Empty)) 146 foreach (var ponenteId in ponentesId.Where(id => id != Guid.Empty))
147 { 147 {
148 var colaborador = _personaRepository.Get(ponenteId); 148 var colaborador = _personaRepository.Get(ponenteId);
149 if (colaborador == null) 149 if (colaborador == null)
150 return new EventoResultado(false, string.Format("No se encontró el colaborador indicado ({0})", ponenteId), 150 return new EventoResultado(false, string.Format("No se encontró el colaborador indicado ({0})", ponenteId),
151 null); 151 null);
152 ponentes.Add(colaborador); 152 ponentes.Add(colaborador);
153 } 153 }
154 evento.ActualizarPonentes(ponentes, action); 154 evento.ActualizarPonentes(ponentes, action);
155 } 155 }
156 return new EventoResultado(true, "Ponentes actualizados", null); 156 return new EventoResultado(true, "Ponentes actualizados", null);
157 } 157 }
158 158
159 public EventoResultado Confirmar(Guid eventoId) 159 public EventoResultado Confirmar(Guid eventoId)
160 { 160 {
161 Evento evento = GetEvento(eventoId); 161 Evento evento = GetEvento(eventoId);
162 162
163 evento.Confirmar(); 163 evento.Confirmar();
164 164
165 Notify(evento); 165 Notify(evento);
166 166
167 _eventosRepository.Save(evento); 167 _eventosRepository.Save(evento);
168 168
169 var warnings = evento.GetLogsNews().Where(l => !l.Successful); 169 var warnings = evento.GetLogsNews().Where(l => !l.Successful);
170 170
171 return new EventoResultado(true, "Evento confirmado.", warnings); 171 return new EventoResultado(true, "Evento confirmado.", warnings);
172 } 172 }
173 173
174 public EventoResultado Publicar(Guid eventoId, short numeroOrden, string urlWiki, TimeSpan duracion) 174 public EventoResultado Publicar(Guid eventoId, short numeroOrden, string urlWiki, TimeSpan duracion)
175 { 175 {
176 if (numeroOrden <= 0) 176 if (numeroOrden <= 0)
177 return new EventoResultado(false, "Número de Orden fuera de rango", null); 177 return new EventoResultado(false, "Número de Orden fuera de rango", null);
178 178
179 if (string.IsNullOrWhiteSpace(urlWiki)) 179 if (string.IsNullOrWhiteSpace(urlWiki))
180 return new EventoResultado(false, "Url Wiki incorrecto", null); 180 return new EventoResultado(false, "Url Wiki incorrecto", null);
181 181
182 if (duracion.Hours.Equals(0) && duracion.Minutes.Equals(0)) 182 if (duracion.Hours.Equals(0) && duracion.Minutes.Equals(0))
183 return new EventoResultado(false, "Duración fuera de rango", null); 183 return new EventoResultado(false, "Duración fuera de rango", null);
184 184
185 if (_eventosRepository.GetByState(EventoPublicadoState.GetInstance()).Any(e => e.NumeroOrden.Equals(numeroOrden))) 185 if (_eventosRepository.GetByState(EventoPublicadoState.GetInstance()).Any(e => e.NumeroOrden.Equals(numeroOrden)))
186 { 186 {
187 return new EventoResultado(false, "El número de evento ya se encuentra en uso", null); 187 return new EventoResultado(false, "El número de evento ya se encuentra en uso", null);
188 } 188 }
189 189
190 Evento evento = GetEvento(eventoId); 190 Evento evento = GetEvento(eventoId);
191 191
192 evento.Publicar(numeroOrden, urlWiki, duracion); 192 evento.Publicar(numeroOrden, urlWiki, duracion);
193 193
194 Notify(evento); 194 Notify(evento);
195 195
196 _eventosRepository.Save(evento); 196 _eventosRepository.Save(evento);
197 197
198 var warnings = evento.GetLogsNews().Where(l => !l.Successful); 198 var warnings = evento.GetLogsNews().Where(l => !l.Successful);
199 199
200 return new EventoResultado(true, "Evento publicado", warnings); 200 return new EventoResultado(true, "Evento publicado", warnings);
201 } 201 }
202 202
203 public EventoResultado Cancelar(Guid eventoId) 203 public EventoResultado Cancelar(Guid eventoId)
204 { 204 {
205 Evento evento = GetEvento(eventoId); 205 Evento evento = GetEvento(eventoId);
206 206
207 evento.Cancelar(); 207 evento.Cancelar();
208 208
209 Notify(evento); 209 Notify(evento);
210 210
211 _eventosRepository.Save(evento); 211 _eventosRepository.Save(evento);
212 212
213 var warnings = evento.GetLogsNews().Where(l => !l.Successful); 213 var warnings = evento.GetLogsNews().Where(l => !l.Successful);
214 214
215 return new EventoResultado(true,"Evento cancelado", warnings); 215 return new EventoResultado(true, "Evento cancelado", warnings);
216 } 216 }
217 217
218 public EventoResultado Descartar(Guid eventoId) 218 public EventoResultado Descartar(Guid eventoId)
219 { 219 {
220 Evento evento = GetEvento(eventoId); 220 Evento evento = GetEvento(eventoId);
221 221
222 evento.Descartar(); 222 evento.Descartar();
223 223
224 Notify(evento); 224 Notify(evento);
225 225
226 _eventosRepository.Save(evento); 226 _eventosRepository.Save(evento);
227 227
228 var warnings = evento.GetLogsNews().Where(l => !l.Successful); 228 var warnings = evento.GetLogsNews().Where(l => !l.Successful);
229 229
230 return new EventoResultado(true, "Evento descartado", warnings); 230 return new EventoResultado(true, "Evento descartado", warnings);
231 } 231 }
232 232
233 public EventoResultado ReProponer(Guid eventoId) 233 public EventoResultado ReProponer(Guid eventoId)
234 { 234 {
235 Evento evento = GetEvento(eventoId); 235 Evento evento = GetEvento(eventoId);
236 236
237 evento.ReProponer(); 237 evento.ReProponer();
238 238
239 Notify(evento); 239 Notify(evento);
240 240
241 _eventosRepository.Save(evento); 241 _eventosRepository.Save(evento);
242 242
243 var warnings = evento.GetLogsNews().Where(l => !l.Successful); 243 var warnings = evento.GetLogsNews().Where(l => !l.Successful);
244 244
245 return new EventoResultado(true,"Evento re-prpuesto", warnings); 245 return new EventoResultado(true, "Evento re-prpuesto", warnings);
246 } 246 }
247 247
248 public EventoResultado ReAgendar(Guid eventoId) 248 public EventoResultado ReAgendar(Guid eventoId)
249 { 249 {
250 Evento evento = GetEvento(eventoId); 250 Evento evento = GetEvento(eventoId);
251 251
252 evento.ReAgendar(); 252 evento.ReAgendar();
253 253
254 Notify(evento); 254 Notify(evento);
255 255
256 _eventosRepository.Save(evento); 256 _eventosRepository.Save(evento);
257 257
258 var warnings = evento.GetLogsNews().Where(l => !l.Successful); 258 var warnings = evento.GetLogsNews().Where(l => !l.Successful);
259 259
260 return new EventoResultado(true,"Evento re-agendado", warnings); 260 return new EventoResultado(true, "Evento re-agendado", warnings);
261 } 261 }
262 262
263 public void IndicarPatrocinadores(Guid eventoId, IEnumerable<Guid> patrocinadores) 263 public void IndicarPatrocinadores(Guid eventoId, IEnumerable<Guid> patrocinadores)
264 { 264 {
265 var evento = GetEvento(eventoId); 265 var evento = GetEvento(eventoId);