changeset 165:56f62516c172

Merge
author nelopauselli
date Fri, 05 Aug 2011 22:05:19 -0300
parents 93aa103f75ec (current diff) 557c386fcecc (diff)
children fae2feae499e
files
diffstat 11 files changed, 200 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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 @@
         }
         
         /// <summary>
+        ///   Busca una cadena traducida similar a Duración.
+        /// </summary>
+        public static string DuracionReal {
+            get {
+                return ResourceManager.GetString("DuracionReal", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Busca una cadena traducida similar a Tiempo que duró la presentación..
+        /// </summary>
+        public static string DuracionRealDescription {
+            get {
+                return ResourceManager.GetString("DuracionRealDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Correo electrónico.
         /// </summary>
         public static string EMail {
@@ -97,6 +115,24 @@
         }
         
         /// <summary>
+        ///   Busca una cadena traducida similar a Nro. de Orden.
+        /// </summary>
+        public static string NroOrden {
+            get {
+                return ResourceManager.GetString("NroOrden", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Busca una cadena traducida similar a Un número consecutivo que identifica al evento en el tiempo..
+        /// </summary>
+        public static string NroOrdenDescription {
+            get {
+                return ResourceManager.GetString("NroOrdenDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Seleccione el ponente o responsable del evento.
         /// </summary>
         public static string PonenteDescription {
@@ -194,5 +230,23 @@
                 return ResourceManager.GetString("UrlInvitacionUrl", resourceCulture);
             }
         }
+        
+        /// <summary>
+        ///   Busca una cadena traducida similar a Url de la Wiki.
+        /// </summary>
+        public static string UrlWiki {
+            get {
+                return ResourceManager.GetString("UrlWiki", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Busca una cadena traducida similar a La url donde se publica la presentación..
+        /// </summary>
+        public static string UrlWikiDescription {
+            get {
+                return ResourceManager.GetString("UrlWikiDescription", resourceCulture);
+            }
+        }
     }
 }
--- 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 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <data name="DuracionReal" xml:space="preserve">
+    <value>Duración</value>
+  </data>
+  <data name="DuracionRealDescription" xml:space="preserve">
+    <value>Tiempo que duró la presentación.</value>
+  </data>
   <data name="EMail" xml:space="preserve">
     <value>Correo electrónico</value>
   </data>
@@ -129,6 +135,12 @@
   <data name="NombreDescription" xml:space="preserve">
     <value>Nombre de la persona que identifica a esta persona entre todas</value>
   </data>
+  <data name="NroOrden" xml:space="preserve">
+    <value>Nro. de Orden</value>
+  </data>
+  <data name="NroOrdenDescription" xml:space="preserve">
+    <value>Un número consecutivo que identifica al evento en el tiempo.</value>
+  </data>
   <data name="PonenteDescription" xml:space="preserve">
     <value>Seleccione el ponente o responsable del evento</value>
   </data>
@@ -162,4 +174,10 @@
   <data name="UrlInvitacionUrl" xml:space="preserve">
     <value>la url ingresada no es válida</value>
   </data>
+  <data name="UrlWiki" xml:space="preserve">
+    <value>Url de la Wiki</value>
+  </data>
+  <data name="UrlWikiDescription" xml:space="preserve">
+    <value>La url donde se publica la presentación.</value>
+  </data>
 </root>
\ No newline at end of file
--- 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<IPublicador>();
 
 			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<IPublicador>();
+
+            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<ArgumentOutOfRangeException>(() => agenda.Publicar(evento.Id, 0, urlWiki));
+            Assert.Throws<ArgumentOutOfRangeException>(() => agenda.Publicar(evento.Id, -1, urlWiki));
+        }
+
+        [Test]
+        public void Publicar_Evento_Con_Url_Invalida_Genera_Excepcion()
+        {
+            var publicador1 = new Mock<IPublicador>();
+
+            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<ArgumentException>(() => agenda.Publicar(evento.Id, 1, ""));
+            Assert.Throws<ArgumentException>(() => agenda.Publicar(evento.Id, 1, " "));
+        }
+    }
 }
\ No newline at end of file
--- 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);
 		}
 
--- 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();
--- 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 @@
     <Content Include="Views\Shared\DefaultEditor.cshtml" />
   </ItemGroup>
   <ItemGroup>
+    <Content Include="Views\Evento\Publicar.cshtml" />
     <Content Include="Views\Shared\_MenuPortal.cshtml" />
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
--- 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]
--- 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);
--- 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; }
--- /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
+<h2>Agenda</h2>
+<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>
+
+<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