teodoro 0.50.0 → 0.51.0

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: 51abd5c742e7e100db3955d991f68118c97cbd5b3b140e662e54267ab880ae51
4
- data.tar.gz: 18a384c6ffdf1a4452342f2e56bf1b023336cccf429f4fe5f972913e1da09be9
3
+ metadata.gz: 65669a9ee3ad1d0358849fa220e2720d08452c9a8c4f2d4154f979cca4d45edd
4
+ data.tar.gz: 00f23d7d9103fb178f932a18976c36ebffb8d79f23eb943f28f3b5069af0800f
5
5
  SHA512:
6
- metadata.gz: 6a61c8d976d136490e0d02e6e3d64448df51f9d402a977515b59d8cf81bb1d339f1c4a3c642c1d6f379202c2dbf3c5809d5f4c529e6650e1665130f38b40e0fb
7
- data.tar.gz: 0cda08d5973babe35d3a30a56b22449595dd27c7843f69339f10a3cfcf323900c345ec3f9601de38e874b4034a092f6ad48c020eba85057e447004bcd7ecd125
6
+ metadata.gz: 0d88f0c9d65b366f806c99f148d637196fa10aab61bc7b2b65853e25f64183a443462ad2722c6dd8c8112c440aad87050b365455563cc59b09d62f0a35be4fba
7
+ data.tar.gz: 801996ba495dc23d1da40a4e3b321236ffc0a0781ceaeb8a96b9c9778bb543ec97d1bbee500b35549c86746dcfa0e0e6029a8ca003bc5c7fedd1f0017c0dbb28
@@ -11,6 +11,10 @@ module Teodoro
11
11
 
12
12
  public
13
13
 
14
+ def operacao
15
+ :inclusao
16
+ end
17
+
14
18
  def nome
