inovadora_xml 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -108,10 +108,10 @@ module InovadoraXml
108
108
  end
109
109
 
110
110
  def valid?
111
- raise "Chave não informada" unless self.key.present?
112
- raise "Certificado não informado" unless self.cert.present?
113
- raise "Arquivo chave não encontrado" unless File.exists?(self.key)
114
- raise "Arquivo certificado não encontrado" unless File.exists?(self.cert)
111
+ self.errors.add(:base, "Chave não informada" ) unless self.key.present?
112
+ self.errors.add(:base, "Certificado não informado" ) unless self.cert.present?
113
+ self.errors.add(:base, "Arquivo chave não encontrado") unless File.exists?(self.key.to_s)
114
+ self.errors.add(:base, "Arquivo certificado não encontrado") unless File.exists?(self.cert.to_s)
115
115
 
116
116
  rescue Exception => e
117
117
  self.errors.add(:base, e.message)
@@ -126,18 +126,18 @@ module InovadoraXml
126
126
  self.hospital.cidade_ibge.try(:ibge_com_digito)
127
127
  end
128
128
 
129
- def persistir_fnnfses_xml(xml)
129
+ def persistir_fnnfses_xml(xml, tipo_documento = 17)
130
130
  xml_tratado = Nokogiri::XML(CGI.unescapeHTML(xml.to_xml.to_s), &:noblanks)
131
131
  xml_tratado = xml_tratado.to_xml(indent: 2).to_s
132
132
  if xml_tratado.blank?
133
133
  xml_tratado = "xml não recebido da prefeitura"
134
134
  end
135
- retorno_service = NotasVendas::XmlRetornoService.new(fnnfse: self.fnnfse, xml_envio: self.xml_gerado().to_s, xml_retorno: xml_tratado, errors: self.errors)
136
- if retorno_service.retornou_dados_nota?
137
- retorno_service.save
138
- end
139
- end
135
+ # $b = {fnnfse: self.fnnfse, xml_envio: self.xml_gerado().to_s, xml_retorno: xml_tratado, errors: self.errors, tipo_documento: tipo_documento}
140
136
 
137
+ retorno_service = InovadoraXml::Modules::XmlRetorno.new(fnnfse: self.fnnfse, xml_envio: self.xml_gerado().to_s, xml_retorno: xml_tratado, errors: self.errors, tipo_documento: tipo_documento)
138
+
139
+ retorno_service.save
140
+ end
141
141
  end
142
142
  end
143
143
  end
