# HG changeset patch # User nelopauselli # Date 1312592719 10800 # Node ID 56f62516c172c17df2cfc9c760cf3412aa05b7e8 # Parent 93aa103f75ec76d8b3b5cae971c75b8428a34210# Parent 557c386fcecc70db5d1cfc08978e6bcc4cd71ce2 Merge diff -r 93aa103f75ec -r 56f62516c172 Agendas/trunk/src/Agendas.Domain/Agenda.cs --- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Fri Aug 05 22:05:19 2011 -0300 @@ -125,6 +125,12 @@ public Resultado Publicar(Guid eventoId, short numeroOrden, string urlWiki) { + if (numeroOrden <= 0) + throw new ArgumentOutOfRangeException("numeroOrden"); + + if (string.IsNullOrWhiteSpace(urlWiki)) + throw new ArgumentException("urlWiki"); + Evento evento = GetEvento(eventoId); evento.Publicar(numeroOrden, urlWiki); diff -r 93aa103f75ec -r 56f62516c172 Agendas/trunk/src/Agendas.Resources/Properties/DataAnnotationResources.Designer.cs --- a/Agendas/trunk/src/Agendas.Resources/Properties/DataAnnotationResources.Designer.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Resources/Properties/DataAnnotationResources.Designer.cs Fri Aug 05 22:05:19 2011 -0300 @@ -61,6 +61,24 @@ } /// + /// Busca una cadena traducida similar a Duración. + /// + public static string DuracionReal { + get { + return ResourceManager.GetString("DuracionReal", resourceCulture); + } + } + + /// + /// Busca una cadena traducida similar a Tiempo que duró la presentación.. + /// + public static string DuracionRealDescription { + get { + return ResourceManager.GetString("DuracionRealDescription", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Correo electrónico. /// public static string EMail { @@ -97,6 +115,24 @@ } /// + /// Busca una cadena traducida similar a Nro. de Orden. + /// + public static string NroOrden { + get { + return ResourceManager.GetString("NroOrden", resourceCulture); + } + } + + /// + /// Busca una cadena traducida similar a Un número consecutivo que identifica al evento en el tiempo.. + /// + public static string NroOrdenDescription { + get { + return ResourceManager.GetString("NroOrdenDescription", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Seleccione el ponente o responsable del evento. /// public static string PonenteDescription { @@ -194,5 +230,23 @@ return ResourceManager.GetString("UrlInvitacionUrl", resourceCulture); } } + + /// + /// Busca una cadena traducida similar a Url de la Wiki. + /// + public static string UrlWiki { + get { + return ResourceManager.GetString("UrlWiki", resourceCulture); + } + } + + /// + /// Busca una cadena traducida similar a La url donde se publica la presentación.. + /// + public static string UrlWikiDescription { + get { + return ResourceManager.GetString("UrlWikiDescription", resourceCulture); + } + } } } diff -r 93aa103f75ec -r 56f62516c172 Agendas/trunk/src/Agendas.Resources/Properties/DataAnnotationResources.resx --- a/Agendas/trunk/src/Agendas.Resources/Properties/DataAnnotationResources.resx Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Resources/Properties/DataAnnotationResources.resx Fri Aug 05 22:05:19 2011 -0300 @@ -117,6 +117,12 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Duración + + + Tiempo que duró la presentación. + Correo electrónico @@ -129,6 +135,12 @@ Nombre de la persona que identifica a esta persona entre todas + + Nro. de Orden + + + Un número consecutivo que identifica al evento en el tiempo. + Seleccione el ponente o responsable del evento @@ -162,4 +174,10 @@ la url ingresada no es válida + + Url de la Wiki + + + La url donde se publica la presentación. + \ No newline at end of file diff -r 93aa103f75ec -r 56f62516c172 Agendas/trunk/src/Agendas.Tests/AgendarTests.cs --- a/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Fri Aug 05 22:05:19 2011 -0300 @@ -288,6 +288,7 @@ [Test] public void Al_publicar_un_evento_debe_quedar_con_estado_EventoPublicadoState_y_debe_generar_el_track_correspondiente() { + const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; var publicador1 = new Mock(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); @@ -296,7 +297,7 @@ var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); agenda.Confirmar(evento.Id); - agenda.Publicar(evento.Id, 0, string.Empty); + agenda.Publicar(evento.Id, 1, urlWiki); Assert.IsInstanceOf(typeof(EventoPublicadoState), evento.Estado); Assert.That(evento.GetTrackNews().Count(t => t.Accion == Accion.Publicar) == 1); @@ -350,8 +351,40 @@ DefaultEventoRepository.GetByState(EventoPropuestoState.GetInstance()).Single(e => e.Titulo == "Html 5"); Assert.IsFalse(evento.Estado.GetType() == typeof(EventoConfirmadoState)); - - agenda.Publicar(evento.Id, 0, string.Empty); + const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; + agenda.Publicar(evento.Id, 1, urlWiki); } - } + + [Test] + public void Publicar_Evento_Con_NroOrden_Invalido_Genera_Excepcion() + { + var publicador1 = new Mock(); + + var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); + agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.MinValue, urlInvitacion, TipoEvento.Van); + + var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); + agenda.Confirmar(evento.Id); + + const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; + + Assert.Throws(() => agenda.Publicar(evento.Id, 0, urlWiki)); + Assert.Throws(() => agenda.Publicar(evento.Id, -1, urlWiki)); + } + + [Test] + public void Publicar_Evento_Con_Url_Invalida_Genera_Excepcion() + { + var publicador1 = new Mock(); + + var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); + agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.MinValue, urlInvitacion, TipoEvento.Van); + + var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); + agenda.Confirmar(evento.Id); + + Assert.Throws(() => agenda.Publicar(evento.Id, 1, "")); + Assert.Throws(() => agenda.Publicar(evento.Id, 1, " ")); + } + } } \ No newline at end of file diff -r 93aa103f75ec -r 56f62516c172 Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs --- a/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Fri Aug 05 22:05:19 2011 -0300 @@ -36,7 +36,7 @@ public void Publicar(Guid eventoId) { - var resultado = _agenda.Publicar(eventoId, 0, string.Empty); + var resultado = _agenda.Publicar(eventoId, 1, "http://www.altnethispano.org/"); Assert.IsTrue(resultado.Succeful); } diff -r 93aa103f75ec -r 56f62516c172 Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs --- a/Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs Fri Aug 05 22:05:19 2011 -0300 @@ -170,6 +170,8 @@ [Test] public void Proponer_agendar_confirmar_publicar() { + const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; + _workflow.Proponer(); _workflow.Agendar(); diff -r 93aa103f75ec -r 56f62516c172 Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj --- a/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Fri Aug 05 22:05:19 2011 -0300 @@ -220,6 +220,7 @@ + diff -r 93aa103f75ec -r 56f62516c172 Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs --- a/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Fri Aug 05 22:05:19 2011 -0300 @@ -77,10 +77,36 @@ public ActionResult Publicar(string id) { var agenda = AgendaFactory.GetAgenda(); - agenda.Publicar(new Guid(id), 0, string.Empty); + var evento = agenda.GetEvento(new Guid(id)); + + var model = new EventoPublicarModel + { + Id = id, + Titulo = evento.Titulo, + NroOrden = 0, //TODO: Obtener el último y sumarle uno. + UrlWiki = evento.UrlWiki, + DuracionReal = new TimeSpan(0, 0, 0) + }; + return View(model); + } - this.AddNotification("Evento publicado"); - return RedirectToAction("Index"); + [HttpPost] + [Authorize] + public ActionResult Publicar(EventoPublicarModel model) + { + if (ModelState.IsValid) + { + var agenda = AgendaFactory.GetAgenda(); + + var r = agenda.Publicar(new Guid(model.Id), model.NroOrden, model.UrlWiki); + if (r.Succeful) + { + this.AddNotification(string.Format("Evento publicado {0}", model.Titulo)); + return RedirectToAction("Index"); + } + ModelState.AddModelError("error", r.ToString()); + } + return View(model); } [Authorize] diff -r 93aa103f75ec -r 56f62516c172 Agendas/trunk/src/Agendas.Web/Controllers/HistoricoController.cs --- a/Agendas/trunk/src/Agendas.Web/Controllers/HistoricoController.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/HistoricoController.cs Fri Aug 05 22:05:19 2011 -0300 @@ -24,7 +24,7 @@ Ponente = e.Ponente.Nombre, Numero = e.NumeroOrden.ToString(), Tipo = e.Tipo.ToString(), - Duracion = "0:00" + Duracion = "0:00" //TODO: e.GetEvento() } }; return View(model); diff -r 93aa103f75ec -r 56f62516c172 Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs --- a/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Fri Aug 05 22:05:19 2011 -0300 @@ -65,6 +65,29 @@ public string UrlInvitacion { get; set; } } + public class EventoPublicarModel + { + [HiddenInput(DisplayValue = false)] + public string Id { get; set; } + + [Required] + [HiddenInput] + public string Titulo { get; set; } + + [Required] + [UIHint("NroOrden")] + [Range(1, short.MaxValue)] + public short NroOrden { get; set; } + + [Required] + [Url] + public string UrlWiki { get; set; } + + [Required] + [UIHint("DuracionReal")] + public TimeSpan DuracionReal { get; set; } + } + public class EventoDto { public string Id { get; set; } diff -r 93aa103f75ec -r 56f62516c172 Agendas/trunk/src/Agendas.Web/Views/Evento/Publicar.cshtml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Views/Evento/Publicar.cshtml Fri Aug 05 22:05:19 2011 -0300 @@ -0,0 +1,28 @@ +@model AltNetHispano.Agendas.Web.Models.EventoPublicarModel +

Agenda

+

+ Modifique los datos que desea corregir y presione guardar +

+ + + + + + +@using (Html.BeginForm()) +{ + @Html.ValidationSummary(true, "Los datos ingresados no son validos, por favor verifíquelos") +
+
+ Datos del evento: + @Html.EditorForModel() +

+ +

+
+
+} \ No newline at end of file