15
19
  [
16
20
  'TRA',
@@ -6,8 +6,9 @@ module Teodoro
6
6
  class ArquivoData
7
7
  private
8
8
 
9
- def initialize(diretorio:, nome:, itens_do_conteudo:)
9
+ def initialize(diretorio:, nome:, itens_do_conteudo:, operacao: :inclusao)
10
10
  @diretorio = diretorio
11
+ @operacao = operacao
11
12
  @nome = nome
12
13
  @itens_do_conteudo = itens_do_conteudo
13
14
  end
@@ -16,31 +17,59 @@ module Teodoro
16
17
 
17
18
  public
18
19
 
19
- attr_reader :nome
20
+ attr_reader :operacao, :nome
20
21
 
21
- def criar
22
- raise 'evento duplicado' if File.exist?(caminho)
22
+ def salvar
23
+ if inclusao_de_arquivo?
24
+ raise 'evento duplicado' if File.exist?(caminho)
25
+ elsif atualizacao_de_arquivo?
26
+ raise 'evento não encontrado' unless File.exist?(caminho)
27
+
28
+ salvar_conteudo_do_arquivo_original
29
+ end
23
30
 
24
31
  File.open(caminho, 'w') do |file|
25
- file.puts(conteudo_do_arquivo)
32
+ file.puts(linhas_do_arquivo)
26
33
  end
27
34
  end
28
35
 
29
36
  private
30
37
 
38
+ def inclusao_de_arquivo?
39
+ operacao == :inclusao
40
+ end
41
+
42
+ def atualizacao_de_arquivo?
43
+ operacao == :atualizacao
44
+ end
45
+
46
+ def salvar_conteudo_do_arquivo_original
47
+ chaves_valores_do_arquivo_original
48
+ end
49
+
50
+ def chaves_valores_do_arquivo_original
51
+ @chaves_valores_do_arquivo_original ||=
52
+ File
53
+ .readlines(caminho)
54
+ .to_h { _1.match(/^(.+)=(.*)$/)[1..2] }
55
+ end
56
+
31
57
  def caminho
32
58
  @caminho ||= Caminho.new(diretorio: diretorio, nome_do_arquivo: nome)
33
59
  end
34
60
 
35
- def conteudo_do_arquivo
36
- itens_de_conteudo_ajustados
37
- .map { |chave, valor, formato, opcoes| [chave, Valor.new(valor, formato: formato), opcoes] }
38
- .reject { |_chave, valor, opcoes| valor.vazio? && !opcoes[:manter_se_vazio] }
39
- .map { |chave, valor| "#{chave}=#{valor}" }
61
+ def linhas_do_arquivo
62
+ chaves_valores.map { |chave, valor| "#{chave}=#{valor}" }
40
63
  end
41
64
 
42
- def itens_de_conteudo_ajustados
43
- itens_do_conteudo.map { [_1[0], _1[1], _1.size == 1 ? :vazio : _1[2], _1[3] || {}] }
65
+ def chaves_valores
66
+ ChavesValores.new(itens_do_conteudo).then do |chaves_valores|
67
+ if inclusao_de_arquivo?
68
+ chaves_valores
69
+ elsif atualizacao_de_arquivo?
70
+ chaves_valores_do_arquivo_original.merge(chaves_valores)
71
+ end
72
+ end
44
73
  end
45
74
 
46
75
  class Caminho
@@ -64,33 +93,72 @@ module Teodoro
64
93
  end
65
94
  end
66
95
 
67
- class Valor
68
- FORMATADORES = {
69
- bool: proc { _1 ? 'True' : 'False' },
70
- data: proc { "#{_1[-2..]}/#{_1[5..6]}/#{_1[0..3]}" if _1 },
71
- data_aaaammdd: proc { _1.delete('-') if _1 },
72
- decimal: proc { _1.tr('.', ',') if _1 },
73
- mes_ano: proc { "#{_1[-2..]}/#{_1[0..3]}" if _1 },
74
- vazio: proc {}
75
- }.freeze
96
+ class ChavesValores
97
+ extend Forwardable
76
98
 
77
- private
99
+ def initialize(itens)
100
+ @itens = itens
101
+ .map { Item.new(*_1) }
102
+ .select(&:selecionar?)
103
+ .map { [_1.chave, _1.valor] }
104
+ end
105
+
106
+ def_delegators :itens, :map
78
107
 
79
- def initialize(valor, formato:)
80
- @valor = valor
81
- @formato = formato
108
+ def to_hash
109
+ itens.to_h
82
110
  end
83
111
 
84
- attr_reader :valor, :formato
112
+ private
85
113
 
86
- public
114
+ attr_reader :itens
87
115
 
88
- def vazio?
89
- to_s.empty? && formato != :vazio
90
- end
116
+ class Item
117
+ def initialize(*args)
118
+ @chave = args[0]
119
+ @valor = Valor.new(args[1], formato: args.size == 1 ? :vazio : args[2])
120
+ @opcoes = args[3] || {}
121
+ end
122
+
123
+ attr_reader :chave, :valor
124
+
125
+ def selecionar?
126
+ !valor.vazio? || opcoes[:manter_se_vazio]
127
+ end
128
+
129
+ private
130
+
131
+ attr_reader :opcoes
132
+
133
+ class Valor
134
+ FORMATADORES = {
135
+ bool: proc { _1 ? 'True' : 'False' },
136
+ data: proc { "#{_1[-2..]}/#{_1[5..6]}/#{_1[0..3]}" if _1 },
137
+ data_aaaammdd: proc { _1.delete('-') if _1 },
138
+ decimal: proc { _1.tr('.', ',') if _1 },
139
+ mes_ano: proc { "#{_1[-2..]}/#{_1[0..3]}" if _1 },
140
+ vazio: proc {}
141
+ }.freeze
142
+
143
+ private
144
+
145
+ def initialize(valor, formato:)
146
+ @valor = valor
147
+ @formato = formato
148
+ end
149
+
150
+ attr_reader :valor, :formato
151
+
152
+ public
153
+
154
+ def vazio?
155
+ to_s.empty? && formato != :vazio
156
+ end
91
157
 
92
- def to_s
93
- @to_s ||= (formato ? FORMATADORES[formato].call(valor) : valor).to_s
158
+ def to_s
159
+ @to_s ||= (formato ? FORMATADORES[formato].call(valor) : valor).to_s
160
+ end
161
+ end
94
162
  end
95
163
  end
96
164
  end
@@ -6,7 +6,7 @@ module Teodoro
6
6
  deletar_arquivo_data_original if alteracao? || exclusao?
7
7
  return if exclusao?
8
8
 
9
- criar_arquivo_data
9
+ salvar_arquivo_data
10
10
  end
11
11
 
12
12
  private
@@ -46,8 +46,8 @@ module Teodoro
46
46
  evento[noh_de_informacoes_do_evento, '*', noh_de_identificacao_do_periodo, 'iniValid']
47
47
  end
48
48
 
49
- def criar_arquivo_data
50
- arquivo_data.criar
49
+ def salvar_arquivo_data
50
+ arquivo_data.salvar
51
51
  end
52
52
 
53
53
  def inicio_da_validade
@@ -7,7 +7,7 @@ module Teodoro
7
7
  processar_retificacao
8
8
  else
9
9
  registrar_arquivos_data
10
- criar_arquivos_data
10
+ salvar_arquivos_data
11
11
  end
12
12
  end
13
13
 
@@ -38,14 +38,15 @@ module Teodoro
38
38
  end
39
39
  end
40
40
 
41
- def criar_arquivos_data
42
- arquivos_data.shift.criar while arquivos_data.any?
41
+ def salvar_arquivos_data
42
+ arquivos_data.shift.salvar while arquivos_data.any?
43
43
  end
44
44
 
45
45
  def arquivos_data
46
46
  @arquivos_data ||= dados_dos_arquivos_data.map do |dados_do_arquivo_data|
47
47
  ArquivoData.new(
48
48
  diretorio: empresa.destino_dos_arquivos_data,
49
+ operacao: dados_do_arquivo_data.operacao,
49
50
  nome: dados_do_arquivo_data.nome,
50
51
  itens_do_conteudo: dados_do_arquivo_data.itens_do_conteudo
51
52
  )
@@ -8,7 +8,7 @@ module Teodoro
8
8
 
9
9
  attr_reader :empresa, :destino
10
10
 
11
- def gerar # rubocop:disable Metrics/MethodLength
11
+ def salvar # rubocop:disable Metrics/MethodLength
12
12
  ArquivoData.new(
13
13
  diretorio: destino,
14
14
  nome: 'DADOS_GERAIS',
@@ -26,7 +26,7 @@ module Teodoro
26
26
  { manter_se_vazio: true }
27
27
  ]
28
28
  ]
