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>&nbsp;</span>
 						}
+						<!--
 						@if (item.PuedeReProponer)
 						{
 							@Html.ActionLink("Re-Proponer", "ReProponer", new { id = item.Id })
 							<span>&nbsp;</span>
 						}
+						-->
 					</td>
 				</tr>
 			}