inovadora_xml 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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