private void BtnCobroPago_Click(object sender, EventArgs e)
 {
     if (venta.Total > 0)
     {
         using (var form = new FrmCobroRapido(venta.Total, cliente))
         {
             if (form.ShowDialog() == DialogResult.OK)
             {
                 //Cierra venta
                 CierraVenta(form);
             }
         }
     }
 }
        private void AfectaFlujo(FrmCobroRapido form)
        {
            if (venta.ConceptoPago1 != null)
            {
                Flujo flujo = new Flujo();
                flujo.ConceptoId     = venta.TipoDocId;
                flujo.EstacionId     = Ambiente.Estacion.EstacionId;
                flujo.ConceptoPagoId = venta.ConceptoPago1;

                if (form.formaPago1 == null)
                {
                    flujo.AfectaCorte = formaPagoController.SelectOneByName(venta.ConceptoPago1).AfectaCorte;
                }
                else
                {
                    flujo.AfectaCorte = form.formaPago1.AfectaCorte;
                }

                flujo.Referencia  = venta.VentaId;
                flujo.Referenciap = "NULL";
                flujo.Es          = "E";
                flujo.Importe     = venta.Pago1;
                flujo.CreatedAt   = DateTime.Now;
                flujo.CreatedBy   = Ambiente.LoggedUser.UsuarioId;
                flujo.IsDeleted   = false;
                flujoController.InsertOne(flujo);
            }
            if (venta.ConceptoPago2 != null)
            {
                Flujo flujo = new Flujo();
                flujo.ConceptoId     = venta.TipoDocId;
                flujo.EstacionId     = Ambiente.Estacion.EstacionId;
                flujo.ConceptoPagoId = venta.ConceptoPago2;
                if (form.formaPago2 == null)
                {
                    flujo.AfectaCorte = formaPagoController.SelectOneByName(venta.ConceptoPago2).AfectaCorte;
                }
                else
                {
                    flujo.AfectaCorte = form.formaPago2.AfectaCorte;
                }
                flujo.Referencia  = venta.VentaId;
                flujo.Referenciap = "NULL";
                flujo.Es          = "E";
                flujo.Importe     = venta.Pago2;
                flujo.CreatedAt   = DateTime.Now;
                flujo.CreatedBy   = Ambiente.LoggedUser.UsuarioId;
                flujo.IsDeleted   = false;
                flujoController.InsertOne(flujo);
            }

            if (venta.ConceptoPago3 != null)
            {
                Flujo flujo = new Flujo();
                flujo.ConceptoId     = venta.TipoDocId;
                flujo.EstacionId     = Ambiente.Estacion.EstacionId;
                flujo.ConceptoPagoId = venta.ConceptoPago3;
                if (form.formaPago3 == null)
                {
                    flujo.AfectaCorte = formaPagoController.SelectOneByName(venta.ConceptoPago3).AfectaCorte;
                }
                else
                {
                    flujo.AfectaCorte = form.formaPago3.AfectaCorte;
                }
                flujo.Referencia  = venta.VentaId;
                flujo.Referenciap = "NULL";
                flujo.Es          = "E";
                flujo.Importe     = venta.Pago3;
                flujo.CreatedAt   = DateTime.Now;
                flujo.CreatedBy   = Ambiente.LoggedUser.UsuarioId;
                flujo.IsDeleted   = false;
                flujoController.InsertOne(flujo);
            }

            if (venta.Cambio != null)
            {
                if (venta.Cambio > 0)
                {
                    Flujo flujo = new Flujo();
                    flujo.ConceptoId     = venta.TipoDocId;
                    flujo.EstacionId     = Ambiente.Estacion.EstacionId;
                    flujo.ConceptoPagoId = "CAM";
                    flujo.AfectaCorte    = false;
                    flujo.Referencia     = venta.VentaId;
                    flujo.Referenciap    = "NULL";
                    flujo.Es             = "S";
                    flujo.Importe        = (decimal)venta.Cambio;
                    flujo.CreatedAt      = DateTime.Now;
                    flujo.CreatedBy      = Ambiente.LoggedUser.UsuarioId;
                    flujo.IsDeleted      = false;
                    flujoController.InsertOne(flujo);
                }
            }
        }
        private void AplicaPuntos(FrmCobroRapido form)
        {
            if (form.CobroConPuntos)
            {
                if (cliente != null && cliente.DineroElectronico > 0 && cliente.TieneMonedero)
                {
                    if (form.NoTarjeta.Length == 0)
                    {
                        Ambiente.Mensaje("Proceso abortado. Si el cobro es con puntos escanee la tarjeta.");
                        Ambiente.CancelaProceso = true;
                        return;
                    }
                    else
                    {
                        Ambiente.CancelaProceso = false;
                    }

                    var clientem = clienteController.SelectOneByMonedero(form.NoTarjeta);
                    if (clientem == null)
                    {
                        //Cliente no tiene monedero asignado
                        if (Ambiente.Pregunta("El cliente tiene monedero, pero no lo han asignado.  Quieres asignar el esta tarjera de puntos al cliente de la venta"))
                        {
                            cliente.NoTarjetaPuntos = form.NoTarjeta;
                            clienteController.Update(cliente);
                            if (cliente.DineroElectronico >= venta.Total)
                            {
                                if (Ambiente.Pregunta("Aplicar el 100 % de descuento a la venta"))
                                {
                                    venta.DescXpuntos          = venta.Total;
                                    venta.Total                = 0;
                                    venta.PuntosAplicados      = true;
                                    cliente.DineroElectronico -= venta.Total;
                                    clienteController.Update(cliente);
                                }
                            }
                            else
                            {
                                if (Ambiente.Pregunta("Aplicar $" + Math.Round(cliente.DineroElectronico, 1) + " pesos  de descuento a la venta"))
                                {
                                    venta.DescXpuntos         = cliente.DineroElectronico;
                                    venta.PuntosAplicados     = true;
                                    cliente.DineroElectronico = 0;
                                    venta.Total -= venta.DescXpuntos;
                                    clienteController.Update(cliente);
                                }
                            }
                        }
                        else
                        {
                            Ambiente.Mensaje("No se aplicaron los puntos");
                        }
                    }
                    else
                    {
                        //validar que sea el mismo cliente de la venta
                        if (clientem.ClienteId.Equals(cliente.ClienteId))
                        {
                            //Aplicar los puntos
                            if (cliente.DineroElectronico >= venta.Total)
                            {
                                if (Ambiente.Pregunta("Aplicar el 100 % de descuento a la venta"))
                                {
                                    venta.DescXpuntos          = venta.Total;
                                    venta.Total                = 0;
                                    venta.PuntosAplicados      = true;
                                    cliente.DineroElectronico -= venta.Total;
                                    clienteController.Update(cliente);
                                }
                            }
                            else
                            {
                                if (Ambiente.Pregunta("Aplicar $" + Math.Round(cliente.DineroElectronico, 1) + " pesos  de descuento a la venta"))
                                {
                                    venta.DescXpuntos         = cliente.DineroElectronico;
                                    venta.PuntosAplicados     = true;
                                    cliente.DineroElectronico = 0;
                                    venta.Total -= venta.DescXpuntos;
                                    clienteController.Update(cliente);
                                }
                            }
                        }
                        else
                        {
                            Ambiente.Mensaje("Esta operacion no está permitida, los puntos no se transfieren entre clientes");
                        }
                    }
                }
                else
                {
                    Ambiente.Mensaje("Puntos no aplicados. El cliente no tiene monedero, o no tiene puntos o el cliente es público en general.  ");
                    return;
                }
            }
        }
        private void CierraVenta(FrmCobroRapido form)
        {
            venta.TipoDocId = form.tipoDoc;


            if (venta.TipoDocId.Equals("TIC"))
            {
                venta.NoRef = Ambiente.TraeSiguiente("TIC");
            }

            else if (venta.TipoDocId.Equals("FAC"))
            {
                venta.NoRef = Ambiente.TraeSiguiente("FAC");
            }

            if (venta.TipoDocId.Equals("FAC") && venta.ClienteId.Equals("SYS"))
            {
                Ambiente.Mensaje("Operación denegada, selecciona un cliente valido para facturar");
                return;
            }
            if (venta.TipoDocId.Equals("TIC") && !Ambiente.Estacion.SolicitarFmpago)
            {
                if (cliente == null)
                {
                    venta.MetodoPago = "PUE";
                    venta.UsoCfdi    = "G01";
                }
                else
                {
                    venta.MetodoPago = cliente.MetodoPagoId.Trim().Length == 0 ? "PUE" : cliente.MetodoPagoId.Trim();
                    venta.UsoCfdi    = cliente.UsoCfdiid.Trim().Length == 0 ? "G01" : cliente.UsoCfdiid.Trim();
                }
            }

            //Aplicaion de puntos

            GuardaPuntos();
            AplicaPuntos(form);
            if (Ambiente.CancelaProceso)
            {
                return;
            }



            // venta.TotalConLetra = form.totalLetra;
            venta.TotalConLetra = new Moneda().Convertir(venta.Total.ToString(), true);
            venta.EsCxc         = form.Cxc;

            venta.FormaPago1 = form.formaPago1 == null ? "01" : form.formaPago1.FormaPagoId;
            venta.FormaPago2 = form.formaPago2 == null ? null : form.formaPago2.FormaPagoId;
            venta.FormaPago3 = form.formaPago3 == null ? null : form.formaPago3.FormaPagoId;

            venta.ConceptoPago1 = form.formaPago1 == null ? "EFECTIVO" : form.formaPago1.Descripcion;
            venta.ConceptoPago2 = form.formaPago2 == null ? null : form.formaPago2.Descripcion;
            venta.ConceptoPago3 = form.formaPago3 == null ? null : form.formaPago3.Descripcion;

            venta.Pago1       = form.pago1;
            venta.Pago2       = form.pago2;
            venta.Pago3       = form.pago3;
            venta.Cambio      = form.cambio;
            venta.EstadoDocId = "CON";



            if (ventaController.UpdateOne(venta))
            {
                RestaLotes();
                GuardaPartidas();
                Ambiente.UpdateSiguiente("TIC");
                LblUltDocumento.Text = "TICKET " + venta.NoRef + " " + DateTime.Now.ToShortTimeString();
                LblCambio.Text       = "SU CAMBIO: " + Ambiente.FDinero(venta.Cambio.ToString());

                AfectaFlujo(form);
                AfectaMovsInv();
                AfectaStock();

                if (!venta.PuntosAplicados)
                {
                    if (Ambiente.LoggedUser.Facturar)
                    {
                        if (Ambiente.Pregunta("Requiere factura para este documento"))
                        {
                            new FrmTicketFactura(venta.NoRef).Show();
                        }
                    }
                }


                Ambiente.SaveAndPrintTicket(venta);
                ResetPDV();
            }
            else
            {
                Ambiente.Mensaje("Cierre de la venta salió mal :(");
            }
        }