public Boolean AdicionarAlmRegProductosProveedor(Decimal ID_PROVEEDOR,
            List<producto> listaProductos)
        {
            Boolean resultado = true;

            Conexion conexion = new Conexion(Empresa);
            conexion.IniciarTransaccion();

            try
            {
                producto _producto = new producto(Empresa, Usuario);
                DataTable tablaProductosProveedor = ObtenerAlmRegProductosProveedorPorIdProveedor(ID_PROVEEDOR, conexion);
                Boolean verificador = true;
                foreach (DataRow fila in tablaProductosProveedor.Rows)
                {
                    verificador = true;
                    foreach (producto infoProdProv in listaProductos)
                    {
                        if (infoProdProv.REGISTRO_P_P == Convert.ToDecimal(fila["REGISTRO_P_P"]))
                        {
                            verificador = false;
                            break;
                        }
                    }

                    if (verificador == true)
                    {
                        if (EliminarRegistroAlmRegProductoProveedor(Convert.ToDecimal(fila["REGISTRO_P_P"]), conexion) == false)
                        {
                            conexion.DeshacerTransaccion();
                            resultado = false;
                            break;
                        }
                    }
                }

                if (resultado == true)
                {
                    foreach (producto infoProdProv in listaProductos)
                    {
                        if (infoProdProv.REGISTRO_P_P == 0)
                        {
                            if (AdicionarAlmRegProdProv(infoProdProv.ID_PRODUCTO, ID_PROVEEDOR, conexion) <= 0)
                            {
                                conexion.DeshacerTransaccion();
                                resultado = false;
                                break;
                            }
                        }
                    }
                }

                if (resultado == true)
                {
                    conexion.AceptarTransaccion();
                }
            }
            catch (Exception ex)
            {
                MensajeError = ex.Message;
                conexion.DeshacerTransaccion();
                resultado = false;
            }
            finally
            {
                conexion.Desconectar();
            }

            return resultado;
        }
        public Decimal guardarAjuste(String tipo,
            String idRegional,
            String idCiudad,
            int idEmpresa,
            int idProducto,
            String talla,
            int idLote,
            int CantidadMod,
            Decimal costo,
            String Motivo,
            Decimal idDocTemp,
            List<EquipoAjuste> listaEquiposAjuste,
            String NOMBRE_SERVICIO_COMPLEMENTARIO,
            String OBS_AUTORIZACION)
        {
            Decimal idDoc = 0;
            DateTime fecha;
            Decimal idInventario = 0;

            Boolean correcto = true;

            fecha = System.DateTime.Today;

            Conexion _dato = new Conexion(Empresa);
            _dato.IniciarTransaccion();

            try
            {
                documento _doc = new documento(Empresa, Usuario);
                idDoc = _doc.AdicionarAlmDocumentos(0, Convert.ToInt32(idDocTemp), "AJUSTE", "", "", fecha, new DateTime(), 0, 0, 0, "APROBADO", Motivo, _dato, 0, OBS_AUTORIZACION);

                if (idDoc <= 0)
                {
                    _dato.DeshacerTransaccion();
                    correcto = false;
                    MensajeError = _doc.MensajeError;
                }
                else
                {
                    bodega _bodega = new bodega(Empresa, Usuario);
                    DataTable tablaBodega = _bodega.ObtenerAlmRegBodegaPorIds(idRegional, idCiudad, idEmpresa, _dato);

                    if (_bodega.MensajeError != null)
                    {
                        _dato.DeshacerTransaccion();
                        correcto = false;
                        MensajeError = _bodega.MensajeError;
                    }
                    else
                    {
                        DataRow filaBodega = tablaBodega.Rows[0];

                        lote _lote = new lote(Empresa, Usuario);
                        DataTable tablaLote = _lote.ObtenerAlmLotePorId(idLote, _dato);

                        if (_lote.MensajeError != null)
                        {
                            _dato.DeshacerTransaccion();
                            correcto = false;
                            MensajeError = _bodega.MensajeError;
                        }
                        else
                        {

                            DataRow filalote = tablaLote.Rows[0];

                            if (tipo.Equals("COSTO"))
                            {
                                idInventario = AdicionarAlmInventario(Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filaBodega["ID_BODEGA"]), 0, costo, fecha, "COSTO", _dato, idLote, talla, 0, 0, null, filalote["REEMBOLSO"].ToString());
                                if (idInventario <= 0)
                                {
                                    _dato.DeshacerTransaccion();
                                    correcto = false;
                                }
                                else
                                {
                                    if (_lote.ActualizarAlmLote(idLote, Convert.ToInt32(filalote["ID_DOCUMENTO"]), idProducto, Convert.ToInt32(filalote["ID_BODEGA"]), Convert.ToDateTime(filalote["FECHA_REGISTRO"]), Convert.ToInt32(filalote["ENTRADAS"]), Convert.ToInt32(filalote["SALIDAS"]), costo, filalote["TALLA"].ToString(), filalote["ACTIVO"].ToString(), _dato) == false)
                                    {
                                        _dato.DeshacerTransaccion();
                                        correcto = false;
                                        MensajeError = _lote.MensajeError;
                                    }
                                }
                            }
                            else if (tipo.Equals("ENTRADA"))
                            {
                                int contenido = 0;
                                int entradas = 0;
                                int salidas = 0;

                                if (NOMBRE_SERVICIO_COMPLEMENTARIO != "EQUIPOS")
                                {
                                    entradas = Convert.ToInt32(filalote["ENTRADAS"]) + CantidadMod;
                                    salidas = Convert.ToInt32(filalote["SALIDAS"]);

                                    contenido = entradas - salidas;

                                    String activo = "S";
                                    if (contenido <= 0)
                                    {
                                        activo = "N";
                                    }

                                    idInventario = AdicionarAlmInventario(Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filaBodega["ID_BODEGA"]), CantidadMod, Convert.ToDecimal(filalote["COSTO"]), fecha, "ENTRADA", _dato, idLote, filalote["TALLA"].ToString(), 0, 0, null, filalote["REEMBOLSO"].ToString());

                                    if (idInventario <= 0)
                                    {
                                        _dato.DeshacerTransaccion();
                                        correcto = false;
                                    }
                                    else
                                    {
                                        if (_lote.ActualizarAlmLote(idLote, Convert.ToInt32(filalote["ID_DOCUMENTO"]), idProducto, Convert.ToInt32(filalote["ID_BODEGA"]), Convert.ToDateTime(filalote["FECHA_REGISTRO"]), entradas, salidas, Convert.ToDecimal(filalote["COSTO"]), filalote["TALLA"].ToString(), activo, _dato) == false)
                                        {
                                            _dato.DeshacerTransaccion();
                                            correcto = false;
                                            MensajeError += _lote.MensajeError;
                                        }
                                    }
                                }
                                else
                                {
                                    producto _prod = new producto(Empresa, Usuario);

                                    entradas = Convert.ToInt32(filalote["ENTRADAS"]);
                                    salidas = Convert.ToInt32(filalote["SALIDAS"]);

                                    foreach (EquipoAjuste equipo in listaEquiposAjuste)
                                    {
                                        Decimal ID_NUEVO_EQUIPO = _prod.AdicionarAlmEquipo(Convert.ToInt32(equipo.ID_DOCUMENTO), equipo.MARCA, equipo.MODELO, equipo.SERIE, equipo.IMEI, equipo.NUMERO_CELULAR, "S", fecha, Convert.ToDecimal(idLote), _dato);

                                        if (ID_NUEVO_EQUIPO <= 0)
                                        {
                                            _dato.DeshacerTransaccion();
                                            correcto = false;
                                            MensajeError += _lote.MensajeError;
                                            break;
                                        }
                                        else
                                        {
                                            entradas += 1;
                                            contenido = entradas - salidas;

                                            String activo = "S";
                                            if (contenido <= 0)
                                            {
                                                activo = "N";
                                            }

                                            idInventario = AdicionarAlmInventario(Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filaBodega["ID_BODEGA"]), 1, Convert.ToDecimal(filalote["COSTO"]), fecha, "ENTRADA", _dato, idLote, filalote["TALLA"].ToString(), Convert.ToInt32(ID_NUEVO_EQUIPO), 0, null, filalote["REEMBOLSO"].ToString());

                                            if (idInventario <= 0)
                                            {
                                                _dato.DeshacerTransaccion();
                                                correcto = false;
                                                break;
                                            }
                                            else
                                            {
                                                if (_lote.ActualizarAlmLote(idLote, Convert.ToInt32(filalote["ID_DOCUMENTO"]), idProducto, Convert.ToInt32(filalote["ID_BODEGA"]), Convert.ToDateTime(filalote["FECHA_REGISTRO"]), entradas, salidas, Convert.ToDecimal(filalote["COSTO"]), filalote["TALLA"].ToString(), activo, _dato) == false)
                                                {
                                                    _dato.DeshacerTransaccion();
                                                    correcto = false;
                                                    MensajeError += _lote.MensajeError;
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            else
                            {
                                int contenido = 0;
                                int entradas = 0;
                                int salidas = 0;

                                if (NOMBRE_SERVICIO_COMPLEMENTARIO != "EQUIPOS")
                                {
                                    entradas = Convert.ToInt32(filalote["ENTRADAS"]);
                                    salidas = Convert.ToInt32(filalote["SALIDAS"]) + CantidadMod;

                                    contenido = entradas - salidas;

                                    String activo = "S";
                                    if (contenido <= 0)
                                    {
                                        activo = "N";
                                    }

                                    idInventario = AdicionarAlmInventario(Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filaBodega["ID_BODEGA"]), CantidadMod, Convert.ToDecimal(filalote["COSTO"]), fecha, "SALIDA", _dato, idLote, filalote["TALLA"].ToString(), 0, 0, null, filalote["REEMBOLSO"].ToString());

                                    if (idInventario <= 0)
                                    {
                                        _dato.DeshacerTransaccion();
                                        correcto = false;
                                    }
                                    else
                                    {
                                        if (_lote.ActualizarAlmLote(idLote, Convert.ToInt32(filalote["ID_DOCUMENTO"]), idProducto, Convert.ToInt32(filalote["ID_BODEGA"]), Convert.ToDateTime(filalote["FECHA_REGISTRO"]), entradas, salidas, Convert.ToDecimal(filalote["COSTO"]), filalote["TALLA"].ToString(), activo, _dato) == false)
                                        {
                                            _dato.DeshacerTransaccion();
                                            correcto = false;
                                            MensajeError += _lote.MensajeError;
                                        }
                                    }
                                }
                                else
                                {
                                    producto _prod = new producto(Empresa, Usuario);

                                    entradas = Convert.ToInt32(filalote["ENTRADAS"]);
                                    salidas = Convert.ToInt32(filalote["SALIDAS"]);

                                    foreach (EquipoAjuste equipo in listaEquiposAjuste)
                                    {
                                        if (_prod.ActualizarAlmEquipoIdLoteActualIDocumentoActualParaSalida(equipo.ID_EQUIPO, "N", 0, 0, _dato) == false)
                                        {
                                            _dato.DeshacerTransaccion();
                                            correcto = false;
                                            MensajeError += _prod.MensajeError;
                                            break;
                                        }
                                        else
                                        {
                                            salidas += 1;

                                            contenido = entradas - salidas;

                                            String activo = "S";
                                            if (contenido <= 0)
                                            {
                                                activo = "N";
                                            }

                                            idInventario = AdicionarAlmInventario(Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filaBodega["ID_BODEGA"]), 1, Convert.ToDecimal(filalote["COSTO"]), fecha, "SALIDA", _dato, idLote, filalote["TALLA"].ToString(), Convert.ToInt32(equipo.ID_EQUIPO), 0, null, filalote["REEMBOLSO"].ToString());

                                            if (idInventario <= 0)
                                            {
                                                _dato.DeshacerTransaccion();
                                                correcto = false;
                                                break;
                                            }
                                            else
                                            {
                                                if (_lote.ActualizarAlmLote(idLote, Convert.ToInt32(filalote["ID_DOCUMENTO"]), idProducto, Convert.ToInt32(filalote["ID_BODEGA"]), Convert.ToDateTime(filalote["FECHA_REGISTRO"]), entradas, salidas, Convert.ToDecimal(filalote["COSTO"]), filalote["TALLA"].ToString(), activo, _dato) == false)
                                                {
                                                    _dato.DeshacerTransaccion();
                                                    correcto = false;
                                                    MensajeError += _lote.MensajeError;
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                if (correcto == true)
                {
                    documento_temp _docTemp = new documento_temp(Empresa, Usuario);
                    if (_docTemp.ActualizarAlmDocumentoTemp(Convert.ToInt32(idDocTemp), Convert.ToDateTime(DateTime.Now.ToShortDateString()), "APROBADO", _dato, OBS_AUTORIZACION) == false)
                    {
                        _dato.DeshacerTransaccion();
                        correcto = false;
                        MensajeError = _docTemp.MensajeError;
                    }
                }

                if (correcto == true)
                {
                    _dato.AceptarTransaccion();
                }
            }
            catch (Exception ex)
            {
                _dato.DeshacerTransaccion();
                correcto = false;
                MensajeError = ex.Message;
            }
            finally
            {
                _dato.Desconectar();
            }

            if (correcto == true)
            {
                return idDoc;
            }
            else
            {
                return 0;
            }
        }
    protected void DropDownList_OBJETOS_SERVICIO_SelectedIndexChanged(object sender, EventArgs e)
    {
        Int32 indexSeleccionado = Convert.ToInt32(HiddenField_FILA_SELECCIONADA_GRILLA_EXAMENES.Value);
        GridViewRow filaGrilla = GridView_ExamenesParametrizados.Rows[indexSeleccionado];

        DropDownList drop_Producto = filaGrilla.FindControl("DropDownList_OBJETOS_SERVICIO") as DropDownList;
        Label label_DescripcionExamen = filaGrilla.FindControl("Label_Descripcion") as Label;
        Label label_AplicaA = filaGrilla.FindControl("Label_AplicaA") as Label;

        if (drop_Producto.SelectedIndex <= 0)
        {
            label_DescripcionExamen.Text = "Seleccione Exámen Médico.";
            label_AplicaA.Text = "Desconocido.";
        }
        else
        {
            Decimal ID_PRODUCTO = Convert.ToDecimal(drop_Producto.SelectedValue);
            producto _producto = new producto(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());
            DataTable tablaProd = _producto.ObtenerAlmRegProductoPorId(Convert.ToInt32(ID_PRODUCTO));
            DataRow filaProd = tablaProd.Rows[0];

            label_DescripcionExamen.Text = filaProd["DESCRIPCION"].ToString().Trim();

            if (filaProd["APLICA_A"].ToString().Trim() == "M")
            {
                label_AplicaA.Text = "Hombre";
            }
            else
            {
                if (filaProd["APLICA_A"].ToString().Trim() == "F")
                {
                    label_AplicaA.Text = "Mujer";
                }
                else
                {
                    if (filaProd["APLICA_A"].ToString().Trim() == "F/M")
                    {
                        label_AplicaA.Text = "Ambos";
                    }
                    else
                    {
                        label_AplicaA.Text = "Desconocido";
                    }
                }
            }
        }
    }
        public Boolean ActualizarListaNivelesAutorizacion(List<nivelesAutorizacionOrden> listaniveles)
        {
            Boolean resultado = true;

            Conexion conexion = new Conexion(Empresa);
            conexion.IniciarTransaccion();

            try
            {
                producto _producto = new producto(Empresa, Usuario);
                DataTable tablaNivelesActuales = ObtenerListaNivelesAutorizacionSinMAximoNivel(conexion);
                Boolean verificador = true;
                foreach (DataRow fila in tablaNivelesActuales.Rows)
                {
                    verificador = true;
                    foreach (nivelesAutorizacionOrden infoNiveles in listaniveles)
                    {
                        if (infoNiveles.ID_FIRMA == Convert.ToDecimal(fila["ID_FIRMA"]))
                        {
                            verificador = false;
                            break;
                        }
                    }

                    if (verificador == true)
                    {
                        if (DesactivarNivelAutorizacion(Convert.ToDecimal(fila["ID_FIRMA"]), conexion) == false)
                        {
                            conexion.DeshacerTransaccion();
                            resultado = false;
                            break;
                        }
                    }
                }

                if (resultado == true)
                {
                    foreach (nivelesAutorizacionOrden infoNivel in listaniveles)
                    {
                        if (infoNivel.ID_FIRMA == 0)
                        {
                            if (AdicionarNivelAutorizacion(infoNivel.ID_ROL, null, infoNivel.TOPE, conexion) <= 0)
                            {
                                conexion.DeshacerTransaccion();
                                resultado = false;
                                break;
                            }
                        }
                    }
                }

                if (resultado == true)
                {
                    conexion.AceptarTransaccion();
                }
            }
            catch (Exception ex)
            {
                MensajeError = ex.Message;
                conexion.DeshacerTransaccion();
                resultado = false;
            }
            finally
            {
                conexion.Desconectar();
            }

            return resultado;
        }
    private void Cargar_GridView_ExamenesMedicosDesdeTabla(DataTable tablaExamenes)
    {
        GridView_ExamenesParametrizados.DataSource = tablaExamenes;
        GridView_ExamenesParametrizados.DataBind();

        for (int i = 0; i < GridView_ExamenesParametrizados.Rows.Count; i++)
        {
            GridViewRow filaGrilla = GridView_ExamenesParametrizados.Rows[i];
            DataRow filaTabla = tablaExamenes.Rows[i];

            DropDownList drop_Producto = filaGrilla.FindControl("DropDownList_OBJETOS_SERVICIO") as DropDownList;
            Label label_DescripcionExamen = filaGrilla.FindControl("Label_Descripcion") as Label;
            Label label_AplicaA = filaGrilla.FindControl("Label_AplicaA") as Label;

            Decimal ID_SERVICIO_COMPLEMENTARIO = Convert.ToDecimal(filaTabla["ID_SERVICIO_COMPLEMENTARIO"]);
            Cargar_DropDownList_OBJETOS_SERVICIO(ID_SERVICIO_COMPLEMENTARIO, drop_Producto);
            Decimal ID_PRODUCTO = 0;
            try
            {
                drop_Producto.SelectedValue = filaTabla["ID_PRODUCTO"].ToString().Trim();
                ID_PRODUCTO = Convert.ToDecimal(filaTabla["ID_PRODUCTO"]);
            }
            catch
            {
                drop_Producto.SelectedIndex = 0;
                ID_PRODUCTO = 0;
            }

            if (ID_PRODUCTO == 0)
            {
                label_DescripcionExamen.Text = "Seleccione Exámen Médico.";
                label_AplicaA.Text = "Desconocido.";
            }
            else
            {
                producto _producto = new producto(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());
                DataTable tablaProd = _producto.ObtenerAlmRegProductoPorId(Convert.ToInt32(ID_PRODUCTO));
                DataRow filaProd = tablaProd.Rows[0];

                label_DescripcionExamen.Text = filaProd["DESCRIPCION"].ToString().Trim();

                if (filaProd["APLICA_A"].ToString().Trim() == "M")
                {
                    label_AplicaA.Text = "Hombre";
                }
                else
                {
                    if (filaProd["APLICA_A"].ToString().Trim() == "F")
                    {
                        label_AplicaA.Text = "Mujer";
                    }
                    else
                    {
                        if (filaProd["APLICA_A"].ToString().Trim() == "F/M")
                        {
                            label_AplicaA.Text = "Ambos";
                        }
                        else
                        {
                            label_AplicaA.Text = "Desconocido";
                        }
                    }
                }
            }

            DropDownList drop_Periodo = filaGrilla.FindControl("DropDownList_PERIODO_ENTREGA") as DropDownList;
            Cargar_DropDownList_PERIODO_ENTREGA(drop_Periodo);
            drop_Periodo.SelectedValue = filaTabla["CODIGO_PERIODO"].ToString().Trim();

            DropDownList drop_Facturar = filaGrilla.FindControl("DropDownList_FACTURAR_A") as DropDownList;
            Cargar_DropDownList_FACTURAR_A(drop_Facturar);
            drop_Facturar.SelectedValue = filaTabla["CODIGO_FACTURAR_A"].ToString().Trim();
        }
    }