pd1_tools 0.43.0

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.
Files changed (222) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +12 -0
  3. data/exe/pd1 +8 -0
  4. data/lib/avmtrf1/active_directory/user.rb +28 -0
  5. data/lib/avmtrf1/active_directory.rb +8 -0
  6. data/lib/avmtrf1/ad_user.rb +11 -0
  7. data/lib/avmtrf1/check_point/session/login.rb +57 -0
  8. data/lib/avmtrf1/check_point/session.rb +60 -0
  9. data/lib/avmtrf1/check_point.rb +3 -0
  10. data/lib/avmtrf1/default_esosti.rb +20 -0
  11. data/lib/avmtrf1/default_jira.rb +18 -0
  12. data/lib/avmtrf1/default_redmine.rb +16 -0
  13. data/lib/avmtrf1/docker/image.rb +49 -0
  14. data/lib/avmtrf1/docker/image_runner.rb +83 -0
  15. data/lib/avmtrf1/docker.rb +9 -0
  16. data/lib/avmtrf1/esosti/entities/issue.rb +24 -0
  17. data/lib/avmtrf1/esosti/entities.rb +9 -0
  18. data/lib/avmtrf1/esosti/instance/changed.rb +33 -0
  19. data/lib/avmtrf1/esosti/instance.rb +22 -0
  20. data/lib/avmtrf1/esosti/raw_data_sanitizer.rb +47 -0
  21. data/lib/avmtrf1/esosti/session/action_base.rb +34 -0
  22. data/lib/avmtrf1/esosti/session/atividades.rb +35 -0
  23. data/lib/avmtrf1/esosti/session/login.rb +47 -0
  24. data/lib/avmtrf1/esosti/session/solicitacao/main.rb +49 -0
  25. data/lib/avmtrf1/esosti/session/solicitacao.rb +81 -0
  26. data/lib/avmtrf1/esosti/session.rb +36 -0
  27. data/lib/avmtrf1/esosti.rb +8 -0
  28. data/lib/avmtrf1/executables.rb +23 -0
  29. data/lib/avmtrf1/forponto/parsers/day_registers.rb +19 -0
  30. data/lib/avmtrf1/forponto/parsers/espelho/day_node.rb +50 -0
  31. data/lib/avmtrf1/forponto/parsers/espelho/methods_as_fields.rb +21 -0
  32. data/lib/avmtrf1/forponto/parsers/espelho/row_node.rb +34 -0
  33. data/lib/avmtrf1/forponto/parsers/espelho/rows_consumer.rb +71 -0
  34. data/lib/avmtrf1/forponto/parsers/espelho/sub_node.rb +20 -0
  35. data/lib/avmtrf1/forponto/parsers/espelho/summary_node.rb +55 -0
  36. data/lib/avmtrf1/forponto/parsers/espelho/utils.rb +32 -0
  37. data/lib/avmtrf1/forponto/parsers/espelho.rb +26 -0
  38. data/lib/avmtrf1/forponto/session/day_registers.rb +39 -0
  39. data/lib/avmtrf1/forponto/session/interval.rb +27 -0
  40. data/lib/avmtrf1/forponto/session/login.rb +45 -0
  41. data/lib/avmtrf1/forponto/session.rb +32 -0
  42. data/lib/avmtrf1/forponto/user/balance.rb +155 -0
  43. data/lib/avmtrf1/forponto/user/day_registers.rb +32 -0
  44. data/lib/avmtrf1/forponto/user/month.rb +141 -0
  45. data/lib/avmtrf1/forponto/user.rb +22 -0
  46. data/lib/avmtrf1/git/cached_repository.rb +27 -0
  47. data/lib/avmtrf1/git/gitlab.rb +11 -0
  48. data/lib/avmtrf1/git/issue_on_repository.rb +100 -0
  49. data/lib/avmtrf1/git/push_large/_utils.rb +16 -0
  50. data/lib/avmtrf1/git/push_large/lfs_commit/cache.rb +21 -0
  51. data/lib/avmtrf1/git/push_large/lfs_commit/checkout_previous_revision.rb +35 -0
  52. data/lib/avmtrf1/git/push_large/lfs_commit/commit_changes.rb +48 -0
  53. data/lib/avmtrf1/git/push_large/lfs_commit/helpers.rb +29 -0
  54. data/lib/avmtrf1/git/push_large/lfs_commit/pick_source_revision.rb +103 -0
  55. data/lib/avmtrf1/git/push_large/lfs_commit/push.rb +90 -0
  56. data/lib/avmtrf1/git/push_large/lfs_commit/track_large_files.rb +53 -0
  57. data/lib/avmtrf1/git/push_large/lfs_commit.rb +47 -0
  58. data/lib/avmtrf1/git/push_large/source_commit/push.rb +42 -0
  59. data/lib/avmtrf1/git/push_large/source_commit.rb +58 -0
  60. data/lib/avmtrf1/git/push_large.rb +69 -0
  61. data/lib/avmtrf1/git/reference.rb +34 -0
  62. data/lib/avmtrf1/git.rb +10 -0
  63. data/lib/avmtrf1/gitlab/commit.rb +37 -0
  64. data/lib/avmtrf1/gitlab/repository.rb +41 -0
  65. data/lib/avmtrf1/ini/profile.rb +42 -0
  66. data/lib/avmtrf1/ini.rb +55 -0
  67. data/lib/avmtrf1/inventario_sistemas/parser/body.rb +27 -0
  68. data/lib/avmtrf1/inventario_sistemas/parser/body_row.rb +12 -0
  69. data/lib/avmtrf1/inventario_sistemas/parser/header.rb +38 -0
  70. data/lib/avmtrf1/inventario_sistemas/parser/header_column.rb +27 -0
  71. data/lib/avmtrf1/inventario_sistemas/parser.rb +40 -0
  72. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/elements.rb +54 -0
  73. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/layout.rb +55 -0
  74. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/stylesheet.css +57 -0
  75. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base.rb +41 -0
  76. data/lib/avmtrf1/inventario_sistemas/site_build/index.rb +20 -0
  77. data/lib/avmtrf1/inventario_sistemas/site_build/sistema.rb +62 -0
  78. data/lib/avmtrf1/inventario_sistemas/site_build/sistemas_index.rb +31 -0
  79. data/lib/avmtrf1/inventario_sistemas/site_build.rb +71 -0
  80. data/lib/avmtrf1/inventario_sistemas.rb +38 -0
  81. data/lib/avmtrf1/issues/factory.rb +22 -0
  82. data/lib/avmtrf1/issues.rb +7 -0
  83. data/lib/avmtrf1/jira/entities/issue.rb +30 -0
  84. data/lib/avmtrf1/jira/entities.rb +9 -0
  85. data/lib/avmtrf1/jira/instance.rb +28 -0
  86. data/lib/avmtrf1/jira.rb +8 -0
  87. data/lib/avmtrf1/node_js/docker_image.rb +14 -0
  88. data/lib/avmtrf1/node_js.rb +9 -0
  89. data/lib/avmtrf1/openvpn/config/builder.rb +59 -0
  90. data/lib/avmtrf1/openvpn/config/parser/builder.rb +62 -0
  91. data/lib/avmtrf1/openvpn/config/parser/line.rb +47 -0
  92. data/lib/avmtrf1/openvpn/config/parser/simple.rb +27 -0
  93. data/lib/avmtrf1/openvpn/config/parser/tag.rb +39 -0
  94. data/lib/avmtrf1/openvpn/config/parser.rb +20 -0
  95. data/lib/avmtrf1/oracle/connection/base.rb +66 -0
  96. data/lib/avmtrf1/oracle/connection/string_builder.rb +44 -0
  97. data/lib/avmtrf1/oracle/connection.rb +12 -0
  98. data/lib/avmtrf1/oracle/object/base.rb +39 -0
  99. data/lib/avmtrf1/oracle/object/table.rb +15 -0
  100. data/lib/avmtrf1/oracle/object/user.rb +15 -0
  101. data/lib/avmtrf1/oracle/object/view.rb +15 -0
  102. data/lib/avmtrf1/oracle/object.rb +25 -0
  103. data/lib/avmtrf1/oracle/objects/relation.rb +23 -0
  104. data/lib/avmtrf1/oracle/objects/sql_builder.rb +64 -0
  105. data/lib/avmtrf1/oracle/objects.rb +53 -0
  106. data/lib/avmtrf1/oracle/oci8.rb +29 -0
  107. data/lib/avmtrf1/oracle.rb +10 -0
  108. data/lib/avmtrf1/patches/avm/git/issue/complete.rb +50 -0
  109. data/lib/avmtrf1/patches/avm/git/issue.rb +4 -0
  110. data/lib/avmtrf1/patches/avm/git/launcher/base.rb +46 -0
  111. data/lib/avmtrf1/patches/avm/git/launcher.rb +4 -0
  112. data/lib/avmtrf1/patches/avm/git.rb +4 -0
  113. data/lib/avmtrf1/patches/avm.rb +4 -0
  114. data/lib/avmtrf1/patches/inifile.rb +13 -0
  115. data/lib/avmtrf1/patches.rb +4 -0
  116. data/lib/avmtrf1/php/docker_images/base.rb +49 -0
  117. data/lib/avmtrf1/php/docker_images/factory.rb +37 -0
  118. data/lib/avmtrf1/php/docker_images/v5.rb +47 -0
  119. data/lib/avmtrf1/php/docker_images/v7.rb +27 -0
  120. data/lib/avmtrf1/php/docker_images/v7_v4.rb +30 -0
  121. data/lib/avmtrf1/php/docker_images/v8.rb +19 -0
  122. data/lib/avmtrf1/php/docker_images.rb +11 -0
  123. data/lib/avmtrf1/php.rb +9 -0
  124. data/lib/avmtrf1/red/client/authorization.xml.erb +4 -0
  125. data/lib/avmtrf1/red/client.rb +38 -0
  126. data/lib/avmtrf1/red/helper.rb +35 -0
  127. data/lib/avmtrf1/red/profile/put_file.xml.erb +19 -0
  128. data/lib/avmtrf1/red/profile.rb +58 -0
  129. data/lib/avmtrf1/red/server.rb +33 -0
  130. data/lib/avmtrf1/red.rb +5 -0
  131. data/lib/avmtrf1/redmine/entities/issue.rb +29 -0
  132. data/lib/avmtrf1/redmine/entities/issue_status.rb +23 -0
  133. data/lib/avmtrf1/redmine/entities.rb +10 -0
  134. data/lib/avmtrf1/redmine/instance.rb +41 -0
  135. data/lib/avmtrf1/redmine.rb +7 -0
  136. data/lib/avmtrf1/rest_provider/entity.rb +18 -0
  137. data/lib/avmtrf1/rest_provider/instance/issues.rb +30 -0
  138. data/lib/avmtrf1/rest_provider/instance.rb +30 -0
  139. data/lib/avmtrf1/rest_provider/request.rb +44 -0
  140. data/lib/avmtrf1/rest_provider/response.rb +73 -0
  141. data/lib/avmtrf1/rest_provider.rb +7 -0
  142. data/lib/avmtrf1/result.rb +44 -0
  143. data/lib/avmtrf1/ruby.rb +9 -0
  144. data/lib/avmtrf1/tools/application.rb +13 -0
  145. data/lib/avmtrf1/tools/core_ext.rb +4 -0
  146. data/lib/avmtrf1/tools/msgraph/api/entity.rb +35 -0
  147. data/lib/avmtrf1/tools/msgraph/api/member.rb +31 -0
  148. data/lib/avmtrf1/tools/msgraph/api/root.rb +27 -0
  149. data/lib/avmtrf1/tools/msgraph/api/team/member_add.rb +36 -0
  150. data/lib/avmtrf1/tools/msgraph/api/team.rb +40 -0
  151. data/lib/avmtrf1/tools/msgraph/api.rb +55 -0
  152. data/lib/avmtrf1/tools/msgraph/error.rb +31 -0
  153. data/lib/avmtrf1/tools/msgraph/request_mixin.rb +18 -0
  154. data/lib/avmtrf1/tools/msgraph/response_mixin.rb +23 -0
  155. data/lib/avmtrf1/tools/msgraph/token_retrieve.rb +42 -0
  156. data/lib/avmtrf1/tools/msgraph.rb +11 -0
  157. data/lib/avmtrf1/tools/rubygems/dependency.rb +20 -0
  158. data/lib/avmtrf1/tools/rubygems/not_found_error.rb +17 -0
  159. data/lib/avmtrf1/tools/rubygems.rb +11 -0
  160. data/lib/avmtrf1/tools/runner/check_point/login.rb +33 -0
  161. data/lib/avmtrf1/tools/runner/check_point.rb +17 -0
  162. data/lib/avmtrf1/tools/runner/esosti/changed.rb +39 -0
  163. data/lib/avmtrf1/tools/runner/esosti/fetch.rb +39 -0
  164. data/lib/avmtrf1/tools/runner/esosti/request.rb +76 -0
  165. data/lib/avmtrf1/tools/runner/esosti.rb +27 -0
  166. data/lib/avmtrf1/tools/runner/forponto/espelho.rb +47 -0
  167. data/lib/avmtrf1/tools/runner/forponto/marcacoes.rb +32 -0
  168. data/lib/avmtrf1/tools/runner/forponto/resumos.rb +87 -0
  169. data/lib/avmtrf1/tools/runner/forponto/saldo.rb +91 -0
  170. data/lib/avmtrf1/tools/runner/forponto.rb +70 -0
  171. data/lib/avmtrf1/tools/runner/git/gitlab/commit_link.rb +81 -0
  172. data/lib/avmtrf1/tools/runner/git/gitlab.rb +20 -0
  173. data/lib/avmtrf1/tools/runner/git/issues_check.rb +59 -0
  174. data/lib/avmtrf1/tools/runner/git/push_large.rb +46 -0
  175. data/lib/avmtrf1/tools/runner/git.rb +14 -0
  176. data/lib/avmtrf1/tools/runner/inventario_sistemas.rb +71 -0
  177. data/lib/avmtrf1/tools/runner/msgraph/joined_teams.rb +39 -0
  178. data/lib/avmtrf1/tools/runner/msgraph/request.rb +45 -0
  179. data/lib/avmtrf1/tools/runner/msgraph/team/member/add.rb +48 -0
  180. data/lib/avmtrf1/tools/runner/msgraph/team/member.rb +25 -0
  181. data/lib/avmtrf1/tools/runner/msgraph/team/members.rb +38 -0
  182. data/lib/avmtrf1/tools/runner/msgraph/team.rb +27 -0
  183. data/lib/avmtrf1/tools/runner/msgraph/token.rb +31 -0
  184. data/lib/avmtrf1/tools/runner/msgraph.rb +43 -0
  185. data/lib/avmtrf1/tools/runner/node_js/docker.rb +15 -0
  186. data/lib/avmtrf1/tools/runner/node_js.rb +18 -0
  187. data/lib/avmtrf1/tools/runner/openvpn.rb +91 -0
  188. data/lib/avmtrf1/tools/runner/oracle/query.rb +71 -0
  189. data/lib/avmtrf1/tools/runner/oracle/source_get.rb +51 -0
  190. data/lib/avmtrf1/tools/runner/oracle/user_clear.rb +59 -0
  191. data/lib/avmtrf1/tools/runner/oracle.rb +37 -0
  192. data/lib/avmtrf1/tools/runner/php/docker.rb +20 -0
  193. data/lib/avmtrf1/tools/runner/php.rb +18 -0
  194. data/lib/avmtrf1/tools/runner/red.rb +83 -0
  195. data/lib/avmtrf1/tools/runner/source.rb +14 -0
  196. data/lib/avmtrf1/tools/runner.rb +43 -0
  197. data/lib/avmtrf1/tools.rb +4 -0
  198. data/lib/pd1_tools/version.rb +5 -0
  199. data/lib/pd1_tools.rb +7 -0
  200. data/template/avmtrf1/node_js/docker_image/Dockerfile.template +25 -0
  201. data/template/avmtrf1/node_js/docker_image/auxiliary/config_banner.sh +15 -0
  202. data/template/avmtrf1/node_js/docker_image/auxiliary/init.sh +18 -0
  203. data/template/avmtrf1/node_js/docker_image/auxiliary/lib.sh +30 -0
  204. data/template/avmtrf1/node_js/docker_image/auxiliary/ng_serve.sh +16 -0
  205. data/template/avmtrf1/node_js/docker_image/auxiliary/npm_install.sh +21 -0
  206. data/template/avmtrf1/node_js/docker_image/auxiliary/start.sh +17 -0
  207. data/template/avmtrf1/php/docker_images/base/Dockerfile.template +104 -0
  208. data/template/avmtrf1/php/docker_images/base/aux/apache_foreground.sh +16 -0
  209. data/template/avmtrf1/php/docker_images/base/aux/apache_user.sh +54 -0
  210. data/template/avmtrf1/php/docker_images/base/aux/app_user_run.sh +17 -0
  211. data/template/avmtrf1/php/docker_images/base/aux/config_banner.sh +20 -0
  212. data/template/avmtrf1/php/docker_images/base/aux/init.sh +39 -0
  213. data/template/avmtrf1/php/docker_images/base/aux/laravel.sh +58 -0
  214. data/template/avmtrf1/php/docker_images/base/aux/lib.sh +70 -0
  215. data/template/avmtrf1/php/docker_images/base/aux/pear.sh +35 -0
  216. data/template/avmtrf1/php/docker_images/base/aux/php_composer.sh +31 -0
  217. data/template/avmtrf1/php/docker_images/base/aux/php_values.sh +41 -0
  218. data/template/avmtrf1/php/docker_images/base/aux/setup_apache_site.sh +16 -0
  219. data/template/avmtrf1/php/docker_images/base/aux/start.sh +26 -0
  220. data/template/avmtrf1/php/docker_images/base/aux/templates/apache_site.conf +12 -0
  221. data/template/avmtrf1/tools/msgraph/token_retrieve/python_retriever.py +85 -0
  222. metadata +460 -0
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avmtrf1
6
+ module Tools
7
+ module Msgraph
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avmtrf1/tools/rubygems/not_found_error'
5
+
6
+ module Avmtrf1
7
+ module Tools
8
+ module Rubygems
9
+ class Dependency
10
+ common_constructor :gem_name, :lib_name
11
+
12
+ def require_lib
13
+ require lib_name
14
+ rescue LoadError
15
+ raise ::Avmtrf1::Tools::Rubygems::NotFoundError, self
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avmtrf1
4
+ module Tools
5
+ module Rubygems
6
+ class NotFoundError < ::StandardError
7
+ attr_reader :dependency
8
+
9
+ def initialize(dependency)
10
+ @dependency = dependency
11
+ super("Gem \"#{dependency.gem_name}\" not found " \
12
+ "(Library required: \"#{dependency.lib_name}\")")
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avmtrf1
6
+ module Tools
7
+ module Rubygems
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/check_point/session'
4
+ require 'avmtrf1/tools/core_ext'
5
+
6
+ module Avmtrf1
7
+ module Tools
8
+ class Runner
9
+ class CheckPoint
10
+ class Login
11
+ runner_with :help do
12
+ desc 'Login no CheckPoint (https://cp.trf1.jus.br).'
13
+ end
14
+
15
+ def run
16
+ infov 'Username', session.username
17
+ logged = session.logged?
18
+ infov 'Logged', logged
19
+ return if logged
20
+
21
+ infom 'Trying login...'
22
+ session.login
23
+ infov 'Logged after login?', session.logged?
24
+ end
25
+
26
+ def session_uncached
27
+ ::Avmtrf1::CheckPoint::Session.by_default_ad_user
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/core_ext'
4
+
5
+ module Avmtrf1
6
+ module Tools
7
+ class Runner
8
+ class CheckPoint
9
+ require_sub __FILE__
10
+ runner_with :help, :subcommands do
11
+ desc 'Utilidades para Check Point (https://cp.trf1.jus.br).'
12
+ subcommands
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/core_ext'
4
+
5
+ module Avmtrf1
6
+ module Tools
7
+ class Runner
8
+ class Esosti
9
+ class Changed
10
+ runner_with :help do
11
+ desc 'Recupera o conteúdo de uma solicitação e-Sosti (Control Desk).'
12
+ pos_arg :time
13
+ end
14
+
15
+ def run
16
+ infov 'Time', time
17
+ infov 'URL', request.url
18
+ out data.to_yaml
19
+ end
20
+
21
+ private
22
+
23
+ def data_uncached
24
+ infom 'Recuperando informações...'
25
+ request.response.body_data_or_raise
26
+ end
27
+
28
+ def request_uncached
29
+ runner_context.call(:esosti_instance).changed_request(time)
30
+ end
31
+
32
+ def time
33
+ ::Time.parse(parsed.time)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/core_ext'
4
+
5
+ module Avmtrf1
6
+ module Tools
7
+ class Runner
8
+ class Esosti
9
+ class Fetch
10
+ runner_with :help do
11
+ desc 'Recupera o conteúdo de uma solicitação e-Sosti (Control Desk).'
12
+ pos_arg :solicitacao_id
13
+ end
14
+
15
+ def run
16
+ infov 'URL', request.url
17
+ fatal_error("Issue não encontrado: #{solicitacao_id}") unless issue
18
+ out issue.data.to_yaml
19
+ end
20
+
21
+ private
22
+
23
+ def request_uncached
24
+ runner_context.call(:esosti_instance).issue_request(solicitacao_id)
25
+ end
26
+
27
+ def issue_uncached
28
+ infom "Recuperando informações de #{solicitacao_id}..."
29
+ request.response.body_data_or_raise
30
+ end
31
+
32
+ def solicitacao_id
33
+ parsed.solicitacao_id
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/core_ext'
4
+ require 'yaml'
5
+
6
+ module Avmtrf1
7
+ module Tools
8
+ class Runner
9
+ class Esosti
10
+ class Request
11
+ runner_with :help do
12
+ desc 'Requisições genéricas para e-Sosti (Control Desk).'
13
+ bool_opt '-d', '--default', 'Opções --json e --yaml.'
14
+ bool_opt '-j', '--json', 'Solicita resposta em JSON.'
15
+ bool_opt '-x', '--xml', 'Solicita resposta em XML.'
16
+ bool_opt '-y', '--yaml', 'Imprime saída em YAML.'
17
+ pos_arg :url_suffix
18
+ end
19
+
20
+ def run
21
+ start_banner
22
+ output_data
23
+ end
24
+
25
+ private
26
+
27
+ def json?
28
+ parsed.json? || parsed.default?
29
+ end
30
+
31
+ def start_banner
32
+ infov 'URL', request.url
33
+ infom 'Recuperando informações...'
34
+ infov 'Response status', response.status
35
+ end
36
+
37
+ def output_data
38
+ if yaml?
39
+ out ::YAML.dump(response.body_data)
40
+ else
41
+ out response.body_str
42
+ end
43
+ end
44
+
45
+ def request_uncached
46
+ runner_context.call(:esosti_instance).request(url_suffix, request_headers)
47
+ end
48
+
49
+ def request_headers
50
+ r = {}
51
+ %w[json xml].each do |format|
52
+ r['Accept'] = "application/#{format}" if send("#{format}?")
53
+ end
54
+ r
55
+ end
56
+
57
+ def response_uncached
58
+ request.response
59
+ end
60
+
61
+ def url_suffix
62
+ parsed.url_suffix
63
+ end
64
+
65
+ def xml?
66
+ parsed.xml?
67
+ end
68
+
69
+ def yaml?
70
+ parsed.yaml? || parsed.default?
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/core_ext'
4
+ require 'avmtrf1/default_esosti'
5
+
6
+ module Avmtrf1
7
+ module Tools
8
+ class Runner
9
+ class Esosti
10
+ require_sub __FILE__
11
+ runner_with :help, :subcommands do
12
+ desc 'Utilidades para e-Sosti (Control Desk).'
13
+ arg_opt '-U', '--url', 'Utiliza o Control Desk em <url>.'
14
+ subcommands
15
+ end
16
+
17
+ private
18
+
19
+ def esosti_instance_uncached
20
+ parsed.url.if_present(::Avmtrf1.default_esosti) do |url|
21
+ ::Avmtrf1.trf1_esosti(url)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/core_ext'
4
+
5
+ module Avmtrf1
6
+ module Tools
7
+ class Runner
8
+ class Forponto
9
+ class Espelho
10
+ runner_with :help do
11
+ desc 'Recupera e trata dados do Forponto.'
12
+ pos_arg :year
13
+ pos_arg :month
14
+ end
15
+
16
+ def run
17
+ infov 'Start date', user_month.start_date
18
+ infov 'End date', user_month.end_date
19
+ out(fetched_data.to_yaml)
20
+ end
21
+
22
+ private
23
+
24
+ def fetched_data
25
+ user_month.data
26
+ end
27
+
28
+ def user_month_uncached
29
+ runner_context.call(:user).month(year, month)
30
+ end
31
+
32
+ def year
33
+ parsed.year.to_i
34
+ end
35
+
36
+ def month
37
+ parsed.month.to_i
38
+ end
39
+
40
+ def date(day)
41
+ ::Date.civil(year, month, day)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/forponto/user/day_registers'
4
+ require 'avmtrf1/tools/core_ext'
5
+
6
+ module Avmtrf1
7
+ module Tools
8
+ class Runner
9
+ class Forponto
10
+ class Marcacoes
11
+ runner_with :help do
12
+ desc 'Mostra marcações Forponto do dia.'
13
+ end
14
+
15
+ def run
16
+ infov 'Date', day_registers.date
17
+ infov 'Times', day_registers.times.count
18
+ day_registers.times.each_with_index do |time, index|
19
+ infov " * #{index + 1}º", time
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def day_registers_uncached
26
+ ::Avmtrf1::Forponto::User::DayRegisters.new(runner_context.call(:user))
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/core_ext'
4
+
5
+ module Avmtrf1
6
+ module Tools
7
+ class Runner
8
+ class Forponto
9
+ class Resumos
10
+ runner_with :help do
11
+ desc 'Mostra os resumos.'
12
+ end
13
+
14
+ def run
15
+ sorted_months.each do |month|
16
+ show_month(month)
17
+ end
18
+ end
19
+
20
+ def head_month
21
+ today = ::Date.today # rubocop:disable Rails/Date
22
+ date = ::Date.civil(today.year, today.month, 1)
23
+ runner_context.call(:user).month(date.year, date.month)
24
+ end
25
+
26
+ def show_month(month)
27
+ infov 'Month', month
28
+ show_self_summaries(month)
29
+ end
30
+
31
+ def show_self_summaries(month)
32
+ infov ' * Self summaries', month.os_data.summaries.count
33
+ show_month_summaries(month)
34
+ show_month_self_summaries(month)
35
+ show_month_acum_summaries(month)
36
+ end
37
+
38
+ def show_month_summaries(month)
39
+ month.os_data.summaries.each do |s|
40
+ infov ' * ' + summary_to_label(s), summary_to_value(s) # rubocop:disable Style/StringConcatenation
41
+ end
42
+ end
43
+
44
+ def show_month_self_summaries(month)
45
+ infov ' * Débito', minutes_to_s(month.debito)
46
+ infov ' * Crédito', minutes_to_s(month.credito)
47
+ infov ' * Saldo', minutes_to_s(month.saldo)
48
+ end
49
+
50
+ def show_month_acum_summaries(month)
51
+ infov ' * Débito acum.', minutes_to_s(month.debito_acum)
52
+ infov ' * Crédito acum.', minutes_to_s(month.credito_acum)
53
+ infov ' * Saldo acum.', minutes_to_s(month.saldo_acum)
54
+ end
55
+
56
+ def summary_to_label(summary)
57
+ "#{summary.code} - #{summary.description}"
58
+ end
59
+
60
+ def summary_to_value(summary)
61
+ minutes_to_s(summary.minutes)
62
+ end
63
+
64
+ def minutes_to_s(minutes)
65
+ signal = ''
66
+ if minutes.negative?
67
+ signal = '-'
68
+ minutes = -minutes
69
+ end
70
+ time = [minutes / 60, minutes % 60].map { |x| x.to_s.rjust(2, '0') }.join(':')
71
+ "#{signal}#{time} / #{signal}#{minutes} minutes"
72
+ end
73
+
74
+ def sorted_months_uncached
75
+ r = []
76
+ current = head_month
77
+ while current.present?
78
+ r << current
79
+ current = current.parent_month
80
+ end
81
+ r.reverse
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/core_ext'
4
+ require 'avmtrf1/forponto/user/balance'
5
+
6
+ module Avmtrf1
7
+ module Tools
8
+ class Runner
9
+ class Forponto
10
+ class Saldo
11
+ runner_with :help do
12
+ desc 'Calcula saldo de horas atual.'
13
+ bool_opt '-d', '--details', 'Show details.'
14
+ end
15
+
16
+ def run
17
+ balance.months_balances.each do |mb|
18
+ show_balance_month(mb)
19
+ end
20
+ end_banner
21
+ end
22
+
23
+ def end_banner
24
+ infov 'Crédito final', minutes_to_s(balance.credito_left)
25
+ infov 'Débito final', minutes_to_s(balance.debito_left)
26
+ infov 'Saldo final', minutes_to_s(balance.saldo_left)
27
+ end
28
+
29
+ def show_balance_month(balance_month)
30
+ infov 'Month', balance_month.month
31
+ show_month_attr_balance(balance_month.credito, 'Crédito')
32
+ show_month_attr_balance(balance_month.debito, 'Débito')
33
+ infov ' * After trigger', minutes_to_s(balance_month.after_trigger)
34
+ infov ' * After trigger acum.', minutes_to_s(balance_month.after_trigger_acum)
35
+ end
36
+
37
+ def show_month_attr_balance(mba, label)
38
+ infov " * #{label}", minutes_to_s(mba.initial_value)
39
+ return unless parsed.details?
40
+
41
+ show_month_withdrawals(mba)
42
+ show_month_requests(mba)
43
+ show_month_end_resume(mba)
44
+ end
45
+
46
+ def show_month_withdrawals(mba)
47
+ infov ' * Withdrawals', mba.withdrawals.count
48
+ mba.withdrawals.each do |w|
49
+ infov " * #{w.month.month}", minutes_to_s(w.value)
50
+ end
51
+ end
52
+
53
+ def show_month_requests(mba)
54
+ infov ' * Requests', mba.requests.count
55
+ mba.requests.each do |r|
56
+ infov " * #{r.month.month}", minutes_to_s(r.value)
57
+ end
58
+ end
59
+
60
+ def show_month_end_resume(mba)
61
+ infov ' * Left', minutes_to_s(mba.left) + ' ' + left_status(mba) # rubocop:disable Style/StringConcatenation
62
+ infov ' * After trigger', minutes_to_s(mba.after_trigger)
63
+ infov ' * After trigger acum.', minutes_to_s(mba.after_trigger_acum)
64
+ end
65
+
66
+ def left_status(mba)
67
+ if mba.left.positive? && mba.owner_month.lost
68
+ '[LOST]'.red
69
+ else
70
+ '[OK]'
71
+ end
72
+ end
73
+
74
+ def minutes_to_s(minutes)
75
+ signal = ''
76
+ if minutes.negative?
77
+ signal = '-'
78
+ minutes = -minutes
79
+ end
80
+ time = [minutes / 60, minutes % 60].map { |x| x.to_s.rjust(2, '0') }.join(':')
81
+ "#{signal}#{time} / #{signal}#{minutes} minutes"
82
+ end
83
+
84
+ def balance_uncached
85
+ ::Avmtrf1::Forponto::User::Balance.new(runner_context.call(:user))
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_config/node'
4
+ require 'avmtrf1/tools/core_ext'
5
+ require 'avmtrf1/forponto/user'
6
+
7
+ module Avmtrf1
8
+ module Tools
9
+ class Runner
10
+ class Forponto
11
+ require_sub __FILE__
12
+
13
+ DEFAULT_VALUES = {
14
+ url: 'http://pontoeletronico.trf1.jus.br/forponto/fptoweb.exe'
15
+ }.freeze
16
+
17
+ runner_with :help, :subcommands do
18
+ desc 'Operações para Forponto.'
19
+ arg_opt '-u', '--url', 'URL inicial.'
20
+ arg_opt '-m', '--matricula', 'Matrícula.'
21
+ arg_opt '-c', '--codigo', 'Código.'
22
+ subcommands
23
+ end
24
+
25
+ def run
26
+ start_banner
27
+ run_with_subcommand
28
+ end
29
+
30
+ def start_banner
31
+ infov 'URL', user.url
32
+ infov 'Matrícula', user.matricula
33
+ end
34
+
35
+ def attr_value(name, read_options = {})
36
+ value_by_option(name) || value_by_default(name) || value_by_entry(name, read_options)
37
+ end
38
+
39
+ def value_by_option(name)
40
+ parsed.fetch(name)
41
+ end
42
+
43
+ def value_by_default(name)
44
+ DEFAULT_VALUES[name.to_sym]
45
+ end
46
+
47
+ def value_by_entry(name, read_options)
48
+ ::EacConfig::Node.context.current.entry("trf1.forponto.#{name}", read_options)
49
+ .send(read_options[:noecho] ? :secret_value : :value)
50
+ end
51
+
52
+ def user_uncached
53
+ ::Avmtrf1::Forponto::User.new(url, matricula, codigo)
54
+ end
55
+
56
+ def url
57
+ attr_value(__method__)
58
+ end
59
+
60
+ def matricula
61
+ attr_value(__method__)
62
+ end
63
+
64
+ def codigo
65
+ attr_value(__method__, noecho: true)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end