@@ -63,6 +63,15 @@ public static List<Estado> EstadosQueUsamSvcAnParaNfe()
63
63
return new List < Estado > { Estado . AC , Estado . AL , Estado . AP , Estado . DF , Estado . ES , Estado . MG , Estado . PB , Estado . RJ , Estado . RN , Estado . RO , Estado . RR , Estado . RS , Estado . SC , Estado . SE , Estado . SP , Estado . TO } ;
64
64
}
65
65
66
+ /// <summary>
67
+ /// Lista de <see cref="Estado"/> que utilizam SVC-RS para NF-e
68
+ /// </summary>
69
+ /// <returns></returns>
70
+ public static List < Estado > EstadosQueUsamSvcRsParaNfe ( )
71
+ {
72
+ return new List < Estado > { Estado . AM , Estado . BA , Estado . CE , Estado . GO , Estado . MA , Estado . MS , Estado . MT , Estado . PA , Estado . PE , Estado . PR } ;
73
+ }
74
+
66
75
/// <summary>
67
76
/// Lista de <see cref="Estado"/> que usam SVAN para NF-e
68
77
/// </summary>
@@ -133,7 +142,7 @@ private static List<EnderecoServico> CarregarEnderecosServicos()
133
142
134
143
var svcanEstados = EstadosQueUsamSvcAnParaNfe ( ) ;
135
144
136
- var svcRsEstados = new List < Estado > { Estado . AM , Estado . BA , Estado . CE , Estado . GO , Estado . MA , Estado . MS , Estado . MT , Estado . PA , Estado . PE , Estado . PI , Estado . PR } ;
145
+ var svcRsEstados = EstadosQueUsamSvcRsParaNfe ( ) ;
137
146
138
147
var todosOsEstados = Enum . GetValues ( typeof ( Estado ) ) . Cast < Estado > ( ) . ToList ( ) ;
139
148
@@ -1641,34 +1650,40 @@ private static List<EnderecoServico> CarregarEnderecosServicos()
1641
1650
/// Obtém uma string com a mensagem de erro.
1642
1651
/// Essa função é acionada quando não é encontrada uma url para os parâmetros informados na função ObterUrlServico.
1643
1652
/// </summary>
1644
- /// <param name="servico"></param>
1645
- /// <param name="cfgServico"></param>
1646
1653
/// <returns></returns>
1647
- private static string Erro ( ServicoNFe servico , ConfiguracaoServico cfgServico )
1654
+ private static string Erro ( ServicoNFe servico , VersaoServico versaoServico , Estado estado , TipoAmbiente tipoAmbiente , TipoEmissao tipoEmissao , ModeloDocumento modeloDocumento )
1648
1655
{
1649
- return "Serviço " + servico + ", versão " + servico . VersaoServicoParaString ( servico . ObterVersaoServico ( cfgServico ) ) + ", não disponível para a UF " + cfgServico . cUF + ", no ambiente de " + cfgServico . tpAmb . TpAmbParaString ( ) +
1650
- " para emissão tipo " + cfgServico . tpEmis . TipoEmissaoParaString ( ) + ", documento: " + cfgServico . ModeloDocumento . ModeloDocumentoParaString ( ) + "!" ;
1656
+ return "Serviço " + servico + ", versão " + servico . VersaoServicoParaString ( versaoServico ) + ", não disponível para a UF " + estado + ", no ambiente de " + tipoAmbiente . TpAmbParaString ( ) +
1657
+ " para emissão tipo " + tipoEmissao . TipoEmissaoParaString ( ) + ", documento: " + modeloDocumento . ModeloDocumentoParaString ( ) + "!" ;
1651
1658
}
1652
1659
1653
1660
/// <summary>
1654
1661
/// Obtém uma url a partir de uma lista armazenada em enderecoServico e povoada dinamicamente no create desta classe
1655
1662
/// </summary>
1656
- /// <param name="servico"></param>
1657
- /// <param name="cfgServico"></param>
1658
1663
/// <returns></returns>
1659
1664
public static string ObterUrlServico ( ServicoNFe servico , ConfiguracaoServico cfgServico )
1660
1665
{
1661
- var definicao = from d in ListaEnderecos
1662
- where d . Estado == cfgServico . cUF && d . ServicoNFe == servico && d . TipoAmbiente == cfgServico . tpAmb && d . TipoEmissao == cfgServico . tpEmis && d . VersaoServico == ObterVersaoServico ( servico , cfgServico ) && d . ModeloDocumento == cfgServico . ModeloDocumento
1663
- select d . Url ;
1664
- var listaRetorno = definicao as IList < string > ?? definicao . ToList ( ) ;
1665
- var qtdeRetorno = listaRetorno . Count ( ) ;
1666
-
1667
- if ( qtdeRetorno == 0 )
1668
- throw new Exception ( Erro ( servico , cfgServico ) ) ;
1669
- if ( qtdeRetorno > 1 )
1666
+ var versaoServico = ObterVersaoServico ( servico , cfgServico ) ;
1667
+ if ( versaoServico == null )
1668
+ throw new Exception ( string . Format ( "Não foi possível obter a versão do serviço {0}!" , servico ) ) ;
1669
+ return ObterUrlServico ( servico , versaoServico . GetValueOrDefault ( ) , cfgServico . cUF , cfgServico . tpAmb ,
1670
+ cfgServico . ModeloDocumento , cfgServico . tpEmis ) ;
1671
+ }
1672
+
1673
+ /// <summary>
1674
+ /// Obtém uma url a partir de uma lista armazenada em enderecoServico e povoada dinamicamente no create desta classe
1675
+ /// </summary>
1676
+ /// <returns></returns>
1677
+ public static string ObterUrlServico ( ServicoNFe servico , VersaoServico versaoServico , Estado estado , TipoAmbiente tipoAmbiente , ModeloDocumento modeloDocumento , TipoEmissao tipoEmissao )
1678
+ {
1679
+ var urls = ObterEnderecoServicosMaisRecentes ( versaoServico , estado , tipoAmbiente , modeloDocumento , tipoEmissao ) . Where ( n => n . ServicoNFe == servico )
1680
+ . Select ( n => n . Url ) . ToList ( ) ;
1681
+
1682
+ if ( ! urls . Any ( ) )
1683
+ throw new Exception ( Erro ( servico , versaoServico , estado , tipoAmbiente , tipoEmissao , modeloDocumento ) ) ;
1684
+ if ( urls . Count > 1 )
1670
1685
throw new Exception ( "A função ObterUrlServico obteve mais de um resultado!" ) ;
1671
- return listaRetorno . FirstOrDefault ( ) ;
1686
+ return urls . FirstOrDefault ( ) ;
1672
1687
}
1673
1688
1674
1689
/// <summary>
0 commit comments