view Agendas/trunk/src/Agendas.Web/Controllers/PatrocinadorController.cs @ 284:79942e030118

#123: Patrocinadores de las vans: Se verifica que para publicar una Van, debe tener al menos un Patrocinador.
author juanjose.montesdeocaarbos
date Wed, 28 Dec 2011 09:35:27 -0300
parents 1e889a2e45c5
children 8c742d5ccf67
line wrap: on
line source

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using AltNetHispano.Agendas.Domain;
using AltNetHispano.Agendas.Factories;
using AltNetHispano.Agendas.Web.Models;
using AltNetHispano.Agendas.Web.Services;


namespace AltNetHispano.Agendas.Web.Controllers
{
    public class PatrocinadorController : Controller
    {
		private HttpServerUtilityBase _server;

		public HttpServerUtilityBase HttpServer
		{
			get
			{
				if (_server == null)
				{
					var httpServer = HttpContext.Server;
					_server =  httpServer;
				}

				return _server;
			}
		}

		public PatrocinadorController()
		{
		}

		public PatrocinadorController(HttpServerUtilityBase server)
		{
			_server = server;
		}

    	public ActionResult GetLogo(string id)
		{
			var patrocinadores = AgendaFactory.GetPatrocinadorRepository();

			var patrocinador = patrocinadores.Get(new Guid(id));

			return File(patrocinador.Logo, "image/jpg");
		}

    	public ActionResult Index()
        {
        	var patrocinadores = AgendaFactory.GetPatrocinadorRepository();

        	var model = new PatrocinadorIndexModel
        	            	{
        	            		Items = from p in patrocinadores.GetAll()
										select new PatrocinadorDto
										       	{
										       		Id = p.Id,
													Nombre = p.Nombre
										       	}
        	            	};

            return View(model);
        }

		[CustomAuthorize(Roles = Roles.Administrador)]
        public ActionResult Nuevo()
        {
			var model = new PatrocinadorNewModel();
			return View("DefaultEditor", model);
        }

        [HttpPost]
		[CustomAuthorize(Roles = Roles.Administrador)]
		public ActionResult Nuevo(PatrocinadorNewModel model)
		{
			if (ModelState.IsValid)
			{
				var patrocinadores = AgendaFactory.GetPatrocinadorRepository();

				if (patrocinadores.GetByNombre(model.Nombre) == null)
				{
					var tempLogoFile = Path.Combine(HttpServer.MapPath("~/App_Data"),
													model.Nombre +
													model.Logo.FileName.Substring(model.Logo.FileName.LastIndexOf(".")));
					model.Logo.SaveAs(tempLogoFile);
					var patrocinador = new Patrocinador(model.Nombre);
					patrocinador.LoadLogo(tempLogoFile);

					patrocinadores.Save(patrocinador);

					return RedirectToAction("Index");
				}
				this.AddError("El patrocinador ya existe.");
			}

			return View("DefaultEditor", model);
        }

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

			var patrocinador = patrocinadores.GetById(id);
			if (patrocinador == null)
			{
				this.AddError("No se encontró el patrocinador que intenta modificar");
				return RedirectToAction("Index");
			}
			var model = new PatrocinadorEditModel
			            	{
								Id = new Guid(id).ToString(),
								Nombre = patrocinador.Nombre
			            	};
			return View("DefaultEditor", model);
		}

		[HttpPost]
		[CustomAuthorize(Roles = Roles.Administrador)]
		public ActionResult Modificar(PatrocinadorEditModel model)
		{
			if (ModelState.IsValid)
			{
				var patrocinadores = AgendaFactory.GetPatrocinadorRepository();
				var patrocinador = patrocinadores.GetById(model.Id);
				if (patrocinador != null)
				{
					var tempLogoFile = Path.Combine(HttpServer.MapPath("~/App_Data"),
													model.Nombre +
													model.Logo.FileName.Substring(model.Logo.FileName.LastIndexOf(".")));
					model.Logo.SaveAs(tempLogoFile);
					patrocinador.Nombre = model.Nombre;
					patrocinador.LoadLogo(tempLogoFile);

					patrocinadores.Save(patrocinador);

					return RedirectToAction("Index");
				}
				this.AddError("No se encuentra el patrocinador.");
			}
			return View("DefaultEditor", model);
		}

		[CustomAuthorize(Roles = Roles.Administrador)]
		public ActionResult Eliminar(string id)
        {
			if (!string.IsNullOrWhiteSpace(id))
			{
				var patrocinadores = AgendaFactory.GetPatrocinadorRepository();
				var patrocinador = patrocinadores.GetById(id);

				patrocinadores.Delete(patrocinador);
			}
			return RedirectToAction("Index");
		}

    }
}