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(); } } }
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; } }
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(); } } }
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(); } } }