teodoro 0.67.1 → 0.67.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd434d937c342ccebfd1946cbce175d3f752f2084dfeb3e6c55af824f3000942
4
- data.tar.gz: 731f94e39d2a467522b5d57f3711261e5fa9897ff34c47fbf076f3b3f2d5aa45
3
+ metadata.gz: bd31ac75abdcccfd08625bc2caba6a656f5c2717f5b10f0b7eaa6a3f8068b924
4
+ data.tar.gz: 18b8779eeb088c257b12b4fd201222cdc719d922a0af838eae29ee8e0520075c
5
5
  SHA512:
6
- metadata.gz: a89cfe230bde7f4ba322bb9c4c47d250cdaac3ab785d19807fdaf11a774e9653ceffa0efeca065b47aa7bd185c49ffcfcfd01f56b9a188b2a4d7cbc8bf99eabc
7
- data.tar.gz: 78b3cea554caf9c3f01c7dee1af176ad3e84a784f5c3892a8fdfabc6ce24abeb0512b75ece47ab766fda9e8c4f1c59209a0c4b85f0c32b7428897667982d4050
6
+ metadata.gz: 6a3d94552031cd6b0d8c2b37eb58f98e70a590a061237a2a3a2e43a6d9ffbe5e777292b83c03bcbd7f69c96d14ddf8ca60eacfa636219ecfcd204ead55ff5260
7
+ data.tar.gz: ca50443b7ddd3f30fce31729001665bcb65e86a354e04df9bcaa40e1fac1046c7c7fffb4846089352ca80a59602c9d048505730ba6418f0acbbee1cdf66b06a8
@@ -31,6 +31,7 @@ module Teodoro
31
31
  end
32
32
 
33
33
  def processar_retificacao
34
+ arquivo_xml_de_retificacao.arquivo_retificado = arquivo_xml
34
35
  arquivo_xml_de_retificacao.processar
35
36
  end
36
37
 
@@ -4,28 +4,38 @@ module Teodoro
4
4
 
5
5
  private
6
6
 
7
- def initialize(caminho:, destino_dos_arquivos_xml:)
7
+ def initialize(empresa:, caminho:, indice:, destino_dos_arquivos_xml:)
8
+ @empresa = empresa
8
9
  @caminho = caminho
10
+ @indice = indice
9
11
  @destino_dos_arquivos_xml = destino_dos_arquivos_xml
10
12
  end
11
13
 
12
- attr_reader :caminho, :destino_dos_arquivos_xml
14
+ attr_reader :empresa, :caminho, :indice, :destino_dos_arquivos_xml
13
15
 
14
16
  public
15
17
 
16
18
  def descompactar
17
- if File.directory?(caminho)
18
- puts '', Rainbow("Erro! \"#{p(caminho)}\" é um diretório.").red
19
- exit
20
- end
19
+ validar_que_nao_eh_diretorio
21
20
 
22
- Console.print "descompactando #{File.basename(caminho)}..." do
21
+ Console.print "descompactando #{File.basename(caminho)} (#{percentual}%)..." do
23
22
  descompactar_arquivo_zip
24
23
  end
25
24
  end
26
25
 
27
26
  private
28
27
 
28
+ def validar_que_nao_eh_diretorio
29
+ return unless File.directory?(caminho)
30
+
31
+ puts '', Rainbow("Erro! \"#{p(caminho)}\" é um diretório.").red
32
+ exit
33
+ end
34
+
35
+ def percentual
36
+ (indice + 1) * 100 / empresa.qtd_de_arquivos_de_origem
37
+ end
38
+
29
39
  def descompactar_arquivo_zip
30
40
  Zip::File.open(caminho) do |zip|
31
41
  zip
@@ -99,20 +99,23 @@ module Teodoro
99
99
 
100
100
  private
101
101
 
102
- def initialize(empresa:, caminho:)
102
+ def initialize(empresa:, caminho:, indice:)
103
103
  @empresa = empresa
104
104
  @caminho = caminho
105
+ @indice = indice
105
106
  end
106
107
 
107
108
  attr_reader :empresa, :caminho
108
109
 
109
110
  public
