public IActionResult ProductoPorProyecto(int proyectoId)
        {
            try
            {
                List <Producto> productos = ProductoDAO.getProductosPorProyecto(proyectoId, User.Identity.Name, null);

                List <Stproducto> stproductos = new List <Stproducto>();

                foreach (Producto producto in productos)
                {
                    Stproducto temp = new Stproducto();
                    temp.id                 = producto.id;
                    temp.nombre             = producto.nombre;
                    temp.descripcion        = producto.descripcion;
                    temp.estado             = producto.estado ?? default(int);
                    temp.usuarioCreo        = producto.usuarioCreo;
                    temp.usuarioActualizo   = producto.usuarioActualizo;
                    temp.fechaCreacion      = producto.fechaCreacion.ToString("dd/MM/yyyy H:mm:ss");
                    temp.fechaActualizacion = producto.fechaActualizacion != null?producto.fechaActualizacion.Value.ToString("dd/MM/yyyy H:mm:ss") : null;

                    temp.peso           = producto.peso ?? default(int);
                    temp.inversionNueva = producto.inversionNueva ?? default(int);
                    stproductos.Add(temp);
                }

                return(Ok(new { success = true, productos = stproductos }));
            }
            catch (Exception e)
            {
                CLogger.write("8", "ProductoController.class", e);
                return(BadRequest(500));
            }
        }
        public IActionResult ProductoPagina([FromBody] dynamic value)
        {
            try
            {
                int    componenteid     = value.componenteid != null ? (int)value.componenteid : 0;
                int    subcomponenteid  = value.subcomponenteid != null ? (int)value.subcomponenteid : 0;
                int    pagina           = value.pagina != null ? (int)value.pagina : 1;
                int    registros        = value.registros != null ? value.registros : 20;
                String filtro_busqueda  = (string)value.filtro_busqueda;
                String columna_ordenada = (string)value.columna_ordenada;
                String orden_direccion  = (string)value.orden_direccion;

                List <Producto> productos = ProductoDAO.getProductosPagina(pagina, registros, componenteid, subcomponenteid, filtro_busqueda, columna_ordenada,
                                                                           orden_direccion, User.Identity.Name);
                List <Stproducto> listaProducto = new List <Stproducto>();

                String fechaElegibilidad = null;
                String fechaCierre       = null;

                if (productos != null && productos.Count > 0)
                {
                    Proyecto proyecto = ProyectoDAO.getProyectobyTreePath(productos[0].treepath);
                    if (proyecto != null)
                    {
                        fechaElegibilidad = proyecto.fechaElegibilidad != null?proyecto.fechaElegibilidad.Value.ToString("dd/MM/yyyy H:mm:ss") : null;

                        fechaCierre = proyecto.fechaCierre != null?proyecto.fechaCierre.Value.ToString("dd/MM/yyyy H:mm:ss") : null;
                    }
                }

                foreach (Producto producto in productos)
                {
                    Stproducto temp = new Stproducto();
                    temp.id                  = producto.id;
                    temp.nombre              = producto.nombre;
                    temp.descripcion         = producto.descripcion;
                    temp.programa            = producto.programa;
                    temp.subprograma         = producto.subprograma;
                    temp.proyecto            = producto.proyecto;
                    temp.obra                = producto.obra;
                    temp.actividad           = producto.actividad;
                    temp.renglon             = producto.renglon;
                    temp.ubicacionGeografica = producto.ubicacionGeografica;
                    temp.duracion            = producto.duracion;
                    temp.duracionDimension   = producto.duracionDimension;
                    temp.fechaInicio         = producto.fechaInicio != null?producto.fechaInicio.Value.ToString("dd/MM/yyyy H:mm:ss") : null;

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

                    temp.snip               = producto.snip;
                    temp.estado             = producto.estado ?? default(int);
                    temp.usuarioCreo        = producto.usuarioCreo;
                    temp.usuarioActualizo   = producto.usuarioActualizo;
                    temp.fechaCreacion      = producto.fechaCreacion.ToString("dd/MM/yyyy H:mm:ss");
                    temp.fechaActualizacion = producto.fechaActualizacion != null?producto.fechaActualizacion.Value.ToString("dd/MM/yyyy H:mm:ss") : null;

                    temp.latitud  = producto.latitud;
                    temp.longitud = producto.longitud;
                    temp.peso     = producto.peso ?? default(int);
                    temp.costo    = producto.costo ?? default(decimal);

                    producto.acumulacionCostos = AcumulacionCostoDAO.getAcumulacionCostoById(Convert.ToInt32(producto.acumulacionCostoid));

                    temp.acumulacionCostoid     = Convert.ToInt32(producto.acumulacionCostoid);
                    temp.acumulacionCostoNombre = producto.acumulacionCostos != null ? producto.acumulacionCostos.nombre : null;

                    producto.productoTipos  = ProductoTipoDAO.getProductoTipo(producto.productoTipoid);
                    temp.productoTipoid     = producto.productoTipoid;
                    temp.productoTipoNombre = producto.productoTipos.nombre;

                    if (producto.componenteid != null)
                    {
                        producto.componentes  = ComponenteDAO.getComponentePorId(producto.componenteid ?? default(int), null);
                        temp.componenteid     = producto.componenteid ?? default(int);
                        temp.componenteNombre = producto.componentes.nombre;

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

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

                    if (producto.subcomponenteid != null)
                    {
                        producto.subcomponentes  = SubComponenteDAO.getSubComponentePorId(producto.subcomponenteid ?? default(int), null);
                        temp.subcomponenteid     = producto.subcomponenteid ?? default(int);
                        temp.subcomponenteNombre = producto.subcomponentes != null ? producto.subcomponentes.nombre : null;

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

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

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

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

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

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

                    temp.fechaElegibilidad = fechaElegibilidad;
                    temp.fechaCierre       = fechaCierre;
                    temp.inversionNueva    = producto.inversionNueva ?? default(int);

                    listaProducto.Add(temp);
                }

                return(Ok(new { success = true, productos = listaProducto }));
            }
            catch (Exception e)
            {
                CLogger.write("1", "ProductoController.class", e);
                return(BadRequest(500));
            }
        }
        public IActionResult ProductoPorId(int id)
        {
            try
            {
                Producto   producto = ProductoDAO.getProductoPorId(id, User.Identity.Name);
                Stproducto temp     = new Stproducto();
                temp.id                  = producto.id;
                temp.nombre              = producto.nombre;
                temp.descripcion         = producto.descripcion;
                temp.programa            = producto.programa;
                temp.subprograma         = producto.subprograma;
                temp.proyecto            = producto.proyecto;
                temp.obra                = producto.obra;
                temp.actividad           = producto.actividad;
                temp.renglon             = producto.renglon;
                temp.ubicacionGeografica = producto.ubicacionGeografica;
                temp.duracion            = producto.duracion;
                temp.duracionDimension   = producto.duracionDimension;
                temp.fechaInicio         = producto.fechaInicio != null?producto.fechaInicio.Value.ToString("dd/MM/yyyy H:mm:ss") : null;

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

                temp.snip               = producto.snip;
                temp.estado             = producto.estado ?? default(int);
                temp.usuarioCreo        = producto.usuarioCreo;
                temp.usuarioActualizo   = producto.usuarioActualizo;
                temp.fechaCreacion      = producto.fechaCreacion.ToString("dd/MM/yyyy H:mm:ss");
                temp.fechaActualizacion = producto.fechaActualizacion != null?producto.fechaActualizacion.Value.ToString("dd/MM/yyyy H:mm:ss") : null;

                temp.latitud  = producto.latitud;
                temp.longitud = producto.longitud;
                temp.peso     = producto.peso ?? default(int);
                temp.costo    = producto.costo ?? default(decimal);

                producto.acumulacionCostos = AcumulacionCostoDAO.getAcumulacionCostoById(Convert.ToInt32(producto.acumulacionCostoid));

                temp.acumulacionCostoid     = Convert.ToInt32(producto.acumulacionCostoid);
                temp.acumulacionCostoNombre = producto.acumulacionCostos != null ? producto.acumulacionCostos.nombre : null;

                producto.productoTipos  = ProductoTipoDAO.getProductoTipo(producto.productoTipoid);
                temp.productoTipoid     = producto.productoTipoid;
                temp.productoTipoNombre = producto.productoTipos.nombre;

                if (producto.componenteid != null)
                {
                    producto.componentes  = ComponenteDAO.getComponentePorId(producto.componenteid ?? default(int), null);
                    temp.componenteid     = producto.componenteid ?? default(int);
                    temp.componenteNombre = producto.componentes.nombre;

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

                        producto.componentes.unidadEjecutoras.entidads = EntidadDAO.getEntidad(producto.componentes.entidad ?? default(int), producto.componentes.ejercicio);
                        temp.entidadnombre = producto.componentes.unidadEjecutoras.entidads.nombre;
                    }
                }

                if (producto.subcomponenteid != null)
                {
                    producto.subcomponentes  = SubComponenteDAO.getSubComponentePorId(producto.subcomponenteid ?? default(int), null);
                    temp.subcomponenteid     = producto.subcomponenteid ?? default(int);
                    temp.subcomponenteNombre = producto.subcomponentes != null ? producto.subcomponentes.nombre : null;

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

                        producto.subcomponentes.unidadEjecutoras.entidads = EntidadDAO.getEntidad(producto.subcomponentes.entidad ?? default(int), producto.subcomponentes.ejercicio ?? default(int));
                        temp.entidadnombre = producto.subcomponentes.unidadEjecutoras.entidads.nombre;
                    }
                }

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

                    producto.unidadEjecutoras.entidads = EntidadDAO.getEntidad(producto.entidad ?? default(int), producto.ejercicio);
                    temp.entidadnombre = producto.unidadEjecutoras.entidads.nombre;
                }

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

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

                Proyecto proyecto = ProyectoDAO.getProyectobyTreePath(producto.treepath);
                temp.fechaElegibilidad = proyecto.fechaElegibilidad != null?proyecto.fechaElegibilidad.Value.ToString("dd/MM/yyyy H:mm:ss") : null;

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

                temp.inversionNueva = producto.inversionNueva ?? default(int);

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