private bool Cobrar_Venta()
        {
            decimal totalPago = 0;
            decimal totalDifTarjeta = 0;

            if (dgvGrilla.DataSource == null)
            {
                MostrarMensajeAdvertencia("Debe ingresar al menos un producto para la venta");
                txtCodigoBarra.Text = string.Empty;
                txtCodigoBarra.Focus();
                return false;
            }

            //PREGUNTA SI ES EN EFECTIVO O CTA CTE O TARJETA O CHEQUE
            //SI ES EN EFECTIVO ABRE FRM PAGACON
            if (FormaPago.FOR_DESCRIPCION.Contains(Constantes.Efectivo))
            {
                frmPAGACON frm = new frmPAGACON(Convert.ToDecimal(txtTotal.Text), "frmVENTAS", null);
                DialogResult dr = frm.ShowDialog();
                if (dr != DialogResult.OK || MontoPagaCon == null)
                {
                    MostrarMensajeAdvertencia("Debe Ingresar el Monto a Pagar.");
                    return false;
                }

                lblPagaCon.Text = Convert.ToDecimal(MontoPagaCon).ToString("0.000");
            }

            //SI ES CON CTA CTE ABRE FRM SELCCIONAR CTA CTE
            if (FormaPago.FOR_DESCRIPCION.Contains("CTA CTE"))
            {
                //selecciono el cliente y muestro cartel que diga "La Vta de total "", se asignara a la cta cte del cliente "cliente",
                //el saldo total de la deuda de la cta cte es "saldo cta cte". OK para confirmar CANCELAR para cambiar la foma de pago
                //si viene por ok doy de alta el movimiento en la cta cte del cliente y dejo habilitado solamente los botones de imprimir ticket
                //si es cancelar vuelve al frm vtas y habilita el boton frm forma de pago
                //ABRO FRM BUSCAR CLIENTE
                if (!ClienteConsumidorFinal)
                {
                    if (Cliente == null)
                    {
                        frmBUSCACLIENTECONCTACTE frm = new frmBUSCACLIENTECONCTACTE(Constantes.venta);
                        DialogResult dr = frm.ShowDialog();
                        if (dr != DialogResult.OK)
                        {
                            if (Cliente == null)
                            {
                                MostrarMensajeAdvertencia("La forma de pago es por medio de CTA CTE, para ello debe seleccionar un cliente");
                                return false;
                            }
                        }
                    }

                    var CTA_CLIENTE = cCLIENTE.ObtenerCtaCteCliente(Cliente);
                    if (CTA_CLIENTE == null)
                    {
                        MostrarMensajeAdvertencia("El Cliente seleccionado no tiene creada una Cta Cte.\n Para crear una debe comunicarse con un usuario administrador.");
                        btnCliente.Enabled = true;
                        return false;
                    }

                    if (!ValidaTopeCtaCte())
                    {
                        return false;
                    }

                    var SALDO_CTA = CTA_CLIENTE.CCC_SALDO + Convert.ToDecimal(txtTotal.Text);
                    var rta = MostrarMensajePreguntaSI_NO("El total de la venta $" + txtTotal.Text + " , será asignada a la cta cte del cliente: " + Cliente.CLI_NOMBREYAPELLIDO + " .\n El saldo de la cuenta es: $" + SALDO_CTA + " .\n OK para confirmar o CANCEL para volver a la venta.");
                    if (!rta)
                    {
                        return false;
                    }
                    else
                    {
                        lblPagaCon.Text = Convert.ToDecimal(txtTotal.Text).ToString("0.000");
                    }
                }
            }

            //SI ES CON CHEQUE CREA Y DA DE ALTA EL CHEQUE
            if (FormaPago.FOR_DESCRIPCION.Contains(Constantes.Cheque))
            {
                //ALTA CHEQUE
                frmCHEQUE frm = new frmCHEQUE(Cheque, Convert.ToDecimal(txtTotal.Text), "frmVENTAS", null);
                DialogResult dr = frm.ShowDialog();
                if (dr != DialogResult.OK || Cheque == null)
                {
                    MostrarMensajeAdvertencia("Debe Ingresar el Cheque.");
                    return false;
                }

                lblPagaCon.Text = Convert.ToDecimal(Cheque.CHE_VALOR).ToString("0.000");
            }

            //SI ES CON TARJETA CREA Y DA DE ALTA DE TARJETA
            if (FormaPago.FOR_DESCRIPCION.Contains(Constantes.Tarjeta))
            {
                frmTARJETA frm = new frmTARJETA(Tarjeta, Convert.ToDecimal(txtTotal.Text), "frmVENTAS", null);
                DialogResult dr = frm.ShowDialog();
                if (dr != DialogResult.OK || Tarjeta == null)
                {
                    MostrarMensajeAdvertencia("Debe Ingresar la Tarjeta.");
                    return false;
                }

                lblDiferenciaTarjeta.Visible =
                        txtDiferenciaTarjeta.Visible = true;

                lblPagaCon.Text = Convert.ToDecimal(Tarjeta.TARJ_TOTALAPAGAR).ToString("0.000");
                txtDiferenciaTarjeta.Text = Convert.ToDecimal(Tarjeta.TARJ_DIFTARJETA).ToString("0.000");
                txtTotal.Text = Convert.ToDecimal(Tarjeta.TARJ_TOTALAPAGAR).ToString("0.00");
            }

            //SI ES CON NOTA DE CREDITO
            if (FormaPago.FOR_DESCRIPCION.Contains(Constantes.NotaCredito))
            {
                //BUSCO LA NOTA DE CREDITO
                frmNOTACREDITO frm = new frmNOTACREDITO(Nota_Credito, Convert.ToDecimal(txtTotal.Text), "frmVENTAS", null);
                DialogResult dr = frm.ShowDialog();
                if (dr != DialogResult.OK || Nota_Credito == null)
                {
                    MostrarMensajeAdvertencia("Debe Ingresar una Nota de Crédito.");
                    return false;
                }

                lblPagaCon.Text = Convert.ToDecimal(Nota_Credito.NOT_TOTAL).ToString("0.000");
            }

            if (FormaPago.FOR_DESCRIPCION.Contains(Constantes.Multiple))
            {
                frmMULTIPLEPAGO frm = new frmMULTIPLEPAGO(eMULTIPLE, Convert.ToDecimal(txtTotal.Text));
                DialogResult drRESULTADO = frm.ShowDialog();

                if (frmVENTAS.ListaMultiplesPagos == null)
                {
                    MostrarMensajeAdvertencia("Debe Ingresar pagos Multiples.");
                    return false;
                }

                foreach (var item in frmVENTAS.ListaMultiplesPagos)
                {
                    switch (item.FORM_PAGO)
                    {
                        case Constantes.Cheque:
                            totalPago += (decimal)item.CHE_VALOR;
                            break;

                        case Constantes.NotaCredito:
                            totalPago += (decimal)item.NOTA_CREDITO.NOT_TOTAL;
                            break;

                        case Constantes.Tarjeta:
                            totalPago += (decimal)item.TARJ_TOTALAPAGAR;
                            totalDifTarjeta += (decimal)item.TARJ_DIFTARJETA;
                            break;

                        case Constantes.Efectivo:
                            totalPago += item.EFEC_MONTO;
                            break;

                        default: break;
                    }
                }

                //valida si MontoPagaCon == null porque cancelo
                if (totalPago == null || totalPago == 0)
                {
                    MostrarMensajeAdvertencia("Debe Ingresar el Monto a Pagar.");
                    return false;
                }

                lblDiferenciaTarjeta.Visible =
                    txtDiferenciaTarjeta.Visible = true;

                lblPagaCon.Text = Convert.ToDecimal(totalPago).ToString("0.000");
                txtDiferenciaTarjeta.Text = Convert.ToDecimal(totalDifTarjeta).ToString("0.000");
                txtTotal.Text = Convert.ToDecimal(totalPago).ToString("0.00");
            }

            if (FormaPago.FOR_DESCRIPCION.Contains(Constantes.Ficha))
            {
                if (!ClienteConsumidorFinal)
                {
                    if (Cliente == null)
                    {
                        frmBUSCACLIENTECONCTACTE frm = new frmBUSCACLIENTECONCTACTE(Constantes.venta);
                        DialogResult dr = frm.ShowDialog();
                        if (dr != DialogResult.OK)
                        {
                            if (Cliente == null)
                            {
                                MostrarMensajeAdvertencia("La forma de pago es por medio de FICHA, para ello debe seleccionar un cliente");
                                return false;
                            }
                        }
                    }

                    var CTA_CLIENTE = cCLIENTE.ObtenerCtaCteCliente(Cliente);
                    if (CTA_CLIENTE == null)
                    {
                        MostrarMensajeAdvertencia("El Cliente seleccionado no tiene creada una Cta Cte. \n Para crear una debe comunicarse con un usuario administrador.");
                        btnCliente.Enabled = true;
                        return false;
                    }

                    var FICHA_CLIENTE = cFICHA.ObtenerFichaAbiertaCliente(Cliente);
                    if (FICHA_CLIENTE == null)
                    {
                        var rta = MostrarMensajePreguntaSI_NO("El Cliente seleccionado no tiene ninguna ficha abierta. Desea abrirle una?");
                        if (!rta)
                        {
                            return false;
                        }
                        else
                        {
                            //creo una ficha nueva
                            Ficha = new FICHA();
                            Ficha.CLI_ID = Cliente.CLI_ID;
                            Ficha.FIC_ESTADOAPERTURA = true;
                            Ficha.FIC_FECHAAPERTURA = DateTime.Now;
                            Ficha.FIC_TOTAL = 0;
                            Ficha = cFICHA.AltaConRetorno(Ficha);
                        }
                    }
                    else
                    {
                        //tomo la ficha abierta del cliente
                        Ficha = FICHA_CLIENTE;
                    }

                    //VALIDACION DE TOPE CTA CTE EN LA VENTA DE FICHA
                    var SALDO_CTA = CTA_CLIENTE.CCC_SALDO;
                    var TotalEstimadoFIcha = cFICHA.CalcularTotalFichaAlDiaDeHoy(Ficha);
                    var totalDeuda = SALDO_CTA + Convert.ToDecimal(txtTotal.Text) + TotalEstimadoFIcha;
                    if (CTA_CLIENTE.CLIENTE.CLI_MAXTOPE_CTACTE != 0 && CTA_CLIENTE.CLIENTE.CLI_MAXTOPE_CTACTE < totalDeuda)
                    {
                        MostrarMensajeAdvertencia("No se puede realizar la vta mediante ficha porque la suma de la ficha actual ($" + txtTotal.Text + ") y el saldo de la cta cte ($" + SALDO_CTA + ") supera el tope maximo permitido al cliente: " + Cliente.CLI_NOMBREYAPELLIDO + ".");
                        btnCliente.Enabled = true;
                        return false;
                    }

                    var rta2 = MostrarMensajePreguntaSI_NO("Será asignada a la FICHA del cliente: " + Cliente.CLI_NOMBREYAPELLIDO + " . \n El saldo de la cuenta corriente es: $" + SALDO_CTA + " . \n Aceptar para confirmar o Cancelar para volver a la venta.");
                    if (!rta2)
                    {
                        return false;
                    }

                    lblPagaCon.Text = Convert.ToDecimal(txtTotal.Text).ToString("0.000");
                }
            }

            lblVuelto.Text = (Convert.ToDecimal(lblPagaCon.Text) - Convert.ToDecimal(txtTotal.Text)).ToString();

            PagaConVenta = lblPagaCon.Text;
            VueltoVenta = lblVuelto.Text;
            TotalVenta = txtTotal.Text;

            //visibilidad y habilitado de botones
            txtCodigoBarra.Enabled = false;
            cmbProducto.Enabled = false;
            btnDESCUENTO.Enabled = false;
            btnELIMINARPRODUCTO.Enabled = false;
            btnCANTIDAD.Enabled = false;
            btnPRODUCTOSINCODIGO.Enabled = false;

            btnVentaAnterior.Enabled = ImpresoraOK;
            btnTICKETFISCAL.Enabled = ImpresoraOK;
            btnNoTicket.Enabled = true;
            btnCancela.Enabled = true;
            btnTICKETFISCAL.Focus();

            return true;
        }
        private void btnMODIFICACIONES_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgvGrilla.CurrentRow == null)
                {
                    MostrarMensajeAdvertencia(Mensajes.SeleccionarItem);
                    return;
                }

                var FilaSeleccionada = SeleccionarFila();
                if (FilaSeleccionada == null)
                    return;

                switch (FilaSeleccionada.FORM_PAGO)
                {
                    case Constantes.Cheque:
                        //MODIFICACION CHEQUE
                        frmCHEQUE frm = new frmCHEQUE(totalVta, "frmMULTIPLE", FilaSeleccionada, "M");
                        var drResultado = frm.ShowDialog();
                        if (drResultado == DialogResult.OK)
                        {
                            LlenaGrilla();
                        }
                        break;

                    case Constantes.Tarjeta:
                        //MODIFICACION TARJETA
                        frmTARJETA frm1 = new frmTARJETA(0, "frmMULTIPLE", FilaSeleccionada, "M");
                        var drResultado1 = frm1.ShowDialog();
                        if (drResultado1 == DialogResult.OK)
                        {
                            LlenaGrilla();
                        }
                        break;

                    case Constantes.Efectivo:
                        //MODIFICACION EFECTIVO
                        frmPAGACON frm4 = new frmPAGACON(totalVta, "frmMULTIPLE", FilaSeleccionada, "M");
                        var drResultado4 = frm4.ShowDialog();
                        if (drResultado4 == DialogResult.OK)
                        {
                            LlenaGrilla();
                        }
                        break;

                    default: break;
                }

            }
            catch (Exception ex)
            {
                ProcesarExcepcion(ex);
            }
        }
        private void btnALTAS_Click(object sender, EventArgs e)
        {
            try
            {
                var SelecFormaPago = (FORMA_PAGO)cmbFORMAPAGO.SelectedItem;

                switch (SelecFormaPago.FOR_DESCRIPCION)
                {
                    case Constantes.Cheque:
                        //ALTA CHEQUE
                        if (frmVENTAS.ListaMultiplesPagos == null)
                        {
                            frmVENTAS.ListaMultiplesPagos = new List<EntidadMultiple>();
                        }

                        EntidadMultiple entidad1 = new EntidadMultiple();
                        var frm = new frmCHEQUE(totalVta, "frmMULTIPLE", entidad1, "A");
                        var dr = frm.ShowDialog();
                        if (dr == DialogResult.OK)
                        {
                            LlenaGrilla();
                        }

                        break;

                    case Constantes.Tarjeta:
                        //ALTA TARJETA
                        if (frmVENTAS.ListaMultiplesPagos == null)
                        {
                            frmVENTAS.ListaMultiplesPagos = new List<EntidadMultiple>();
                        }

                        EntidadMultiple entidad2 = new EntidadMultiple();
                        var frm2 = new frmTARJETA(0, "frmMULTIPLE", entidad2, "A");
                        var drResultado2 = frm2.ShowDialog();
                        if (drResultado2 == DialogResult.OK)
                        {
                            LlenaGrilla();
                        }

                        break;

                    case Constantes.Efectivo:
                        //ALTA EFECTIVO
                        string bandera = "no";
                        //VALIDO QUE NO HAYA EFECTIVO EN LA FORMA DE PAGO. SI HAY QUE LEVANTE MODIFICACION
                        if (frmVENTAS.ListaMultiplesPagos != null)
                        {
                            foreach (var item in frmVENTAS.ListaMultiplesPagos)
                            {
                                if (item.FORM_PAGO == Constantes.Efectivo)
                                {
                                    //modifica porque tiene que ser unico el ft en formas de pagos multiples
                                    var frm3 = new frmPAGACON(totalVta, "frmMULTIPLE", item, "M");
                                    var drResultado3 = frm3.ShowDialog();
                                    if (drResultado3 == DialogResult.OK)
                                    {
                                        LlenaGrilla();
                                    }
                                    bandera = "si";
                                }
                            }
                        }

                        if (bandera == "no")
                        {
                            if (frmVENTAS.ListaMultiplesPagos == null)
                            {
                                frmVENTAS.ListaMultiplesPagos = new List<EntidadMultiple>();
                            }

                            EntidadMultiple entidad4 = new EntidadMultiple();
                            var frm4 = new frmPAGACON(totalVta, "frmMULTIPLE", entidad4, "A");
                            var drResultado4 = frm4.ShowDialog();
                            if (drResultado4 == DialogResult.OK)
                            {
                                LlenaGrilla();
                            }
                        }

                        break;

                    default: break;
                }
            }
            catch (Exception ex)
            {
                this.DialogResult = DialogResult.Cancel;
                ProcesarExcepcion(ex);
            }
        }
 public static frmPAGACON ObtenerInstancia(decimal TotalVta, string formulario, EntidadMultiple entidad)
 {
     if (_instancia == null) _instancia = new frmPAGACON(TotalVta, formulario, entidad);
     if (_instancia.IsDisposed) _instancia = new frmPAGACON(TotalVta, formulario, entidad);
     return _instancia;
 }