public static object Get(this PedidoPdf request,
		                         Factory factory,
		                         IHttpRequest httpRequest,
		                         User user)
        {

			return factory.Execute(proxy=>{
				Pedido pedido= proxy.FirstOrDefault<Pedido>(q=>q.Consecutivo==request.Consecutivo);
				if (pedido==default(Pedido))
				{
					throw HttpError.NotFound(string.Format("No existe Oferta con Consecutivo: '{0}'", request.Consecutivo));
				}


				List<PedidoItem> items=
					proxy.Get<PedidoItem>(q=>q.IdPedido==pedido.Id).OrderBy(f=>f.Id).ToList();
					//proxy.Get<PedidoItem>(q=>q.IdPedido==pedido.Id).OrderBy(f=>f.IdServicio).ToList();


				User sendBy= new User();  // el que lo envio !!!

				if(user.Id !=pedido.IdEnviadoPor){
					sendBy= proxy.FirstOrDefault<User>(q=>q.Id==pedido.IdEnviadoPor);
					if(sendBy==default(User)){
						user = new User(){
							FirstName="indefinido",
							LastName="indefinido"
						};

					}
				}
				else{
					sendBy.PopulateWith(user);
				}

				var empresa = proxy.GetEmpresa(); 


				OfertaPdf pdf = new OfertaPdf(httpRequest.ApplicationFilePath);

				string logo = Path.Combine(Path.Combine(httpRequest.ApplicationFilePath, "resources"), "logo.png");
				string file = Path.Combine(Path.Combine(httpRequest.ApplicationFilePath,"App_Data"),
				                           string.Format("oferta-{0}.pdf",pedido.Consecutivo));

				using (var stream =  new MemoryStream()){


					pdf.CreatePDF(empresa,user,pedido,items,logo,BL.Prefijo,
				              stream, new OfertaMargin(5,5,100,30));

					stream.Position=0;

					using(var fileStream = new FileStream(file, FileMode.Create )){
						stream.CopyTo(fileStream);
						fileStream.Close();
						return new HttpResult( new FileInfo(file), asAttachment:true);
					}

				}

			});

		}
        public static Response<PedidoMail> Get(this PedidoMail request,
		                                     Factory factory,
		                                     IHttpRequest httpRequest,
		                                     Mailer mailService,
		                                     User user)
        {

			return factory.Execute(proxy=>{
				Pedido pedido= proxy.FirstOrDefault<Pedido>(q=>q.Consecutivo==request.Consecutivo);
				if (pedido==default(Pedido))
				{
					throw HttpError.NotFound(string.Format("No existe Oferta con Consecutivo: '{0}'", request.Consecutivo));
				}

				if(!pedido.FechaEnvio.HasValue)
				{
					throw HttpError.Unauthorized(
						string.Format("Oferta con Consecutivo:'{0}' No esta en estado ENVIADA", request.Consecutivo));
				}

				List<PedidoItem> items=
					proxy.Get<PedidoItem>(q=>q.IdPedido==pedido.Id).OrderBy(f=>f.Id).ToList();
					//proxy.Get<PedidoItem>(q=>q.IdPedido==pedido.Id).OrderBy(f=>f.IdServicio).ToList();


				var oferta = new OfertaHtml();
				User sendBy= new User();  // el que lo envio !!!

				if(user.Id !=pedido.IdEnviadoPor){
					sendBy= proxy.FirstOrDefault<User>(q=>q.Id==pedido.IdEnviadoPor);
					if(sendBy==default(User)){
						user = new User(){
							FirstName="indefinido",
							LastName="indefinido"
						};

					}
				}
				else{
					sendBy.PopulateWith(user);
				}
				var empresa = proxy.GetEmpresa(); 

				var html = oferta.ConstruirHtmlReport(empresa,
				                                      user,
				                                      pedido,
				                                      items,
				                                      request.TextoInicial);

				MailMessage message = new MailMessage();
				message.Subject=  !request.Asunto.IsNullOrEmpty()?
					request.Asunto:
						string.Format("Envio Oferta No:{0}", pedido.Consecutivo.ToString().PadLeft(8,'0'));

				message.ReplyToList.Add(user.Email);
				message.From= new MailAddress(user.Email);

				var mc= !pedido.MailContacto.IsNullOrEmpty()?pedido.MailContacto:user.Email;

				message.To.Add(mc);

				if(! pedido.MailDestinatario.IsNullOrEmpty() &&

				   (mc.Trim().ToUpper()!=pedido.MailDestinatario.Trim().ToUpper()) ){
					message.CC.Add(pedido.MailDestinatario);
				}

				message.Bcc.Add(user.Email);

				if(!empresa.ApplicationMailBox.IsNullOrEmpty()){
					message.Bcc.Add(empresa.ApplicationMailBox);
				}

				message.Body= html;
				message.IsBodyHtml=true;

				OfertaPdf pdf = new OfertaPdf(httpRequest.ApplicationFilePath);

				string logo = Path.Combine(Path.Combine(httpRequest.ApplicationFilePath, "resources"), "logo.png");

				using (var stream =  new MemoryStream() ){
					pdf.CreatePDF(empresa,user,pedido,items,logo,"CMK-S", 
			              stream, new OfertaMargin(5,5,90,15));
					stream.Position=0;
					message.Attachments.Add(new Attachment(stream,string.Format("oferta-{0}.pdf",pedido.Consecutivo)));
					mailService.Send(message);
				}


				return new Response<PedidoMail>(); 

			});


		}