@@ -0,0 +1,105 @@
1
+ #encoding=utf-8
2
+ module InovadoraXml
3
+ module Modules
4
+ class XmlRetorno
5
+ extend ActiveModel::Naming # Requer dependencias para uso do ActiveModel::Errors
6
+ attr_accessor :errors, :fnnfse, :fnnfses_xml, :numero_nota, :link_nota, :protocolo_prefeitura,
7
+ :codigo_verificacao_nfse, :datahora_aprovacao,
8
+ :cancelada, :data_hora_cancelamento
9
+
10
+ def initialize args={}
11
+ self.errors = args[:errors] || ActiveModel::Errors.new(self)
12
+ self.fnnfse = args[:fnnfse]
13
+ validar_dados_iniciais(args)
14
+ persistir_fnnfses_xml(args)
15
+ end
16
+
17
+ def validar_dados_iniciais(args)
18
+ if self.fnnfse.nil?
19
+ self.errors.add(:base, "NFSe não encontrada")
20
+ end
21
+ if args.blank? || args[:xml_envio].blank?
22
+ self.errors.add(:base, "XML para envio está em branco")
23
+ end
24
+ if args.blank? || args[:xml_retorno].blank?
25
+ self.errors.add(:base, "XML de retorno está em branco")
26
+ end
27
+ end
28
+
29
+ def valid?
30
+ self.errors.blank?
31
+ end
32
+
33
+ def retornou_dados_nota?
34
+ self.errors.add(:base, "Número da nota não encontrado no XML de retorno da prefeitura") if self.numero_nota.blank?
35
+ # self.errors.add(:base, "Link da nota não encontrado no XML de retorno da prefeitura") if self.link_nota.blank?
36
+ self.errors.add(:base, "Código verificação da nota não encontrado no XML de retorno da prefeitura") if self.codigo_verificacao_nfse.blank?
37
+ self.errors.add(:base, "Data aprovação da nota não encontrado no XML de retorno da prefeitura") if self.datahora_aprovacao.blank?
38
+ self.valid?
39
+ end
40
+
41
+ def save
42
+ if retornou_dados_nota?
43
+ if self.valid?
44
+ self.fnnfse.nao_validar_nota_autenticada = true
45
+ self.fnnfse.fnnfses_sancionada.numero_nota = self.numero_nota
46
+ self.fnnfse.fnnfses_sancionada.link_nota = self.link_nota
47
+ self.fnnfse.fnnfses_sancionada.codigo_verificacao_nfse = self.codigo_verificacao_nfse
48
+ self.fnnfse.fnnfses_sancionada.datahora_aprovacao = self.datahora_aprovacao
49
+ self.fnnfse.fnnfses_sancionada.protocolo_prefeitura = self.protocolo_prefeitura
50
+ self.fnnfse.save
51
+ end
52
+ if self.cancelada && self.data_hora_cancelamento.present?
53
+ self.fnnfse.reload
54
+ fnnfses_sancionada = self.fnnfse.fnnfses_sancionada
55
+ fnnfses_sancionada.cancelada = true
56
+ fnnfses_sancionada.motivo_cancelamento = fnnfses_sancionada.motivo_cancelamento.to_s + " Data/Hora cancelamento: #{self.data_hora_cancelamento.to_s_br}"
57
+ fnnfses_sancionada.save
58
+ end
59
+ end
60
+ end
61
+
62
+ def get_texto_errors
63
+ texto_errors = '<erros>\n'
64
+ texto_errors += "<erro>XML apresentou erros na geração e transmissão para o webservice</erro>\n"
65
+ if self.errors.present?
66
+ self.errors.full_messages.each do |msg|
67
+ texto_errors += "<erro>#{msg}</erro>\n"
68
+ end
69
+ end
70
+ texto_errors += '</erros>\n'
71
+ texto_errors
72
+ end
73
+
74
+ def persistir_fnnfses_xml(args)
75
+ xml_resposta_ws = (args[:xml_retorno] rescue get_texto_errors)
76
+ if xml_resposta_ws.blank?
77
+ xml_resposta_ws = get_texto_errors
78
+ end
79
+ self.fnnfses_xml = FnnfsesXml.create(
80
+ fnnfse_id: self.fnnfse.id,
81
+ tipo_documento: args[:tipo_documento],
82
+ xml_envio: (args[:xml_envio] rescue get_texto_errors),
83
+ xml_resposta: xml_resposta_ws
84
+ )
85
+ if self.fnnfses_xml.try(:get_erros).present?
86
+ self.fnnfses_xml.get_erros.each do |erro|
87
+ self.errors.add(:base, "Erro retornado pela prefeitura: #{erro}")
88
+ end
89
+ end
90
+
91
+ if self.errors.blank?
92
+ self.numero_nota = self.fnnfses_xml.get_numero_nota if (self.fnnfses_xml.get_numero_nota.present?)
93
+ self.link_nota = self.fnnfses_xml.get_link_nota if (self.fnnfses_xml.get_link_nota.present?)
94
+ self.codigo_verificacao_nfse = self.fnnfses_xml.get_codigo_verificacao_nfse if (self.fnnfses_xml.get_codigo_verificacao_nfse.present?)
95
+ self.datahora_aprovacao = self.fnnfses_xml.get_data_emissao if (self.fnnfses_xml.get_data_emissao.present?)
96
+ self.protocolo_prefeitura = self.fnnfses_xml.get_protocolo_prefeitura if (self.fnnfses_xml.get_protocolo_prefeitura.present?)
97
+ if (self.fnnfses_xml.get_data_hora_cancelamento.present? rescue false)
98
+ self.cancelada = true
99
+ self.data_hora_cancelamento = self.fnnfses_xml.get_data_hora_cancelamento
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -4,5 +4,6 @@ module InovadoraXml
4
4
  autoload :FormatadorNfse, "inovadora_xml/modules/formatador_nfse"
5
5
  autoload :GeradorXml, "inovadora_xml/modules/gerador_xml"
6
6
  autoload :DadosNfseService, "inovadora_xml/modules/dados_nfse_service"
7
+ autoload :XmlRetorno, "inovadora_xml/modules/xml_retorno"
7
8
  end
8
9
  end
@@ -1,3 +1,3 @@
1
1
  module InovadoraXml
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/inovadora_xml.rb CHANGED
@@ -19,7 +19,7 @@ module InovadoraXml
19
19
  include InovadoraXml::Modules::FormatadorNfse
