public void FechaVendaComProblemas()
        {
            // altera o status da venda para C
            Sessao.Instance.VendaAtual.StatusVenda = "C";
            Caixa.ConcluiEncerramentoVenda();

            // grava os pagamentos no banco de dados com o indicador de estorno
            for (int i = 0; i <= ListaTotalTipoPagamento.Count - 1; i++)
            {
                ListaTotalTipoPagamento[i].Estorno = "S";
            }
            EcfTotalTipoPagamentoController.GravaEcfTotalTipoPagamentoLista(ListaTotalTipoPagamento);
        }
        public void FinalizaVenda()
        {
            ImpressaoOK = true;

            // subtotaliza o cupom
            SubTotalizaCupom();

            // manda os pagamentos para o ECF
            if (TransacaoComTef)
            {
                OrdenaLista();
            }

            for (int i = 0; i <= ListaTotalTipoPagamento.Count - 1; i++)
            {
                if (ListaTotalTipoPagamento[i].EcfTipoPagamento.Tef != "S")
                {
                    DataModule.ACBrECF.EfetuaPagamento(ListaTotalTipoPagamento[i].EcfTipoPagamento.Codigo, ListaTotalTipoPagamento[i].Valor.Value);
                }
            }

            // Descomente para bloquear teclado e mouse
            //BlockInput.Bloquear(true);

            // finaliza o cupom
            ACBrTEFD.FinalizarCupom();

            // imprime as transacoes pendentes - comprovantes nao fiscais vinculados
            ACBrTEFD.ImprimirTransacoesPendentes();

            // Descomente para bloquear teclado e mouse
            //BlockInput.Bloquear(false);

            if (ImpressaoOK)
            {
                // grava os pagamentos no banco de dados
                EcfTotalTipoPagamentoController.GravaEcfTotalTipoPagamentoLista(ListaTotalTipoPagamento);

                // conclui o encerramento da venda - grava dados de cabecalho no banco
                Sessao.Instance.VendaAtual.ValorFinal    = TotalReceber;
                Sessao.Instance.VendaAtual.ValorRecebido = TotalRecebido;
                Sessao.Instance.VendaAtual.Troco         = Troco;
                Sessao.Instance.VendaAtual.StatusVenda   = "F";
                Sessao.Instance.StatusCaixa = Tipos.StatusCaixa.scAberto;
                Caixa.ConcluiEncerramentoVenda();

                //  usado quando a gaveta tem sinal invertido
                if (Sessao.Instance.Configuracao.GavetaSinalInvertido == "S")
                {
                    DataModule.ACBrECF.GavetaSinalInvertido = true;
                }

                if (Sessao.Instance.Configuracao.GavetaUtilizacao > 0)
                {
                    DataModule.ACBrECF.AbreGaveta();
                }

                PodeFechar = true;
                this.Close();
            }
            else
            {
                if (CupomCancelado)
                //ocorreu problema na impressao do comprovante do TEF. ECF Desligado.
                //Sistema pergunta ao usuário se o mesmo quer tentar novamente. Usuário responde não.
                //ECF agora está ligado e o sistema consegue cancelar o cupom.
                {
                    MessageBox.Show("Problemas no ECF. Cupom Fiscal Cancelado.", "Informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Sessao.Instance.VendaAtual.CupomCancelado = "S";
                    Sessao.Instance.StatusCaixa = Tipos.StatusCaixa.scAberto;
                    FechaVendaComProblemas();
                    PodeFechar = true;
                    this.Close();
                }
                else
                //ocorreu problema na impressao do comprovante do TEF. ECF Desligado.
                //Sistema pergunta ao usuário se o mesmo quer tentar novamente. Usuário responde não.
                //ECF continua desligado e o sistema não consegue cancelar o cupom.
                {
                    MessageBox.Show("Problemas no ECF. Aplicação funcionará apenas para consulta.", "Informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Sessao.Instance.StatusCaixa = Tipos.StatusCaixa.scSomenteConsulta;
                    FechaVendaComProblemas();
                    PodeFechar = true;
                    this.Close();
                }
            }
        }