sunat_books 0.0.2 → 0.0.3

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rvmrc +1 -0
  4. data/.travis.yml +2 -5
  5. data/README.mkd +9 -3
  6. data/lib/sunat_books.rb +6 -6
  7. data/lib/sunat_books/common_utils.rb +9 -0
  8. data/lib/sunat_books/csv/base.rb +63 -0
  9. data/lib/sunat_books/csv/option_error.rb +8 -0
  10. data/lib/sunat_books/pdf/base.rb +134 -0
  11. data/lib/sunat_books/pdf/buys.rb +36 -0
  12. data/lib/sunat_books/pdf/count_sum.rb +24 -0
  13. data/lib/{books → sunat_books/pdf}/diary_entries.rb +1 -3
  14. data/lib/{books → sunat_books/pdf}/layouts/buys.yml +0 -0
  15. data/lib/{books → sunat_books/pdf}/layouts/sales.yml +0 -0
  16. data/lib/{books → sunat_books/pdf}/locale.rb +0 -0
  17. data/lib/{books → sunat_books/pdf}/locales/es.yml +0 -0
  18. data/lib/sunat_books/pdf/page.rb +48 -0
  19. data/lib/{books → sunat_books/pdf}/pages_utils.rb +1 -1
  20. data/lib/sunat_books/pdf/sales.rb +35 -0
  21. data/lib/sunat_books/pdf/simplified_diary.rb +94 -0
  22. data/lib/sunat_books/pdf/trading_book.rb +50 -0
  23. data/lib/{books → sunat_books/pdf}/utils.rb +4 -6
  24. data/lib/sunat_books/ple/base.rb +76 -0
  25. data/lib/sunat_books/ple/buys.rb +38 -0
  26. data/lib/{ple_books → sunat_books/ple}/layouts/buys.yml +0 -0
  27. data/lib/{ple_books → sunat_books/ple}/layouts/sales.yml +0 -0
  28. data/lib/sunat_books/ple/sales.rb +22 -0
  29. data/sunat_books.gemspec +2 -2
  30. data/test/{csv_books → csv}/base_test.rb +8 -5
  31. data/test/{books → pdf}/base_test.rb +0 -0
  32. data/test/pdf/buys_test.rb +27 -0
  33. data/test/{books → pdf}/page_test.rb +4 -4
  34. data/test/{books → pdf}/pages_utils_test.rb +32 -2
  35. data/test/pdf/sales_test.rb +15 -0
  36. data/test/{books → pdf}/utils_test.rb +7 -1
  37. data/test/{ple_books_test.rb → ple/base_test.rb} +2 -2
  38. data/test/{ple_books → ple}/buys_test.rb +8 -8
  39. metadata +38 -35
  40. data/Gemfile.lock +0 -83
  41. data/lib/books/base.rb +0 -132
  42. data/lib/books/buys.rb +0 -72
  43. data/lib/books/count_sum.rb +0 -22
  44. data/lib/books/page.rb +0 -44
  45. data/lib/books/sales.rb +0 -73
  46. data/lib/books/simplified_diary.rb +0 -97
  47. data/lib/csv_books/base.rb +0 -67
  48. data/lib/csv_books/option_error.rb +0 -6
  49. data/lib/ple_books/base.rb +0 -75
  50. data/lib/ple_books/buys.rb +0 -36
  51. data/lib/ple_books/sales.rb +0 -20
  52. data/test/books/buys_test.rb +0 -57
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "../helper"
4
- require_relative "../../lib/books/page"
4
+ require "sunat_books/pdf/page"
5
5
 
6
6
  setup do
7
- @page = Books::Page.new(1, 1)
7
+ @page = SunatBooks::Pdf::Page.new(1, 1)
8
8
  end
9
9
 
10
10
  test "#update_data" do
@@ -15,8 +15,8 @@ test "#update_fields should return nil if not source is provided" do
15
15
  end
16
16
 
17
17
  test "#update_fields should handle if undefined method" do
18
- other_page = Books::Page.new(2, 1)
19
- assert_equal @page.update_fields([:foo], other_page), nil
18
+ other_page = SunatBooks::Pdf::Page.new(2, 1)
19
+ @page.update_fields([:foo], other_page)
20
20
 
21
21
  other_page.bi_sum += BigDecimal(10)
