///////////////////////////////////////////////
        ///              Presupuesto                ///
        ///////////////////////////////////////////////


        public ActionResult ListPresupuestos()
        {
            int idEntidad           = ((Usuario)Session["usuario"]).idEntidad.Value;
            List <Presupuesto> pres = PresupuestoDAO.getInstancia().getPresupuestos(idEntidad);

            return(View(pres));
        }
        public ActionResult AddPresupuesto(JsonPresupuesto req)
        {
            try
            {
                int idEntidad = ((Usuario)Session["usuario"]).idEntidad.Value;
                if (req.presupuesto != null)
                {
                    if (req.presupuesto.idMedioDePago == 0 || req.presupuesto.idPrestadorDeServicios == 0 || req.presupuesto.items == null || req.presupuesto.idCompra == null || req.presupuesto.nroIdentificacion == null || req.presupuesto.tipo == null)
                    {
                        throw new Exception("Hubo un error. Revise los datos ingresados y vuelva a intentarlo.");
                    }

                    req.presupuesto.idEntidad = idEntidad;
                    if (req.setEgreso && req.presupuesto.idCompra != null)
                    {
                        Compra comp = CompraDAO.getInstancia().getCompraConEgresoYDocumentos(req.presupuesto.idCompra.Value);
                        if (comp.egreso.docsComerciales.Exists(dc => dc.tipo == "Presupuesto"))
                        {
                            throw new Exception("La compra seleccionada ya tiene un presupuesto elegido para el egreso.");
                        }
                        req.presupuesto.idEgreso = comp.idEgreso;
                    }
                    PresupuestoDAO.getInstancia().add(req.presupuesto);
                }
                else if (req.documentoComercial != null)
                {
                    if (req.documentoComercial.idEgreso == 0 || req.documentoComercial.tipo == null || req.documentoComercial.nroIdentificacion == null)
                    {
                        throw new Exception("Hubo un error. Revise los datos ingresados y vuelva a intentarlo.");
                    }
                    req.documentoComercial.idEntidad = idEntidad;
                    DocumentoComercialDAO.getInstancia().add(req.documentoComercial);
                }
                else
                {
                    throw new Exception("Hubo un problema cargando el documento. Recargue la pagina y vuelva a intentarlo.");
                }


                //Mongo.MongoDB.insertarDocumento("Presupuesto", "alta", req.presupuesto.ToBsonDocument());
                //Mongo.MongoDB.insertarDocumento(req.documentoComercial.tipo_enlace, "alta", req.documentoComercial.ToBsonDocument()); //REVISAR


                return(Json(Url.Action("Index", "Home")));
            }
            catch (Exception e)
            {
                int idEntidad = ((Usuario)Session["usuario"]).idEntidad.Value;
                ViewBag.mediosDePago = MedioDePagoDAO.getInstancia().getMediosDePago(idEntidad);
                ViewBag.proveedores  = PrestadorDeServiciosDAO.getInstancia().getPrestadoresDeServicios(idEntidad);
                ViewBag.compras      = CompraDAO.getInstancia().getCompras(idEntidad);
                ViewBag.categorias   = CategoriaDAO.getInstancia().getCategorias(idEntidad);
                ViewBag.egresos      = EgresoDAO.getInstancia().getEgresos(idEntidad);
                ViewBag.monedas      = MonedaDAO.getInstancia().getMonedas();
                MyLogger.log(e.Message);
                Response.StatusCode = (int)HttpStatusCode.BadRequest;
                return(Json(e.Message));
            }
        }
        public ActionResult DetallePresupuesto(int id)
        {
            int         idEntidad = ((Usuario)Session["usuario"]).idEntidad.Value;
            Presupuesto pres      = PresupuestoDAO.getInstancia().getPresupuesto(id);

            ViewBag.categorias = CategoriaDAO.getInstancia().getCategorias(idEntidad);
            return(View(pres));
        }
        /*public ActionResult EditPresupuesto(int id)
         * {
         *  //falta terminar
         *  return View();
         * }*/

        public ActionResult DeletePresupuesto(int id)
        {
            try
            {
                PresupuestoDAO.getInstancia().deletePresupuesto(id);
                return(View("ListPresupuestos"));
            }
            catch (Exception e)
            {
                MyLogger.log(e.Message);
                ViewBag.errorMsg = e.Message;
                return(View("ListPresupuestos"));
            }
        }