110
111
 
112
+ attr_accessor :indice, :arquivo_retificado
113
+
111
114
  attr_reader :recibo_do_evento_a_excluir, :recibo_do_evento_a_retificar, :momento_de_processamento_pelo_e_social
112
115
 
113
116
  # otimizacao do gerenciamento de memoria
114
117
  def carregar
115
- Console.print "carregando #{nome}.xml..." do
118
+ Console.print "carregando #{nome}.xml (#{percentual}%)..." do
116
119
  evento, recibo = carregar_evento_e_recibo
117
120
 
118
121
  @recibo_do_evento_a_excluir = evento['infoExclusao/nrRecEvt'] if exclusao_por_recibo?
@@ -126,6 +129,10 @@ module Teodoro
126
129
  tratar_excecao(e)
127
130
  end
128
131
 
132
+ def nome
133
+ @nome ||= File.basename(caminho, '.xml')
134
+ end
135
+
129
136
  def exclusao_por_recibo?
130
137
  tipo_de_evento == 'S3000'
131
138
  end
@@ -138,16 +145,12 @@ module Teodoro
138
145
  TIPOS_DE_EVENTO_PROCESSAVEIS.include?(tipo_de_evento)
139
146
  end
140
147
 
141
- def nome
142
- @nome ||= File.basename(caminho, '.xml')
143
- end
144
-
145
148
  def s1000?
146
149
  tipo_de_evento == 'S1000'
147
150
  end
148
151
 
149
152
  def processar
150
- Console.print "processando #{nome}.xml..." do
153
+ Console.print "processando #{nome}.xml (#{percentual}%)..." do
151
154
  validar_versao_do_leiaute
152
155
  processar_arquivo
153
156
  end
@@ -187,6 +190,10 @@ module Teodoro
187
190
  raise 'arquivo corrompido (sem data e horário do processamento do evento)'
188
191
  end
189
192
 
193
+ def percentual
194
+ retificacao? ? arquivo_retificado.percentual : (indice + 1) * 100 / empresa.qtd_de_arquivos_xml
195
+ end
196
+
190
197
  def validar_versao_do_leiaute
191
198
  raise unless (VERSOES_DE_LEIAUTE_2 + VERSOES_DE_LEIAUTE_SIMPLIFICADO).include?(versao_do_leiaute)
192
199
  end
@@ -218,7 +225,12 @@ module Teodoro
218
225
  def arquivo
219
226
  classe_do_arquivo.new(
220
227
  empresa: empresa,
221
- arquivo_xml: Obj.new(leiaute_simplificado?: leiaute_simplificado?, evento: evento, recibo: recibo)
228
+ arquivo_xml: Obj.new(
229
+ percentual: percentual,
230
+ leiaute_simplificado?: leiaute_simplificado?,
231
+ evento: evento,
232
+ recibo: recibo
233
+ )
222
234
  )
223
235
  end
224
236
 
@@ -29,12 +29,14 @@ module Teodoro
29
29
  class Impl # rubocop:disable Metrics/ClassLength
30
30
  private
31
31
 
32
- def initialize(caminho:, destino:)
32
+ def initialize(caminho:, qtd_de_empresas:, indice:, destino:)
33
33
  @caminho = caminho
34
+ @qtd_de_empresas = qtd_de_empresas
35
+ @indice = indice
34
36
  @destino = File.join(destino, nome_do_diretorio)
35
37
  end
36
38
 
37
- attr_reader :caminho, :destino
39
+ attr_reader :caminho, :qtd_de_empresas, :indice, :destino
38
40
 
39
41
  public
40
42
 
@@ -57,6 +59,14 @@ module Teodoro
57
59
  ajustar_nome_do_ultimo_arquivo_emp_data
58
60
  end
59
61
 
62
+ def qtd_de_arquivos_de_origem
63
+ @qtd_de_arquivos_de_origem ||= caminhos_dos_arquivos_de_origem.size
64
+ end
65
+
66
+ def qtd_de_arquivos_xml
67
+ @qtd_de_arquivos_xml ||= arquivos_xml.size
68
+ end
69
+
60
70
  def destino_dos_arquivos_data
