Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs @ 183:212c664db5aa
Generalización del manejo de las acciones sobre eventos
author | nelopauselli |
---|---|
date | Mon, 08 Aug 2011 22:27:00 -0300 |
parents | beeb48ddb44a |
children | 2d02adb79322 |
rev | line source |
---|---|
25
e8d2be47a6b0
Cambios de nombre en Portal.Web (Agenda x Evento)
nelo@MTEySS.neluz.int
parents:
diff
changeset
|
1 using System; |
e8d2be47a6b0
Cambios de nombre en Portal.Web (Agenda x Evento)
nelo@MTEySS.neluz.int
parents:
diff
changeset
|
2 using System.Linq; |
e8d2be47a6b0
Cambios de nombre en Portal.Web (Agenda x Evento)
nelo@MTEySS.neluz.int
parents:
diff
changeset
|
3 using System.Web.Mvc; |
106
80c22175c9b5
agregado de tipo de evento (van, cafe, grupoestudio)
jorge.rowies
parents:
97
diff
changeset
|
4 using AltNetHispano.Agendas.Domain; |
34
475be11edf56
Ajuste en los nombre de los assemblies y namespaces
nelo@MTEySS.neluz.int
parents:
27
diff
changeset
|
5 using AltNetHispano.Agendas.Factories; |
475be11edf56
Ajuste en los nombre de los assemblies y namespaces
nelo@MTEySS.neluz.int
parents:
27
diff
changeset
|
6 using AltNetHispano.Agendas.Web.Models; |
25
e8d2be47a6b0
Cambios de nombre en Portal.Web (Agenda x Evento)
nelo@MTEySS.neluz.int
parents:
diff
changeset
|
7 |
34
475be11edf56
Ajuste en los nombre de los assemblies y namespaces
nelo@MTEySS.neluz.int
parents:
27
diff
changeset
|
8 namespace AltNetHispano.Agendas.Web.Controllers |
25
e8d2be47a6b0
Cambios de nombre en Portal.Web (Agenda x Evento)
nelo@MTEySS.neluz.int
parents:
diff
changeset
|
9 { |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
141
diff
changeset
|
10 public class EventoController : Controller |
117 | 11 { |
12 public ActionResult Index() | |
13 { | |
14 var agenda = AgendaFactory.GetAgenda(); | |
106
80c22175c9b5
agregado de tipo de evento (van, cafe, grupoestudio)
jorge.rowies
parents:
97
diff
changeset
|
15 |
117 | 16 var model = new EventoIndexModel |
118 | 17 { |
18 ProximosEventos = from e in agenda.GetEventosActivos() | |
19 orderby e.Fecha | |
20 select new EventoDto | |
21 { | |
22 Id = e.Id.ToString(), | |
23 Titulo = e.Titulo, | |
24 Fecha = e.Fecha.HasValue ? e.Fecha.Value.ToShortDateString() : string.Empty, | |
140
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
133
diff
changeset
|
25 Estado = e.Estado.Descripcion, |
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
133
diff
changeset
|
26 PuedeAgendar = e.Estado.PuedePromover(Accion.Agendar), |
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
133
diff
changeset
|
27 PuedeModificar = e.Estado.PuedePromover(Accion.Modificar), |
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
133
diff
changeset
|
28 PuedeConfirmar = e.Estado.PuedePromover(Accion.Confirmar), |
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
133
diff
changeset
|
29 PuedePublicar = e.Estado.PuedePromover(Accion.Publicar), |
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
133
diff
changeset
|
30 PuedeCancelar = e.Estado.PuedePromover(Accion.Cancelar), |
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
133
diff
changeset
|
31 PuedeDescartar = e.Estado.PuedePromover(Accion.Descartar), |
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
133
diff
changeset
|
32 PuedeReAgendar = e.Estado.PuedePromover(Accion.ReAgendar), |
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
133
diff
changeset
|
33 PuedeReProponer = e.Estado.PuedePromover(Accion.ReProponer) |
118 | 34 } |
35 }; | |
117 | 36 return View(model); |
37 } | |
25
e8d2be47a6b0
Cambios de nombre en Portal.Web (Agenda x Evento)
nelo@MTEySS.neluz.int
parents:
diff
changeset
|
38 |
179 | 39 [CustomAuthorize(Roles = Roles.Administrador)] |
118 | 40 public ActionResult Nuevo() |
117 | 41 { |
155
23aaf98b8377
Generalizando editores en EditorDefault basando los textos en recursos
Nelo@Guinea.neluz.int
parents:
145
diff
changeset
|
42 var model = new EventoNewModel {Fecha = DateTime.Now}; |
23aaf98b8377
Generalizando editores en EditorDefault basando los textos en recursos
Nelo@Guinea.neluz.int
parents:
145
diff
changeset
|
43 return View("Defaulteditor", model); |
117 | 44 } |
25
e8d2be47a6b0
Cambios de nombre en Portal.Web (Agenda x Evento)
nelo@MTEySS.neluz.int
parents:
diff
changeset
|
45 |
117 | 46 [HttpPost] |
179 | 47 [CustomAuthorize(Roles = Roles.Administrador)] |
118 | 48 public ActionResult Nuevo(EventoNewModel model) |
117 | 49 { |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
50 return |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
51 GenericAction( |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
52 (agenda, m) => agenda.Agendar(m.Titulo, m.Ponente, m.Fecha, m.UrlInvitacion, (TipoEvento) m.TipoEvento), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
53 m => View("Defaulteditor", m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
54 model); |
117 | 55 } |
25
e8d2be47a6b0
Cambios de nombre en Portal.Web (Agenda x Evento)
nelo@MTEySS.neluz.int
parents:
diff
changeset
|
56 |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
57 [CustomAuthorize(Roles = Roles.Administrador)] |
118 | 58 public ActionResult Confirmar(string id) |
117 | 59 { |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
60 return |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
61 GenericAction( |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
62 (agenda, m) => agenda.Confirmar(m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
63 m => View("Index", m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
64 new Guid(id)); |
117 | 65 } |
116
53bcd338542b
acciones de confirmar y publicar desde la UI
Nelo@Kenia.neluz.int
parents:
106
diff
changeset
|
66 |
179 | 67 [CustomAuthorize(Roles = Roles.Administrador)] |
118 | 68 public ActionResult Publicar(string id) |
117 | 69 { |
70 var agenda = AgendaFactory.GetAgenda(); | |
162 | 71 var evento = agenda.GetEvento(new Guid(id)); |
72 | |
73 var model = new EventoPublicarModel | |
74 { | |
75 Id = id, | |
76 Titulo = evento.Titulo, | |
77 NroOrden = 0, //TODO: Obtener el último y sumarle uno. | |
78 UrlWiki = evento.UrlWiki, | |
79 DuracionReal = new TimeSpan(0, 0, 0) | |
80 }; | |
166 | 81 return View("Defaulteditor", model); |
162 | 82 } |
117 | 83 |
162 | 84 [HttpPost] |
179 | 85 [CustomAuthorize(Roles = Roles.Administrador)] |
162 | 86 public ActionResult Publicar(EventoPublicarModel model) |
87 { | |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
88 return |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
89 GenericAction( |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
90 (agenda, m) => agenda.Publicar(new Guid(m.Id), m.NroOrden, m.UrlWiki, m.DuracionReal), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
91 m => View("Defaulteditor", m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
92 model); |
117 | 93 } |
116
53bcd338542b
acciones de confirmar y publicar desde la UI
Nelo@Kenia.neluz.int
parents:
106
diff
changeset
|
94 |
179 | 95 [CustomAuthorize(Roles = Roles.Administrador)] |
118 | 96 public ActionResult Modificar(string id) |
97 { | |
98 var agenda = AgendaFactory.GetAgenda(); | |
99 var evento = agenda.GetEvento(new Guid(id)); | |
100 | |
101 var model = new EventoEditModel | |
102 { | |
103 Id = id, | |
104 Titulo = evento.Titulo, | |
145
e6e6bfb1da9e
En la edición de un evento (nuevo, propuesta, modificación), el ponente se selecciona desde un combo.
Nelo@Guinea.neluz.int
parents:
144
diff
changeset
|
105 Ponente = evento.Ponente != null ? evento.Ponente.Id : Guid.Empty, |
118 | 106 Fecha = evento.Fecha, |
107 UrlInvitacion = evento.UrlInvitacion | |
108 }; | |
155
23aaf98b8377
Generalizando editores en EditorDefault basando los textos en recursos
Nelo@Guinea.neluz.int
parents:
145
diff
changeset
|
109 return View("Defaulteditor", model); |
118 | 110 } |
111 | |
117 | 112 [HttpPost] |
179 | 113 [CustomAuthorize(Roles = Roles.Administrador)] |
118 | 114 public ActionResult Modificar(EventoEditModel model) |
117 | 115 { |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
116 return |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
117 GenericAction( |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
118 (agenda, m) => agenda.ModificarEvento(new Guid(m.Id), m.Titulo, m.Ponente, m.Fecha.Value, m.UrlInvitacion), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
119 m => View("Defaulteditor", m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
120 model); |
117 | 121 } |
118 | 122 |
179 | 123 [CustomAuthorize(Roles = Roles.Administrador)] |
118 | 124 public ActionResult Agendar(string id) |
125 { | |
126 var agenda = AgendaFactory.GetAgenda(); | |
127 var evento = agenda.GetEvento(new Guid(id)); | |
128 | |
129 var model = new EventoAgendarModel | |
130 { | |
131 Id = id, | |
132 Titulo = evento.Titulo, | |
145
e6e6bfb1da9e
En la edición de un evento (nuevo, propuesta, modificación), el ponente se selecciona desde un combo.
Nelo@Guinea.neluz.int
parents:
144
diff
changeset
|
133 Ponente = evento.Ponente != null ? evento.Ponente.Id : Guid.Empty, |
118 | 134 Fecha = evento.Fecha, |
135 UrlInvitacion = evento.UrlInvitacion | |
136 }; | |
155
23aaf98b8377
Generalizando editores en EditorDefault basando los textos en recursos
Nelo@Guinea.neluz.int
parents:
145
diff
changeset
|
137 return View("Defaulteditor", model); |
118 | 138 } |
139 | |
140 [HttpPost] | |
179 | 141 [CustomAuthorize(Roles = Roles.Administrador)] |
118 | 142 public ActionResult Agendar(EventoAgendarModel model) |
143 { | |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
144 return |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
145 GenericAction( |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
146 (agenda, m) => agenda.ModificarEvento(new Guid(m.Id), m.Titulo, m.Ponente, m.Fecha.Value, m.UrlInvitacion), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
147 m => View("Defaulteditor", m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
148 model); |
118 | 149 } |
150 | |
179 | 151 [CustomAuthorize(Roles = Roles.Administrador)] |
118 | 152 public ActionResult Proponer() |
153 { | |
155
23aaf98b8377
Generalizando editores en EditorDefault basando los textos en recursos
Nelo@Guinea.neluz.int
parents:
145
diff
changeset
|
154 var model = new PropuestaNewModel(); |
23aaf98b8377
Generalizando editores en EditorDefault basando los textos en recursos
Nelo@Guinea.neluz.int
parents:
145
diff
changeset
|
155 return View("Defaulteditor", model); |
118 | 156 } |
157 | |
158 [HttpPost] | |
179 | 159 [CustomAuthorize(Roles = Roles.Administrador)] |
118 | 160 public ActionResult Proponer(PropuestaNewModel model) |
161 { | |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
162 return |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
163 GenericAction( |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
164 (agenda, m) => agenda.Proponer(m.Titulo, m.Ponente, m.UrlInvitacion, (TipoEvento)m.TipoEvento), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
165 m => View("Defaulteditor", m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
166 model); |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
167 } |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
168 |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
169 [CustomAuthorize(Roles = Roles.Administrador)] |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
170 public ActionResult Cancelar(string id) |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
171 { |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
172 return |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
173 GenericAction( |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
174 (agenda, m) => agenda.Cancelar(m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
175 m => View("Index", m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
176 new Guid(id)); |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
177 } |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
178 |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
179 [CustomAuthorize(Roles = Roles.Administrador)] |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
180 public ActionResult Descartar(string id) |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
181 { |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
182 return |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
183 GenericAction( |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
184 (agenda, m) => agenda.Descartar(m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
185 m => View("Index", m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
186 new Guid(id)); |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
187 } |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
188 |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
189 [CustomAuthorize(Roles = Roles.Administrador)] |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
190 public ActionResult ReAgendar(string id) |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
191 { |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
192 return |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
193 GenericAction( |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
194 (agenda, m) => agenda.ReAgendar(m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
195 m => View("Index", m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
196 new Guid(id)); |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
197 } |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
198 |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
199 [CustomAuthorize(Roles = Roles.Administrador)] |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
200 public ActionResult ReProponer(string id) |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
201 { |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
202 return |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
203 GenericAction( |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
204 (agenda, m) => agenda.ReProponer(m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
205 m => View("Index", m), |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
206 new Guid(id)); |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
207 } |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
208 |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
209 private ActionResult GenericAction<TModel>(Func<Agenda, TModel, EventoResultado> action, Func<TModel, ActionResult> actionresultOnFail, TModel model) |
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
210 { |
118 | 211 if (ModelState.IsValid) |
212 { | |
213 var agenda = AgendaFactory.GetAgenda(); | |
214 | |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
215 var r = action.Invoke(agenda, model); |
118 | 216 if (r.Succeful) |
167 | 217 { |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
218 this.AddNotification(r.Message); |
182
beeb48ddb44a
Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents:
179
diff
changeset
|
219 foreach (var log in r.Warnings) |
beeb48ddb44a
Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents:
179
diff
changeset
|
220 this.AddWarning(log.WarningMessage); |
118 | 221 return RedirectToAction("Index"); |
167 | 222 } |
118 | 223 ModelState.AddModelError("error", r.ToString()); |
224 } | |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
182
diff
changeset
|
225 return actionresultOnFail.Invoke(model); |
118 | 226 } |
179 | 227 |
118 | 228 |
117 | 229 } |
25
e8d2be47a6b0
Cambios de nombre en Portal.Web (Agenda x Evento)
nelo@MTEySS.neluz.int
parents:
diff
changeset
|
230 } |