private void lblImprimir_Click(object sender, EventArgs e)
        {
            VerificaStatusImpressora();

            bool isSangria = false;

            if (_pedido.OperacaoId == 2)
            {
                isSangria = true;
            }

            if (!ImpressoraBematech.isSangriaAcrescimo(isSangria, _pedido.DataDigitacao, _pedido.ValorPedido, lblObservacao.Text.Trim()))
            {
                MessageBox.Show("Houve um erro inesperado ao se comunicar com a IMPRESSOSA BEMATECH, verifique-a por favor!");
            }
        }
예제 #2
0
        private void FinalizaVenda(bool isEmitirNFCe, bool isBotaoFinalizarImprimir = false)
        {
            if (lstVWPagamentos.Items.Count == 0)
            {
                MessageBox.Show("Informe uma Forma de Pagamento por favor!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            if (Convert.ToDecimal(lblFalta.Text) > 0)
            {
                MessageBox.Show("Faltam R$ " + lblFalta.Text + " reais para finalizar o pagamento!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }


            //Gambiarra pedida pelo cliente
            if (isBotaoFinalizarImprimir && lblFinalizarImprimir.ForeColor == Color.Gray)
            {
                lblFinalizarImprimir.ForeColor = Color.White;
                return;
            }

            //if ((MessageBox.Show("Confirma finalizar o pagamento ?", "Mensagem", MessageBoxButtons.YesNo, MessageBoxIcon.Information)) == DialogResult.No)
            //    return;


            InicializaCliente();

            VerificaStatusImpressora();


            var db = new Database("stringConexao");

            try
            {
                // Iniciando a transação
                db.BeginTransaction();

                _pedido.DataDigitacao = DateTime.Now;
                //_pedido.DataVencimento = DateTime.Now;
                //_pedido.pagamentos = _pagamentosInformados;
                _pedido.Operacao   = RetornaOperacao(3);
                _pedido.OperacaoId = _pedido.Operacao.OperacaoId;
                _pedido.Pagamentos = _pagamentosSelecionados;
                _pedido.StatusNFCe = "0";
                //pedido.codcon = 0;
                //pedido.dscdoc = Convert.ToDecimal(lblDesconto.Text);
                //_pedido.valdsc = Convert.ToDecimal(lblDesconto.Text);
                _pedido.ValorPedido  = Convert.ToDecimal(lblTotalAPagar.Text);
                _pedido.Troco        = Convert.ToDecimal(lblTroco.Text);
                _pedido.StatusPedido = "F";


                //if (isEmitirNFCe)
                //{
                //    _pedido.NFiscal = ((new ControleFiscalDao()).GetUltimoNumeroNFiscalGerado() + 1);
                //    db.Update("Update Controle Set NFiscal=" + _pedido.NFiscal + " Where ChvControle = 1");
                //}

                // Inserindo o pedido
                _pedido.NumDoc = Convert.ToInt32(db.Insert(_pedido));

                //Inserindo os Itens do pedido
                db.Insert_lstPedidos(_pedido.NumDoc, _pedido.ItensDoPedido);

                //Inserindo os pagamentos do pedido
                foreach (TipoPagamento pagamento in _pagamentosSelecionados)
                {
                    db.Insert("Movdb_Pagamento_Rel", new { numdoc = _pedido.NumDoc, pagamento_id = pagamento.PagamentoId, valor = pagamento.ValorPago, observacao = pagamento.Observacao });
                }

                //Gerando pagamento
                //if (!Gera_Boleta(db))
                //    throw new Exception("");

                //Comitando o pedido
                db.CompleteTransaction();
            }
            catch (Exception ex)
            {
                //RollBack
                db.AbortTransaction();
                MessageBox.Show("Houve um erro de conexão com o Banco de Dados." + Environment.NewLine + "Tente Novamente.." + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }


            if (isEmitirNFCe)
            {
                //Gerando o XML de Nota Fiscal Eletronica(NFC-e)
                if (Gera_NFCe())
                {
                    try
                    {
                        if (!ImpressoraBematech.isImprimeDanfeNFCe(_pedido, urlQRCode))
                        {
                            throw new Exception("Houve um erro inesperado ao se comunicar com a IMPRESSOSA BEMATECH, verifique-a por favor!");
                        }


                        //MessageBox.Show("NFC-e emitida com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("** NOTA EMITIDA **" + Environment.NewLine + ex.Message, "ATENÇÃO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            else
            {
                try
                {
                    if (!ImpressoraBematech.isImprimeComprovante(_pedido))
                    {
                        throw new Exception("Houve um erro inesperado ao se comunicar com a IMPRESSOSA BEMATECH, verifique-a por favor!");
                    }


                    //MessageBox.Show("Pedido Finalizado com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Pedido finalizado mas houve um erro ao se comunicar com a IMPRESSOSA BEMATECH, verifique-a por favor!" + Environment.NewLine + ex.Message, "ATENÇÃO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            Close();
            _instanciaFrmCaixaTouch.IniciaNovaVenda();
        }
예제 #3
0
        static void Main(string[] args)
        {
            try
            {
                MP2032.ConfiguraModeloImpressora(7); // Bematech MP-4200 TH
                MP2032.IniciaPorta("USB");


                bool isSangria = true;

                decimal valor = 10.50m;

                if (!ImpressoraBematech.isSangriaAcrescimo(isSangria, DateTime.Now, valor, "Mercado"))
                {
                    return;
                }

                GeraXml.AmbienteNFCe = "1";

                CertificadoDigital.getInstance.Seleciona_Certificado();
                (new EmitenteDao()).SelecionaEmitente();

                var control = (new ControleFiscalDao()).getControle();
                if (control != null)
                {
                    ControleFiscal.GetInstance.TokenHomologacao      = control.TokenHomologacao;
                    ControleFiscal.GetInstance.TokenProducao         = control.TokenProducao;
                    ControleFiscal.GetInstance.CaminhoXmlAutorizado  = control.CaminhoXmlAutorizado;
                    ControleFiscal.GetInstance.CaminhoXmlCancelado   = control.CaminhoXmlCancelado;
                    ControleFiscal.GetInstance.CaminhoXmlInutilizado = control.CaminhoXmlInutilizado;

                    control = null;
                }

                var dataInicial = new DateTime(2018, 10, 03);
                var dataFinal   = new DateTime(2018, 10, 03);

                var pedidos = (new PedidoDao()).GetPedidosDoCaixa(dataInicial, dataFinal);

                foreach (var pedido in pedidos)
                {
                    pedido.DataDigitacao = DateTime.Now;


                    pedido.NFiscal = (new ControleFiscalDao()).GetUltimoNumeroNFiscalGerado() + 1;

                    pedido.Cliente    = (new ClienteDao()).GetClienteConsumidorNaoIdentificado();
                    pedido.Operacao   = (new OperacaoDao()).GetOperacaoPorPedido(pedido.NumDoc);
                    pedido.Pagamentos = (new TipoPagamentoDao()).GetPagametosDoPedido(pedido.NumDoc);

                    pedido.ItensDoPedido = (new PedidoItemDao()).GetItensDoPedido(pedido.NumDoc);
                    pedido.ItensDoPedido.ForEach(pedidoItem =>
                    {
                        pedidoItem.Produto             = (new ProdutoDao().GetProduto(pedidoItem.ProdutoId));
                        pedidoItem.Produto.GrupoFiscal = (new ProdutoGrupoFiscalDao()).GetGrupoFiscalPorProduto(pedidoItem.ProdutoId);
                    });

                    var geraXml = new GeraXml();

                    //Gerando XML
                    var xml      = geraXml.GeraXmlNFCe(pedido);
                    var GravaXml = File.CreateText(@"C:\Users\Succo\Desktop\xmlGerado.xml");
                    GravaXml.Write(xml.InnerXml);
                    GravaXml.Close();

                    //Assinando XML
                    var xmlAssinado      = (new AssinaXml()).AssinaXML(xml.InnerXml, "infNFe", CertificadoDigital.getInstance.oCertificado);
                    var GravaXmlAssinado = File.CreateText(@"C:\Users\Succo\Desktop\xmlAssinado.xml");
                    GravaXmlAssinado.Write(xmlAssinado.InnerXml);
                    GravaXmlAssinado.Close();


                    //Validando XML
                    try
                    {
                        // Validando o XML
                        var retValidar = (new ValidaXml()).Valida(xmlAssinado, "NFe");

                        //Inserindo a URL QRCode no xml já assinado
                        xmlAssinado.LoadXml(xmlAssinado.InnerXml.Replace("</infNFe>", "</infNFe><infNFeSupl><qrCode><![CDATA[" +
                                                                         geraXml.GetUrlQRCode(xmlAssinado, pedido) + "]]></qrCode><urlChave>http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode</urlChave></infNFeSupl>"));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("** Erro ao validar **");
                        Console.WriteLine(ex.Message);
                    }

                    var GravaXmlAssinadoComQrCode = File.CreateText(@"C:\Users\Succo\Desktop\xmlAssinadoComQrCode.xml");
                    GravaXmlAssinadoComQrCode.Write(xmlAssinado.InnerXml);
                    GravaXmlAssinadoComQrCode.Close();



                    var retornoDaTransmicao = (new TransmiteXml()).XML_NFCe4(xmlAssinado, pedido.NFiscal.ToString(), CertificadoDigital.getInstance.oCertificado);

                    if (retornoDaTransmicao.Substring(0, 4) != "Erro")
                    {
                        var xmlRetorno = new XmlDocument();
                        xmlRetorno.LoadXml(retornoDaTransmicao);

                        var GravaXmlTransmitido = File.CreateText(@"C:\Users\Succo\Desktop\xmlTransmitido.xml");
                        GravaXmlTransmitido.Write(xmlRetorno.InnerXml);
                        GravaXmlTransmitido.Close();

                        // Lote processado
                        if (xmlRetorno.GetElementsByTagName("cStat")[0].InnerText == "104")
                        {
                            // Autorizado
                            if (xmlRetorno.GetElementsByTagName("cStat")[1].InnerText == "100")
                            {
                                pedido.Chave     = xmlRetorno.GetElementsByTagName("chNFe")[0].InnerText;
                                pedido.Protocolo = xmlRetorno.GetElementsByTagName("nProt")[0].InnerText;

                                // Separar somente o conteúdo a partir da tag <protNFe> até </protNFe>
                                var nPosI   = retornoDaTransmicao.IndexOf("<protNFe");
                                var nPosF   = retornoDaTransmicao.Length - (nPosI + 13);
                                var strProc = retornoDaTransmicao.Substring(nPosI, nPosF);


                                // XML pronto para salvar
                                var strXmlProcNfe = @"<?xml version=""1.0"" encoding=""utf-8"" ?><nfeProc xmlns=""http://www.portalfiscal.inf.br/nfe"" versao=""4.00"">" + xmlAssinado.InnerXml + strProc + "</nfeProc>";

                                pedido.Xml = new Xml()
                                {
                                    NumDoc     = pedido.NumDoc,
                                    ArquivoXml = strXmlProcNfe,
                                    Data       = DateTime.Now,
                                    Modelo     = pedido.ModeloNFiscal,
                                    StatNFCe   = "100"
                                };



                                using (var db = new Database("stringConexao"))
                                {
                                    db.BeginTransaction();

                                    try
                                    {
                                        db.Update("Update Controle Set NFiscal=" + pedido.NFiscal + " Where ChvControle = 1");
                                        db.Update("Update Movdb Set data_nfiscal = '" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "', NFiscal= " + pedido.NFiscal + ", Chave='" + pedido.Chave + "' ,Protocolo='" + pedido.Protocolo + "', status_nfce = '" + pedido.Xml.StatNFCe + "' Where NumDoc = " + pedido.NumDoc);

                                        db.CompleteTransaction();
                                    }
                                    catch (Exception)
                                    {
                                        db.AbortTransaction();
                                    }

                                    if (!string.IsNullOrEmpty(ControleFiscal.GetInstance.CaminhoXmlAutorizado))
                                    {
                                        //Salvando o arquivo XML na pasta
                                        var Grava = File.CreateText(ControleFiscal.GetInstance.CaminhoXmlAutorizado.Remove(ControleFiscal.GetInstance.CaminhoXmlAutorizado.Length - 1) + DateTime.Now.Month + @"\" + pedido.Chave + "-procNfe.xml");
                                        Grava.Write(pedido.Xml.ArquivoXml);
                                        Grava.Close();
                                    }
                                }
                            }
                        }
                        else
                        {
                            Console.WriteLine("Erro no lote");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadKey();
            }
        }
예제 #4
0
        private void lblSalvar_Click(object sender, EventArgs e)
        {
            if (txtValor.Text == "0,00")
            {
                MessageBox.Show("Informe o valor do Lançamento.", "Mensagem - Erro", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }


            var db = new Database("stringConexao");

            try
            {
                db.BeginTransaction();


                var operacaoId = 0;

                foreach (Control control in panelOperacao.Controls)
                {
                    if (control is RadioButton radio)
                    {
                        if (radio.Checked == true)
                        {
                            operacaoId = Convert.ToInt32(radio.Tag);
                        }
                    }
                }



                Pedido = new Pedido()
                {
                    DataDigitacao = DateTime.Now,
                    ValorPedido   = Convert.ToDecimal(txtValor.Text),
                    StatusPedido  = "F",
                    UsuarioId     = Usuario.getInstance.codUser,
                    OperacaoId    = operacaoId
                };

                Pedido.NumDoc = Convert.ToInt32(db.Insert(Pedido));

                db.Insert("Movdb_Pagamento_Rel", new { numdoc = Pedido.NumDoc, pagamento_id = 1, valor = Convert.ToDecimal(txtValor.Text), observacao = txtObservacao.Text });


                db.CompleteTransaction();


                if (ckImprimir.Checked)
                {
                    VerificaStatusImpressora();

                    bool isSangria = false;

                    if (operacaoId == 2)
                    {
                        isSangria = true;
                    }

                    if (!ImpressoraBematech.isSangriaAcrescimo(isSangria, Pedido.DataDigitacao, Pedido.ValorPedido, txtObservacao.Text.Trim()))
                    {
                        MessageBox.Show("Houve um erro inesperado ao se comunicar com a IMPRESSOSA BEMATECH, verifique-a por favor!");
                    }
                }
            }
            catch (Exception ex)
            {
                db.AbortTransaction();
                MessageBox.Show("Houve um erro inesperado ao finalizar o Lançamento, tente novamente!" + Environment.NewLine + ex.Message);
            }

            Close();
        }