view Agendas/trunk/src/Agendas.Web/Controllers/PersonaController.cs @ 257:730b80afa70d

Ticket #191: Perfil de Usuarios
author juanjose.montesdeocaarbos
date Wed, 19 Oct 2011 09:19:20 -0300
parents a36a76bd6ec3
children
line wrap: on
line source

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

namespace AltNetHispano.Agendas.Web.Controllers
{
    public class PersonaController : Controller
    {
        public ActionResult Index()
        {
            var personas = AgendaFactory.GetPersonaService();

            var model = new PersonaIndexModel {Items = from p in personas.GetAll() select new PersonaDto{Id=p.Id, Nombre = p.Nombre}};

            return View(model);
        }

		[CustomAuthorize(Roles = Roles.Administrador)]
		public ActionResult Nueva()
        {
            var model = new PersonaNewModel();
            return View("Defaulteditor", model);
        }

        [HttpPost]
		[CustomAuthorize(Roles = Roles.Administrador)]
        public ActionResult Nueva(PersonaNewModel model)
        {
            if (ModelState.IsValid)
            {
                var personas = AgendaFactory.GetPersonaService();
                var r = personas.Add(model.Nombre, model.Twitter, model.EMail,model.Blog, model.Roles);
                if (r.Succeful)
                {
                    this.AddNotification("Los datos fueron guardados");
                    return RedirectToAction("Index");
                }
            	this.AddError(r.Message);
            }

            return View("Defaulteditor", model);
        }

		[CustomAuthorize(Roles = Roles.Administrador)]
		public ActionResult Modificar(string id)
        {
            var personas = AgendaFactory.GetPersonaService();

            var persona = personas.GetById(new Guid(id));
            if (persona==null)
            {
                this.AddError("No se encontró la persona que intenta modificar");
                return RedirectToAction("Index");
            }

        	var model = new PersonaEditModel
        	            	{
        	            		Id = persona.Id.ToString(),
        	            		Nombre = persona.Nombre,
        	            		Twitter = persona.Twitter,
        	            		EMail = persona.Mail,
        	            		Blog = persona.Blog,
								Roles = persona.Roles.ToArray()
        	            	};

            return View("Defaulteditor", model);
        }

        [HttpPost]
		[CustomAuthorize(Roles = Roles.Administrador)]
		public ActionResult Modificar(PersonaEditModel model)
        {
            if (ModelState.IsValid)
            {
                var personas = AgendaFactory.GetPersonaService();
				var r = personas.Update(new Guid(model.Id), model.Nombre, model.Twitter, model.EMail, model.Blog, model.Roles);
                if (r.Succeful)
                {
                    this.AddNotification("Los datos fueron guardados");
                    return RedirectToAction("Index");
                }
            	this.AddError(r.Message);
            }

            return View("Defaulteditor", model);
        }

        [CustomAuthorize(Roles = Roles.Administrador)]
		public ActionResult Quitar(string id)
        {
            var personas = AgendaFactory.GetPersonaService();
            var  result = personas.Delete(new Guid(id));
            if (result.Succeful)
            {
                this.AddNotification("Se ha eliminado correctamente a la persona");
                
            }
            this.AddError(result.Message);

            return RedirectToAction("Index");
        }

        public ActionResult Ver(string id)
        {
            var personas = AgendaFactory.GetPersonaService();

            var persona = personas.GetById(new Guid(id));
            if (persona == null)
            {
                this.AddError("No se encontró la persona que intenta visualizar");
                return RedirectToAction("Index");
            }

            var model = new PersonaViewModel
            {
                Id = persona.Id.ToString(),
                Nombre = persona.Nombre,
                Twitter = persona.Twitter,
                EMail = persona.Mail,
                Blog = persona.Blog
            };

            return View("DefaultViewer", model);
        }
    }
}