61
71
  @destino_dos_arquivos_data ||= File.join(destino, 'data')
62
72
  end
@@ -104,7 +114,7 @@ module Teodoro
104
114
  private
105
115
 
106
116
  def dar_feedback_para_o_usuario
107
- puts Rainbow(nome_do_diretorio).green
117
+ puts Rainbow(nome_do_diretorio).green + " (#{indice + 1} de #{qtd_de_empresas})"
108
118
  end
109
119
 
110
120
  def nome_do_diretorio
@@ -140,8 +150,19 @@ module Teodoro
140
150
 
141
151
  def arquivos_de_origem
142
152
  @arquivos_de_origem ||=
143
- Dir[File.join(caminho, '*.zip')]
144
- .map { |caminho| ArquivoDeOrigem.new(caminho: caminho, destino_dos_arquivos_xml: destino_dos_arquivos_xml) }
153
+ caminhos_dos_arquivos_de_origem
154
+ .map.with_index do |caminho, indice|
155
+ ArquivoDeOrigem.new(
156
+ empresa: self,
157
+ caminho: caminho,
158
+ indice: indice,
159
+ destino_dos_arquivos_xml: destino_dos_arquivos_xml
160
+ )
161
+ end
162
+ end
163
+
164
+ def caminhos_dos_arquivos_de_origem
165
+ @caminhos_dos_arquivos_de_origem ||= Dir[File.join(caminho, '*.zip')]
145
166
  end
146
167
 
147
168
  def carregar_arquivos_xml
@@ -150,14 +171,18 @@ module Teodoro
150
171
 
151
172
  def arquivos_xml
152
173
  @arquivos_xml ||=
153
- Dir[File.join(destino_dos_arquivos_xml, '*.xml')]
154
- .map { |caminho| ArquivoXML.new(empresa: self, caminho: caminho) }
174
+ caminhos_dos_arquivos_xml
175
+ .map.with_index { |caminho, indice| ArquivoXML.new(empresa: self, caminho: caminho, indice: indice) }
176
+ end
177
+
178
+ def caminhos_dos_arquivos_xml
179
+ @caminhos_dos_arquivos_xml ||= Dir[File.join(destino_dos_arquivos_xml, '*.xml')]
155
180
  end
156
181
 
157
182
  def classificar_arquivos_xml # rubocop:disable Metrics/MethodLength
158
183
  Console.print 'classificando os arquivos XML...' do
159
184
  arquivos_xml
160
- .tap { @arquivos_xml = [] }
185
+ .tap { reinicializar_arquivos_xml }
161
186
  .select(&:processavel?)
162
187
  .each do |arquivo_xml|
163
188
  if arquivo_xml.exclusao_por_recibo?
@@ -171,9 +196,17 @@ module Teodoro
171
196
  end
172
197
  end
173
198
 
199
+ def reinicializar_arquivos_xml
200
+ @arquivos_xml = []
201
+ @qtd_de_arquivos_xml = nil
202
+ end
203
+
174
204
  def ordenar_arquivos_xml
175
205
  Console.print 'ordenando os arquivos XML...' do
176
206
  arquivos_xml.sort_by! { [_1.momento_de_processamento_pelo_e_social, _1.nome] }
207
+ arquivos_xml.each.with_index do |arquivo_xml, indice|
208
+ arquivo_xml.indice = indice
209
+ end
177
210
  end
178
211
  end
179
212
 
@@ -190,7 +223,10 @@ module Teodoro
190
223
 
191
224
  def processar_arquivos_xml
192
225
  # otimizacao do gerenciamento de memoria
193
- arquivos_xml.shift.processar while arquivos_xml.any?
226
+ while arquivos_xml.any?
227
+ arquivos_xml.first.processar
228
+ arquivos_xml.shift
229
+ end
194
230
  end
195
231
 
196
232
  def validar_que_nao_houve_evento_de_retificacao_sem_inclusao_correspondente
@@ -215,15 +251,21 @@ module Teodoro
215
251
  end
216
252
 
217
253
  def processar_cargos_gerados
