public Decimal AutorizarAsignacionPorAutorizar(Decimal idAsignacionSC, DateTime fechaEntrega, Int32 cantidadEntrega)
        {
            Boolean correcto = true;

            Decimal idAsignacionCreada = 0;

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

            try
            {
                DataTable tablaAsignacionPorAutorizar = ObtenerEntregaPorAprobarPorIdAsignacion(idAsignacionSC, conexion);
                DataRow filaAsignacionPorAutorizar = tablaAsignacionPorAutorizar.Rows[0];

                Decimal idProducto = Convert.ToDecimal(filaAsignacionPorAutorizar["ID_PRODUCTO"]);
                Decimal idEmpleado = Convert.ToDecimal(filaAsignacionPorAutorizar["ID_EMPLEADO"]);

                Entrega _entrega = new Entrega(Empresa, Usuario);

                idAsignacionCreada = _entrega.AdicionarEscAsignacionSC(idEmpleado, idProducto, cantidadEntrega, 0, fechaEntrega, "ESPECIAL", "ABIERTA", conexion);

                if (idAsignacionCreada <= 0)
                {
                    conexion.DeshacerTransaccion();
                    correcto = false;
                    idAsignacionCreada = 0;
                    MensajeError = _entrega.MensajeError;
                }
                else
                {
                    if (ActualizarEstadoAsignacionPorAutorizar(idAsignacionSC, EstadosAsignacionSC.APROBADA.ToString(), conexion) == false)
                    {
                        conexion.DeshacerTransaccion();
                        correcto = false;
                        idAsignacionCreada = 0;
                    }
                }

                if (correcto == true)
                {
                    conexion.AceptarTransaccion();
                }
            }
            catch
            {
                conexion.DeshacerTransaccion();
                correcto = false;
                idAsignacionCreada = 0;
            }
            finally
            {
                conexion.Desconectar();
            }

            return idAsignacionCreada;
        }
    protected void DropDownList_TallaProducto_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (DropDownList_TallaProducto.SelectedIndex <= 0)
        {
            Cargar_DropDownList_Vacio(DropDownList_Proveedor);
            Cargar_DropDownList_Vacio(DropDownList_Factura);

            TextBox_CantidadProducto.Text = "";

            Label_CantidadMax.Text = "0";

            Label_CantidadDisponible.Text = "0";

            RangeValidator_TextBox_CantidadProducto.MaximumValue = "0";
            RangeValidator_TextBox_CantidadProducto.MinimumValue = "0";
        }
        else
        {
            Entrega _entrega = new Entrega(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

            Decimal ID_EMPRESA = Convert.ToDecimal(HiddenField_ID_EMPRESA.Value);
            String ID_CIUDAD = HiddenField_ID_CIUDAD.Value;
            Decimal ID_PRODUCTO = Convert.ToDecimal(HiddenField_ID_PRODUCTO_SELECCIONADO.Value);
            DataTable tablaProveedores = _entrega.ObtenerProveedoresPorProductoCiudadEmpresaYTalla(ID_EMPRESA, ID_CIUDAD, ID_PRODUCTO, DropDownList_TallaProducto.SelectedValue);

            Cargar_DropDownList_Proveedor(DropDownList_Proveedor, tablaProveedores);

            Cargar_DropDownList_Vacio(DropDownList_Factura);

            TextBox_CantidadProducto.Text = "";

            Label_CantidadMax.Text = "0";

            Label_CantidadDisponible.Text = "0";

            RangeValidator_TextBox_CantidadProducto.MaximumValue = "0";
            RangeValidator_TextBox_CantidadProducto.MinimumValue = "0";
        }
    }
