public IActionResult ProductoTipo([FromBody] dynamic value)
        {
            try
            {
                ProductoTipoValidator validator = new ProductoTipoValidator();
                ValidationResult      results   = validator.Validate(value);

                if (results.IsValid)
                {
                    ProductoTipo productoTipo = new ProductoTipo();
                    productoTipo.nombre        = value.nombre;
                    productoTipo.descripcion   = value.descripcion;
                    productoTipo.usuarioCreo   = User.Identity.Name;
                    productoTipo.fechaCreacion = DateTime.Now;
                    productoTipo.estado        = 1;

                    bool guardado = false;
                    guardado = ProductoTipoDAO.guardarProductoTipo(productoTipo);

                    if (guardado)
                    {
                        string   propiedades    = value.propiedades != null ? (string)value.propiedades : default(string);
                        String[] idsPropiedades = propiedades != null && propiedades.Length > 0 ? propiedades.Split(",") : null;

                        if (idsPropiedades != null && idsPropiedades.Length > 0)
                        {
                            foreach (String idPropiedad in idsPropiedades)
                            {
                                ProdtipoPropiedad prodtipoPropiedad = new ProdtipoPropiedad();
                                prodtipoPropiedad.productoTipoid      = productoTipo.id;
                                prodtipoPropiedad.productoPropiedadid = Convert.ToInt32(idPropiedad);
                                prodtipoPropiedad.fechaCreacion       = DateTime.Now;
                                prodtipoPropiedad.usuarioCreo         = User.Identity.Name;

                                guardado = guardado & ProdTipoPropiedadDAO.guardarProdTipoPropiedad(prodtipoPropiedad);
                            }
                        }
                    }

                    return(Ok(new
                    {
                        success = guardado,
                        id = productoTipo.id,
                        usuarioCreo = productoTipo.usuarioCreo,
                        usuarioActualizo = productoTipo.usuarioActualizo,
                        fechaCreacion = productoTipo.fechaCreacion.ToString("dd/MM/yyyy H:mm:ss"),
                        fechaActualizacion = productoTipo.fechaActualizacion != null ? productoTipo.fechaActualizacion.Value.ToString("dd/MM/yyyy H:mm:ss") : null
                    }));
                }
                else
                {
                    return(Ok(new { success = false }));
                }
            }
            catch (Exception e)
            {
                CLogger.write("2", "ProductoTipoController.class", e);
                return(BadRequest(500));
            }
        }
        public IActionResult TotalElementos([FromBody] dynamic value)
        {
            try
            {
                String filtro_busqueda = value.filtro_busqueda;
                long   total           = ProductoTipoDAO.getTotal(filtro_busqueda);

                return(Ok(new { success = true, total = total }));
            }
            catch (Exception e)
            {
                CLogger.write("5", "ProductoTipoController.class", e);
                return(BadRequest(500));
            }
        }
 public IActionResult ProductoTipo(int id)
 {
     try
     {
         ProductoTipo productoTipo = ProductoTipoDAO.getProductoTipo(id);
         productoTipo.usuarioActualizo = User.Identity.Name;
         bool eliminado = ProductoTipoDAO.eliminarProductoTipo(productoTipo);
         return(Ok(new { success = eliminado }));
     }
     catch (Exception e)
     {
         CLogger.write("4", "ProductoTipoController.class", e);
         return(BadRequest(500));
     }
 }
        public IActionResult ProductoTipoPagina([FromBody] dynamic value)
        {
            try
            {
                int    pagina           = value.pagina != null ? (int)value.pagina : 1;
                int    registros        = value.registros != null ? (int)value.registros : 20;
                String filtro_busqueda  = value.filtro_busqueda;
                String columna_ordenada = value.columna_ordenada;
                String orden_direccion  = value.orden_direccion;


                List <ProductoTipo>   productotipos     = ProductoTipoDAO.getPagina(pagina, registros, filtro_busqueda, columna_ordenada, orden_direccion);
                List <Stproductotipo> listaProductoTipo = new List <Stproductotipo>();

                foreach (ProductoTipo productotipo in productotipos)
                {
                    Stproductotipo temp = new Stproductotipo();
                    temp.id                 = productotipo.id;
                    temp.nombre             = productotipo.nombre;
                    temp.descripcion        = productotipo.descripcion;
                    temp.usuarioCreo        = productotipo.usuarioCreo;
                    temp.usuarioActualizo   = productotipo.usuarioActualizo;
                    temp.fechaCreacion      = productotipo.fechaCreacion.ToString("dd/MM/yyyy H:mm:ss");
                    temp.fechaActualizacion = productotipo.fechaActualizacion != null?productotipo.fechaActualizacion.Value.ToString("dd/MM/yyyy H:mm:ss") : null;

                    temp.estado = productotipo.estado;

                    listaProductoTipo.Add(temp);
                }

                return(Ok(new { success = true, productoTipos = listaProductoTipo }));
            }
            catch (Exception e)
            {
                CLogger.write("1", "ProductoTipoController.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));
            }
        }