/// <summary> /// Realiza um teste de fim a fim no Sat. /// </summary> /// <param name="cfe">The cfe.</param> /// <returns>SatResposta.</returns> public TesteResposta TesteFimAFim(CFe cfe) { Guard.Against <ACBrException>(!Ativo, "Componente não está ativo."); var options = DFeSaveOptions.OmitDeclaration | DFeSaveOptions.DisableFormatting; if (Configuracoes.RemoverAcentos) { options |= DFeSaveOptions.RemoveAccents; } var dadosVenda = cfe.GetXml(options); IniciaComando($"TesteFimAFim({dadosVenda})"); if (Arquivos.SalvarEnvio) { var envioPath = Arquivos.PastaEnvio; var fullName = Path.Combine(envioPath, $"{Arquivos.PrefixoArqCFe}{DateTime.Now:yyyyMMddHHmmss}-{Sessao.ZeroFill(6)}-teste-env.xml"); if (!Directory.Exists(envioPath)) { Directory.CreateDirectory(envioPath); } File.WriteAllText(fullName, dadosVenda); } var ret = sat.TesteFimAFim(Sessao, CodigoAtivacao, dadosVenda); var resp = FinalizaComando <TesteResposta>(ret); if (!Arquivos.SalvarCFe || resp.CodigoDeRetorno != 9000) { return(resp); } var cnpj = Arquivos.SepararPorCNPJ ? resp.VendaTeste.InfCFe.Emit.CNPJ : ""; var data = Arquivos.SepararPorMes ? $"{resp.VendaTeste.InfCFe.Ide.DEmi:yyyy}\\{resp.VendaTeste.InfCFe.Ide.DEmi:MM}" : ""; var path = Path.Combine(Arquivos.PastaCFeVenda, cnpj, data); var calcPathEventEventArgs = new CalcPathEventEventArgs { CNPJ = resp.VendaTeste.InfCFe.Emit.CNPJ, Data = resp.VendaTeste.InfCFe.Ide.DEmi, Path = path }; OnCalcPath.Raise(this, calcPathEventEventArgs); if (!Directory.Exists(calcPathEventEventArgs.Path)) { Directory.CreateDirectory(calcPathEventEventArgs.Path); } var nomeArquivo = $"{Arquivos.PrefixoArqCFe}{resp.VendaTeste.InfCFe.Id}.xml"; var fullPath = Path.Combine(calcPathEventEventArgs.Path, nomeArquivo); resp.VendaTeste.Save(fullPath); return(resp); }
/// <summary> /// Envia os dados da venda para o Sat. /// </summary> /// <param name="cfe">The cfe.</param> /// <returns>VendaSatResposta.</returns> public VendaSatResposta EnviarDadosVenda(CFe cfe) { Guard.Against <ACBrException>(!Ativo, "Componente não está ativo."); Guard.Against <ArgumentNullException>(cfe.IsNull(), nameof(cfe)); var dadosVenda = GetXml(cfe, false, false); IniciaComando($"EnviarDadosVenda({dadosVenda})"); if (Arquivos.SalvarEnvio) { var envioPath = Arquivos.PastaEnvio; var fullName = Path.Combine(envioPath, $"{Arquivos.PrefixoArqCFe}{DateTime.Now:yyyyMMddHHmmss}-{Sessao.ZeroFill(6)}-env.xml"); if (!Directory.Exists(envioPath)) { Directory.CreateDirectory(envioPath); } File.WriteAllText(fullName, dadosVenda); } var e = new EventoDadosEventArgs { Dados = dadosVenda }; OnEnviarDadosVenda.Raise(this, e); var ret = sat.EnviarDadosVenda(Sessao, CodigoAtivacao, e.Dados); var resp = FinalizaComando <VendaSatResposta>(ret); if (!Arquivos.SalvarCFe || resp.CodigoDeRetorno != 6000) { return(resp); } var cnpj = Arquivos.SepararPorCNPJ ? resp.Venda.InfCFe.Emit.CNPJ : ""; var data = Arquivos.SepararPorMes ? $"{resp.Venda.InfCFe.Ide.DEmi:yyyy}\\{resp.Venda.InfCFe.Ide.DEmi:MM}" : ""; var path = Path.Combine(Arquivos.PastaCFeVenda, cnpj, data); var calcPathEventEventArgs = new CalcPathEventEventArgs { CNPJ = resp.Venda.InfCFe.Emit.CNPJ, Data = resp.Venda.InfCFe.Ide.DEmi, Path = path }; OnCalcPath.Raise(this, calcPathEventEventArgs); if (!Directory.Exists(calcPathEventEventArgs.Path)) { Directory.CreateDirectory(calcPathEventEventArgs.Path); } var nomeArquivo = $"{Arquivos.PrefixoArqCFe}{resp.Venda.InfCFe.Id.OnlyNumbers()}.xml"; var fullPath = Path.Combine(calcPathEventEventArgs.Path, nomeArquivo); Salvar(resp.Venda, fullPath); return(resp); }
/// <summary> /// Cancela a venda /// </summary> /// <param name="chave">A chave da CFe pra cancelar.</param> /// <param name="dadosCancelamento">XML de cancelamento.</param> /// <returns>CancelamentoSatResposta.</returns> public CancelamentoSatResposta CancelarUltimaVenda(string chave, string dadosCancelamento) { Guard.Against <ACBrException>(!Ativo, "Componente não está ativo."); Guard.Against <ArgumentException>(chave.IsEmpty(), "Chave não informada."); Guard.Against <ArgumentException>(dadosCancelamento.IsEmpty(), "Dados de cancelamento não informado."); IniciaComando($"CancelarUltimaVenda({chave}, {dadosCancelamento})"); if (Arquivos.SalvarEnvio) { var envioPath = Arquivos.PastaEnvio; var fullName = Path.Combine(envioPath, $"{Arquivos.PrefixoArqCFeCanc}{DateTime.Now:yyyyMMddHHmmss}-{Sessao.ZeroFill(6)}-env.xml"); if (!Directory.Exists(envioPath)) { Directory.CreateDirectory(envioPath); } File.WriteAllText(fullName, dadosCancelamento); } var e = new EventoDadosEventArgs { Dados = dadosCancelamento }; OnCancelarUltimaVenda.Raise(this, e); var ret = sat.CancelarUltimaVenda(Sessao, CodigoAtivacao, chave, dadosCancelamento); var resp = FinalizaComando <CancelamentoSatResposta>(ret); if (!Arquivos.SalvarCFeCanc || resp.CodigoDeRetorno != 7000) { return(resp); } var cnpj = Arquivos.SepararPorCNPJ ? resp.Cancelamento.InfCFe.Emit.CNPJ : ""; var data = Arquivos.SepararPorMes ? $"{resp.Cancelamento.InfCFe.Ide.DEmi:yyyy}\\{resp.Cancelamento.InfCFe.Ide.DEmi:MM}" : ""; var path = Path.Combine(Arquivos.PastaCFeCancelamento, cnpj, data); var calcPathEventEventArgs = new CalcPathEventEventArgs { CNPJ = resp.Cancelamento.InfCFe.Emit.CNPJ, Data = resp.Cancelamento.InfCFe.Ide.DEmi, Path = path }; OnCalcPath.Raise(this, calcPathEventEventArgs); if (!Directory.Exists(calcPathEventEventArgs.Path)) { Directory.CreateDirectory(calcPathEventEventArgs.Path); } var nomeArquivo = $"{Arquivos.PrefixoArqCFeCanc}{resp.Cancelamento.InfCFe.Id.OnlyNumbers()}.xml"; var fullPath = Path.Combine(calcPathEventEventArgs.Path, nomeArquivo); resp.Cancelamento.Save(fullPath); return(resp); }