Exemplo n.º 3
0
        public Decimal guardarDevolucion(List<int> ID_LOTE,
            int ID_BODEGA,
            int ID_EMPLEADO,
            List<int> ID_DOCUMENTO,
            List<int> ID_INVENTARIO,
            List<int> ID_PRODUCTO,
            List<int> cantidad,
            List<String> Estado,
            List<String> motivo,
            List<Decimal> ID_DETALLE_ENTREGAS,
            List<EquipoEntrega> listaEquiposDevueltos)
        {
            Decimal idDocumento = 0;
            Decimal idInventario = 0;
            Decimal idLote = 0;

            DateTime fecha = System.DateTime.Today;
            documento _doc = new documento(Empresa, Usuario);
            Inventario _inventario = new Inventario(Empresa, Usuario);
            Conexion _dato = new Conexion(Empresa);
            lote _lote = new lote(Empresa, Usuario);
            int cuenta = 0;

            Boolean correcto = true;

            _dato.IniciarTransaccion();

            try
            {
                idDocumento = _doc.AdicionarAlmDocumentos(ID_EMPLEADO, 0, "DEVOLUCION", "", "", fecha, new DateTime(), 0, 0, 0, "", "", _dato, 0, null);

                if (idDocumento == 0)
                {
                    correcto = false;
                    MensajeError = _doc.MensajeError;
                    _dato.DeshacerTransaccion();
                }
                else
                {
                    for (int i = 0; i < ID_PRODUCTO.Count; i++)
                    {
                        _lote.MensajeError = null;

                        DataTable tablalote = _lote.ObtenerAlmLotePorId(ID_LOTE[i], _dato);

                        if (_lote.MensajeError != null)
                        {
                            correcto = false;
                            _dato.DeshacerTransaccion();
                            MensajeError = _lote.MensajeError;
                            break;
                        }
                        else
                        {
                            DataRow filalote = tablalote.Rows[0];

                            String activoLote = "S";
                            if (Estado[i] != "BUENO")
                            {
                                activoLote = "N";
                            }

                            idLote = _lote.AdicionarAlmLote(ID_DOCUMENTO[i], ID_PRODUCTO[i], Convert.ToInt32(filalote["ID_BODEGA"]), Convert.ToDateTime(DateTime.Now.ToShortDateString()), cantidad[i], 0, Convert.ToDecimal(filalote["COSTO"]), filalote["TALLA"].ToString().Trim(), activoLote, _dato, filalote["REEMBOLSO"].ToString());

                            if (idLote == 0)
                            {
                                correcto = false;
                                MensajeError = _lote.MensajeError;
                                _dato.DeshacerTransaccion();
                                break;
                            }
                            else
                            {
                                _inventario.MensajeError = null;
                                idInventario = _inventario.AdicionarAlmInventario(Convert.ToInt32(idDocumento), ID_PRODUCTO[i], Convert.ToInt32(filalote["ID_BODEGA"]), cantidad[i], Convert.ToDecimal(filalote["COSTO"]), Convert.ToDateTime(DateTime.Now.ToShortDateString()), "ENTRADA", _dato, Convert.ToInt32(idLote), filalote["TALLA"].ToString(), 0, ID_DETALLE_ENTREGAS[i], motivo[i], filalote["REEMBOLSO"].ToString());

                                if (idInventario <= 0)
                                {
                                    correcto = false;
                                    MensajeError = _inventario.MensajeError;
                                    _dato.DeshacerTransaccion();
                                    break;
                                }
                                else
                                {
                                    cuenta++;
                                }
                            }
                        }
                    }

                    if (correcto == true)
                    {
                        foreach (EquipoEntrega equipo in listaEquiposDevueltos)
                        {
                            _lote.MensajeError = null;

                            DataTable tablalote = _lote.ObtenerAlmLotePorId(Convert.ToInt32(equipo.ID_LOTE), _dato);

                            if (_lote.MensajeError != null)
                            {
                                correcto = false;
                                _dato.DeshacerTransaccion();
                                MensajeError = _lote.MensajeError;
                                break;
                            }
                            else
                            {
                                DataRow filalote = tablalote.Rows[0];

                                String activoLote = "S";
                                if (equipo.ESTADO_DEV != "BUENO")
                                {
                                    activoLote = "N";
                                }

                                idLote = _lote.AdicionarAlmLote(Convert.ToInt32(equipo.ID_DOCUMENTO), Convert.ToInt32(equipo.ID_PRODUCTO), Convert.ToInt32(filalote["ID_BODEGA"]), Convert.ToDateTime(DateTime.Now.ToShortDateString()), 1, 0, Convert.ToDecimal(filalote["COSTO"]), filalote["TALLA"].ToString().Trim(), activoLote, _dato, filalote["REEMBOLSO"].ToString());

                                if (idLote == 0)
                                {
                                    correcto = false;
                                    MensajeError = _lote.MensajeError;
                                    _dato.DeshacerTransaccion();
                                    break;
                                }
                                else
                                {
                                    _inventario.MensajeError = null;
                                    idInventario = _inventario.AdicionarAlmInventario(Convert.ToInt32(idDocumento), Convert.ToInt32(equipo.ID_PRODUCTO), Convert.ToInt32(filalote["ID_BODEGA"]), 1, Convert.ToDecimal(filalote["COSTO"]), Convert.ToDateTime(DateTime.Now.ToShortDateString()), "ENTRADA", _dato, Convert.ToInt32(idLote), filalote["TALLA"].ToString(), Convert.ToInt32(equipo.ID_EQUIPO), equipo.ID_DETALLE_ENTREGAS, equipo.DETALLE_DEV, filalote["REEMBOLSO"].ToString());

                                    if (idInventario <= 0)
                                    {
                                        correcto = false;
                                        MensajeError = _inventario.MensajeError;
                                        _dato.DeshacerTransaccion();
                                        break;
                                    }
                                    else
                                    {
                                        Entrega _entrega = new Entrega(Empresa, Usuario);
                                        if (_entrega.ActualizarAlmEquiposEntregaDevolucion(equipo.ID_EQUIPO_ENTREGA, equipo.ID_EQUIPO, idLote, idDocumento, equipo.ESTADO_DEV, equipo.DETALLE_DEV, _dato) == false)
                                        {
                                            correcto = false;
                                            MensajeError = _entrega.MensajeError;
                                            _dato.DeshacerTransaccion();
                                            break;
                                        }
                                        else
                                        {
                                            cuenta++;
                                        }
                                    }
                                }
                            }
                        }
                    }

                    if (correcto == true)
                    {
                        if (cuenta != (ID_PRODUCTO.Count + listaEquiposDevueltos.Count))
                        {
                            correcto = false;
                            _dato.DeshacerTransaccion();
                            MensajeError = "Ocurrio un error inesperado, el numero de productos y equipos procesados no corresponde.";
                        }
                    }
                }

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

            if (correcto == true)
            {
                return idDocumento;
            }
            else
            {
                return 0;
            }
        }
    protected void DropDownList_Factura_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (DropDownList_Factura.SelectedIndex <= 0)
        {
            TextBox_CantidadProducto.Text = "";

            Label_CantidadMax.Text = "0";

            Label_CantidadDisponible.Text = "0";

            RangeValidator_TextBox_CantidadProducto.MaximumValue = "0";
            RangeValidator_TextBox_CantidadProducto.MinimumValue = "0";
        }
        else
        {
            Entrega _entrega = new Entrega(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

            String[] datosArray = DropDownList_Factura.SelectedValue.Split(':');

            Decimal ID_DOCUMENTO = Convert.ToDecimal(datosArray[0]);
            Decimal ID_LOTE = Convert.ToDecimal(datosArray[1]);

            DataTable tablaInfoLote = _entrega.ObtenerCantidadesEnLote(ID_DOCUMENTO, ID_LOTE);

            DataRow filaInfoLote = tablaInfoLote.Rows[0];

            Int32 CANTIDAD_TOTAL = Convert.ToInt32(HiddenField_CANTIDAD_TOTAL.Value);
            Int32 CANTIDAD_ENTREGADA = Convert.ToInt32(HiddenField_CANTIDAD_ENTREGADA.Value);
            Int32 CANTIDAD_DISPONIBLE_LOTE = ObtieneCantidadRealDisponibleEnLoteEquipos(Convert.ToInt32(filaInfoLote["CANTIDAD_DISPONIBLE"]), ID_LOTE);

            TextBox_CantidadProducto.Text = "";

            Label_CantidadMax.Text = (CANTIDAD_TOTAL - CANTIDAD_ENTREGADA).ToString();

            Label_CantidadDisponible.Text = CANTIDAD_DISPONIBLE_LOTE.ToString();

            if ((CANTIDAD_TOTAL - CANTIDAD_ENTREGADA) < CANTIDAD_DISPONIBLE_LOTE)
            {
                RangeValidator_TextBox_CantidadProducto.MaximumValue = (CANTIDAD_TOTAL - CANTIDAD_ENTREGADA).ToString();
            }
            else
            {
                RangeValidator_TextBox_CantidadProducto.MaximumValue = CANTIDAD_DISPONIBLE_LOTE.ToString();
            }

            RangeValidator_TextBox_CantidadProducto.MinimumValue = "1";
        }
    }
    protected void DropDownList_TallaEquipos_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (DropDownList_TallaEquipos.SelectedIndex <= 0)
        {
            Cargar_DropDownList_Vacio(DropDownList_ProveedorEquipos);
            Cargar_DropDownList_Vacio(DropDownList_FacturaEquipos);

            Label_CantidadMaxEquipos.Text = "0";

            Label_CantidadDisponibleEquipos.Text = "0";

            GridView_SeleccionarEquipos.DataSource = null;
            GridView_SeleccionarEquipos.DataBind();
        }
        else
        {
            Entrega _entrega = new Entrega(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

            Decimal ID_EMPRESA = Convert.ToDecimal(HiddenField_ID_EMPRESA.Value);
            String ID_CIUDAD = HiddenField_ID_CIUDAD.Value;
            Decimal ID_PRODUCTO = Convert.ToDecimal(HiddenField_ID_PRODUCTO_SELECCIONADO_EQUIPOS.Value);

            DataTable tablaProveedores = _entrega.ObtenerProveedoresPorProductoCiudadEmpresaYTalla(ID_EMPRESA, ID_CIUDAD, ID_PRODUCTO, DropDownList_TallaEquipos.SelectedValue);

            Cargar_DropDownList_Proveedor(DropDownList_ProveedorEquipos, tablaProveedores);

            Cargar_DropDownList_Vacio(DropDownList_FacturaEquipos);

            Label_CantidadMaxEquipos.Text = "0";

            Label_CantidadDisponibleEquipos.Text = "0";

            GridView_SeleccionarEquipos.DataSource = null;
            GridView_SeleccionarEquipos.DataBind();
        }
    }
    protected void DropDownList_FacturaEquipos_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (DropDownList_FacturaEquipos.SelectedIndex <= 0)
        {
            Label_CantidadMaxEquipos.Text = "0";

            Label_CantidadDisponibleEquipos.Text = "0";

            Panel_GrillaEquipos.Visible = false;

            GridView_SeleccionarEquipos.DataSource = null;
            GridView_SeleccionarEquipos.DataBind();
        }
        else
        {
            Entrega _entrega = new Entrega(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

            String[] datosArray = DropDownList_FacturaEquipos.SelectedValue.Split(':');

            Decimal ID_DOCUMENTO = Convert.ToDecimal(datosArray[0]);
            Decimal ID_LOTE = Convert.ToDecimal(datosArray[1]);

            DataTable tablaInfoLote = _entrega.ObtenerCantidadesEnLote(ID_DOCUMENTO, ID_LOTE);

            DataRow filaInfoLote = tablaInfoLote.Rows[0];

            Int32 CANTIDAD_TOTAL = Convert.ToInt32(HiddenField_CANTIDAD_TOTAL_EQUIPOS.Value);
            Int32 CANTIDAD_ENTREGADA = Convert.ToInt32(HiddenField_CANTIDAD_ENTREGADA_EQUIPOS.Value);

            Int32 CANTIDAD_DISPONIBLE_LOTE = ObtieneCantidadRealDisponibleEnLote(Convert.ToInt32(filaInfoLote["CANTIDAD_DISPONIBLE"]), ID_LOTE);

            Label_CantidadMaxEquipos.Text = (CANTIDAD_TOTAL - CANTIDAD_ENTREGADA).ToString();

            Label_CantidadDisponibleEquipos.Text = CANTIDAD_DISPONIBLE_LOTE.ToString();

            DataTable tablaEuiposDisponibles = _entrega.ObtenerEquiposDisponiblesEnLote(ID_DOCUMENTO, ID_LOTE);

            Panel_GrillaEquipos.Visible = true;
            Cargar_GridView_SeleccionarEquipos_DesdeDataTable(tablaEuiposDisponibles);
            inhabilitarFilasGrilla(GridView_SeleccionarEquipos, 0, GridView_SeleccionarEquipos.Columns.Count - 1);
        }
    }
    protected void Button_GUARDAR_Click(object sender, EventArgs e)
    {
        Decimal ID_EMPLEADO = Convert.ToDecimal(HiddenField_ID_EMPLEADO.Value);
        Decimal ID_EMPRESA = Convert.ToDecimal(HiddenField_ID_EMPRESA.Value);

        List<Entrega> listaProductosEntrega = new List<Entrega>();
        List<Equipo> listaEquiposEntrega = new List<Equipo>();

        for (int i = 0; i < GridView_AdjuntosAEntrega.Rows.Count; i++)
        {
            GridViewRow filaGrilla = GridView_AdjuntosAEntrega.Rows[i];

            Decimal ID_INDEX = Convert.ToDecimal(GridView_AdjuntosAEntrega.DataKeys[i].Values["ID_INDEX"]);
            Decimal ID_DETALLE_ENTREGA = Convert.ToDecimal(GridView_AdjuntosAEntrega.DataKeys[i].Values["ID_DETALLE_ENTREGA"]);
            Decimal ID_ASIGNACION_SC = Convert.ToDecimal(GridView_AdjuntosAEntrega.DataKeys[i].Values["ID_ASIGNACION_SC"]);
            Decimal ID_LOTE = Convert.ToDecimal(GridView_AdjuntosAEntrega.DataKeys[i].Values["ID_LOTE"]);
            Decimal ID_DOCUMENTO = Convert.ToDecimal(GridView_AdjuntosAEntrega.DataKeys[i].Values["ID_DOCUMENTO"]);
            Decimal ID_PRODUCTO = Convert.ToDecimal(GridView_AdjuntosAEntrega.DataKeys[i].Values["ID_PRODUCTO"]);
            Int32 CANTIDAD_TOTAL = Convert.ToInt32(GridView_AdjuntosAEntrega.DataKeys[i].Values["CANTIDAD_TOTAL"]);
            DateTime FECHA_PROYECTADA_ENTREGA = Convert.ToDateTime(GridView_AdjuntosAEntrega.DataKeys[i].Values["FECHA_PROYECTADA_ENTREGA"]);
            String TIPO_ENTREGA = GridView_AdjuntosAEntrega.DataKeys[i].Values["TIPO_ENTREGA"].ToString();

            TextBox textoCantidad = filaGrilla.FindControl("TextBox_Cantidad") as TextBox;
            Int32 CANTIDAD = Convert.ToInt32(textoCantidad.Text);

            TextBox textoTalla = filaGrilla.FindControl("TextBox_Talla") as TextBox;
            String TALLA = textoTalla.Text;

            Entrega _entregaParaLista = new Entrega();

            _entregaParaLista.CANTIDAD = CANTIDAD;
            _entregaParaLista.ID_ASIGNACION_SC = ID_ASIGNACION_SC;
            _entregaParaLista.ID_DETALLE_ENTREGA = ID_DETALLE_ENTREGA;
            _entregaParaLista.ID_DOCUMENTO = ID_DOCUMENTO;
            _entregaParaLista.ID_INDEX = ID_INDEX;
            _entregaParaLista.ID_LOTE = ID_LOTE;
            _entregaParaLista.TALLA = TALLA;
            _entregaParaLista.ID_PRODUCTO = ID_PRODUCTO;
            _entregaParaLista.CANTIDAD_TOTAL = CANTIDAD_TOTAL;
            _entregaParaLista.FECHA_PROYECTADA_ENTREGA = FECHA_PROYECTADA_ENTREGA;
            _entregaParaLista.TIPO_ENTREGA = TIPO_ENTREGA;

            listaProductosEntrega.Add(_entregaParaLista);
        }

        for (int i = 0; i < GridView_EquiposAdjuntosAEntrega.Rows.Count; i++)
        {
            GridViewRow filaGrilla = GridView_EquiposAdjuntosAEntrega.Rows[i];

            Decimal ID_INDEX = Convert.ToDecimal(GridView_EquiposAdjuntosAEntrega.DataKeys[i].Values["ID_INDEX"]);
            Decimal ID_DETALLE_ENTREGA = Convert.ToDecimal(GridView_EquiposAdjuntosAEntrega.DataKeys[i].Values["ID_DETALLE_ENTREGA"]);
            Decimal ID_ASIGNACION_SC = Convert.ToDecimal(GridView_EquiposAdjuntosAEntrega.DataKeys[i].Values["ID_ASIGNACION_SC"]);
            Decimal ID_LOTE = Convert.ToDecimal(GridView_EquiposAdjuntosAEntrega.DataKeys[i].Values["ID_LOTE"]);
            Decimal ID_DOCUMENTO = Convert.ToDecimal(GridView_EquiposAdjuntosAEntrega.DataKeys[i].Values["ID_DOCUMENTO"]);
            Decimal ID_EQUIPO = Convert.ToDecimal(GridView_EquiposAdjuntosAEntrega.DataKeys[i].Values["ID_EQUIPO"]);
            Decimal ID_PRODUCTO = Convert.ToDecimal(GridView_EquiposAdjuntosAEntrega.DataKeys[i].Values["ID_PRODUCTO"]);
            DateTime FECHA_PROYECTADA_ENTREGA = Convert.ToDateTime(GridView_EquiposAdjuntosAEntrega.DataKeys[i].Values["FECHA_PROYECTADA_ENTREGA"]);
            String TIPO_ENTREGA = GridView_EquiposAdjuntosAEntrega.DataKeys[i].Values["TIPO_ENTREGA"].ToString();
            Int32 CANTIDAD_TOTAL = Convert.ToInt32(GridView_EquiposAdjuntosAEntrega.DataKeys[i].Values["CANTIDAD_TOTAL"]);

            Equipo _equipoParaLista = new Equipo();

            _equipoParaLista.FECHA_PROYECTADA_ENTREGA = FECHA_PROYECTADA_ENTREGA;
            _equipoParaLista.ID_ASIGNACION_SC = ID_ASIGNACION_SC;
            _equipoParaLista.ID_DETALLE_ENTREGA = ID_DETALLE_ENTREGA;
            _equipoParaLista.ID_DOCUMENTO = ID_DOCUMENTO;
            _equipoParaLista.ID_EQUIPO = ID_EQUIPO;
            _equipoParaLista.ID_INDEX = ID_INDEX;
            _equipoParaLista.ID_LOTE = ID_LOTE;
            _equipoParaLista.ID_PRODUCTO = ID_PRODUCTO;
            _equipoParaLista.TIPO_ENTREGA = TIPO_ENTREGA;
            _equipoParaLista.CANTIDAD_TOTAL = CANTIDAD_TOTAL;

            listaEquiposEntrega.Add(_equipoParaLista);
        }

        Entrega _entrega = new Entrega(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

        Decimal ID_DOCUMENTO_ENTREGA = _entrega.AdicionarEntregaProductos(ID_EMPLEADO, listaProductosEntrega, listaEquiposEntrega);

        if (ID_DOCUMENTO_ENTREGA <= 0)
        {
            Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _entrega.MensajeError, Proceso.Error);
        }
        else
        {
            Ocultar(Acciones.ImprimirEntrega);
            Mostrar(Acciones.ImprimirEntrega);

            HiddenField_ID_DOCUMENTO_ENTREGA.Value = ID_DOCUMENTO_ENTREGA.ToString();

            DataTable tablaParaGrillaPendientes = ObtenerTablaConDatosDePendientes(ID_EMPLEADO);

            if (tablaParaGrillaPendientes.Rows.Count > 0)
            {
                Cargar_GridView_Entregas_desdeTabla(tablaParaGrillaPendientes);
            }
            else
            {
                Panel_GrillaEntregasProximas.Visible = false;
            }

            inhabilitarFilasGrilla(GridView_Entregas, 1);

            GridView_Entregas.Columns[0].Visible = false;

            Panel_AdjuntosAEntrega.Visible = false;
            GridView_AdjuntosAEntrega.DataSource = null;
            GridView_AdjuntosAEntrega.DataBind();

            Panel_EquiposAdjuntosAEntrega.Visible = false;
            GridView_EquiposAdjuntosAEntrega.DataSource = null;
            GridView_EquiposAdjuntosAEntrega.DataBind();

            Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, "La entrega se registró correctamente, ahora puede imprimir el acta de entrega.", Proceso.Correcto);
        }
    }
    private DataTable ObtenerTablaFinalDePendientes(DataTable tablaInfoContrato, Decimal ID_EMPLEADO)
    {
        Boolean correcto = true;

        DataRow filaContrato = tablaInfoContrato.Rows[0];

        DateTime FECHA_INICIA_CONTRATO = Convert.ToDateTime(filaContrato["FECHA_INICIA"]);

        DataTable tablaParaGrilla = obtenerEstructuraTablaPendientes();

        Entrega _entrega = new Entrega(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());
        DataTable tablaConfiguracionEntregas = _entrega.ObtenerConfiguracionEntregasPorEmpleado(ID_EMPLEADO);

        Int32 contador = 0;

        if (tablaConfiguracionEntregas.Rows.Count <= 0)
        {
            if (_entrega.MensajeError != null)
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _entrega.MensajeError, Proceso.Error);
                correcto = false;
            }
        }

        if (correcto == true)
        {

            for (int i = 0; i < tablaConfiguracionEntregas.Rows.Count; i++)
            {
                DataRow filaConfiguracion = tablaConfiguracionEntregas.Rows[i];

                if (filaConfiguracion["PRIMERA_ENTREGA"].ToString() == "True")
                {
                    _entrega.MensajeError = null;

                    DataTable tablaInformacionEntregaInicial = _entrega.ObtenerInformacionPrimeraEntregaProductoYEmpleado(ID_EMPLEADO, Convert.ToDecimal(filaConfiguracion["ID_PRODUCTO"]), TiposEntrega.INICIAL.ToString());
                    if (_entrega.MensajeError != null)
                    {
                        Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _entrega.MensajeError, Proceso.Error);
                        correcto = false;
                        break;
                    }

                    if (tablaInformacionEntregaInicial.Rows.Count <= 0)
                    {
                        DataRow filaParaGrilla = tablaParaGrilla.NewRow();

                        filaParaGrilla["ID_INDEX"] = contador;
                        contador += 1;
                        filaParaGrilla["ID_ASIGNACION_SC"] = 0;
                        filaParaGrilla["ID_EMPLEADO"] = ID_EMPLEADO;
                        filaParaGrilla["ID_PRODUCTO"] = filaConfiguracion["ID_PRODUCTO"];
                        filaParaGrilla["NOMBRE_PRODUCTO"] = filaConfiguracion["NOMBRE_PRODUCTO"];
                        filaParaGrilla["CANTIDAD_TOTAL"] = filaConfiguracion["CANTIDAD"];
                        filaParaGrilla["CANTIDAD_ENTREGADA_INICIAL"] = 0;
                        filaParaGrilla["CANTIDAD_ENTREGADA"] = 0;
                        filaParaGrilla["FECHA_PROYECTADA"] = FECHA_INICIA_CONTRATO;
                        filaParaGrilla["TIPO_ENTERGA"] = TiposEntrega.INICIAL.ToString();
                        filaParaGrilla["NOMBRE_SERVICIO_COMPLEMENTARIO"] = filaConfiguracion["NOMBRE_SERVICIO_COMPLEMENTARIO"];

                        tablaParaGrilla.Rows.Add(filaParaGrilla);
                    }
                    else
                    {
                        DataRow filaInformacionEntregaInicial = tablaInformacionEntregaInicial.Rows[0];

                        if (filaInformacionEntregaInicial["ESTADO"].ToString() == EstadosAsignacionSC.ABIERTA.ToString())
                        {
                            DataRow filaParaGrilla = tablaParaGrilla.NewRow();

                            filaParaGrilla["ID_INDEX"] = contador;
                            contador += 1;
                            filaParaGrilla["ID_ASIGNACION_SC"] = filaInformacionEntregaInicial["ID_ASIGNACION_SC"];
                            filaParaGrilla["ID_EMPLEADO"] = ID_EMPLEADO;
                            filaParaGrilla["ID_PRODUCTO"] = filaInformacionEntregaInicial["ID_PRODUCTO"];
                            filaParaGrilla["NOMBRE_PRODUCTO"] = filaInformacionEntregaInicial["NOMBRE_PRODUCTO"];
                            filaParaGrilla["CANTIDAD_TOTAL"] = filaInformacionEntregaInicial["CANTIDAD_TOTAL"];
                            filaParaGrilla["CANTIDAD_ENTREGADA_INICIAL"] = filaInformacionEntregaInicial["CANTIDAD_ENTREGADA"];
                            filaParaGrilla["CANTIDAD_ENTREGADA"] = filaInformacionEntregaInicial["CANTIDAD_ENTREGADA"];
                            filaParaGrilla["FECHA_PROYECTADA"] = Convert.ToDateTime(filaInformacionEntregaInicial["FCH_PROYECTA_ENTREGA"]);
                            filaParaGrilla["TIPO_ENTERGA"] = TiposEntrega.INICIAL.ToString();
                            filaParaGrilla["NOMBRE_SERVICIO_COMPLEMENTARIO"] = filaConfiguracion["NOMBRE_SERVICIO_COMPLEMENTARIO"];

                            tablaParaGrilla.Rows.Add(filaParaGrilla);
                        }
                    }
                }
                else
                {
                    _entrega.MensajeError = null;
                    DataTable tablaInformacionEntregasProgramadasProducto = _entrega.ObtenerInformacionPrimeraEntregaProductoYEmpleado(ID_EMPLEADO, Convert.ToDecimal(filaConfiguracion["ID_PRODUCTO"]), TiposEntrega.PROGRAMADA.ToString());
                    if (_entrega.MensajeError != null)
                    {
                        Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _entrega.MensajeError, Proceso.Error);
                        correcto = false;
                        break;
                    }

                    if (tablaInformacionEntregasProgramadasProducto.Rows.Count <= 0)
                    {
                        String AJUSTE_A = filaConfiguracion["AJUSTE_A"].ToString();

                        if (AJUSTE_A == TiposAjusteA.CONTRATO.ToString())
                        {
                            DateTime FECHA_PROYECTADA_ENTREGA = ObtenerFechaProyectadaDeEntrega(FECHA_INICIA_CONTRATO, filaConfiguracion["PERIODICIDAD"].ToString());

                            DataRow filaParaGrilla = tablaParaGrilla.NewRow();

                            filaParaGrilla["ID_INDEX"] = contador;
                            contador += 1;
                            filaParaGrilla["ID_ASIGNACION_SC"] = 0;
                            filaParaGrilla["ID_EMPLEADO"] = ID_EMPLEADO;
                            filaParaGrilla["ID_PRODUCTO"] = filaConfiguracion["ID_PRODUCTO"];
                            filaParaGrilla["NOMBRE_PRODUCTO"] = filaConfiguracion["NOMBRE_PRODUCTO"];
                            filaParaGrilla["CANTIDAD_TOTAL"] = filaConfiguracion["CANTIDAD"];
                            filaParaGrilla["CANTIDAD_ENTREGADA_INICIAL"] = 0;
                            filaParaGrilla["CANTIDAD_ENTREGADA"] = 0;
                            filaParaGrilla["FECHA_PROYECTADA"] = FECHA_PROYECTADA_ENTREGA;
                            filaParaGrilla["TIPO_ENTERGA"] = TiposEntrega.PROGRAMADA.ToString();
                            filaParaGrilla["NOMBRE_SERVICIO_COMPLEMENTARIO"] = filaConfiguracion["NOMBRE_SERVICIO_COMPLEMENTARIO"];

                            tablaParaGrilla.Rows.Add(filaParaGrilla);
                        }
                        else
                        {
                            DateTime FECHA_PROYECTADA_ENTREGA = ObtenerFechaProyectadaDeEntregaAjsutadaAFechaEspecifica(Convert.ToDateTime(filaConfiguracion["FECHA_AJUSTE"]), FECHA_INICIA_CONTRATO, filaConfiguracion["PERIODICIDAD"].ToString());

                            DataRow filaParaGrilla = tablaParaGrilla.NewRow();

                            filaParaGrilla["ID_INDEX"] = contador;
                            contador += 1;
                            filaParaGrilla["ID_ASIGNACION_SC"] = 0;
                            filaParaGrilla["ID_EMPLEADO"] = ID_EMPLEADO;
                            filaParaGrilla["ID_PRODUCTO"] = filaConfiguracion["ID_PRODUCTO"];
                            filaParaGrilla["NOMBRE_PRODUCTO"] = filaConfiguracion["NOMBRE_PRODUCTO"];
                            filaParaGrilla["CANTIDAD_TOTAL"] = filaConfiguracion["CANTIDAD"];
                            filaParaGrilla["CANTIDAD_ENTREGADA_INICIAL"] = 0;
                            filaParaGrilla["CANTIDAD_ENTREGADA"] = 0;
                            filaParaGrilla["FECHA_PROYECTADA"] = FECHA_PROYECTADA_ENTREGA;
                            filaParaGrilla["TIPO_ENTERGA"] = TiposEntrega.PROGRAMADA.ToString();
                            filaParaGrilla["NOMBRE_SERVICIO_COMPLEMENTARIO"] = filaConfiguracion["NOMBRE_SERVICIO_COMPLEMENTARIO"];

                            tablaParaGrilla.Rows.Add(filaParaGrilla);
                        }
                    }
                    else
                    {
                        Boolean existeAbierta = false;
                        DateTime fechaUltimaEntrega = new DateTime();

                        for (int j = 0; j < tablaInformacionEntregasProgramadasProducto.Rows.Count; j++)
                        {
                            DataRow filaEntregaProgramada = tablaInformacionEntregasProgramadasProducto.Rows[j];
                            DateTime fechaProyectadaEntrega = Convert.ToDateTime(filaEntregaProgramada["FCH_PROYECTA_ENTREGA"]);

                            if (fechaProyectadaEntrega > fechaUltimaEntrega)
                            {
                                fechaUltimaEntrega = fechaProyectadaEntrega;
                            }

                            if (filaEntregaProgramada["ESTADO"].ToString() == EstadosAsignacionSC.ABIERTA.ToString())
                            {
                                existeAbierta = true;

                                DataRow filaParaGrilla = tablaParaGrilla.NewRow();

                                filaParaGrilla["ID_INDEX"] = contador;
                                contador += 1;
                                filaParaGrilla["ID_ASIGNACION_SC"] = filaEntregaProgramada["ID_ASIGNACION_SC"];
                                filaParaGrilla["ID_EMPLEADO"] = ID_EMPLEADO;
                                filaParaGrilla["ID_PRODUCTO"] = filaEntregaProgramada["ID_PRODUCTO"];
                                filaParaGrilla["NOMBRE_PRODUCTO"] = filaEntregaProgramada["NOMBRE_PRODUCTO"];
                                filaParaGrilla["CANTIDAD_TOTAL"] = filaEntregaProgramada["CANTIDAD_TOTAL"];
                                filaParaGrilla["CANTIDAD_ENTREGADA_INICIAL"] = filaEntregaProgramada["CANTIDAD_ENTREGADA"];
                                filaParaGrilla["CANTIDAD_ENTREGADA"] = filaEntregaProgramada["CANTIDAD_ENTREGADA"];
                                filaParaGrilla["FECHA_PROYECTADA"] = filaEntregaProgramada["FCH_PROYECTA_ENTREGA"];
                                filaParaGrilla["TIPO_ENTERGA"] = TiposEntrega.PROGRAMADA.ToString();
                                filaParaGrilla["NOMBRE_SERVICIO_COMPLEMENTARIO"] = filaConfiguracion["NOMBRE_SERVICIO_COMPLEMENTARIO"];

                                tablaParaGrilla.Rows.Add(filaParaGrilla);
                            }

                            if (existeAbierta == false)
                            {
                                DateTime FECHA_PROXIMA_ENTREGA = new DateTime();

                                if (filaConfiguracion["AJUSTE_A"].ToString() == TiposAjusteA.CONTRATO.ToString())
                                {
                                    FECHA_PROXIMA_ENTREGA = ObtenerFechaProyectadaDeEntregaAjsutadaAFechaEspecifica(FECHA_INICIA_CONTRATO, fechaUltimaEntrega.AddDays(1), filaConfiguracion["PERIODICIDAD"].ToString());
                                }
                                else
                                {
                                    DateTime fechaAjusteA = Convert.ToDateTime(filaConfiguracion["FECHA_AJUSTE"]);
                                    FECHA_PROXIMA_ENTREGA = ObtenerFechaProyectadaDeEntregaAjsutadaAFechaEspecifica(fechaAjusteA, fechaUltimaEntrega.AddDays(1), filaConfiguracion["PERIODICIDAD"].ToString());
                                }

                                DataRow filaParaGrilla = tablaParaGrilla.NewRow();

                                filaParaGrilla["ID_INDEX"] = contador;
                                contador += 1;
                                filaParaGrilla["ID_ASIGNACION_SC"] = 0;
                                filaParaGrilla["ID_EMPLEADO"] = ID_EMPLEADO;
                                filaParaGrilla["ID_PRODUCTO"] = filaConfiguracion["ID_PRODUCTO"];
                                filaParaGrilla["NOMBRE_PRODUCTO"] = filaConfiguracion["NOMBRE_PRODUCTO"];
                                filaParaGrilla["CANTIDAD_TOTAL"] = filaConfiguracion["CANTIDAD"];
                                filaParaGrilla["CANTIDAD_ENTREGADA_INICIAL"] = 0;
                                filaParaGrilla["CANTIDAD_ENTREGADA"] = 0;
                                filaParaGrilla["FECHA_PROYECTADA"] = FECHA_PROXIMA_ENTREGA;
                                filaParaGrilla["TIPO_ENTERGA"] = TiposEntrega.PROGRAMADA.ToString();
                                filaParaGrilla["NOMBRE_SERVICIO_COMPLEMENTARIO"] = filaConfiguracion["NOMBRE_SERVICIO_COMPLEMENTARIO"];

                                tablaParaGrilla.Rows.Add(filaParaGrilla);
                            }
                        }
                    }
                }
            }
        }

        if (correcto == true)
        {
            _entrega.MensajeError = null;
            DataTable tablaInformacionEntregasEspecialesProducto = _entrega.ObtenerInformacionEntregasPorEmpleadoyTipoEntrega(ID_EMPLEADO, TiposEntrega.ESPECIAL.ToString());
            if (_entrega.MensajeError != null)
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _entrega.MensajeError, Proceso.Error);
                correcto = false;
            }

            if (correcto == true)
            {
                for (int i = 0; i < tablaInformacionEntregasEspecialesProducto.Rows.Count; i++)
                {
                    DataRow filainformacionEntregaEspecial = tablaInformacionEntregasEspecialesProducto.Rows[i];

                    if (filainformacionEntregaEspecial["ESTADO"].ToString() == EstadosAsignacionSC.ABIERTA.ToString())
                    {
                        DataRow filaParaGrilla = tablaParaGrilla.NewRow();

                        filaParaGrilla["ID_INDEX"] = contador;
                        contador += 1;
                        filaParaGrilla["ID_ASIGNACION_SC"] = filainformacionEntregaEspecial["ID_ASIGNACION_SC"];
                        filaParaGrilla["ID_EMPLEADO"] = ID_EMPLEADO;
                        filaParaGrilla["ID_PRODUCTO"] = filainformacionEntregaEspecial["ID_PRODUCTO"];
                        filaParaGrilla["NOMBRE_PRODUCTO"] = filainformacionEntregaEspecial["NOMBRE_PRODUCTO"];
                        filaParaGrilla["CANTIDAD_TOTAL"] = filainformacionEntregaEspecial["CANTIDAD_TOTAL"];
                        filaParaGrilla["CANTIDAD_ENTREGADA_INICIAL"] = filainformacionEntregaEspecial["CANTIDAD_ENTREGADA"];
                        filaParaGrilla["CANTIDAD_ENTREGADA"] = filainformacionEntregaEspecial["CANTIDAD_ENTREGADA"];
                        filaParaGrilla["FECHA_PROYECTADA"] = filainformacionEntregaEspecial["FCH_PROYECTA_ENTREGA"];
                        filaParaGrilla["TIPO_ENTERGA"] = TiposEntrega.ESPECIAL.ToString();
                        filaParaGrilla["NOMBRE_SERVICIO_COMPLEMENTARIO"] = filainformacionEntregaEspecial["NOMBRE_SERVICIO_COMPLEMENTARIO"];

                        tablaParaGrilla.Rows.Add(filaParaGrilla);
                    }
                }
            }
        }

        return tablaParaGrilla;
    }
    private void CargarFormularioAdjuntarEquipos(Decimal ID_INDEX, Decimal ID_PRODUCTO, Decimal ID_ASIGNACION_SC, Int32 CANTIDAD_TOTAL, Int32 CANTIDAD_ENTREGADA, String FECHA_PROYECTADA_ENTREGA, String TIPO_ENTREGA, String NOMBRE_PRODUCTO)
    {
        HiddenField_ID_INDEX_EQUIPOS.Value = ID_INDEX.ToString();
        HiddenField_ID_ASIGNACION_SC_EQUIPOS.Value = ID_ASIGNACION_SC.ToString();
        HiddenField_ID_PRODUCTO_SELECCIONADO_EQUIPOS.Value = ID_PRODUCTO.ToString();
        HiddenField_CANTIDAD_TOTAL_EQUIPOS.Value = CANTIDAD_TOTAL.ToString();
        HiddenField_CANTIDAD_ENTREGADA_EQUIPOS.Value = CANTIDAD_ENTREGADA.ToString();
        HiddenField_FECHA_PROYECTADA_ENTREGA_EQUIPOS.Value = FECHA_PROYECTADA_ENTREGA;
        HiddenField_TIPO_ENTREGA_EQUIPOS.Value = TIPO_ENTREGA;

        Decimal ID_EMPRESA = Convert.ToDecimal(HiddenField_ID_EMPRESA.Value);
        String ID_CIUDAD = HiddenField_ID_CIUDAD.Value;

        Entrega _entrega = new Entrega(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());
        DataTable tablaTallas = _entrega.ObtenerEntradasSalidasProductoPorCiudadYEmpresa(ID_EMPRESA, ID_CIUDAD, ID_PRODUCTO);

        Cargar_DropDownList_TallaProducto(DropDownList_TallaEquipos, tablaTallas);

        Label_NombreProductoEquipos.Text = NOMBRE_PRODUCTO;

        Cargar_DropDownList_Vacio(DropDownList_ProveedorEquipos);
        Cargar_DropDownList_Vacio(DropDownList_FacturaEquipos);

        Label_CantidadMaxEquipos.Text = "0";
        Label_CantidadDisponibleEquipos.Text = "0";

        Panel_GrillaEquipos.Visible = false;
    }
    private void CargarFormularioAdjuntar(Decimal ID_INDEX, Decimal ID_PRODUCTO, Decimal ID_ASIGNACION_SC, Int32 CANTIDAD_TOTAL, Int32 CANTIDAD_ENTREGADA, String FECHA_PROYECTADA_ENTREGA, String TIPO_ENTREGA, String NOMBRE_PRODUCTO)
    {
        HiddenField_ID_INDEX.Value = ID_INDEX.ToString();
        HiddenField_ID_PRODUCTO_SELECCIONADO.Value = ID_PRODUCTO.ToString();
        HiddenField_ID_ASIGNACION_SC.Value = ID_ASIGNACION_SC.ToString();
        HiddenField_CANTIDAD_TOTAL.Value = CANTIDAD_TOTAL.ToString();
        HiddenField_CANTIDAD_ENTREGADA.Value = CANTIDAD_ENTREGADA.ToString();
        HiddenField_FECHA_PROYECTADA_ENTREGA.Value = FECHA_PROYECTADA_ENTREGA;
        HiddenField_TIPO_ENTREGA.Value = TIPO_ENTREGA;

        Decimal ID_EMPRESA = Convert.ToDecimal(HiddenField_ID_EMPRESA.Value);
        String ID_CIUDAD = HiddenField_ID_CIUDAD.Value;

        Entrega _entrega = new Entrega(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());
        DataTable tablaTallas = _entrega.ObtenerEntradasSalidasProductoPorCiudadYEmpresa(ID_EMPRESA, ID_CIUDAD, ID_PRODUCTO);

        Cargar_DropDownList_TallaProducto(DropDownList_TallaProducto, tablaTallas);

        Cargar_DropDownList_Vacio(DropDownList_Proveedor);
        Cargar_DropDownList_Vacio(DropDownList_Factura);

        Label_NombreProducto.Text = NOMBRE_PRODUCTO;

        TextBox_CantidadProducto.Text = "";

        Label_CantidadMax.Text = "0";
        Label_CantidadDisponible.Text = "0";

        RangeValidator_TextBox_CantidadProducto.MaximumValue = "0";
        RangeValidator_TextBox_CantidadProducto.MinimumValue = "0";
    }