public IActionResult SubProductosPaginaPorProducto([FromBody] dynamic value)
        {
            try
            {
                int    pagina             = value.pagina != null ? (int)value.pagina : 1;
                int    productoId         = value.productoid != null ? (int)value.productoid : default(int);
                int    numeroSubProductos = value.numerosubproductos != null ? (int)value.numerosubproductos : 20;
                String filtro_busqueda    = value.filtro_busqueda;
                String columna_ordenada   = value.columna_ordenada;
                String orden_direccion    = value.orden_direccion;

                List <Subproducto> subproductos = SubproductoDAO.getSubProductosPaginaPorProducto(pagina, numeroSubProductos,
                                                                                                  productoId, filtro_busqueda, columna_ordenada, orden_direccion, User.Identity.Name);
                List <Stsubproducto> stsubproductos = new List <Stsubproducto>();
                foreach (Subproducto subproducto in subproductos)
                {
                    Stsubproducto temp = new Stsubproducto();
                    temp.descripcion        = subproducto.descripcion;
                    temp.estado             = subproducto.estado;
                    temp.fechaActualizacion = subproducto.fechaActualizacion != null?subproducto.fechaActualizacion.Value.ToString("dd/MM/yyyy H:mm:ss") : null;

                    temp.fechaCreacion    = subproducto.fechaCreacion.ToString("dd/MM/yyyy H:mm:ss");
                    temp.id               = subproducto.id;
                    temp.nombre           = subproducto.nombre;
                    temp.usuarioActualizo = subproducto.usuarioActualizo;
                    temp.usuarioCreo      = subproducto.usuarioCreo;

                    subproducto.subproductoTipos = SubproductoTipoDAO.getSubProductoTipoPorId(subproducto.subproductoTipoid);
                    temp.subproductoTipoid       = subproducto.subproductoTipoid;
                    temp.subProductoTipo         = subproducto.subproductoTipos.nombre;

                    temp.snip                = subproducto.snip;
                    temp.programa            = subproducto.programa;
                    temp.subprograma         = subproducto.subprograma;
                    temp.proyecto            = subproducto.proyecto;
                    temp.actividad           = subproducto.actividad;
                    temp.renglon             = subproducto.renglon;
                    temp.ubicacionGeografica = subproducto.ubicacionGeografica;
                    temp.duracion            = subproducto.duracion;
                    temp.duracionDimension   = subproducto.duracionDimension;
                    temp.fechaInicio         = subproducto.fechaInicio != null?subproducto.fechaInicio.Value.ToString("dd/MM/yyyy H:mm:ss") : null;

                    temp.fechaFin = subproducto.fechaFin != null?subproducto.fechaFin.Value.ToString("dd/MM/yyyy H:mm:ss") : null;

                    temp.obra = subproducto.obra;

                    subproducto.unidadEjecutoras = UnidadEjecutoraDAO.getUnidadEjecutora(subproducto.ejercicio ?? default(int), subproducto.entidad ?? default(int), subproducto.ueunidadEjecutora ?? default(int));
                    if (subproducto.unidadEjecutoras != null)
                    {
                        temp.ueunidadEjecutora = subproducto.ueunidadEjecutora ?? default(int);
                        temp.ejercicio         = subproducto.ejercicio ?? default(int);

                        subproducto.unidadEjecutoras.entidads = EntidadDAO.getEntidad(subproducto.entidad ?? default(int), subproducto.ejercicio ?? default(int));
                        temp.entidadentidad = subproducto.entidad ?? default(int);
                        subproducto.unidadEjecutoras.entidads = EntidadDAO.getEntidad(subproducto.entidad ?? default(int), subproducto.ejercicio ?? default(int));
                        temp.nombreUnidadEjecutora            = subproducto.unidadEjecutoras.nombre;
                        temp.entidadnombre = subproducto.unidadEjecutoras.entidads != null ? subproducto.unidadEjecutoras.entidads.nombre : "SIN ENTIDAD";
                    }
                    else
                    {
                        Producto producto = ProductoDAO.getProducto(subproducto.productoid);
                        producto.unidadEjecutoras = UnidadEjecutoraDAO.getUnidadEjecutora(producto.ejercicio, producto.entidad ?? default(int), producto.ueunidadEjecutora);
                        if (producto.unidadEjecutoras != null)
                        {
                            temp.ueunidadEjecutora = producto.ueunidadEjecutora;
                            temp.ejercicio         = producto.ejercicio;

                            producto.unidadEjecutoras.entidads = EntidadDAO.getEntidad(producto.entidad ?? default(int), producto.ejercicio);
                            temp.entidadentidad = producto.entidad ?? default(int);
                            subproducto.unidadEjecutoras.entidads = EntidadDAO.getEntidad(producto.entidad ?? default(int), producto.ejercicio);
                            temp.nombreUnidadEjecutora            = producto.unidadEjecutoras.nombre;
                            temp.entidadnombre = subproducto.unidadEjecutoras.entidads != null ? subproducto.unidadEjecutoras.entidads.nombre : "SIN ENTIDAD";
                        }
                    }

                    temp.latitud  = subproducto.latitud;
                    temp.longitud = subproducto.longitud;
                    temp.costo    = subproducto.costo ?? default(decimal);

                    subproducto.acumulacionCostos = AcumulacionCostoDAO.getAcumulacionCostoById(Convert.ToInt32(subproducto.acumulacionCostoid));
                    temp.acumulacionCostoid       = Convert.ToInt32(subproducto.acumulacionCostoid);
                    temp.acumulacionCostoNombre   = subproducto.acumulacionCostos.nombre;

                    temp.tieneHijos      = ObjetoDAO.tieneHijos(temp.id, 2);
                    temp.fechaInicioReal = subproducto.fechaInicioReal != null?subproducto.fechaInicioReal.Value.ToString("dd/MM/yyyy H:mm:ss") : null;

                    temp.fechaFinReal = subproducto.fechaFinReal != null?subproducto.fechaFinReal.Value.ToString("dd/MM/yyyy H:mm:ss") : null;

                    temp.inversionNueva = subproducto.inversionNueva;

                    stsubproductos.Add(temp);
                }

                return(Ok(new { success = true, subproductos = stsubproductos }));
            }
            catch (Exception e)
            {
                CLogger.write("7", "SubproductoController.class", e);
                return(BadRequest(500));
            }
        } /* */
        public IActionResult SubproductoPorId(int id)
        {
            try
            {
                Subproducto subproducto = SubproductoDAO.getSubproductoPorId(id);

                if (subproducto != null)
                {
                    Stsubproducto temp = new Stsubproducto();
                    temp.id               = subproducto.id;
                    temp.nombre           = subproducto.nombre;
                    temp.descripcion      = subproducto.descripcion;
                    temp.usuarioCreo      = subproducto.usuarioCreo;
                    temp.usuarioActualizo = subproducto.usuarioActualizo;

                    temp.fechaCreacion      = Utils.ConvierteAFormatoFecha(subproducto.fechaCreacion);
                    temp.fechaActualizacion = Utils.ConvierteAFormatoFecha(subproducto.fechaActualizacion);

                    temp.estado              = subproducto.estado;
                    temp.snip                = subproducto.snip;
                    temp.programa            = subproducto.programa;
                    temp.subprograma         = subproducto.subprograma;
                    temp.proyecto            = subproducto.proyecto;
                    temp.actividad           = subproducto.actividad;
                    temp.obra                = subproducto.obra;
                    temp.renglon             = subproducto.renglon;
                    temp.ubicacionGeografica = subproducto.ubicacionGeografica;
                    temp.latitud             = subproducto.latitud;
                    temp.longitud            = subproducto.longitud;
                    temp.fechaInicio         = Utils.ConvierteAFormatoFecha(subproducto.fechaInicio);
                    temp.fechaFin            = Utils.ConvierteAFormatoFecha(subproducto.fechaFin);
                    temp.duracion            = subproducto.duracion;
                    temp.duracionDimension   = subproducto.duracionDimension;
                    temp.costo               = subproducto.costo ?? default(decimal);

                    subproducto.acumulacionCostos = AcumulacionCostoDAO.getAcumulacionCostoById(subproducto.acumulacionCostoid);
                    temp.acumulacionCostoid       = subproducto.acumulacionCostoid;
                    temp.acumulacionCostoNombre   = subproducto.acumulacionCostos.nombre;
                    temp.productoid = subproducto.productoid;

                    //subproducto.unidadEjecutoras = UnidadEjecutoraDAO.getUnidadEjecutora(subproducto.ejercicio, subproducto.entidad ?? default(int), subproducto.ueunidadEjecutora);
                    subproducto.unidadEjecutoras = UnidadEjecutoraDAO.getUnidadEjecutora(subproducto.ejercicio ?? default(int), subproducto.entidad ?? default(int), subproducto.ueunidadEjecutora ?? default(int));
                    if (subproducto.unidadEjecutoras != null)
                    {
                        //subproducto.unidadEjecutoras.entidads = EntidadDAO.getEntidad(subproducto.entidad ?? default(int), subproducto.ejercicio);
                        subproducto.unidadEjecutoras.entidads = EntidadDAO.getEntidad(subproducto.entidad ?? default(int), subproducto.ejercicio ?? default(int));
                        temp.entidadnombre         = subproducto.unidadEjecutoras.entidads.nombre;
                        temp.nombreUnidadEjecutora = subproducto.unidadEjecutoras.nombre;
                        temp.entidadentidad        = subproducto.unidadEjecutoras.entidadentidad;
                    }

                    //temp.ejercicio = subproducto.ejercicio;
                    temp.ejercicio = subproducto.ejercicio ?? default(int);

                    subproducto.subproductoTipos = SubproductoTipoDAO.getSubproductoTipo(subproducto.subproductoTipoid);

                    if (subproducto.subproductoTipos != null)
                    {
                        temp.subproductoTipoid = subproducto.subproductoTipoid;
                        temp.subProductoTipo   = subproducto.subproductoTipos.nombre;
                    }

                    temp.tieneHijos      = ObjetoDAO.tieneHijos(temp.id, 4);
                    temp.fechaInicioReal = Utils.ConvierteAFormatoFecha(subproducto.fechaInicioReal);
                    temp.fechaFinReal    = Utils.ConvierteAFormatoFecha(subproducto.fechaFinReal);

                    subproducto.productos = ProductoDAO.getProductoPorId(subproducto.productoid);
                    Proyecto proyecto = ProyectoDAO.getProyectobyTreePath(subproducto.productos.treepath);

                    temp.congelado         = proyecto.congelado != null ? proyecto.congelado : 0;
                    temp.fechaElegibilidad = Utils.ConvierteAFormatoFecha(proyecto.fechaElegibilidad);
                    temp.fechaCierre       = Utils.ConvierteAFormatoFecha(proyecto.fechaCierre);

                    temp.inversionNueva = subproducto.inversionNueva;

                    return(Ok(new { success = true, subproducto = temp }));
                }
                else
                {
                    return(Ok(new { success = false }));
                }
            }
            catch (Exception e)
            {
                CLogger.write("7", "SubproductoController.class", e);
                return(BadRequest(500));
            }
        }