22
22
  @page.update_fields([:bi_sum], other_page)
@@ -1,11 +1,41 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "../helper"
4
- require_relative "../../lib/books/pages_utils"
5
- require_relative "../../lib/books/page"
4
+ require "sunat_books/pdf/pages_utils"
5
+ require "sunat_books/pdf/page"
6
6
 
7
7
  include PagesUtils
8
8
 
9
+ test "#page_not_full return a page" do
10
+ pages = []
11
+ setup_pages(pages, 20, 5)
12
+ first = pages.at(1)
13
+ page = page_not_full(first, pages, 20)
14
+ assert_equal page.class, SunatBooks::Pdf::Page
15
+ end
16
+
17
+ test "#page_not_full return last page when length is less than page_max" do
18
+ pages = []
19
+ setup_pages(pages, 20, 5)
20
+ first_page = pages.at(1)
21
+ page = page_not_full(first_page, pages, 5)
22
+ assert_equal page, first_page
23
+ end
24
+
25
+ test "#page_not_full return new page when last page is full" do
26
+ pages = []
27
+ setup_pages(pages, 20, 5)
28
+ first_page = pages.at(1)
29
+ first_page.length += 5
30
+ current_page = pages.at(2)
31
+ page = page_not_full(first_page, pages, 5)
32
+ assert_equal page, current_page
33
+ assert_equal page.page_number, 2
34
+ end
35
+
36
+ test "#row_data prepare data that will be include in table's rows" do
37
+ end
38
+
9
39
  test "#setup_pages generate new pages to fill all elements" do
10
40
  pages = []
11
41
  setup_pages(pages, 20, 10)
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ setup do
6
+ @company = Company.new(ruc: Faker::Number.number(11), name: Faker::Name.name)
7
+ end
8
+
9
+ test "render pdf, have a parseable pdf" do
10
+ tickets = []
11
+ pdf = SunatBooks::Pdf::Sales.new(@company, tickets, 2, 3015)
12
+ page_counter = PDF::Inspector::Page.analyze(pdf.render)
13
+ assert pdf.page_count == 1
14
+ assert page_counter.pages.size == 1
15
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "../helper"
4
- require_relative "../../lib/books/utils"
4
+ require "sunat_books/pdf/utils"
5
5
 
6
6
  include Utils
7
7
 
@@ -32,6 +32,12 @@ test "#add_widths set cell width in options" do
32
32
  assert opt[:cell_style][:width] == 15
33
33
  end
34
34
 
35
+ test "#field_value return a value for a given attribute" do
36
+ ticket = Ticket.new(foo: "bar")
37
+ assert_equal field_value(ticket, "foo"), "bar"
38
+ assert_equal field_value(ticket, "bar"), ""
39
+ end
40
+
35
41
  test "#sum_count" do
36
42
  end
37
43
 
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "helper"
3
+ require_relative "../helper"
4
4
 
5
5
  setup do
6
- @base = PleBooks::Base.new
6
+ @base = SunatBooks::Ple::Base.new
7
7
  end
8
8
 
9
9
  test "book_code" do
@@ -5,7 +5,7 @@ require_relative "../helper"
5
5
  setup do
6
6
  tickets = [{}]
7
7
  ruc = "102392839213"
8
- @ple_buys = PleBooks::Buys.new(ruc, tickets, 10, 2013)
8
+ @ple_buys = SunatBooks::Ple::Buys.new(ruc, tickets, 10, 2013)
9
9
  end
10
10
 
11
11
  test "generate txt file" do
@@ -13,7 +13,7 @@ test "generate txt file" do
13
13
  end
14
14
 
15
15
  test "tickets empty" do
16
- ple_buys = PleBooks::Buys.new("10293827481", {}, 10, 2011)
16
+ ple_buys = SunatBooks::Ple::Buys.new("10293827481", {}, 10, 2011)
17
17
  assert File.exist?(ple_buys.file)
18
18
  end
19
19
 
@@ -24,8 +24,8 @@ scope "custom layout" do
24
24
  tickets = []
25
25
  field_value = SecureRandom.hex(10)
26
26
  tickets << Ticket.new(custom_field: field_value)
