public ActionResult CrearActividad(PedidoViewModel pedidoVM) {

            Pedido pedido = pedidoVM.Pedido;
            PedidoDetalle actividad = pedidoVM.PedidoDetalle;
            

            try 
            {

                pedido.UserProfile_ID = (WebSecurity.CurrentUserId);
                pedido.EstadoPedido_ID = _EstadoPedidoService.GetIdEstado(TipoEstadoPedido.Aprobado_Comercial.GetHashCode());

                actividad.EstadoDetalle_ID = _EstadoDetalleService.GetIdEstadoInicial();
                actividad.Tipo = TipoPedidoDetalle.Actividad.GetHashCode();


                pedido.PedidosDetalle.Add(actividad);
                _PedidoService.Create(pedido);

                return RedirectToAction("VerPedido", new { id = pedido.ID });

            }catch(Exception e){
                pedidoVM.Productos = _CatalogoService.GetAllByType(TipoPedidoDetalle.Actividad.GetHashCode());
                pedidoVM.Monedas = _MonedaService.GetAll();
                pedidoVM.Clientes = _ClienteService.GetAll();
                return View(pedidoVM);
            }
        }
        public ActionResult Create(int ClienteID)
        {
            try
            {
                PedidoViewModel pedidoVM = new PedidoViewModel();
                pedidoVM.Pedido = new Pedido();
                pedidoVM.Pedido.Cliente_ID = ClienteID;
                pedidoVM.Pedido.UserProfile_ID = (WebSecurity.CurrentUserId);
                pedidoVM.Pedido.EstadoPedido_ID = _EstadoPedidoService.GetIdEstadoInicial();
                pedidoVM.Users = _UsuarioService.GetAll();

                return PartialView("_CrearPedido", pedidoVM);
            }
            catch (Exception e) {
                return Json(new { status = false, msg = String.Format(mensaje_error, "Crear un Pedido") });
            }


        }
        public ActionResult CrearActividad()
        {
            PedidoViewModel pedidoVM = new PedidoViewModel();
            
            try
            {
                
                pedidoVM.Productos = _CatalogoService.GetAllByType(TipoPedidoDetalle.Actividad.GetHashCode());
                pedidoVM.Monedas = _MonedaService.GetAll();
                pedidoVM.Clientes = _ClienteService.GetAll();

                pedidoVM.PedidoDetalle.Tipo = TipoPedidoDetalle.Actividad.GetHashCode();
                
                return View(pedidoVM);
            }
            catch (Exception e)
            {
                return View(e.Message);
            }

        }
 public ActionResult AgregarActividad(int PedidoID)
 {
     PedidoViewModel ProductoVM = new PedidoViewModel();
     ProductoVM.Productos = _CatalogoService.GetAllByType(TipoPedidoDetalle.Actividad.GetHashCode());
     ProductoVM.Monedas = _MonedaService.GetAll();
     try
     {
         if (Request.IsAjaxRequest())
         {
             ProductoVM.PedidoDetalle.Pedido_ID = PedidoID;
             ProductoVM.PedidoDetalle.Tipo = TipoPedidoDetalle.Actividad.GetHashCode();
             return PartialView("_AgregarActividad", ProductoVM);
         }
         return View(ProductoVM);
     }
     catch (Exception e)
     {
         return View(e.Message);
     }
 }
        public ActionResult VerPedido(int id)
        {

            PedidoViewModel PedidoVM = new PedidoViewModel();
            try
            {

                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }

                Pedido pedido = _PedidoService.GetById(id);
                if (pedido == null)
                {
                    return HttpNotFound();
                }

                PedidoVM.Pedido = pedido;
                PedidoVM.PedidosDetalles = PedidoVM.Pedido.PedidosDetalle.Where(s => s.EstadoDetalle.Estado != TipoEstadoDetalle.Inactivo.GetHashCode()) as IEnumerable<PedidoDetalle>;
                return View(PedidoVM);

            }
            catch (Exception e)
            {
                return View(PedidoVM);
            }
        }
        public ActionResult Create(Pedido pedido)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    if(pedido.UserProfile_ID == null)
                        pedido.UserProfile_ID = (WebSecurity.CurrentUserId);

                    if (pedido.EstadoPedido_ID == null)
                        pedido.EstadoPedido_ID = _EstadoPedidoService.GetIdEstadoInicial();

                    _PedidoService.Create(pedido);
                    pedido = _PedidoService.GetById(pedido.ID);
                    return Json(new { status = true, msg = "Pedido creado <b>exitosamente</b>", contenido = RenderPartialViewToString("_PedidoDetalle", pedido), url = Url.Action("Details", "Pedido", new { id = pedido.ID }) });
                   
                }
                else
                    throw new Exception("Detalle: El pedido posee valores incorrectos."); 
            }
            catch (Exception e)
            {
                PedidoViewModel pedidoVM = new PedidoViewModel();
                pedidoVM.Clientes = _ClienteService.GetAll();
                return View(pedidoVM);
            }
        }
        public ActionResult EditPedidoDetalle(int Detalle_ID, int TipoDetalle)
        {
            
            PedidoViewModel PedidoVM = new PedidoViewModel();
            PedidoVM.PedidoDetalle = _PedidoDetalleService.GetById(Detalle_ID); 
            PedidoVM.Modalidades = _ModalidadService.GetAll(); 
            PedidoVM.TipoDetalle = TipoDetalle.ToString();
            PedidoVM.Monedas = _MonedaService.GetAll(); 
            PedidoVM.EstadosPedidoDetalle = _EstadoDetalleService.GetAll();
            var tipoPedidoDetalle = "";
            try
            {
                
                switch (TipoDetalle)
                {
                    case 1:
                        PedidoVM.Productos = _CatalogoService.GetAllByType(TipoPedidoDetalle.Servicio.GetHashCode());
                        tipoPedidoDetalle = "_AgregarServicio";
                        break;
                    case 2:
                        PedidoVM.Productos = _CatalogoService.GetAllByType(TipoPedidoDetalle.Producto.GetHashCode());
                        tipoPedidoDetalle = "_AgregarProducto";
                        break;
                    case 3:
                        PedidoVM.Herramientas = _HerramientaService.GetAll();
                        tipoPedidoDetalle = "_AgregarHerramienta";
                        break;
                    case 4:
                        PedidoVM.Productos = _CatalogoService.GetAllByType(TipoPedidoDetalle.Actividad.GetHashCode());
                        tipoPedidoDetalle = "_AgregarActividad";
                        break;
                    case 5:
                        tipoPedidoDetalle = "_AgregarAdjunto";
                        break;
                    default:
                        break;

                }
                return PartialView(tipoPedidoDetalle, PedidoVM);

            }
            catch (Exception e)
            {
                return PartialView("_Error", e.Message);
            }
        }
        public ActionResult AgregarHerramienta(int PedidoID) {

            PedidoViewModel ProductoVM = new PedidoViewModel();
            ProductoVM.Herramientas = _HerramientaService.GetAll();
            ProductoVM.Modalidades = _ModalidadService.GetAll();
            ProductoVM.Monedas = _MonedaService.GetAll();
            try
            {
                if (Request.IsAjaxRequest())
                {
                    ProductoVM.PedidoDetalle.Pedido_ID = PedidoID;
                    ProductoVM.PedidoDetalle.Tipo = TipoPedidoDetalle.Herramienta.GetHashCode();
                    return PartialView("_AgregarHerramienta", ProductoVM);
                }
                return View(ProductoVM);

            }
            catch (Exception e)
            {
                return View(e.Message);
            }
        
        }
        public ActionResult AgregarServicio(int PedidoID)
        {
            PedidoViewModel PedidoVM = new PedidoViewModel();
            PedidoVM.PedidoDetalle.EstadoDetalle = _EstadoDetalleService.GetById(_EstadoDetalleService.GetIdEstadoInicial()); 
            DateTime fecha = DateTime.Now;
            DateTime fecha_fin = fecha.AddMonths(6);
            try
            {
                PedidoVM.Productos = _CatalogoService.GetAllByType(TipoPedidoDetalle.Servicio.GetHashCode());
                PedidoVM.Monedas = _MonedaService.GetAll();

                if (Request.IsAjaxRequest())
                {
                    PedidoVM.PedidoDetalle.Pedido_ID = PedidoID;
                    PedidoVM.PedidoDetalle.FechaInicio = fecha;
                    PedidoVM.PedidoDetalle.FechaTermino = fecha_fin;

                    PedidoVM.PedidoDetalle.Tipo = TipoPedidoDetalle.Servicio.GetHashCode();
                    return PartialView("_AgregarServicio", PedidoVM);
                }
                return View();
            }
            catch (Exception e)
            {
                return PartialView("_AgregarServicio", PedidoVM);
            }

            
        }
        public ActionResult Details(int id)
        {

            PedidoViewModel PedidoVM = new PedidoViewModel();
            
            try {

                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                Pedido pedido = _PedidoService.GetById(id);
                ViewBag.isOwner = ((WebSecurity.CurrentUserId) == pedido.UserProfile_ID)? true : false;
                if (pedido == null)
                {
                    return HttpNotFound();
                }

                PedidoVM.Pedido = pedido;
                PedidoVM.PedidosDetalles = PedidoVM.Pedido.PedidosDetalle.Where(s => s.EstadoDetalle.Estado != TipoEstadoDetalle.Inactivo.GetHashCode()) as IEnumerable<PedidoDetalle>;
                return View(PedidoVM);
            
            }catch(Exception e){
                return View(PedidoVM);
            }
            
        }