29
- ).criar
29
+ ).salvar
30
30
  end
31
31
 
32
32
  private
@@ -48,13 +48,13 @@ module Teodoro
48
48
  end
49
49
 
50
50
  def processar
51
- criar_arquivo_data
51
+ salvar_arquivo_data
52
52
  end
53
53
 
54
54
  private
55
55
 
56
- def criar_arquivo_data
57
- arquivo_data.criar
56
+ def salvar_arquivo_data
57
+ arquivo_data.salvar
58
58
  end
59
59
 
60
60
  def arquivo_data # rubocop:disable Metrics/MethodLength
@@ -11,10 +11,6 @@ module Teodoro
11
11
 
12
12
  public
13
13
 
14
- def to_a
15
- contratos
16
- end
17
-
18
14
  def registrar_admissao(admissao:, inicio_de_afastamento:)
19
15
  contratos_por_matricula[admissao.matricula_do_trabalhador] =
20
16
  Contrato.new(admissao: admissao, inicio_de_afastamento: inicio_de_afastamento)
@@ -11,10 +11,6 @@ module Teodoro
11
11
 
12
12
  public
13
13
 
14
- def to_a
15
- contratos
16
- end
17
-
18
14
  def registrar_inicio_de_contrato(inicio_de_contrato:, inicio_de_afastamento:)
19
15
  contratos << Contrato.new(inicio_de_contrato: inicio_de_contrato, inicio_de_afastamento: inicio_de_afastamento)
20
16
  trabalhadores << inicio_de_contrato.trabalhador
@@ -48,13 +48,13 @@ module Teodoro
48
48
  end
49
49
 
50
50
  def processar
51
- criar_arquivo_data
51
+ salvar_arquivo_data
52
52
  end
53
53
 
54
54
  private
55
55
 
56
- def criar_arquivo_data
57
- arquivo_data.criar
56
+ def salvar_arquivo_data
57
+ arquivo_data.salvar
58
58
  end
59
59
 
60
60
  def arquivo_data # rubocop:disable Metrics/MethodLength
@@ -51,7 +51,7 @@ module Teodoro
51
51
  classificar_arquivos_xml
52
52
  ordenar_arquivos_xml
53
53
  processar_arquivos_xml
54
- gerar_arquivo_de_dados_gerais
54
+ salvar_arquivo_de_dados_gerais
55
55
  processar_cargos_gerados
56
56
  processar_funcoes_geradas
57
57
  remover_matricula_do_nome_dos_arquivos_data_de_admissao_de_trabalhador_sem_vinculo
@@ -92,14 +92,7 @@ module Teodoro
92
92
  end
93
93
 
94
94
  def inicios_de_afastamento_por_numero_do_recibo
95
- contratos_de_trabalho
96
- .sum([], &:inicios_de_afastamento)
97
- .group_by(&:numero_do_recibo)
98
- .transform_values { _1.size == 1 ? _1.first : raise }
99
- end
100
-
101
- def contratos_de_trabalho
102
- [*contratos_de_emprego, *contratos_de_trabalho_sem_vinculo]
95
+ @inicios_de_afastamento_por_numero_do_recibo ||= {}
103
96
  end
104
97
 
105
98
  private
@@ -178,8 +171,8 @@ module Teodoro
178
171
  arquivos_xml.shift.processar while arquivos_xml.any?
179
172
  end
180
173
 
181
- def gerar_arquivo_de_dados_gerais
182
- arquivo_de_dados_gerais.gerar
174
+ def salvar_arquivo_de_dados_gerais
175
+ arquivo_de_dados_gerais.salvar
183
176
  end
184
177
 
185
178
  def arquivo_de_dados_gerais
@@ -5,7 +5,7 @@ module Teodoro
5
5
 
6
6
  private
7
7
 
8
- def criar_arquivo_data
8
+ def salvar_arquivo_data
9
9
  super
10
10
 
11
11
  registrar_inicio_da_validade
@@ -8,6 +8,7 @@ module Teodoro
8
8
  def dados_dos_arquivos_data # rubocop:disable Metrics/MethodLength
9
9
  [
10
10
  Obj.new(
11
+ operacao: :inclusao,
11
12
  nome: "PRE[#{cpf_do_trabalhador}]",
12
13
  itens_do_conteudo: [
13
14
  ['NrRecibo', recibo['recibo/nrRecibo']],