27
- ple_buys = PleBooks::Buys.new("10293827481", tickets, 10, 2011,
28
- yml: yml)
27
+ ple_buys = SunatBooks::Ple::Buys.new("10293827481", tickets, 10, 2011,
28
+ yml: yml)
29
29
  file = ple_buys.file
30
30
  assert File.exist?(file)
31
31
 
@@ -36,10 +36,10 @@ scope "custom layout" do
36
36
  test "allow change individual field" do
37
37
  tickets = []
38
38
  tickets << Ticket.new(period: "20151000", operation_day: "20/10/2015")
39
- ple_buys = PleBooks::Buys.new("10293827481", tickets, 10, 2015,
40
- layout: {
41
- operation_date: "operation_day"
42
- })
39
+ ple_buys = SunatBooks::Ple::Buys.new("10293827481", tickets, 10, 2015,
40
+ layout: {
41
+ operation_date: "operation_day"
42
+ })
43
43
  file = ple_buys.file
44
44
  assert File.exist?(file)
45
45
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sunat_books
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - César Carruitero
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-17 00:00:00.000000000 Z
11
+ date: 2017-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prawn
@@ -136,7 +136,7 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '1.7'
139
- description: SUNAT books
139
+ description: A ruby gem to get accounting books for SUNAT
140
140
  email:
141
141
  - cesar@mozilla.pe
142
142
  executables: []
@@ -145,47 +145,50 @@ extra_rdoc_files: []
145
145
  files:
146
146
  - ".gitignore"
147
147
  - ".rubocop.yml"
148
+ - ".rvmrc"
148
149
  - ".travis.yml"
149
150
  - Gemfile
150
- - Gemfile.lock
151
151
  - Makefile
152
152
  - README.mkd
153
- - lib/books/base.rb
154
- - lib/books/buys.rb
155
- - lib/books/count_sum.rb
156
- - lib/books/diary_entries.rb
157
- - lib/books/layouts/buys.yml
158
- - lib/books/layouts/sales.yml
159
- - lib/books/locale.rb
160
- - lib/books/locales/es.yml
161
- - lib/books/page.rb
162
- - lib/books/pages_utils.rb
163
- - lib/books/sales.rb
164
- - lib/books/simplified_diary.rb
165
- - lib/books/utils.rb
166
- - lib/csv_books/base.rb
167
- - lib/csv_books/option_error.rb
168
- - lib/ple_books/base.rb
169
- - lib/ple_books/book_codes.csv
170
- - lib/ple_books/buys.rb
171
- - lib/ple_books/layouts/buys.yml
172
- - lib/ple_books/layouts/sales.yml
173
- - lib/ple_books/sales.rb
174
153
  - lib/sunat_books.rb
154
+ - lib/sunat_books/common_utils.rb
155
+ - lib/sunat_books/csv/base.rb
156
+ - lib/sunat_books/csv/option_error.rb
157
+ - lib/sunat_books/pdf/base.rb
158
+ - lib/sunat_books/pdf/buys.rb
159
+ - lib/sunat_books/pdf/count_sum.rb
160
+ - lib/sunat_books/pdf/diary_entries.rb
161
+ - lib/sunat_books/pdf/layouts/buys.yml
162
+ - lib/sunat_books/pdf/layouts/sales.yml
163
+ - lib/sunat_books/pdf/locale.rb
164
+ - lib/sunat_books/pdf/locales/es.yml
165
+ - lib/sunat_books/pdf/page.rb
166
+ - lib/sunat_books/pdf/pages_utils.rb
167
+ - lib/sunat_books/pdf/sales.rb
168
+ - lib/sunat_books/pdf/simplified_diary.rb
169
+ - lib/sunat_books/pdf/trading_book.rb
170
+ - lib/sunat_books/pdf/utils.rb
171
+ - lib/sunat_books/ple/base.rb
172
+ - lib/sunat_books/ple/book_codes.csv
173
+ - lib/sunat_books/ple/buys.rb
174
+ - lib/sunat_books/ple/layouts/buys.yml
175
+ - lib/sunat_books/ple/layouts/sales.yml
176
+ - lib/sunat_books/ple/sales.rb
175
177
  - sunat_books.gemspec
176
- - test/books/base_test.rb
177
- - test/books/buys_test.rb
178
- - test/books/page_test.rb
179
- - test/books/pages_utils_test.rb
180
- - test/books/utils_test.rb
181
- - test/csv_books/base_test.rb
178
+ - test/csv/base_test.rb
182
179
  - test/fixtures/base.rb
