view Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs @ 74:bc46e7426c80

Refactoring de acciones según la definición del diagrama de estados en assembla (https://www.assembla.com/spaces/altnet-hispano/wiki/Estados_de_un_evento)
author nelopauselli
date Mon, 23 May 2011 20:13:37 -0300
parents c7264bfc4b71
children 96d7609f2e08
line wrap: on
line source

using System;
using System.Linq;
using System.Web.Mvc;
using AltNetHispano.Agendas.Factories;
using AltNetHispano.Agendas.Web.Models;

namespace AltNetHispano.Agendas.Web.Controllers
{
    public class EventoController : Controller
    {
        public ActionResult Index()
        {
			var agenda = AgendaFactory.GetAgenda();

			var model = new EventoIndexModel
			{
				ProximosEventos = from e in agenda.GetEventosPublicados()
								  select new EventoDto { Id = e.Id.ToString(), Titulo = e.Titulo }
			};
			
            return View(model);
        }

		[Authorize]
		public ActionResult New()
        {
            return View();
        }

        [HttpPost]
		[Authorize]
		public ActionResult New(EventoNewModel model)
        {
            if (ModelState.IsValid)
            {
                var agenda = AgendaFactory.GetAgenda();

                var r = agenda.Agendar(model.Titulo, model.Ponente, model.Fecha, 
                  model.UrlInvitacion);
				if (r.Succeful)
					return RedirectToAction("Index");
                ModelState.AddModelError("error", r.ToString());
            }
            return View(model);
        }

		[Authorize]
		public ActionResult Edit(string id)
		{
			var agenda = AgendaFactory.GetAgenda();
			var evento = agenda.GetEvento(new Guid(id));
			if (evento!=null)
			{
				var model = new EventoEditModel
				            	{
				            		Id = id,
				            		Titulo = evento.Titulo,
				            		Ponente = evento.Ponente != null ? evento.Ponente.Nombre : string.Empty,
				            		Fecha = evento.Fecha
				            	};
				return View(model);
			}
			ModelState.AddModelError("error","No se encontró el evento que quiere modificar");
			return View();
		}

		[HttpPost]
		[Authorize]
		public ActionResult Edit(EventoEditModel model)
		{
			if (ModelState.IsValid)
			{
				var agenda = AgendaFactory.GetAgenda();

				var r =agenda.ModificarEvento(new Guid(model.Id), model.Titulo, model.Ponente, model.Fecha);
				if (r.Succeful)
					return RedirectToAction("Index");
				ModelState.AddModelError("error", r.ToString());
			}
			return View(model);
		}
    }
}