Mercurial > altnet-hispano
changeset 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 | 2a336a6a76b5 |
files | Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Domain/Resultado.cs Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Agendas/trunk/src/Agendas.Web.Tests/AutorizationsTests.cs Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Agendas/trunk/src/Agendas.Web/Views/Evento/Index.cshtml |
diffstat | 6 files changed, 100 insertions(+), 166 deletions(-) [+] |
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Mon Aug 08 21:57:10 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Mon Aug 08 22:27:00 2011 -0300 @@ -63,7 +63,7 @@ var warnings = evento.GetLogsNews().Where(l => !l.Successful); - return new EventoResultado(true, warnings); + return new EventoResultado(true,"Evento modificado", warnings); } public EventoResultado ModificarPropuesta(Guid id, string titulo, Guid ponenteId, string urlInvitacion) @@ -80,7 +80,7 @@ var evento = Evento.Proponer(titulo, persona, urlInvitacion, tipo); if (string.IsNullOrWhiteSpace(evento.Titulo)) - return new EventoResultado(false, null); + return new EventoResultado(false,"Debe indicar el título del evento", null); Notify(evento); @@ -88,18 +88,17 @@ var warnings = evento.GetLogsNews().Where(l => !l.Successful); - return new EventoResultado(true, warnings); + return new EventoResultado(true,"Evento propuesto", warnings); } public EventoResultado Agendar(string titulo, Guid ponenteId, DateTime? fecha, string urlInvitacion, TipoEvento tipo) { if (!fecha.HasValue) - return new EventoResultado(false, null); + return new EventoResultado(false, "Debe indicar la fecha", null); Persona persona = _personaRepository.Get(ponenteId); if (persona == null) - return new EventoResultado(false, null) - {Message = string.Format("No se encontró el ponente indicado ({0})", ponenteId)}; + return new EventoResultado(false, string.Format("No se encontró el ponente indicado ({0})", ponenteId), null); Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo); if (evento == null) @@ -113,7 +112,7 @@ var warnings = evento.GetLogsNews().Where(l => !l.Successful); - return new EventoResultado(true, warnings); + return new EventoResultado(true, "Evento creado", warnings); } public EventoResultado Confirmar(Guid eventoId) @@ -128,7 +127,7 @@ var warnings = evento.GetLogsNews().Where(l => !l.Successful); - return new EventoResultado(true, warnings); + return new EventoResultado(true, "Evento confirmado", warnings); } public EventoResultado Publicar(Guid eventoId, short numeroOrden, string urlWiki, TimeSpan duracion) @@ -152,7 +151,7 @@ var warnings = evento.GetLogsNews().Where(l => !l.Successful); - return new EventoResultado(true, warnings); + return new EventoResultado(true, "Evento publicado", warnings); } public EventoResultado Cancelar(Guid eventoId) @@ -167,7 +166,7 @@ var warnings = evento.GetLogsNews().Where(l => !l.Successful); - return new EventoResultado(true, warnings); + return new EventoResultado(true,"Evento cancelado", warnings); } public EventoResultado Descartar(Guid eventoId) @@ -182,7 +181,7 @@ var warnings = evento.GetLogsNews().Where(l => !l.Successful); - return new EventoResultado(true, warnings); + return new EventoResultado(true, "Evento descartado", warnings); } public EventoResultado ReProponer(Guid eventoId) @@ -197,7 +196,7 @@ var warnings = evento.GetLogsNews().Where(l => !l.Successful); - return new EventoResultado(true, warnings); + return new EventoResultado(true,"Evento re-prpuesto", warnings); } public EventoResultado ReAgendar(Guid eventoId) @@ -212,7 +211,7 @@ var warnings = evento.GetLogsNews().Where(l => !l.Successful); - return new EventoResultado(true, warnings); + return new EventoResultado(true,"Evento re-agendado", warnings); } public void IndicarPatrocinadores(Guid eventoId, IEnumerable<Guid> patrocinadores)
--- a/Agendas/trunk/src/Agendas.Domain/Resultado.cs Mon Aug 08 21:57:10 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Resultado.cs Mon Aug 08 22:27:00 2011 -0300 @@ -4,9 +4,10 @@ { public class Resultado { - public Resultado(bool succeful) + public Resultado(bool succeful, string message) { Succeful = succeful; + Message = message; } public bool Succeful { get; private set; } @@ -15,8 +16,8 @@ public class EventoResultado : Resultado { - public EventoResultado(bool succeful, IEnumerable<TrackLog> warnings) - : base(succeful) + public EventoResultado(bool succeful, string message, IEnumerable<TrackLog> warnings) + : base(succeful, message) { Warnings = warnings ?? new List<TrackLog>(); }
--- a/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Mon Aug 08 21:57:10 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Mon Aug 08 22:27:00 2011 -0300 @@ -99,15 +99,14 @@ _personaRepository.Save(persona); - return new Resultado(true); + return new Resultado(true, "Persona Agregada"); } public Resultado Update(Guid id, string nombre, string twitter, string mail, string blog, IEnumerable<string> roles) { var persona = _personaRepository.Get(id); if (persona == null) - return new Resultado(false) - {Message = string.Format("No se pudo encontrar la persona cuyo Id sea {0}", id)}; + return new Resultado(false, string.Format("No se pudo encontrar la persona cuyo Id sea {0}", id)); persona.Nombre = nombre; persona.Twitter = twitter; @@ -125,7 +124,7 @@ } } - return new Resultado(true); + return new Resultado(true, "Datos actualizados"); } } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web.Tests/AutorizationsTests.cs Mon Aug 08 21:57:10 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web.Tests/AutorizationsTests.cs Mon Aug 08 22:27:00 2011 -0300 @@ -25,7 +25,7 @@ { var temp = controller.GetMethods(BindingFlags.Public | BindingFlags.Instance | ~BindingFlags.FlattenHierarchy).Where( - m => typeof (ActionResult).IsAssignableFrom(m.ReturnType)); + m => !m.IsPrivate && typeof (ActionResult).IsAssignableFrom(m.ReturnType)); methods.AddRange(temp); }
--- a/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Mon Aug 08 21:57:10 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Mon Aug 08 22:27:00 2011 -0300 @@ -47,40 +47,21 @@ [CustomAuthorize(Roles = Roles.Administrador)] public ActionResult Nuevo(EventoNewModel model) { - if (ModelState.IsValid) - { - var agenda = AgendaFactory.GetAgenda(); - - var r = agenda.Agendar(model.Titulo, model.Ponente, model.Fecha, - model.UrlInvitacion, (TipoEvento)model.TipoEvento); - if (r.Succeful) - { - this.AddNotification("Evento creado"); - foreach (var log in r.Warnings) - this.AddWarning(log.WarningMessage); - return RedirectToAction("Index"); - } - ModelState.AddModelError("error", r.ToString()); - } - return View("Defaulteditor", model); + return + GenericAction( + (agenda, m) => agenda.Agendar(m.Titulo, m.Ponente, m.Fecha, m.UrlInvitacion, (TipoEvento) m.TipoEvento), + m => View("Defaulteditor", m), + model); } - [CustomAuthorize(Roles = Roles.Administrador)] + [CustomAuthorize(Roles = Roles.Administrador)] public ActionResult Confirmar(string id) { - var agenda = AgendaFactory.GetAgenda(); - - var r = agenda.Confirmar(new Guid(id)); - if (r.Succeful) - { - this.AddNotification("Evento confirmado"); - foreach (var log in r.Warnings) - this.AddWarning(log.WarningMessage); - } - else - this.AddError("Evento confirmado"); - - return RedirectToAction("Index"); + return + GenericAction( + (agenda, m) => agenda.Confirmar(m), + m => View("Index", m), + new Guid(id)); } [CustomAuthorize(Roles = Roles.Administrador)] @@ -104,21 +85,11 @@ [CustomAuthorize(Roles = Roles.Administrador)] public ActionResult Publicar(EventoPublicarModel model) { - if (ModelState.IsValid) - { - var agenda = AgendaFactory.GetAgenda(); - - var r = agenda.Publicar(new Guid(model.Id), model.NroOrden, model.UrlWiki, model.DuracionReal); - if (r.Succeful) - { - this.AddNotification(string.Format("Evento publicado {0}", model.Titulo)); - foreach (var log in r.Warnings) - this.AddWarning(log.WarningMessage); - return RedirectToAction("Index"); - } - ModelState.AddModelError("error", r.ToString()); - } - return View("Defaulteditor", model); + return + GenericAction( + (agenda, m) => agenda.Publicar(new Guid(m.Id), m.NroOrden, m.UrlWiki, m.DuracionReal), + m => View("Defaulteditor", m), + model); } [CustomAuthorize(Roles = Roles.Administrador)] @@ -142,21 +113,11 @@ [CustomAuthorize(Roles = Roles.Administrador)] public ActionResult Modificar(EventoEditModel model) { - if (ModelState.IsValid) - { - var agenda = AgendaFactory.GetAgenda(); - - var r = agenda.ModificarEvento(new Guid(model.Id), model.Titulo, model.Ponente, model.Fecha.Value, model.UrlInvitacion); - if (r.Succeful) - { - this.AddNotification("evento modificado"); - foreach (var log in r.Warnings) - this.AddWarning(log.WarningMessage); - return RedirectToAction("Index"); - } - ModelState.AddModelError("error", r.ToString()); - } - return View("Defaulteditor", model); + return + GenericAction( + (agenda, m) => agenda.ModificarEvento(new Guid(m.Id), m.Titulo, m.Ponente, m.Fecha.Value, m.UrlInvitacion), + m => View("Defaulteditor", m), + model); } [CustomAuthorize(Roles = Roles.Administrador)] @@ -180,27 +141,16 @@ [CustomAuthorize(Roles = Roles.Administrador)] public ActionResult Agendar(EventoAgendarModel model) { - if (ModelState.IsValid) - { - var agenda = AgendaFactory.GetAgenda(); - - var r = agenda.ModificarEvento(new Guid(model.Id), model.Titulo, model.Ponente, model.Fecha.Value, model.UrlInvitacion); - if (r.Succeful) - { - this.AddNotification("evento agendado"); - foreach (var log in r.Warnings) - this.AddWarning(log.WarningMessage); - return RedirectToAction("Index"); - } - ModelState.AddModelError("error", r.ToString()); - } - return View("Defaulteditor", model); + return + GenericAction( + (agenda, m) => agenda.ModificarEvento(new Guid(m.Id), m.Titulo, m.Ponente, m.Fecha.Value, m.UrlInvitacion), + m => View("Defaulteditor", m), + model); } [CustomAuthorize(Roles = Roles.Administrador)] public ActionResult Proponer() { - throw new NotImplementedException(); var model = new PropuestaNewModel(); return View("Defaulteditor", model); } @@ -209,89 +159,72 @@ [CustomAuthorize(Roles = Roles.Administrador)] public ActionResult Proponer(PropuestaNewModel model) { - throw new NotImplementedException(); + return + GenericAction( + (agenda, m) => agenda.Proponer(m.Titulo, m.Ponente, m.UrlInvitacion, (TipoEvento)m.TipoEvento), + m => View("Defaulteditor", m), + model); + } + + [CustomAuthorize(Roles = Roles.Administrador)] + public ActionResult Cancelar(string id) + { + return + GenericAction( + (agenda, m) => agenda.Cancelar(m), + m => View("Index", m), + new Guid(id)); + } + + [CustomAuthorize(Roles = Roles.Administrador)] + public ActionResult Descartar(string id) + { + return + GenericAction( + (agenda, m) => agenda.Descartar(m), + m => View("Index", m), + new Guid(id)); + } + + [CustomAuthorize(Roles = Roles.Administrador)] + public ActionResult ReAgendar(string id) + { + return + GenericAction( + (agenda, m) => agenda.ReAgendar(m), + m => View("Index", m), + new Guid(id)); + } + + [CustomAuthorize(Roles = Roles.Administrador)] + public ActionResult ReProponer(string id) + { + return + GenericAction( + (agenda, m) => agenda.ReProponer(m), + m => View("Index", m), + new Guid(id)); + } + + private ActionResult GenericAction<TModel>(Func<Agenda, TModel, EventoResultado> action, Func<TModel, ActionResult> actionresultOnFail, TModel model) + { if (ModelState.IsValid) { var agenda = AgendaFactory.GetAgenda(); - var r = agenda.Proponer(model.Titulo, model.Ponente, model.UrlInvitacion, (TipoEvento)model.TipoEvento); + var r = action.Invoke(agenda, model); if (r.Succeful) { - this.AddNotification("Evento propuesto"); + this.AddNotification(r.Message); foreach (var log in r.Warnings) this.AddWarning(log.WarningMessage); return RedirectToAction("Index"); } ModelState.AddModelError("error", r.ToString()); } - return View("Defaulteditor", model); + return actionresultOnFail.Invoke(model); } - [CustomAuthorize(Roles = Roles.Administrador)] - public ActionResult Cancelar(string id) - { - var agenda = AgendaFactory.GetAgenda(); - var r = agenda.Cancelar(new Guid(id)); - if (r.Succeful) - { - this.AddNotification("Evento cancelado"); - foreach (var log in r.Warnings) - this.AddWarning(log.WarningMessage); - } - else - this.AddError(r.Message); - return RedirectToAction("Index"); - } - - [CustomAuthorize(Roles = Roles.Administrador)] - public ActionResult Descartar(string id) - { - var agenda = AgendaFactory.GetAgenda(); - var r = agenda.Descartar(new Guid(id)); - - if (r.Succeful) - {this.AddNotification("Evento descartado"); - foreach (var log in r.Warnings) - this.AddWarning(log.WarningMessage); - } - else - this.AddError(r.Message); - return RedirectToAction("Index"); - } - - [CustomAuthorize(Roles = Roles.Administrador)] - public ActionResult ReAgendar(string id) - { - var agenda = AgendaFactory.GetAgenda(); - var r = agenda.ReAgendar(new Guid(id)); - - if (r.Succeful) - {this.AddNotification("Evento re-agendado"); - foreach (var log in r.Warnings) - this.AddWarning(log.WarningMessage); - } - else - this.AddError(r.Message); - - return RedirectToAction("Index"); - } - - [CustomAuthorize(Roles = Roles.Administrador)] - public ActionResult ReProponer(string id) - { - var agenda = AgendaFactory.GetAgenda(); - var r = agenda.ReProponer(new Guid(id)); - - if (r.Succeful) - { - this.AddNotification("Evento re-propuesto"); - foreach (var log in r.Warnings) - this.AddWarning(log.WarningMessage); - } - else - this.AddError(r.Message); - return RedirectToAction("Index"); - } } }
--- a/Agendas/trunk/src/Agendas.Web/Views/Evento/Index.cshtml Mon Aug 08 21:57:10 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Views/Evento/Index.cshtml Mon Aug 08 22:27:00 2011 -0300 @@ -56,11 +56,13 @@ @Html.ActionLink("Re-Agendar", "ReAgendar", new { id = item.Id }) <span> </span> } + <!-- @if (item.PuedeReProponer) { @Html.ActionLink("Re-Proponer", "ReProponer", new { id = item.Id }) <span> </span> } + --> </td> </tr> }