public List <TotalTipoPagamentoVO> RetornaMeiosPagamentoDaUltimaVenda(int pIdCabecalho)
        {
            ConsultaSQL = "SELECT " +
                          " T.ID, " +
                          " T.ID_ECF_VENDA_CABECALHO, " +
                          " T.ID_ECF_TIPO_PAGAMENTO, " +
                          " T.VALOR, " +
                          " T.NSU, " +
                          " T.ESTORNO, " +
                          " T.REDE, " +
                          " T.CARTAO_DC, " +
                          " P.DESCRICAO " +
                          "FROM " +
                          " ECF_TIPO_PAGAMENTO  P, ECF_TOTAL_TIPO_PGTO T " +
                          "WHERE " +
                          " (ID_ECF_VENDA_CABECALHO = " + Convert.ToString(pIdCabecalho) + ")  " +
                          " and (P.ID = T.ID_ECF_TIPO_PAGAMENTO) order by T.ID_ECF_TIPO_PAGAMENTO";
            try
            {
                List <TotalTipoPagamentoVO> ListaTotalTipoPagamento = new List <TotalTipoPagamentoVO>();

                comando = new MySqlCommand(ConsultaSQL, conexao);
                leitor  = comando.ExecuteReader();

                while (leitor.Read())
                {
                    TotalTipoPagamentoVO TotalTipoPagamento = new TotalTipoPagamentoVO();

                    TotalTipoPagamento.Id                    = Convert.ToInt32(leitor["ID"]);
                    TotalTipoPagamento.IdVenda               = Convert.ToInt32(leitor["ID_ECF_VENDA_CABECALHO"]);
                    TotalTipoPagamento.IdTipoPagamento       = Convert.ToInt32(leitor["ID_ECF_TIPO_PAGAMENTO"]);
                    TotalTipoPagamento.Valor                 = Convert.ToDecimal(leitor["VALOR"]);
                    TotalTipoPagamento.NSU                   = Convert.ToString(leitor["NSU"]);
                    TotalTipoPagamento.Estorno               = Convert.ToString(leitor["ESTORNO"]);
                    TotalTipoPagamento.Rede                  = Convert.ToString(leitor["REDE"]);
                    TotalTipoPagamento.CartaoDebitoOuCredito = Convert.ToString(leitor["CARTAO_DC"]);
                    TotalTipoPagamento.Descricao             = Convert.ToString(leitor["DESCRICAO"]);
                    ListaTotalTipoPagamento.Add(TotalTipoPagamento);
                }
                return(ListaTotalTipoPagamento);
            }

            catch (Exception eError)
            {
                Log.write(eError.ToString());
                return(null);
            }
            finally
            {
                if (leitor != null)
                {
                    leitor.Close();
                }
            }
        }
예제 #2
0
 public static void EfetuaFormaPagamento(TotalTipoPagamentoVO TotalTipoPagamento)
 {
     try
     {
         FDataModule.ACBrECF.EfetuaPagamento(TotalTipoPagamento.CodigoPagamento, TotalTipoPagamento.Valor);
     }
     catch (Exception eError)
     {
         MessageBox.Show("Falha ao Efetuar Pagamento!", "Informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
         Log.write(eError.ToString());
         return;
     }
 }
예제 #3
0
        public void FinalizaVenda()
        {
            ImpressaoOK = true;

            // subtotaliza o cupom
            SubTotalizaCupom();

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

            TotalTipoPagamentoVO TotalTipoPagamento = new TotalTipoPagamentoVO();

            for (int i = 0; i <= ListaTotalTipoPagamento.Count - 1; i++)
            {
                TotalTipoPagamento = ListaTotalTipoPagamento[i];
                if (TotalTipoPagamento.TemTEF != "S")
                {
                    FDataModule.ACBrECF.EfetuaPagamento(TotalTipoPagamento.CodigoPagamento, TotalTipoPagamento.Valor);
                }
            }

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

            // finaliza o cupom
            ACBrTEFD.FinalizarCupom();

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

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

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

                // conclui o encerramento da venda - grava dados de cabecalho no banco
                FCaixa.VendaCabecalho.ValorFinal    = TotalReceber;
                FCaixa.VendaCabecalho.ValorRecebido = TotalRecebido;
                FCaixa.VendaCabecalho.Troco         = Troco;
                FCaixa.VendaCabecalho.StatusVenda   = "F";
                FCaixa.StatusCaixa = 0;
                FCaixa.ConcluiEncerramentoVenda();

                //  usado quando a gaveta tem sinal invertido
                if (FCaixa.Configuracao.SinalInvertido == 1)
                {
                    FDataModule.ACBrECF.GavetaSinalInvertido = true;
                }

                if (FCaixa.Configuracao.GavetaDinheiro > 0)
                {
                    FDataModule.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);
                    FCaixa.ProblemaNoPagamento = true;
                    FCaixa.VendaCabecalho.CupomFoiCancelado = "S";
                    FCaixa.StatusCaixa = 0;
                    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);
                    FCaixa.StatusCaixa = 3;
                    FechaVendaComProblemas();
                    PodeFechar = true;
                    this.Close();
                }
            }
        }
