Mercurial > altnet-hispano
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 } |