183
180
  - test/fixtures/company.rb
184
181
  - test/fixtures/custom_layout.yml
185
182
  - test/fixtures/ticket.rb
186
183
  - test/helper.rb
187
- - test/ple_books/buys_test.rb
188
- - test/ple_books_test.rb
184
+ - test/pdf/base_test.rb
185
+ - test/pdf/buys_test.rb
186
+ - test/pdf/page_test.rb
187
+ - test/pdf/pages_utils_test.rb
188
+ - test/pdf/sales_test.rb
189
+ - test/pdf/utils_test.rb
190
+ - test/ple/base_test.rb
191
+ - test/ple/buys_test.rb
189
192
  homepage: https://github.com/ccarruitero/sunat_books
190
193
  licenses:
191
194
  - MPL
@@ -206,8 +209,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
209
  version: '0'
207
210
  requirements: []
208
211
  rubyforge_project:
209
- rubygems_version: 2.6.11
212
+ rubygems_version: 2.6.13
210
213
  signing_key:
211
214
  specification_version: 4
212
- summary: SUNAT books
215
+ summary: A ruby gem to get accounting books for SUNAT
213
216
  test_files: []
@@ -1,83 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- sunat_books (0.0.1)
5
- activesupport (> 4.1)
6
- i18n (~> 0.7)
7
- prawn (~> 2.0)
8
- prawn-table (~> 0.2)
9
-
10
- GEM
11
- remote: https://rubygems.org/
12
- specs:
13
- Ascii85 (1.0.2)
14
- activesupport (5.0.2)
15
- concurrent-ruby (~> 1.0, >= 1.0.2)
16
- i18n (~> 0.7)
17
- minitest (~> 5.1)
18
- tzinfo (~> 1.1)
19
- afm (0.2.2)
20
- ast (2.3.0)
21
- clap (1.0.0)
22
- coderay (1.1.1)
23
- concurrent-ruby (1.0.5)
24
- cutest (1.2.3)
25
- clap
26
- faker (1.7.3)
27
- i18n (~> 0.5)
28
- hashery (2.1.2)
29
- i18n (0.8.1)
30
- method_source (0.8.2)
31
- minitest (5.10.1)
32
- parser (2.4.0.0)
33
- ast (~> 2.2)
34
- pdf-core (0.7.0)
35
- pdf-inspector (1.2.1)
36
- pdf-reader (~> 1.0)
37
- pdf-reader (1.4.1)
38
- Ascii85 (~> 1.0.0)
39
- afm (~> 0.2.1)
40
- hashery (~> 2.0)
41
- ruby-rc4
42
- ttfunk
43
- powerpack (0.1.1)
44
- prawn (2.2.2)
45
- pdf-core (~> 0.7.0)
46
- ttfunk (~> 1.5)
47
- prawn-table (0.2.2)
48
- prawn (>= 1.3.0, < 3.0.0)
49
- pry (0.10.4)
50
- coderay (~> 1.1.0)
51
- method_source (~> 0.8.1)
52
- slop (~> 3.4)
53
- rainbow (2.2.2)
54
- rake
55
- rake (12.0.0)
56
- rubocop (0.48.1)
57
- parser (>= 2.3.3.1, < 3.0)
58
- powerpack (~> 0.1)
59
- rainbow (>= 1.99.1, < 3.0)
60
- ruby-progressbar (~> 1.7)
61
- unicode-display_width (~> 1.0, >= 1.0.1)
62
- ruby-progressbar (1.8.1)
63
- ruby-rc4 (0.1.5)
64
- slop (3.6.0)
65
- thread_safe (0.3.6)
66
- ttfunk (1.5.0)
67
- tzinfo (1.2.2)
68
- thread_safe (~> 0.1)
69
- unicode-display_width (1.2.1)
70
-
71
- PLATFORMS
72
- ruby
73
-
74
- DEPENDENCIES
75
- cutest (~> 1.2)
76
- faker (~> 1.7)
77
- pdf-inspector (~> 1.2.0)
78
- pry (~> 0.10)
79
- rubocop (~> 0.48)
80
- sunat_books!
81
-
82
- BUNDLED WITH
83
- 1.14.6
@@ -1,132 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "prawn"
4
- require "prawn/table"
5
- require "yaml"
6
- require_relative "utils"
7
- require_relative "locale"
8
-
9
- module Books
10
- class Base < Prawn::Document
11
- include Utils
12
- include Prawn::Table::Interface
13
-
14
- def sub_head(hash, book_name, blayout)
15
- arr, current_key = nil
16
- hash.each do |key, value|
17
- k = I18n.t("books.#{book_name}.#{key}").mb_chars.upcase.to_s
18
- v = value.collect do |s|
19
- I18n.t("books.#{book_name}.#{s}").mb_chars.upcase.to_s
20
- end
21
- arr = [[{ content: k, colspan: value.length }], v]
22
- current_key = key
23
- end
24
-
25
- sub_head_table(blayout["widths"], arr, current_key)
26
- end
27
-
28
- def sub_head_table(widths, arr, key)
29
- column_widths = get_column_widths(widths, key)
30
- options = sub_head_options(column_widths)
31
- make_table(arr, options)
32
- end
33
-
34
- def sub_head_options(column_widths)
35
- options = { cell_style: {
36
- borders: [], size: 5, align: :center, padding: 1
37
- } }
38
- add_widths(column_widths, options, 22)
39
- options
40
- end
41
-
42
- def book_title(title)
43
- text title, align: :center, size: 8
44
- end
45
-
46
- def book_header(period, ruc, name, title = nil)
47
- move_down 5
48
- txt name.to_s.upcase
49
- txt "RUC: #{ruc}"
50
- book_title("#{title} - #{period}")
51
- move_down 5
52
- end
53
-
54
- def prawn_header(title, period, company)
55
- repeat(:all) do
56
- canvas do
57
- bounding_box([bounds.left + 10, bounds.top - 10], width: 800) do
58
- book_header period, company.ruc, company.name, title
59
- end
60
- end
61
- end
62
- end
63
-
64
- def table_head(fields, book_name, layout)
65
- thead = []
66
- fields.each do |h|
67
- if h.class == Hash
68
- r = sub_head(h, book_name, layout)
69
- thead << r
70
- else
71
- thead << I18n.t("books.#{book_name}.#{h}").mb_chars.upcase.to_s
72
- end
73
- end
74
- thead
75
- end
76
-
77
- def table_body(fields, ticket, widths, aligns)
78
- tbody = []
79
- fields.each do |f|
80
- if f.is_a? Hash
81
- table_hash(f, ticket, tbody, widths, aligns)
82
- else
83
- tbody << field_value(ticket, f)
84
- end
85
- end
86
- tbody
87
- end
88
-
89
- def table_hash(f, ticket, tbody, widths, aligns)
90
- options = { cell_style: { borders: [], size: 5 } }
91
-
92
- f.each do |key, value|
93
- v = value.collect do |s|
94
- value = field_value(ticket, s)
95
- end
96
-
97
- column_widths = get_column_widths(widths, key)
98
- add_widths(column_widths, options, 28)
99
- add_align(aligns, options, key) unless aligns.nil?
100
- tbody << make_table([v], options)
101
- end
102
- end
103
-
104
- # diary
105
- def get_counts(tickets)
106
- tickets.map(&:uniq_counts).flatten.uniq.sort
107
- end
108
-
109
- def get_mother_counts(tickets)
110
- tickets.map(&:uniq_mother_counts).flatten.uniq.sort
111
- end
112
-
113
- def get_value(ticket, count)
114
- # active_amount = ticket.get_amount_by_position(count)
115
- # pasive_amount = ticket.get_amount_by_position(count, false)
116
- active_amount = ticket.get_amount_by_mother_count(count)
117
- pasive_amount = ticket.get_amount_by_mother_count(count, false)
118
- # if count === '401' && ticket.operation_type == 'compras'
119
- # amount = amount * (-1)
120
- # end
121
- active_amount - pasive_amount
122
- end
123
-
124
- def make_sub_table(content, width = nil)
125
- options = { cell_style: { width: width, size: 5, borders: [],
126
- align: :right } }
127
- content_row = []
128
- content.each { |c| content_row << formated_number(c) }
129
- make_table([content_row], options)
130
- end
131
- end
132
- end