예제 #4
0
        private void botaoSim_Click(object sender, EventArgs e)
        {
            decimal         ValorInformado;
            string          Mensagem;
            TipoPagamentoVO TipoPagamento = ListaTipoPagamento[ComboTipoPagamento.SelectedIndex];

            ValorInformado = Biblioteca.TruncaValor(Convert.ToDecimal(editValorPago.Text), Constantes.DECIMAIS_VALOR);

            if (((TipoPagamento.Descricao == "CONSULTA CHEQUE") || (TipoPagamento.Descricao == "CONSULTA CHQ TECBAN")) && (TransacaoComTef))
            {
                MessageBox.Show("Compra com Cartao e Cheque não permitida.", "Informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                ComboTipoPagamento.Focus();
                PanelConfirmaValores.Visible = false;
                PanelConfirmaValores.SendToBack();
            }
            else
            {
                TotalTipoPagamentoVO TotalTipoPagamento = new TotalTipoPagamentoVO();

                if (((TransacaoComTef) || (TipoPagamento.TEF == "S")) && (ValorInformado > SaldoRestante))
                {
                    MessageBox.Show("Compra não permite troco.", "Informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    ComboTipoPagamento.Focus();
                    PanelConfirmaValores.Visible = false;
                    PanelConfirmaValores.SendToBack();
                }
                else if ((TipoPagamento.TEF == "S") && (QuantidadeCartao >= FCaixa.Configuracao.QuantidadeMaximaCartoes))
                {
                    MessageBox.Show("Ja foi utilizada a quantidade maxima de cartoes para efetuar pagamento.", "Informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    ComboTipoPagamento.Focus();
                    PanelConfirmaValores.Visible = false;
                    PanelConfirmaValores.SendToBack();
                }
                else if ((TipoPagamento.TEF == "S") && (QuantidadeCartao >= FCaixa.Configuracao.QuantidadeMaximaCartoes - 1) && (ValorInformado != SaldoRestante))
                {
                    Mensagem = "Multiplos Cartoes. Transacao suporta ate " + Convert.ToString(FCaixa.Configuracao.QuantidadeMaximaCartoes) + " cartoes. Informe o valor exato para fechar a venda.";
                    MessageBox.Show(Mensagem, "Informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    ComboTipoPagamento.Focus();
                    PanelConfirmaValores.Visible = false;
                    PanelConfirmaValores.SendToBack();
                }
                else
                {
                    GroupBox3.Enabled = false;
                    StatusTransacao   = true;
                    if (TipoPagamento.TEF == "S")
                    {
                        try
                        {
                            try
                            {
                                //TODO:  inicialize o TEF a partir de TipoPagamento.TipoGP
                                ACBrTEFD.Initializar(ACBrFramework.TEFD.TefTipo.TefDial);
                            }
                            catch (Exception eError)
                            {
                                Log.write(eError.ToString());
                                MessageBox.Show("GP para tipo de pagamento solicitado não instalado.", "Informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                StatusTransacao = false;
                            }
                            if ((TipoPagamento.Descricao == "CONSULTA CHEQUE") || (TipoPagamento.Descricao == "CONSULTA CHQ TECBAN"))
                            {
                                StatusTransacao = ACBrTEFD.CHQ(ValorInformado, TipoPagamento.Codigo);
                            }
                            else
                            {
                                StatusTransacao = ACBrTEFD.CRT(ValorInformado, TipoPagamento.Codigo, FDataModule.ACBrECF.NumCOO);
                            }

                            if (StatusTransacao)
                            {
                                IndiceTransacaoTef++;

                                //TODO:  Verifique se esta é a forma correta de pegar essas informações - Analise o "RespostasPendentes"
                                TotalTipoPagamento.NSU  = ACBrTEFD.Req.NSU;
                                TotalTipoPagamento.Rede = ACBrTEFD.Req.Rede;
                                TotalTipoPagamento.DataHoraTransacao = ACBrTEFD.Req.DataHoraTransacaoComprovante;
                                TotalTipoPagamento.Finalizacao       = ACBrTEFD.Req.Finalizacao;

                                //TODO:  Verifique se tem como saber se o cartão usado foi de credito ou debito e armazene essa informação do banco de dados
                                TotalTipoPagamento.CartaoDebitoOuCredito = "C";

                                QuantidadeCartao++;
                                TransacaoComTef = true;
                                PodeFechar      = false;
                            }
                        }
                        catch (Exception eError)
                        {
                            Log.write(eError.ToString());
                        }
                    }

                    if (StatusTransacao)
                    {
                        DataRow Registro = DTValores.NewRow();
                        Registro["DESCRICAO"] = ComboTipoPagamento.Text;
                        decimal valor = Convert.ToDecimal(editValorPago.Text);
                        Registro["VALOR"] = Convert.ToDecimal(valor.ToString("0.00"));
                        if (TipoPagamento.TEF == "S")
                        {
                            Registro["TEF"]  = "S";
                            Registro["NSU"]  = TotalTipoPagamento.NSU;
                            Registro["REDE"] = TotalTipoPagamento.Rede;
                            Registro["DATA_HORA_TRANSACAO"] = TotalTipoPagamento.DataHoraTransacao.ToString();
                            Registro["INDICE_TRANSACAO"]    = IndiceTransacaoTef;
                            Registro["FINALIZACAO"]         = TotalTipoPagamento.Finalizacao;
                        }

                        TotalRecebido = Biblioteca.TruncaValor(TotalRecebido + Convert.ToDecimal(editValorPago.Text), Constantes.DECIMAIS_VALOR);
                        Troco         = Biblioteca.TruncaValor(TotalRecebido - TotalReceber, Constantes.DECIMAIS_VALOR);
                        if (Troco < 0)
                        {
                            Troco = 0;
                        }

                        VerificaSaldoRestante();

                        TotalTipoPagamento.IdVenda         = IdVenda;
                        TotalTipoPagamento.IdTipoPagamento = TipoPagamento.Id;
                        TotalTipoPagamento.Valor           = Biblioteca.TruncaValor(Convert.ToDecimal(editValorPago.Text), Constantes.DECIMAIS_VALOR);
                        TotalTipoPagamento.CodigoPagamento = TipoPagamento.Codigo.Trim();
                        TotalTipoPagamento.Estorno         = "N";
                        TotalTipoPagamento.TemTEF          = TipoPagamento.TEF;

                        ListaTotalTipoPagamento.Add(TotalTipoPagamento);

                        // guarda o índice da lista
                        Registro["INDICE_LISTA"] = ListaTotalTipoPagamento.Count - 1;
                        DTValores.Rows.Add(Registro);
                    }
                    PanelConfirmaValores.Visible = false;
                    PanelConfirmaValores.SendToBack();
                    if (SaldoRestante > 0)
                    {
                        editValorPago.Text = SaldoRestante.ToString("0.00");
                    }
                    else
                    {
                        editValorPago.Text = "0.00";
                    }

                    GroupBox3.Enabled = true;
                    ComboTipoPagamento.Focus();
                }

                VerificaSaldoRestante();
                if (SaldoRestante <= 0)
                {
                    FinalizaVenda();
                }

                if (SegundoCartaoCancelado)
                {
                    MessageBox.Show("Cupom fiscal cancelado. será aberto novo cupom e deve-se informar novamente os pagamentos.", "Informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    FCaixa.ProblemaNoPagamento = true;
                    FCaixa.VendaCabecalho.CupomFoiCancelado = "S";
                    FCaixa.StatusCaixa = 0;
                    FechaVendaComProblemas();
                    PodeFechar = true;
                    this.Close();
                }
            }
        }
        public void GravaTotalTipoPagamento(TotalTipoPagamentoVO TotalTipoPagamento)
        {
            string Tripa, Hash;

            int Coo, Ccf, Gnf;

            ConsultaSQL = "insert into " +
                          " ECF_TOTAL_TIPO_PGTO ( " +
                          " ID_ECF_VENDA_CABECALHO, " +
                          " ID_ECF_TIPO_PAGAMENTO, " +
                          " VALOR, " +
                          " NSU, " +
                          " ESTORNO, " +
                          " REDE, " +
                          " CARTAO_DC) " +
                          " values ( " +
                          " ?pIdVendaCabecalho, " +
                          " ?pIdTipoPagamento, " +
                          " ?pValor, " +
                          " ?pNSU, " +
                          " ?pEstorno, " +
                          " ?pRede, " +
                          " ?pDebitoCredito)";

            try
            {
                comando = new MySqlCommand(ConsultaSQL, conexao);
                comando.Parameters.AddWithValue("?pIdVendaCabecalho", TotalTipoPagamento.IdVenda);
                comando.Parameters.AddWithValue("?pIdTipoPagamento", TotalTipoPagamento.IdTipoPagamento);
                comando.Parameters.AddWithValue("?pValor", TotalTipoPagamento.Valor);
                comando.Parameters.AddWithValue("?pEstorno", TotalTipoPagamento.Estorno);
                comando.Parameters.AddWithValue("?pNSU", TotalTipoPagamento.NSU);
                comando.Parameters.AddWithValue("?pRede", TotalTipoPagamento.Rede);
                comando.Parameters.AddWithValue("?pDebitoCredito", TotalTipoPagamento.CartaoDebitoOuCredito);
                comando.ExecuteNonQuery();

                ConsultaSQL = "select max(ID) as ID from ECF_TOTAL_TIPO_PGTO";
                comando     = new MySqlCommand(ConsultaSQL, conexao);
                leitor      = comando.ExecuteReader();
                leitor.Read();
                TotalTipoPagamento.Id = Convert.ToInt32(leitor["ID"]);
                leitor.Close();

                // calcula e grava o hash
                ConsultaSQL =
                    "update ECF_TOTAL_TIPO_PGTO set " +
                    "SERIE_ECF = ?pSERIE_ECF, " +
                    "COO = ?pCOO, " +
                    "CCF = ?pCCF, " +
                    "GNF = ?pGNF, " +
                    "HASH_TRIPA = ?pHashTripa, " +
                    "HASH_INCREMENTO = ?pHashIncremento " +
                    " where ID = ?pId";

                Coo = Convert.ToInt32(FDataModule.ACBrECF.NumCOO);
                Ccf = Convert.ToInt32(FDataModule.ACBrECF.NumCCF);
                Gnf = Convert.ToInt32(FDataModule.ACBrECF.NumGNF);

                Tripa = FCaixa.Configuracao.NumSerieECF +
                        Convert.ToString(Coo) +
                        Convert.ToString(Ccf) +
                        Convert.ToString(Gnf) +
                        "0";
                Hash = Biblioteca.MD5String(Tripa);

                comando = new MySqlCommand(ConsultaSQL, conexao);
                comando.Parameters.AddWithValue("?pHashIncremento", -1);
                comando.Parameters.AddWithValue("?pHashTripa", Hash);
                comando.Parameters.AddWithValue("?pId", TotalTipoPagamento.Id);
                comando.Parameters.AddWithValue("?pSERIE_ECF", FCaixa.Configuracao.NumSerieECF);
                comando.Parameters.AddWithValue("?pCOO", Coo);
                comando.Parameters.AddWithValue("?pCCF", Ccf);
                comando.Parameters.AddWithValue("?pGNF", Gnf);
                comando.ExecuteNonQuery();
            }
            catch (Exception eError)
            {
                Log.write(eError.ToString());
            }
            finally
            {
                if (leitor != null)
                {
                    leitor.Close();
                }
            }
        }