comparison Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 235:c61954d24c8c

Quitando ponente principal y utilizando siempre la lista de ponentes
author nelopauselli
date Tue, 04 Oct 2011 20:42:35 -0300
parents e5959f3405e0
children 51faeabfb9d9
comparison
equal deleted inserted replaced
231:e5959f3405e0 235:c61954d24c8c
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, Guid ponenteId, 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 && ponenteId == Guid.Empty) 53 if (evento.Tipo == TipoEvento.Van && (ponentesId == null || !ponentesId.Any()))
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 Persona persona = null;
57 if (ponenteId != Guid.Empty)
58 {
59 persona = _personaRepository.Get(ponenteId);
60 if (persona == null)
61 return new EventoResultado(false, string.Format("No se encontró el ponente indicado ({0})", ponenteId), null);
62 }
63
64 if (evento.Titulo != titulo) 56 if (evento.Titulo != titulo)
65 evento.CambiarTitulo(titulo); 57 evento.CambiarTitulo(titulo);
66 58
67 if (evento.FechaInicio == null && fechaInicio != null && evento.FechaTermino == null && fechaTermino != null) 59 if (evento.FechaInicio == null && fechaInicio != null && evento.FechaTermino == null && fechaTermino != null)
68 evento.Agendar(persona, fechaInicio, fechaTermino, urlInvitacion); 60 evento.Agendar(fechaInicio, fechaTermino, urlInvitacion);
69 else if (evento.FechaInicio != fechaInicio || evento.Ponente != persona || evento.UrlInvitacion != urlInvitacion || 61 else if (evento.FechaInicio != fechaInicio || evento.UrlInvitacion != urlInvitacion || evento.FechaTermino != fechaTermino)
70 evento.FechaTermino != fechaTermino) 62 evento.Actualizar(fechaInicio, fechaTermino, urlInvitacion);
71 evento.Actualizar(persona, fechaInicio, fechaTermino, urlInvitacion); 63
64 var r = ActualizarPonentes(evento, ponentesId);
65 if (!r.Succeful) return r;
72 66
73 Notify(evento); 67 Notify(evento);
74 68
75 var warnings = evento.GetLogsNews().Where(l => !l.Successful); 69 var warnings = evento.GetLogsNews().Where(l => !l.Successful);
76 70
77 return new EventoResultado(true,"Evento modificado", warnings); 71 return new EventoResultado(true,"Evento modificado", warnings);
78 } 72 }
79 73
80 public EventoResultado ModificarPropuesta(Guid id, string titulo, Guid ponenteId, string urlInvitacion) 74 public EventoResultado ModificarPropuesta(Guid id, string titulo, IEnumerable<Guid> ponentesId, string urlInvitacion)
81 { 75 {
82 return ModificarEvento(id, titulo, ponenteId, null, null, urlInvitacion); 76 return ModificarEvento(id, titulo, ponentesId, null, null, urlInvitacion);
83 } 77 }
84 78
85 public EventoResultado Proponer(string titulo, Guid? ponenteId, string urlInvitacion, TipoEvento tipo) 79 public EventoResultado Proponer(string titulo, IEnumerable<Guid> ponentesId, string urlInvitacion, TipoEvento tipo)
86 { 80 {
87 Persona persona = null; 81 if (string.IsNullOrWhiteSpace(titulo))
88 if (ponenteId.HasValue) 82 return new EventoResultado(false, "Debe indicar el título del evento", null);
89 persona = _personaRepository.Get(ponenteId.Value); 83
90 84 var evento = Evento.Proponer(titulo, urlInvitacion, tipo);
91 var evento = Evento.Proponer(titulo, persona, urlInvitacion, tipo); 85
92 86 var r = ActualizarPonentes(evento, ponentesId);
93 if (string.IsNullOrWhiteSpace(evento.Titulo)) 87 if (!r.Succeful) return r;
94 return new EventoResultado(false,"Debe indicar el título del evento", null);
95 88
96 Notify(evento); 89 Notify(evento);
97 90
98 _eventosRepository.Save(evento); 91 _eventosRepository.Save(evento);
99 92
100 var warnings = evento.GetLogsNews().Where(l => !l.Successful); 93 var warnings = evento.GetLogsNews().Where(l => !l.Successful);
101 94
102 return new EventoResultado(true,"Evento propuesto", warnings); 95 return new EventoResultado(true,"Evento propuesto", warnings);
103 } 96 }
104 97
105 public EventoResultado Agendar(string titulo, Guid ponenteId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion, TipoEvento tipo, IEnumerable<Guid> colaboradoresId = null) 98 public EventoResultado Agendar(string titulo, IEnumerable<Guid> ponentesId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion, TipoEvento tipo)
106 { 99 {
107 if (!fechaInicio.HasValue) 100 if (!fechaInicio.HasValue)
108 return new EventoResultado(false, "Debe indicar la fecha", null); 101 return new EventoResultado(false, "Debe indicar la fecha", null);
109 if (!fechaTermino.HasValue) 102 if (!fechaTermino.HasValue)
110 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);
111 if (tipo==TipoEvento.Van && ponenteId == Guid.Empty) 104 if (tipo==TipoEvento.Van && (ponentesId == null || !ponentesId.Any()))
112 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);
113
114 Persona persona = null;
115 if (ponenteId != Guid.Empty)
116 {
117 persona = _personaRepository.Get(ponenteId);
118 if (persona == null)
119 return new EventoResultado(false, string.Format("No se encontró el ponente indicado ({0})", ponenteId), null);
120 }
121 106
122 var existeOtroEvento = _eventosRepository.GetNoPropuestoByTitulo(titulo); 107 var existeOtroEvento = _eventosRepository.GetNoPropuestoByTitulo(titulo);
123 if (existeOtroEvento != null) 108 if (existeOtroEvento != null)
124 return new EventoResultado(false, 109 return new EventoResultado(false,
125 string.Format( 110 string.Format(
135 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);
136 } 121 }
137 } 122 }
138 123
139 if (evento == null) 124 if (evento == null)
140 evento = Evento.Agendar(titulo, persona, fechaInicio.Value, fechaTermino.Value, urlInvitacion, tipo); 125 evento = Evento.Agendar(titulo, fechaInicio.Value, fechaTermino.Value, urlInvitacion, tipo);
141 else 126 else
142 evento.Agendar(persona, fechaInicio, fechaTermino, urlInvitacion); 127 evento.Agendar(fechaInicio, fechaTermino, urlInvitacion);
143 128
144 var colaboradores = new List<Persona>(); 129 var r = ActualizarPonentes(evento, ponentesId);
145 if (colaboradoresId!=null) 130 if (!r.Succeful) return r;
146 {
147 foreach (var colaboradorId in colaboradoresId)
148 {
149 var colaborador = _personaRepository.Get(colaboradorId);
150 if (colaborador == null)
151 return new EventoResultado(false, string.Format("No se encontró el colaborador indicado ({0})", colaboradorId),
152 null);
153 colaboradores.Add(colaborador);
154 }
155 evento.ActualizarOtrosPonentes(colaboradores);
156 }
157 131
158 Notify(evento); 132 Notify(evento);
159 133
160 _eventosRepository.Save(evento); 134 _eventosRepository.Save(evento);
161 135
162 var warnings = evento.GetLogsNews().Where(l => !l.Successful); 136 var warnings = evento.GetLogsNews().Where(l => !l.Successful);
163 137
164 return new EventoResultado(true, "Evento creado", warnings); 138 return new EventoResultado(true, "Evento creado", warnings);
165 } 139 }
166 140
167 public EventoResultado Confirmar(Guid eventoId) 141 private EventoResultado ActualizarPonentes(Evento evento, IEnumerable<Guid> ponentesId)
142 {
143 var ponentes = new List<Persona>();
144 if (ponentesId != null)
145 {
146 foreach (var ponenteId in ponentesId.Where(id=>id!=Guid.Empty))
147 {
148 var colaborador = _personaRepository.Get(ponenteId);
149 if (colaborador == null)
150 return new EventoResultado(false, string.Format("No se encontró el colaborador indicado ({0})", ponenteId),
151 null);
152 ponentes.Add(colaborador);
153 }
154 evento.ActualizarOtrosPonentes(ponentes);
155 }
156 return new EventoResultado(true, "Ponentes actualizados", null);
157 }
158
159 public EventoResultado Confirmar(Guid eventoId)
168 { 160 {
169 Evento evento = GetEvento(eventoId); 161 Evento evento = GetEvento(eventoId);
170 162
171 evento.Confirmar(); 163 evento.Confirmar();
172 164