Mercurial > altnet-hispano
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); |