218
- cargos_gerados.each(&:processar)
254
+ Console.print 'gerando arquivos de cargos...' do
255
+ cargos_gerados.each(&:processar)
256
+ end
219
257
  end
220
258
 
221
259
  def processar_funcoes_geradas
222
- funcoes_geradas.each(&:processar)
260
+ Console.print 'gerando arquivos de funções...' do
261
+ funcoes_geradas.each(&:processar)
262
+ end
223
263
  end
224
264
 
225
265
  def setar_proximo_identificador_de_tabela_de_rubricas_nos_arquivos_data_emp
226
- arquivos_data_emp.each(&:setar_proximo_identificador_de_tabela_de_rubricas)
266
+ Console.print 'definindo próximo identificador de rubrica...' do
267
+ arquivos_data_emp.each(&:setar_proximo_identificador_de_tabela_de_rubricas)
268
+ end
227
269
  end
228
270
 
229
271
  def arquivos_data_emp
@@ -237,7 +279,7 @@ module Teodoro
237
279
  end
238
280
 
239
281
  def proximo_identificador_de_tabela_de_rubricas
240
- (ultimo_identificador_de_tabela_de_rubricas || 0) + 1
282
+ @proximo_identificador_de_tabela_de_rubricas ||= (ultimo_identificador_de_tabela_de_rubricas || 0) + 1
241
283
  end
242
284
 
243
285
  def ultimo_identificador_de_tabela_de_rubricas
@@ -257,7 +299,9 @@ module Teodoro
257
299
  end
258
300
 
259
301
  def ajustar_nome_do_ultimo_arquivo_emp_data
260
- File.rename(caminho_do_ultimo_arquivo_emp_data, novo_caminho_do_ultimo_arquivo_emp_data)
302
+ Console.print 'ajustando nome do último arquivo da empresa...' do
303
+ File.rename(caminho_do_ultimo_arquivo_emp_data, novo_caminho_do_ultimo_arquivo_emp_data)
304
+ end
261
305
  end
262
306
 
263
307
  def caminho_do_ultimo_arquivo_emp_data
@@ -185,7 +185,7 @@ module Teodoro
185
185
  ['ESX_DATAADMISSAO', data_de_admissao, :data],
186
186
  ['ESX_DATAALTERACAO', data_da_alteracao, :data],
187
187
  ['cpfTrabalhador', cpf_do_trabalhador],
188
- %w[nomeTrabalhador nomeTrabalhador], # FIXME: Tales
188
+ %w[nomeTrabalhador nomeTrabalhador], # TODO: Tales
189
189
  ['IdentificacaoVinculo_Cpf', cpf_do_trabalhador],
190
190
  ['IdentificacaoVinculo_Matricula', alteracao_contratual.matricula_do_trabalhador],
191
191
  ['TipoInscricaoEmpregador', tipo_de_inscricao_do_empregador],
@@ -1,3 +1,3 @@
1
1
  module Teodoro
2
- VERSION = '0.67.1'.freeze
2
+ VERSION = '0.67.2'.freeze
3
3
  end
data/lib/teodoro.rb CHANGED
@@ -152,7 +152,23 @@ module Teodoro
152
152
  end
153
153
 
154
154
  def empresas
155
- @empresas ||= Dir[File.join(origem, '*')].map { |caminho| Empresa.new(caminho: caminho, destino: destino) }
155
+ @empresas ||=
156
+ caminhos_das_empresas.map.with_index do |caminho, indice|
157
+ Empresa.new(
158
+ caminho: caminho,
159
+ qtd_de_empresas: qtd_de_empresas,
160
+ indice: indice,
161
+ destino: destino
162
+ )
163
+ end
164
+ end
165
+
166
+ def caminhos_das_empresas
167
+ @caminhos_das_empresas ||= Dir[File.join(origem, '*')]
168
+ end
169
+
170
+ def qtd_de_empresas
171
+ @qtd_de_empresas ||= caminhos_das_empresas.size
156
172
  end
157
173
  end
158
174
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teodoro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.67.1
4
+ version: 0.67.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fortes Tecnologia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-28 00:00:00.000000000 Z
11
+ date: 2024-02-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri