Mercurial > altnet-hispano
changeset 26:71b02443450a
UI de Propuestas de VANs
author | nelo@MTEySS.neluz.int |
---|---|
date | Tue, 15 Mar 2011 08:45:00 -0300 |
parents | e8d2be47a6b0 |
children | 29b8a8893ba3 |
files | Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Agendas/trunk/src/Agendas.Web/Controllers/PropuestaController.cs Agendas/trunk/src/Agendas.Web/Models/AgendaModel.cs Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Agendas/trunk/src/Agendas.Web/Models/PropuestaModel.cs Agendas/trunk/src/Agendas.Web/Views/Evento/Edit.cshtml Agendas/trunk/src/Agendas.Web/Views/Propuesta/Edit.cshtml Agendas/trunk/src/Agendas.Web/Views/Propuesta/Index.cshtml Agendas/trunk/src/Agendas.Web/Views/Propuesta/New.cshtml Agendas/trunk/src/Agendas.Web/Views/Shared/_Layout.cshtml |
diffstat | 13 files changed, 297 insertions(+), 58 deletions(-) [+] |
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Tue Mar 15 08:24:18 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Tue Mar 15 08:45:00 2011 -0300 @@ -48,15 +48,17 @@ _recordador.Recordar(evento); } - public void Proponer(string titulo) + public void Proponer(string titulo, string ponenteNombre) { - var evento = new Evento {Titulo = titulo}; + var ponente = GetPonente(ponenteNombre); + var evento = new Evento {Titulo = titulo, Ponente = ponente}; if (string.IsNullOrWhiteSpace(evento.Titulo)) throw new ValidationException(); if (NoEstaAutenticado(_seguridad)) throw new UsuarioNoAutenticadoException(); _eventosRepository.Save(evento); + _ponenteRepository.Save(ponente); } public IList<Evento> GetEventosPropuestos() @@ -88,7 +90,7 @@ evento.Fecha = fecha; } - public Evento GetEventoPublicado(Guid id) + public Evento GetEvento(Guid id) { return _eventosRepository.Get(id); } @@ -104,6 +106,10 @@ return _ponenteRepository.GetByNombre(nombre) ?? new Ponente { Nombre = nombre }; } + public void ModificarPropuesta(Guid id, string titulo, string ponenteNombre) + { + ModificarEvento(id, titulo, ponenteNombre, null); + } } public class EventoNotFoundException : Exception
--- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Tue Mar 15 08:24:18 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Tue Mar 15 08:45:00 2011 -0300 @@ -19,7 +19,7 @@ var agenda = new Agenda(null, null, seguridad.Object, DefaultEventoRepository, DefaultPonenteRepository); seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles()); - agenda.Proponer("Van propuesta"); + agenda.Proponer("Van propuesta", null); IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos(); Assert.IsNotNull(eventosPropuestos); @@ -32,7 +32,7 @@ { var agenda = new Agenda(null, null, SeguridadServiceDefault, DefaultEventoRepository, DefaultPonenteRepository); - agenda.Proponer("Van propuesta"); + agenda.Proponer("Van propuesta", null); agenda.Publicar("Van publicada", "jjmontes", DateTime.Now); IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos(); @@ -49,8 +49,8 @@ var seguridad = new Mock<ISeguridad>(); var agenda = new Agenda(null, null, seguridad.Object, repository.Object, DefaultPonenteRepository); - - Assert.Throws<ValidationException>(() => agenda.Proponer(string.Empty)); + + Assert.Throws<ValidationException>(() => agenda.Proponer(string.Empty, null)); repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); } @@ -64,7 +64,7 @@ seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles()); { - agenda.Proponer("Van propuesta"); + agenda.Proponer("Van propuesta", null); } { @@ -83,7 +83,7 @@ seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles()); { - agenda.Proponer("Van propuesta"); + agenda.Proponer("Van propuesta", null); } {
--- a/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Tue Mar 15 08:24:18 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Tue Mar 15 08:45:00 2011 -0300 @@ -60,12 +60,14 @@ <Compile Include="Controllers\AccountController.cs" /> <Compile Include="Controllers\EventoController.cs" /> <Compile Include="Controllers\HomeController.cs" /> + <Compile Include="Controllers\PropuestaController.cs" /> <Compile Include="Global.asax.cs"> <DependentUpon>Global.asax</DependentUpon> </Compile> <Compile Include="HttpContextIdentityProvider.asax.cs" /> <Compile Include="Models\AccountModels.cs" /> - <Compile Include="Models\AgendaModel.cs" /> + <Compile Include="Models\EventoModel.cs" /> + <Compile Include="Models\PropuestaModel.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> @@ -146,6 +148,15 @@ <ItemGroup> <Content Include="Views\Evento\Edit.cshtml" /> </ItemGroup> + <ItemGroup> + <Content Include="Views\Propuesta\Edit.cshtml" /> + </ItemGroup> + <ItemGroup> + <Content Include="Views\Propuesta\Index.cshtml" /> + </ItemGroup> + <ItemGroup> + <Content Include="Views\Propuesta\New.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/EventoController.cs Tue Mar 15 08:24:18 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Tue Mar 15 08:45:00 2011 -0300 @@ -58,7 +58,7 @@ public ActionResult Edit(string id) { var agenda = AgendaFactory.GetAgenda(); - var evento = agenda.GetEventoPublicado(new Guid(id)); + var evento = agenda.GetEvento(new Guid(id)); if (evento!=null) { var model = new EventoEditModel
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/PropuestaController.cs Tue Mar 15 08:45:00 2011 -0300 @@ -0,0 +1,98 @@ +using System; +using System.Linq; +using System.Web.Mvc; +using Agendas.Factories; +using Agendas.Web.Models; +using AltNetHispano.Agendas.Domain.Exceptions; + +namespace Agendas.Web.Controllers +{ + public class PropuestaController : Controller + { + public ActionResult Index() + { + var model = GetIndexModel(); + return View(model); + } + + private static PropuestaIndexModel GetIndexModel() + { + var agenda = AgendaFactory.GetAgenda(); + + return new PropuestaIndexModel + { + Propuestas = from e in agenda.GetEventosPropuestos() + select new PropuestaDto {Id = e.Id.ToString(), Titulo = e.Titulo, Ponente = e.Ponente.Nombre} + }; + } + + [Authorize] + public ActionResult New() + { + return View(); + } + + [HttpPost] + [Authorize] + public ActionResult New(PropuestaNewModel model) + { + if (ModelState.IsValid) + { + var agenda = AgendaFactory.GetAgenda(); + + try + { + agenda.Proponer(model.Titulo, model.Ponente); + + return View("Index", GetIndexModel()); + } + catch (ValidationException ex) + { + ModelState.AddModelError("error", ex.ToString()); + } + } + return View(model); + } + + [Authorize] + public ActionResult Edit(string id) + { + var agenda = AgendaFactory.GetAgenda(); + var propuesta = agenda.GetEvento(new Guid(id)); + if (propuesta != null) + { + var model = new PropuestaEditModel + { + Id = id, + Titulo = propuesta.Titulo, + Ponente = propuesta.Ponente != null ? propuesta.Ponente.Nombre : string.Empty + }; + return View(model); + } + ModelState.AddModelError("error", "No se encontró el Propuesta que quiere modificar"); + return View(); + } + + [HttpPost] + [Authorize] + public ActionResult Edit(PropuestaEditModel model) + { + if (ModelState.IsValid) + { + var agenda = AgendaFactory.GetAgenda(); + + try + { + agenda.ModificarPropuesta(new Guid(model.Id), model.Titulo, model.Ponente); + + return View("Index", GetIndexModel()); + } + catch (ValidationException ex) + { + ModelState.AddModelError("error", ex.ToString()); + } + } + return View(model); + } + } +} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Models/AgendaModel.cs Tue Mar 15 08:24:18 2011 -0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Web.Mvc; - -namespace Agendas.Web.Models -{ - public class EventoIndexModel - { - public IEnumerable<EventoDto> ProximosEventos { get; set; } - } - - public class EventoNewModel - { - [Required(ErrorMessage = "debe ingresar el título")] - public string Titulo { get; set; } - - [Required(ErrorMessage = "debe ingresar el nombre del ponente")] - public string Ponente { get; set; } - - [Required(ErrorMessage = "debe ingresar la fecha del evento")] - public DateTime Fecha { get; set; } - } - - public class EventoEditModel - { - [HiddenInput(DisplayValue = false)] - public string Id { get; set; } - - [Required(ErrorMessage = "debe ingresar el título")] - public string Titulo { get; set; } - - [Required(ErrorMessage = "debe ingresar el nombre del ponente")] - public string Ponente { get; set; } - - [Required(ErrorMessage = "debe ingresar la fecha del evento")] - public DateTime? Fecha { get; set; } - } - - - public class EventoDto - { - public string Id { get; set; } - public string Titulo { get; set; } - } -} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Tue Mar 15 08:45:00 2011 -0300 @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Web.Mvc; + +namespace Agendas.Web.Models +{ + public class EventoIndexModel + { + public IEnumerable<EventoDto> ProximosEventos { get; set; } + } + + public class EventoNewModel + { + [Required(ErrorMessage = "debe ingresar el título")] + public string Titulo { get; set; } + + [Required(ErrorMessage = "debe ingresar el nombre del ponente")] + public string Ponente { get; set; } + + [Required(ErrorMessage = "debe ingresar la fecha del evento")] + public DateTime Fecha { get; set; } + } + + public class EventoEditModel + { + [HiddenInput(DisplayValue = false)] + public string Id { get; set; } + + [Required(ErrorMessage = "debe ingresar el título")] + public string Titulo { get; set; } + + [Required(ErrorMessage = "debe ingresar el nombre del ponente")] + public string Ponente { get; set; } + + [Required(ErrorMessage = "debe ingresar la fecha del evento")] + public DateTime? Fecha { get; set; } + } + + + public class EventoDto + { + public string Id { get; set; } + public string Titulo { get; set; } + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Models/PropuestaModel.cs Tue Mar 15 08:45:00 2011 -0300 @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Web.Mvc; + +namespace Agendas.Web.Models +{ + public class PropuestaIndexModel + { + public IEnumerable<PropuestaDto> Propuestas { get; set; } + } + + public class PropuestaNewModel + { + [Required(ErrorMessage = "debe ingresar el título")] + public string Titulo { get; set; } + + public string Ponente { get; set; } + } + + public class PropuestaEditModel + { + [HiddenInput(DisplayValue = false)] + public string Id { get; set; } + + [Required(ErrorMessage = "debe ingresar el título")] + public string Titulo { get; set; } + + public string Ponente { get; set; } + } + + + public class PropuestaDto + { + public string Id { get; set; } + public string Titulo { get; set; } + public string Ponente { get; set; } + } +} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Views/Evento/Edit.cshtml Tue Mar 15 08:24:18 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Views/Evento/Edit.cshtml Tue Mar 15 08:45:00 2011 -0300 @@ -1,4 +1,4 @@ -@model Agendas.Web.Models.EventoEditModel +@model Agendas.Web.Models.AgendaEditModel @{ ViewBag.Title = "Agenda"; }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Views/Propuesta/Edit.cshtml Tue Mar 15 08:45:00 2011 -0300 @@ -0,0 +1,25 @@ +@model Agendas.Web.Models.PropuestaEditModel +@{ + ViewBag.Title = "Propuestas"; +} + +<p> + Modifique los datos que desea corregir y presione guardar +</p> + +<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> + +@using (Html.BeginForm()) +{ + @Html.ValidationSummary(true, "Los datos ingresados no son validos, por favor verifíquelos") + <div> + <fieldset> + <legend>Datos de la propuesta:</legend> + @Html.EditorForModel() + <p> + <input type="submit" value="Guardar" /> + </p> + </fieldset> + </div> +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Views/Propuesta/Index.cshtml Tue Mar 15 08:45:00 2011 -0300 @@ -0,0 +1,34 @@ +@model Agendas.Web.Models.PropuestaIndexModel +@{ + ViewBag.Title = "Propuestas"; +} + +<p> + Temas propuestos aun no agendados +</p> +<table> + <thead> + <tr> + <th>Propuesta</th> + <th>Ponente</th> + <th>Acciones</th> + </tr> + </thead> + <tbody> + @foreach (var item in Model.Propuestas) + { + <tr> + <td>@item.Titulo</td> + <td>@item.Ponente</td> + <td> + @Html.ActionLink("Modificar", "Edit", new { id = item.Id }) + @Html.ActionLink("Publicar", "Publish", new { id = item.Id }) + </td> + </tr> + } + </tbody> +</table> + +<p> +@Html.ActionLink("Nueva", "New") +</p>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Views/Propuesta/New.cshtml Tue Mar 15 08:45:00 2011 -0300 @@ -0,0 +1,25 @@ +@model Agendas.Web.Models.PropuestaNewModel +@{ + ViewBag.Title = "Agenda"; +} + +<p> + Complete los siguiente datos para proponer un nuevo tema +</p> + +<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> + +@using (Html.BeginForm()) +{ + @Html.ValidationSummary(true, "Los datos ingresados no son validos, por favor verifíquelos") + <div> + <fieldset> + <legend>Datos de la propuesta:</legend> + @Html.EditorForModel() + <p> + <input type="submit" value="Guardar" /> + </p> + </fieldset> + </div> +} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Views/Shared/_Layout.cshtml Tue Mar 15 08:24:18 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Views/Shared/_Layout.cshtml Tue Mar 15 08:45:00 2011 -0300 @@ -21,6 +21,7 @@ <ul id="menu"> <li>@Html.ActionLink("Home", "Index", "Home")</li> + <li>@Html.ActionLink("Propuestas", "Index", "Propuesta")</li> <li>@Html.ActionLink("Eventos", "Index", "Evento")</li> <li>@Html.ActionLink("Histórico", "Index", "Histórico")</li> <li>@Html.ActionLink("About", "About", "Home")</li>