Exemple #1
0
        public void GerarDevolucaoNFe()
        {
            #region variáveis

            OpenPOS.Data.Faturamento.Lancamento.Movimento.NFe.NFe nfe = null;
            Devolucao devolucao = null;
            IList<ICliente> clientes = new Cliente().Find<ICliente>(new Where() {
                    { "cad_Pessoa.nomefantasia", "NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM               "}
            });

            if (clientes.Count == 0)
                throw new Exception();

            #endregion

            #region Emitir a nfe

            nfe = new OpenPOS.Data.Faturamento.Lancamento.Movimento.NFe.NFe();
            nfe.QuantidadeVolume = 3;
            nfe.DadoPessoa = new DadoPessoa
            {
                Cliente = clientes[0]
            };

            nfe.Emitente = IndicadorProducao.Proprio;
            nfe.Situacao = SituacaoNotaFiscal.Normal;
            nfe.TabelaPreco = new OpenPOS.Data.Cadastro.TabelaPreco.TabelaPreco().Find<Model.Cadastro.TabelaPreco.ITabelaPreco>(new Where { Limit = new Limit(1) })[0];
            nfe.StatusNF = Status.LoteEmProcessamento;
            nfe.Motivo = "Teste";
            nfe.Chave = "12345678";
            nfe.InfProt = "123456";
            nfe.Modelo = "55";
            nfe.Serie = new OpenPOS.Data.Faturamento.Cadastro.Serie().Find<Model.Faturamento.Cadastro.ISerie>(new Where() { { "fat_Serie.Modelo = '55'"} })[0];
            nfe.InformacoesAdicionais.Add(new InfAdic() { Tipo = Enuns.Faturamento.Lancamento.Movimento.NF.InfCplTipo.Contribuinte, Campo = "Teste de CRUD" });
            nfe.InformacoesAdicionais.Add(new InfAdic() { Tipo = Enuns.Faturamento.Lancamento.Movimento.NF.InfCplTipo.ObsContribuinte, Campo = "Teste de CRUD Obs" });

            ITabelaPreco tabela = OpenPOS.Settings.TabelaPrecoPadrao;

            nfe.Itens.Add(new OpenPOS.Data.Faturamento.Lancamento.Movimento.Item.NFe.Item
            {
                Quantidade = 25,
                ValorUnitarioBruto = 15,
                DescricaoNF = "Produto de teste um",
                ItemMovimentado = tabela.Itens[0].Item,
                Conferido = true,
                TabelaPreco = tabela,
                InformacaoAdicional = "Informações adicionais dos produtos, mercadorias e serviços"
            });
            nfe.SaveTemp();

            #endregion

            #region enviar e autorizar a nfe

            string fileName = nfe.Chave + "-nfe.xml";
            string filePath = Path.Combine(OpenPOS.Settings.NFe.PastaEnvio, fileName);
            ((NFe.IGenerateNFe)nfe).GenerateXML().Save(filePath);

            OpenPOS.NFe.NFeResult result = ((OpenPOS.Data.Abstract.Faturamento.Lancamento.Movimento.NF.NFBase)nfe).ProcessaResposta();
            if (result.Success)
            {
                nfe.StatusNF = result.Status;
                nfe.Chave = result.Chave;
                nfe.InfProt = result.Protocolo;
                nfe.Motivo = result.Motivo;
                nfe.Save();
                MessageBox.Show(result.Motivo);
            }
            else
                nfe.Save();

            #endregion

            #region Emitir a devolução

            devolucao = new Devolucao();
            devolucao.MotivoDevolucao = "Não gostou da cor e com defeito";
            devolucao.Voucher = nfe;
            devolucao.TabelaPreco = new OpenPOS.Data.Cadastro.TabelaPreco.TabelaPreco().Find<OpenPOS.Model.Cadastro.TabelaPreco.ITabelaPreco>(new Where { Limit = new Limit(1) })[0];

            foreach (OpenPOS.Model.Faturamento.Lancamento.Movimento.Item.NF.IItem item in nfe.Itens)
            {
                Model.Faturamento.Lancamento.Movimento.Item.Devolucao.IDevolucaoItem i =
                    new OpenPOS.Data.Faturamento.Lancamento.Movimento.Item.Devolucao.Item()
                    {
                        ItemMovimentado = item.ItemMovimentado,
                        Quantidade = item.Quantidade,
                        ValorUnitarioBruto = item.ValorUnitarioBruto,
                        DescricaoNF = item.DescricaoNF,
                        MotivoDevolucao = "Com defeito",
                        QuantidadeDevol = item.Quantidade,
                        EstadoItem = Enuns.Faturamento.Lancamento.Movimento.Devolucao.EstadoItem.Defeito,
                        TabelaPreco = item.TabelaPreco
                    };
                devolucao.Itens.Add(i);
            }

            GUID = devolucao.SaveTemp();

            #endregion

            #region enviar e autorizar a devolução

            fileName = devolucao.Chave + "-nfe.xml";
            filePath = Path.Combine(OpenPOS.Settings.NFe.PastaEnvio, fileName);
            ((NFe.IGenerateNFe)devolucao).GenerateXML().Save(filePath);

            result = ((OpenPOS.Data.Abstract.Faturamento.Lancamento.Movimento.NF.NFBase)devolucao).ProcessaResposta();
            if (result.Success)
            {
                devolucao.StatusNF = result.Status;
                devolucao.Chave = result.Chave;
                devolucao.InfProt = result.Protocolo;
                devolucao.Motivo = result.Motivo;
                devolucao.Save();
                MessageBox.Show("NF-e Devolução: " + result.Motivo);
            }
            #endregion
        }