20
20
  include InovadoraXml::Modules::GeradorXml
21
21
 
22
- def initialize(args = {})
22
+ def initialize(*args)
23
23
  self.errors = ActiveModel::Errors.new(self)
24
24
  self.xml_gerado = self.gerar_xml()
25
25
 
@@ -85,8 +85,8 @@ module InovadoraXml
85
85
  assinador = InovadoraXml::Assinador.new(self.xml_gerado, tag_assinar, self.cert, self.key)
86
86
  assinador.assinar_xml
87
87
 
88
- assinador.errors.each do |error|
89
- self.errors.add(:base, error.full_message)
88
+ assinador.errors.full_messages.each do |error|
89
+ self.errors.add(:base, error)
90
90
  end
91
91
 
92
92
  self.xml_gerado = assinador.xml_assinado if assinador.errors.blank?
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inovadora_xml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2019-06-14 00:00:00.000000000 Z
12
+ date: 2019-06-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -132,9 +132,9 @@ files:
132
132
  - lib/inovadora_xml/modules/dados_nfse_service.rb
133
133
  - lib/inovadora_xml/modules/formatador_nfse.rb
134
134
  - lib/inovadora_xml/modules/gerador_xml.rb
135
+ - lib/inovadora_xml/modules/xml_retorno.rb
135
136
  - lib/inovadora_xml/servidor_wsdl.rb
136
137
  - lib/inovadora_xml/version.rb
137
- - lib/inovadora_xml/xml.rb
138
138
  homepage:
139
139
  licenses:
140
140
  - MIT
@@ -1,76 +0,0 @@
1
- #encoding: utf-8
2
- module InovadoraXml
3
- class Xml
4
- attr_accessor :xml_nfse, :schema, :metodo_soap, :xml_gerado, :retorno, :wsdl, :cert, :key, :errors
5
-
6
- include InovadoraXml::Modules::FormatadorMfse
7
- include InovadoraXml::Modules::GeradorXml
8
-
9
- def initialize(args = {})
10
- self.errors = ActiveModel::Errors.new(self)
11
- self.xml_gerado = self.gerar_xml()
12
-
13
- self.validar_args
14
- # self.valid?
15
- end
16
-
17
- def comunicar(request_args = {})
18
- self.valid?
19
-
20
- if self.errors.blank?
21
- servidor = InovadoraXml::ServidorWsdl.new(
22
- envelopar(),
23
- self.metodo_soap,
24
- self.wsdl,
25
- request_args
26
- )
27
-
28
- unless servidor.enviar
29
- raise InovadoraXml::CustomExceptions::ServerError.new(servidor), "Server Error"
30
- end
31
- #usage: self.retorno.to_xml ou self.retorno.body
32
- self.retorno = servidor.retorno
33
- end
34
-
35
- rescue InovadoraXml::CustomExceptions::ServerError => e
36
- e.object.errors.full_messages.each {|e| self.errors.add(:base, e)}
37
- rescue Exception => e
38
- self.errors.add(:base, e.message)
39
- ensure
40
- return self.errors.blank?
41
- end
42
-
43
- def validar_args
44
- self.errors.add(:base, "Metodo SOAP não especificado") if self.metodo_soap.blank?
45
- self.errors.add(:base, "Schema não especificado") if self.schema.blank?
46
- self.errors.add(:base, "WSDL não especificado") if self.wsdl.blank?
47
-
48
- return self.errors.blank?
49
- end
50
-
51
- def valid?
52
- erros = []
53
- schema = open(self.schema)
54
- xsd = Nokogiri::XML::Schema(schema)
55
- xsd.validate(self.xml_gerado).each do |error|
56
- unless error.message.to_s.include?("{http://www.w3.org/2000/09/xmldsig#}Signature") ||
57
- error.message.to_s.include?("{http://www.w3.org/2000/09/xmldsig#}SignedInfo")
58
- erros << "(Linha: " + error.line.to_s + ") => " + error.message.to_s
59
- end
60
- end
61
-
62
- erros.each {|erro| self.errors.add(:base, erro)}
63
- rescue Errno::ENOENT => e
64
- self.errors.add(:base, "Arquivo schema não existe")
65
- rescue Exception => e
66
- self.errors.add(:base, e)
67
- ensure
68
- self.errors.blank?
69
- end
70
-
71
- def assinar(xml_assinar, tag_assinar)
72
- Assinador.new(xml_assinar, tag_assinar).xml_assinado
73
- end
74
-
75
- end
76
- end