changeset 14:ed6d842abf42

Modificar evento
author nelo@MTEySS.neluz.int
date Sun, 13 Mar 2011 20:49:15 -0300
parents da95298db862
children 08b9e96132a5
files Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Agendas/trunk/src/Agendas.Web/Controllers/AgendaController.cs Agendas/trunk/src/Agendas.Web/Models/AgendaModel.cs Agendas/trunk/src/Agendas.Web/Views/Agenda/Edit.cshtml
diffstat 5 files changed, 97 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Sun Mar 13 20:24:20 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Sun Mar 13 20:49:15 2011 -0300
@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Linq;
 using AltNetHispano.Agendas.Domain.Exceptions;
 
 namespace AltNetHispano.Agendas.Domain
@@ -36,6 +37,9 @@
             if (string.IsNullOrWhiteSpace(evento.Ponente))
                 throw new ValidationException();
 
+			//TODO: persistir el evento!
+			if (evento.Id==Guid.Empty) evento.Id = Guid.NewGuid();
+
             _eventosPublicados.Add(evento);
 		}
 
@@ -68,9 +72,28 @@
             return seguridad == null || seguridad.GetPrincipal() == null || seguridad.GetPrincipal().Identity == null
                 || string.IsNullOrWhiteSpace(seguridad.GetPrincipal().Identity.Name);
         }
-    }
+
+		public void ModificarEvento(Guid id, string titulo, string ponente, DateTime? fecha)
+		{
+			var evento = _eventosPublicados.SingleOrDefault(e => e.Id == id);
+			if (evento == null)
+				throw new EventoNotFoundException();
+			evento.Titulo = titulo;
+			evento.Ponente = ponente;
+			evento.Fecha = fecha;
+		}
 
-    public class UsuarioNoAutenticadoException : Exception
+		public Evento GetEventoPublicado(Guid id)
+		{
+			return _eventosPublicados.SingleOrDefault(e => e.Id == id);
+		}
+	}
+
+	public class EventoNotFoundException : Exception
+	{
+	}
+
+	public class UsuarioNoAutenticadoException : Exception
     {
     }
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj	Sun Mar 13 20:24:20 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj	Sun Mar 13 20:49:15 2011 -0300
@@ -136,6 +136,9 @@
       <Name>Agendas.Domain</Name>
     </ProjectReference>
   </ItemGroup>
+  <ItemGroup>
+    <Content Include="Views\Agenda\Edit.cshtml" />
+  </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
--- a/Agendas/trunk/src/Agendas.Web/Controllers/AgendaController.cs	Sun Mar 13 20:24:20 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Controllers/AgendaController.cs	Sun Mar 13 20:49:15 2011 -0300
@@ -52,5 +52,39 @@
             }
             return View(model);
         }
+
+		public ActionResult Edit(string id)
+		{
+			var agenda = AgendaFactory.GetAgenda();
+			var evento = agenda.GetEventoPublicado(new Guid(id));
+			if (evento!=null)
+			{
+				var model = new AgendaEditModel {Id = id, Titulo = evento.Titulo, Ponente = evento.Ponente, Fecha = evento.Fecha};
+				return View(model);
+			}
+			ModelState.AddModelError("error","No se encontró el evento que quiere modificar");
+			return View();
+		}
+
+		[HttpPost]
+		public ActionResult Edit(AgendaEditModel model)
+		{
+			if (ModelState.IsValid)
+			{
+				var agenda = AgendaFactory.GetAgenda();
+
+				try
+				{
+					agenda.ModificarEvento(new Guid(model.Id), model.Titulo, model.Ponente, model.Fecha);
+
+					return View("Index", GetIndexModel());
+				}
+				catch (ValidationException ex)
+				{
+					ModelState.AddModelError("error", ex.ToString());
+				}
+			}
+			return View(model);
+		}
     }
 }
--- a/Agendas/trunk/src/Agendas.Web/Models/AgendaModel.cs	Sun Mar 13 20:24:20 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Models/AgendaModel.cs	Sun Mar 13 20:49:15 2011 -0300
@@ -34,7 +34,7 @@
         public string Ponente { get; set; }
 
         [Required(ErrorMessage = "debe ingresar la fecha del evento")]
-        public DateTime Fecha { get; set; }
+        public DateTime? Fecha { get; set; }
     }
     
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Web/Views/Agenda/Edit.cshtml	Sun Mar 13 20:49:15 2011 -0300
@@ -0,0 +1,34 @@
+@model Agendas.Web.Models.AgendaEditModel
+@{
+    ViewBag.Title = "Agenda";
+}
+
+<p>
+    Modifique los datos que desea corregir y presione guardar
+</p>
+
+<link href="@Url.Content("~/Content/themes/base/jquery-ui.css")" rel="stylesheet" type="text/css" />
+<script src="@Url.Content("~/Scripts/jquery-ui.js")" type="text/javascript"></script>
+
+<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
+<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
+
+<script type="text/javascript">
+	$(document).ready(function () {
+		$("#Fecha").datepicker({ dateFormat: 'dd-mm-yy' });
+	});
+</script>
+
+@using (Html.BeginForm())
+{
+    @Html.ValidationSummary(true, "Los datos ingresados no son validos, por favor verifíquelos")
+    <div>
+        <fieldset>
+            <legend>Datos del evento:</legend>
+            @Html.EditorForModel()
+            <p>
+                <input type="submit" value="Guardar" />
+            </p>
+        </fieldset>
+    </div>
+}
\ No newline at end of file