polish_invoicer 0.0.5 → 0.0.6

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
  SHA1:
3
- metadata.gz: 06b01319cc715a21e74a8e2969c2da83e9b2a1ca
4
- data.tar.gz: b6a554a0b705fb5d9db3c52b4da25285c0e09564
3
+ metadata.gz: 312fe8f98e08534aee77cd955333f5ef46d71254
4
+ data.tar.gz: 4b95737c8385e6443fd496367fd4a8504cd99b75
5
5
  SHA512:
6
- metadata.gz: 605299516ed407eac04ea06b76ec7142b749d6602c1049cb3815aa6d24960f94f01f0e30e7c4bc9df7662284bfa126bb3ce1c1bea1e68bd9bcb2fe513425c5ea
7
- data.tar.gz: 74e035ef3f48d5501319073bd852bd4839afc09e2d37d434a49115907e76c627c2e7e020582d26647949c8efaf5d30ba08dc82f88c029f4853209501d5e5e338
6
+ metadata.gz: 9ec09c10060ec883d524c1504f433ec3dfcbfbfe8a46e17ef4d8e8a9fdad515e0d62582ad130539de30fe779809792d148724e246ce43d2a2158a0815baa1a5c
7
+ data.tar.gz: 6d04f34ebf85cdc467f49b3541bd98baaa8fb220430c697830b507c412f2f1292f96e3d9ea4e1281458bdb4591e36ec8e416b6fefebfc02d0ee3a860965fc5fe
data/.gitignore CHANGED
@@ -14,3 +14,4 @@ spec/reports
14
14
  test/tmp
15
15
  test/version_tmp
16
16
  tmp
17
+ /.idea
data/.travis.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.0.0
4
- - 1.9.3
3
+ - 2.2.7
4
+ - 2.3.4
5
+ - 2.4.1
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Piotr Macuk
1
+ Copyright (c) 2014-2017 Piotr Macuk
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -3,9 +3,9 @@
3
3
  PolishInvoicer gem creates polish invoices and proforms as HTML or PDF files.
4
4
  Gem description will be in polish language because of specific case of this gem.
5
5
 
6
- Gem jest zgodny z nową [ustawą o podatku VAT](http://www.przepisy.gofin.pl/przepisy,3,32,32,670,55454,20140101,faktury.html), która weszła w życie z dniem 1 stycznia 2014.
6
+ Gem jest zgodny z nową [ustawą o podatku VAT](http://www.przepisy.gofin.pl/przepisy,2,32,32,670,,,ustawa-z-dnia-11032004-r-o-podatku-od-towarow-i-uslug.html), która weszła w życie z dniem 1 stycznia 2017.
7
7
 
8
- [Krótkie podsumowanie zmian w wystawianiu faktur](http://www.jzk.pl/zmiany-2014).
8
+ [Krótkie podsumowanie zmian w wystawianiu faktur](https://www.jzk.pl/2017).
9
9
 
10
10
  ## Installation
11
11
 
@@ -28,7 +28,7 @@ Or install it yourself as:
28
28
  ```ruby
29
29
  require 'polish_invoicer'
30
30
 
31
- invoice = PolishInvoicer::Invoice.new({
31
+ invoice = PolishInvoicer::Invoice.new(
32
32
  number: '1/2014', # numer faktury
33
33
  create_date: Date.today, # data wystawienia
34
34
  trade_date: Date.today, # data wykonania usługi
@@ -45,7 +45,7 @@ invoice = PolishInvoicer::Invoice.new({
45
45
  payment_date: Date.today + 14, # data płatności
46
46
  proforma: true, # znacznik proformy
47
47
  paid: false, # znacznik opłacenia usługi
48
- })
48
+ )
49
49
  if invoice.valid?
50
50
  invoice.save_to_html('/path/to/proforma.html')
51
51
  invoice.save_to_pdf('/path/to/proforma.pdf')
@@ -98,6 +98,7 @@ invoice.save_to_pdf('/path/to/invoice.pdf')
98
98
  ### Parametry dodatkowe
99
99
 
100
100
  :buyer_nip, # NIP nabywcy (string)
101
+ :recipient, # odbiorca faktury (tablica stringów)
101
102
  :comments, # uwagi (string lub tablica stringów)
102
103
  :pkwiu, # numer PKWiU (string)
103
104
  :no_vat_reason, # podstawa prawna zwolnienia z VAT (string)
@@ -128,7 +129,7 @@ puts invoice.errors.inspect
128
129
  {
129
130
  :vat=>"Stawka VAT spoza listy dopuszczalnych wartości",
130
131
  :create_date=>"Data wystawienia nie może być późniejsza niż 15 dzień następnego miesiąca po wykonaniu usługi"
131
- }
132
+ }
132
133
 
133
134
  ## Dodatkowe metody
134
135
 
data/Rakefile CHANGED
@@ -1,9 +1,9 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
3
 
4
4
  Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
5
+ t.libs << 'test'
6
6
  t.test_files = FileList['test/*_test.rb']
7
7
  end
8
8
 
9
- task :default => :test
9
+ task default: :test
data/doc/invoice.rb CHANGED
@@ -1,7 +1,6 @@
1
- # encoding: utf-8
2
1
  require 'polish_invoicer'
3
2
 
4
- invoice = PolishInvoicer::Invoice.new({
3
+ invoice = PolishInvoicer::Invoice.new(
5
4
  number: '1/2014', # numer faktury
6
5
  create_date: Date.today, # data wystawienia
7
6
  trade_date: Date.today, # data wykonania usługi
@@ -16,6 +15,6 @@ invoice = PolishInvoicer::Invoice.new({
16
15
  item_name: 'Usługi programistyczne', # nazwa usługi
17
16
  price: 3500, # cena (domyślnie brutto)
18
17
  payment_date: Date.today + 14, # data płatności
19
- })
18
+ )
20
19
  invoice.save_to_html('/tmp/invoice.html')
21
20
  invoice.save_to_pdf('/tmp/invoice.pdf')
data/doc/proforma.rb CHANGED
@@ -1,7 +1,6 @@
1
- # encoding: utf-8
2
1
  require 'polish_invoicer'
3
2
 
4
- invoice = PolishInvoicer::Invoice.new({
3
+ invoice = PolishInvoicer::Invoice.new(
5
4
  number: '1/2014/PROFORMA', # numer faktury
6
5
  create_date: Date.today, # data wystawienia
7
6
  trade_date: Date.today, # data wykonania usługi
@@ -18,6 +17,6 @@ invoice = PolishInvoicer::Invoice.new({
18
17
  payment_date: Date.today + 14, # data płatności
19
18
  proforma: true,
20
19
  paid: false
21
- })
20
+ )
22
21
  invoice.save_to_html('/tmp/proforma.html')
23
22
  invoice.save_to_pdf('/tmp/proforma.pdf')
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  module PolishInvoicer
3
2
  class Invoice
4
3
  AVAILABLE_PARAMS = [
@@ -9,6 +8,7 @@ module PolishInvoicer
9
8
  :seller_nip, # NIP sprzedawcy (string)
10
9
  :buyer, # adres nabywcy (tablica stringów)
11
10
  :buyer_nip, # NIP nabywcy (string)
11
+ :recipient, # odbiorca faktury (tablica stringów)
12
12
  :item_name, # nazwa usługi (string)
13
13
  :price, # cena w złotych (float)
14
14
  :gross_price, # znacznik rodzaju ceny (netto/brutto), domyślnie: true (boolean)
@@ -21,19 +21,19 @@ module PolishInvoicer
21
21
  :footer, # treść umieszczana w stopce faktury (string)
22
22
  :proforma, # znacznik faktury pro-forma, domyślnie: false (boolean)
23
23
  :no_vat_reason, # podstawa prawna zwolnienia z VAT (string)
24
- ]
24
+ ].freeze
25
25
 
26
- attr_accessor *AVAILABLE_PARAMS
26
+ attr_accessor(*AVAILABLE_PARAMS)
27
27
  attr_accessor :template_path
28
28
  attr_accessor :logger, :wkhtmltopdf_path, :wkhtmltopdf_command
29
29
 
30
- def initialize(params={})
30
+ def initialize(params = {})
31
31
  set_defaults
32
32
  params.each do |k, v|
33
33
  raise "Nierozpoznany parametr #{k}" unless AVAILABLE_PARAMS.include?(k)
34
34
  send("#{k}=", v)
35
35
  end
36
- @validator = Validator.new(self)
36
+ @validator = PolishInvoicer::Validator.new(self)
37
37
  end
38
38
 
39
39
  def errors
@@ -47,7 +47,7 @@ module PolishInvoicer
47
47
  # cena/wartość netto
48
48
  def net_value
49
49
  return price unless gross_price
50
- price / (1 + Vat.to_i(vat)/100.0)
50
+ price / (1 + Vat.to_i(vat) / 100.0)
51
51
  end
52
52
 
53
53
  # kwota VAT
@@ -58,7 +58,7 @@ module PolishInvoicer
58
58
  # cena/wartość brutto
59
59
  def gross_value
60
60
  return price if gross_price
61
- price + price * Vat.to_i(vat)/100.0
61
+ price + price * Vat.to_i(vat) / 100.0
62
62
  end
63
63
 
64
64
  def save_to_html(path)
@@ -76,19 +76,20 @@ module PolishInvoicer
76
76
  Presenter.new(self).data
77
77
  end
78
78
 
79
- protected
80
- def set_defaults
81
- @gross_price = true
82
- @vat = 23
83
- @payment_type = 'Przelew'
84
- @paid = true
85
- @proforma = false
86
- end
79
+ private
87
80
 
88
- def validate!
89
- return if valid?
90
- error_messages = errors.map { |k, v| "#{k}: #{v}" }.join(', ')
91
- raise "Parametry do wystawienia faktury są nieprawidłowe: #{error_messages}"
92
- end
81
+ def set_defaults
82
+ @gross_price = true
83
+ @vat = 23
84
+ @payment_type = 'Przelew'
85
+ @paid = true
86
+ @proforma = false
87
+ end
88
+
89
+ def validate!
90
+ return if valid?
91
+ error_messages = errors.map { |k, v| "#{k}: #{v}" }.join(', ')
92
+ raise "Parametry do wystawienia faktury są nieprawidłowe: #{error_messages}"
93
+ end
93
94
  end
94
95
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  module PolishInvoicer
3
2
  class Presenter
4
3
  attr_accessor :invoice
@@ -19,45 +18,46 @@ module PolishInvoicer
19
18
  @out
20
19
  end
21
20
 
22
- protected
23
- def copy_available_params
24
- Invoice::AVAILABLE_PARAMS.each do |field|
25
- @out[field] = @invoice.send(field)
26
- end
27
- end
21
+ private
28
22
 
29
- def remove_redundand_params
30
- @out.delete(:price)
23
+ def copy_available_params
24
+ Invoice::AVAILABLE_PARAMS.each do |field|
25
+ @out[field] = @invoice.send(field)
31
26
  end
27
+ end
32
28
 
33
- def copy_additional_params
34
- %w(net_value vat_value gross_value).each do |field|
35
- @out[field.to_sym] = @invoice.send(field)
36
- end
37
- end
29
+ def remove_redundand_params
30
+ @out.delete(:price)
31
+ end
38
32
 
39
- def format_dates
40
- %w(trade_date create_date payment_date).each do |field|
41
- v = @invoice.send(field)
42
- next unless v
43
- @out[field.to_sym] = v.strftime "%d.%m.%Y"
44
- end
33
+ def copy_additional_params
34
+ %w(net_value vat_value gross_value).each do |field|
35
+ @out[field.to_sym] = @invoice.send(field)
45
36
  end
37
+ end
46
38
 
47
- def format_prices
48
- %w(net_value vat_value gross_value).each do |field|
49
- v = @invoice.send(field)
50
- next unless v
51
- @out[field.to_sym] = sprintf("%02.2f", v).gsub('.', ',')
52
- end
39
+ def format_dates
40
+ %w(trade_date create_date payment_date).each do |field|
41
+ v = @invoice.send(field)
42
+ next unless v
43
+ @out[field.to_sym] = v.strftime '%d.%m.%Y'
53
44
  end
45
+ end
54
46
 
55
- def format_comments
56
- @out[:comments] = [@invoice.comments].flatten.compact
47
+ def format_prices
48
+ %w(net_value vat_value gross_value).each do |field|
49
+ v = @invoice.send(field)
50
+ next unless v
51
+ @out[field.to_sym] = sprintf('%02.2f', v).tr('.', ',')
57
52
  end
53
+ end
58
54
 
59
- def format_vat
60
- @out[:vat] = Vat.to_s(@invoice.vat)
61
- end
55
+ def format_comments
56
+ @out[:comments] = [@invoice.comments].flatten.compact
57
+ end
58
+
59
+ def format_vat
60
+ @out[:vat] = Vat.to_s(@invoice.vat)
61
+ end
62
62
  end
63
63
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  module PolishInvoicer
3
2
  class Validator
4
3
  attr_reader :errors
@@ -18,107 +17,84 @@ module PolishInvoicer
18
17
  check_price
19
18
  check_vat
20
19
  check_proforma
21
- check_create_and_trade_date_correlation
22
20
  @errors.empty?
23
21
  end
24
22
 
25
- protected
26
- def check_presence
27
- check_blank(:number, 'Numer nie może być pusty')
28
- check_blank(:create_date, 'Data wystawienia nie może być pusta')
29
- check_blank(:trade_date, 'Data sprzedaży nie może być pusta')
30
- check_blank(:seller, 'Sprzedawca nie może być pusty')
31
- check_blank(:buyer, 'Nabywca nie może być pusty')
32
- check_blank(:item_name, 'Nazwa usługi nie może być pusta')
33
- check_blank(:price, 'Cena nie może być pusta')
34
- check_blank(:vat, 'Stawka VAT nie może być pusta')
35
- check_blank(:payment_type, 'Rodzaj płatności nie może być pusty')
36
- check_blank(:payment_date, 'Termin płatności nie może być pusty')
37
- check_blank(:seller_nip, 'NIP sprzedawcy nie może być pusty')
38
- end
39
-
40
- def check_not_nil
41
- @errors[:gross_price] = 'Konieczne jest ustawienie znacznika rodzaju ceny (netto/brutto)' if @invoice.gross_price.nil?
42
- @errors[:paid] = 'Konieczne jest ustawienie znacznika opłacenia faktury' if @invoice.paid.nil?
43
- end
23
+ private
44
24
 
45
- def check_arrays
46
- @errors[:seller] = 'Sprzedawca musi być podany jako tablica stringów' unless @invoice.seller.is_a?(Array)
47
- @errors[:buyer] = 'Nabywca musi być podany jako tablica stringów' unless @invoice.buyer.is_a?(Array)
48
- end
25
+ def check_presence
26
+ check_blank(:number, 'Numer nie może być pusty')
27
+ check_blank(:create_date, 'Data wystawienia nie może być pusta')
28
+ check_blank(:trade_date, 'Data sprzedaży nie może być pusta')
29
+ check_blank(:seller, 'Sprzedawca nie może być pusty')
30
+ check_blank(:buyer, 'Nabywca nie może być pusty')
31
+ check_blank(:item_name, 'Nazwa usługi nie może być pusta')
32
+ check_blank(:price, 'Cena nie może być pusta')
33
+ check_blank(:vat, 'Stawka VAT nie może być pusta')
34
+ check_blank(:payment_type, 'Rodzaj płatności nie może być pusty')
35
+ check_blank(:payment_date, 'Termin płatności nie może być pusty')
36
+ check_blank(:seller_nip, 'NIP sprzedawcy nie może być pusty')
37
+ end
49
38
 
50
- def check_booleans
51
- unless [true, false].include?(@invoice.gross_price)
52
- @errors[:gross_price] = 'Znacznik rodzaju ceny musi być podany jako boolean'
53
- end
54
- unless [true, false].include?(@invoice.paid)
55
- @errors[:paid] = 'Znacznik opłacenia faktury musi być podany jako boolean'
56
- end
57
- unless [true, false].include?(@invoice.proforma)
58
- @errors[:proforma] = 'Znacznik faktury pro-forma musi być podany jako boolean'
59
- end
60
- end
39
+ def check_not_nil
40
+ @errors[:gross_price] = 'Konieczne jest ustawienie znacznika rodzaju ceny (netto/brutto)' if @invoice.gross_price.nil?
41
+ @errors[:paid] = 'Konieczne jest ustawienie znacznika opłacenia faktury' if @invoice.paid.nil?
42
+ end
61
43
 
62
- def check_dates
63
- @errors[:create_date] = 'Data wystawienia musi być typu Date' unless @invoice.create_date.is_a?(Date)
64
- @errors[:trade_date] = 'Data sprzedaży musi być typu Date' unless @invoice.trade_date.is_a?(Date)
65
- @errors[:payment_date] = 'Termin płatności musi być typu Date' unless @invoice.payment_date.is_a?(Date)
66
- end
44
+ def check_arrays
45
+ @errors[:seller] = 'Sprzedawca musi być podany jako tablica stringów' unless @invoice.seller.is_a?(Array)
46
+ @errors[:buyer] = 'Nabywca musi być podany jako tablica stringów' unless @invoice.buyer.is_a?(Array)
47
+ end
67
48
 
68
- def check_price
69
- unless @invoice.price.is_a?(Numeric)
70
- @errors[:price] = 'Cena musi być liczbą'
71
- else
72
- @errors[:price] = 'Cena musi być liczbą dodatnią' unless @invoice.price > 0
73
- end
49
+ def check_booleans
50
+ unless [true, false].include?(@invoice.gross_price)
51
+ @errors[:gross_price] = 'Znacznik rodzaju ceny musi być podany jako boolean'
74
52
  end
75
-
76
- def check_vat
77
- unless Vat.valid?(@invoice.vat)
78
- @errors[:vat] = 'Stawka VAT spoza listy dopuszczalnych wartości'
79
- else
80
- if Vat.zw?(@invoice.vat) and blank?(@invoice.no_vat_reason)
81
- @errors[:no_vat_reason] = 'Konieczne jest podanie podstawy prawnej zwolnienia z podatku VAT'
82
- end
83
- end
53
+ unless [true, false].include?(@invoice.paid)
54
+ @errors[:paid] = 'Znacznik opłacenia faktury musi być podany jako boolean'
84
55
  end
85
-
86
- def check_proforma
87
- return unless @invoice.proforma
88
- return unless @invoice.paid
89
- @errors[:paid] = 'Proforma nie może być opłacona'
56
+ unless [true, false].include?(@invoice.proforma)
57
+ @errors[:proforma] = 'Znacznik faktury pro-forma musi być podany jako boolean'
90
58
  end
59
+ end
91
60
 
92
- def blank?(value)
93
- value.to_s.strip == ''
94
- end
61
+ def check_dates
62
+ @errors[:create_date] = 'Data wystawienia musi być typu Date' unless @invoice.create_date.is_a?(Date)
63
+ @errors[:trade_date] = 'Data sprzedaży musi być typu Date' unless @invoice.trade_date.is_a?(Date)
64
+ @errors[:payment_date] = 'Termin płatności musi być typu Date' unless @invoice.payment_date.is_a?(Date)
65
+ end
95
66
 
96
- def check_blank(key, msg)
97
- value = @invoice.send(key)
98
- @errors[key] = msg if blank?(value)
67
+ def check_price
68
+ unless @invoice.price.is_a?(Numeric)
69
+ @errors[:price] = 'Cena musi być liczbą'
70
+ else
71
+ @errors[:price] = 'Cena musi być liczbą dodatnią' unless @invoice.price > 0
99
72
  end
73
+ end
100
74
 
101
- def check_create_and_trade_date_correlation
102
- return unless @invoice.create_date
103
- return unless @invoice.trade_date
104
- cd = @invoice.create_date
105
- td = @invoice.trade_date
106
- # data wystawienia max 30 dni przed wykonaniem usługi
107
- if cd < td and (td - cd > 30)
108
- msg = 'Data wystawienia nie może być wcześniejsza niż ' +
109
- '30 dni przed wykonaniem usługi'
110
- @errors[:create_date] = msg
111
- end
112
- # data wystawienie max 15 dnia następnego miesiąca po wykonaniu usługi
113
- if cd > td
114
- td_nm = td.next_month
115
- cd_dl = Date.new(td_nm.year, td_nm.month, 15)
116
- if cd > cd_dl
117
- msg = 'Data wystawienia nie może być późniejsza niż ' +
118
- '15 dzień następnego miesiąca po wykonaniu usługi'
119
- @errors[:create_date] = msg
120
- end
75
+ def check_vat
76
+ unless Vat.valid?(@invoice.vat)
77
+ @errors[:vat] = 'Stawka VAT spoza listy dopuszczalnych wartości'
78
+ else
79
+ if Vat.zw?(@invoice.vat) && blank?(@invoice.no_vat_reason)
80
+ @errors[:no_vat_reason] = 'Konieczne jest podanie podstawy prawnej zwolnienia z podatku VAT'
121
81
  end
122
82
  end
83
+ end
84
+
85
+ def check_proforma
86
+ return unless @invoice.proforma
87
+ return unless @invoice.paid
88
+ @errors[:paid] = 'Proforma nie może być opłacona'
89
+ end
90
+
91
+ def blank?(value)
92
+ value.to_s.strip == ''
93
+ end
94
+
95
+ def check_blank(key, msg)
96
+ value = @invoice.send(key)
97
+ @errors[key] = msg if blank?(value)
98
+ end
123
99
  end
124
100
  end
@@ -19,18 +19,19 @@ module PolishInvoicer
19
19
 
20
20
  # Potrzebne do obliczeń netto/vat/brutto
21
21
  def self.to_i(rate)
22
- (rate != -1) ? rate : 0
22
+ rate != -1 ? rate : 0
23
23
  end
24
24
 
25
- protected
26
- def self.hash
27
- h = {}
28
- rates.each do |r|
29
- name = "#{r}%"
30
- name = 'zw.' if r == -1
31
- h[name] = r
32
- end
33
- h
25
+ private
26
+
27
+ def self.hash
28
+ h = {}
29
+ rates.each do |r|
30
+ name = "#{r}%"
31
+ name = 'zw.' if r == -1
32
+ h[name] = r
34
33
  end
34
+ h
35
+ end
35
36
  end
36
37
  end
@@ -1,3 +1,3 @@
1
1
  module PolishInvoicer
2
- VERSION = "0.0.5"
2
+ VERSION = '0.0.6'.freeze
3
3
  end
@@ -22,15 +22,16 @@ module PolishInvoicer
22
22
  @writer.save_to_pdf(path)
23
23
  end
24
24
 
25
- protected
26
- def create_writer
27
- @writer = Slim2pdf::Writer.new(template_path)
28
- @writer.wkhtmltopdf_path = wkhtmltopdf_path
29
- @writer.wkhtmltopdf_command = wkhtmltopdf_command
30
- @writer.logger = logger
31
- data = @invoice.to_hash
32
- @writer.data = data
33
- @writer.footer_text = data[:footer]
34
- end
25
+ private
26
+
27
+ def create_writer
28
+ @writer = Slim2pdf::Writer.new(template_path)
29
+ @writer.wkhtmltopdf_path = wkhtmltopdf_path
30
+ @writer.wkhtmltopdf_command = wkhtmltopdf_command
31
+ @writer.logger = logger
32
+ data = @invoice.to_hash
33
+ @writer.data = data
34
+ @writer.footer_text = data[:footer]
35
+ end
35
36
  end
36
37
  end
@@ -1,14 +1,10 @@
1
- require "date"
1
+ require 'date'
2
2
  require 'pathname'
3
3
 
4
- require "polish_invoicer/version"
5
- require "polish_invoicer/vat"
6
- require "polish_invoicer/validator"
4
+ require 'polish_invoicer/version'
5
+ require 'polish_invoicer/vat'
6
+ require 'polish_invoicer/validator'
7
7
  require 'slim2pdf'
8
- require "polish_invoicer/writer"
9
- require "polish_invoicer/presenter"
10
- require "polish_invoicer/invoice"
11
-
12
- module PolishInvoicer
13
- # Your code goes here...
14
- end
8
+ require 'polish_invoicer/writer'
9
+ require 'polish_invoicer/presenter'
10
+ require 'polish_invoicer/invoice'
@@ -1,26 +1,27 @@
1
- # coding: utf-8
2
1
  lib = File.expand_path('../lib', __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'polish_invoicer/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "polish_invoicer"
6
+ spec.name = 'polish_invoicer'
8
7
  spec.version = PolishInvoicer::VERSION
9
- spec.authors = ["Piotr Macuk"]
10
- spec.email = ["piotr@macuk.pl"]
11
- spec.description = %q{Creates polish invoices and proforms as HTML or PDF files}
12
- spec.summary = %q{Creates polish invoices and proforms as HTML or PDF files}
13
- spec.homepage = ""
14
- spec.license = "MIT"
8
+ spec.authors = ['Piotr Macuk']
9
+ spec.email = ['piotr@macuk.pl']
10
+ spec.description = 'Creates polish invoices and proforms as HTML or PDF files'
11
+ spec.summary = 'Creates polish invoices and proforms as HTML or PDF files'
12
+ spec.homepage = ''
13
+ spec.license = 'MIT'
15
14
 
16
15
  spec.files = `git ls-files`.split($/)
17
16
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
18
+ spec.require_paths = ['lib']
20
19
 
21
- spec.add_development_dependency "bundler", "~> 1.7"
22
- spec.add_development_dependency "rake"
23
- spec.add_development_dependency "simplecov"
20
+ spec.add_development_dependency 'bundler'
21
+ spec.add_development_dependency 'rake'
22
+ spec.add_development_dependency 'minitest'
23
+ spec.add_development_dependency 'simplecov'
24
+ spec.add_development_dependency 'rubocop'
24
25
 
25
- spec.add_dependency 'slim2pdf', '~> 0.0.4'
26
+ spec.add_dependency 'slim2pdf'
26
27
  end
data/test/invoice_test.rb CHANGED
@@ -1,20 +1,19 @@
1
- # encoding: utf-8
2
1
  require 'test_helper'
3
2
 
4
3
  module PolishInvoicer
5
- class InvoiceTest < MiniTest::Unit::TestCase
4
+ class InvoiceTest < Minitest::Test
6
5
  def test_init
7
6
  i = Invoice.new
8
7
  assert i.is_a?(Invoice)
9
8
  end
10
9
 
11
10
  def test_set_available_param
12
- i = Invoice.new({number: '1/2014'})
11
+ i = Invoice.new(number: '1/2014')
13
12
  assert_equal '1/2014', i.number
14
13
  end
15
14
 
16
15
  def test_set_unavailable_param
17
- assert_raises(RuntimeError) { i = Invoice.new({test: 'abc'}) }
16
+ assert_raises(RuntimeError) { Invoice.new(test: 'abc') }
18
17
  end
19
18
 
20
19
  def test_validation_delegation
@@ -27,7 +26,7 @@ module PolishInvoicer
27
26
  end
28
27
 
29
28
  def test_net_value
30
- i = Invoice.new({price: 123.45, gross_price: false, vat: 23})
29
+ i = Invoice.new(price: 123.45, gross_price: false, vat: 23)
31
30
  assert_in_delta 123.45, i.net_value, 0.01
32
31
  i.gross_price = true
33
32
  assert_in_delta 100.37, i.net_value, 0.01
@@ -43,7 +42,7 @@ module PolishInvoicer
43
42
  end
44
43
 
45
44
  def test_vat_value
46
- i = Invoice.new({price: 123.45, gross_price: false, vat: 23})
45
+ i = Invoice.new(price: 123.45, gross_price: false, vat: 23)
47
46
  assert_in_delta 28.39, i.vat_value, 0.01
48
47
  i.gross_price = true
49
48
  assert_in_delta 23.08, i.vat_value, 0.01
@@ -54,7 +53,7 @@ module PolishInvoicer
54
53
  end
55
54
 
56
55
  def test_gross_value
57
- i = Invoice.new({price: 123.45, gross_price: false, vat: 23})
56
+ i = Invoice.new(price: 123.45, gross_price: false, vat: 23)
58
57
  assert_in_delta 151.84, i.gross_value, 0.01
59
58
  i.gross_price = true
60
59
  assert_in_delta 123.45, i.gross_value, 0.01
@@ -92,7 +91,7 @@ module PolishInvoicer
92
91
  i = create_valid_invoice
93
92
  path = '/tmp/test.html'
94
93
  i.save_to_html(path)
95
- assert File.exists?(path)
94
+ assert File.exist?(path)
96
95
  File.unlink(path)
97
96
  end
98
97
 
@@ -100,12 +99,12 @@ module PolishInvoicer
100
99
  i = create_valid_invoice
101
100
  path = '/tmp/test.pdf'
102
101
  i.save_to_pdf(path)
103
- assert File.exists?(path)
102
+ assert File.exist?(path)
104
103
  File.unlink(path)
105
104
  end
106
105
 
107
106
  def test_to_hash
108
- i = Invoice.new({price: 123.45, gross_price: false})
107
+ i = Invoice.new(price: 123.45, gross_price: false)
109
108
  h = i.to_hash
110
109
  assert h[:paid] # default
111
110
  assert_equal false, h[:gross_price] # params
@@ -1,8 +1,7 @@
1
- # encoding: utf-8
2
1
  require 'test_helper'
3
2
 
4
3
  module PolishInvoicer
5
- class PresenterTest < MiniTest::Unit::TestCase
4
+ class PresenterTest < Minitest::Test
6
5
  require 'ostruct'
7
6
 
8
7
  def setup
@@ -36,9 +35,9 @@ module PolishInvoicer
36
35
  @invoice.comments = 'Test'
37
36
  data = Presenter.new(@invoice).data
38
37
  assert_equal ['Test'], data[:comments]
39
- @invoice.comments = ['A', 'B']
38
+ @invoice.comments = %w(A B)
40
39
  data = Presenter.new(@invoice).data
41
- assert_equal ['A', 'B'], data[:comments]
40
+ assert_equal %w(A B), data[:comments]
42
41
  end
43
42
 
44
43
  def test_vat
@@ -1,7 +1,6 @@
1
- # encoding: utf-8
2
1
  require 'polish_invoicer'
3
2
 
4
- i = PolishInvoicer::Invoice.new({
3
+ i = PolishInvoicer::Invoice.new(
5
4
  number: '1/2014', create_date: Date.today, trade_date: Date.today,
6
5
  seller: ['Abaka sp. z o.o.', 'ul. Jasna 10', '10-234 Kraków'],
7
6
  buyer: ['Fabryki słodyczy S.A.', 'ul. Słodka 12/34', '12-345 Warszawa'],
@@ -9,9 +8,11 @@ i = PolishInvoicer::Invoice.new({
9
8
  price: 123.45, payment_date: Date.today,
10
9
  comments: 'Test uwag', footer: 'Stopka faktury plus tekst promocyjny',
11
10
  seller_nip: '123-456-78-90', buyer_nip: '987-654-32-10'
12
- })
11
+ )
13
12
 
14
13
  i.save_to_pdf('/tmp/invoice-default.pdf')
14
+ i.recipient = ['Szkoła Podstawowa Nr 1', 'ul. Zielona 10', '81-222 Gdynia', 'Nr ewid: SP1/2017']
15
+ i.save_to_pdf('/tmp/invoice-with-recipient.pdf')
15
16
  i.paid = false
16
17
  i.save_to_pdf('/tmp/invoice-not-paid.pdf')
17
18
  i.proforma = true
data/test/test_helper.rb CHANGED
@@ -8,12 +8,12 @@ require 'polish_invoicer'
8
8
  require 'minitest/autorun'
9
9
 
10
10
  def create_valid_invoice
11
- invoice = PolishInvoicer::Invoice.new({
11
+ invoice = PolishInvoicer::Invoice.new(
12
12
  number: '1/2014', create_date: Date.today, trade_date: Date.today,
13
13
  seller: ['Seller'], buyer: ['Buyer'],
14
14
  seller_nip: '123-123-22-33', buyer_nip: '554-333-22-11',
15
15
  item_name: 'Title', price: 123.45, payment_date: Date.today
16
- })
16
+ )
17
17
  assert invoice.valid?
18
18
  invoice
19
19
  end
@@ -1,21 +1,21 @@
1
1
  require 'test_helper'
2
2
 
3
3
  module PolishInvoicer
4
- class ValidatorTest < MiniTest::Unit::TestCase
4
+ class ValidatorTest < Minitest::Test
5
5
  require 'ostruct'
6
6
 
7
7
  def setup
8
8
  @invoice = OpenStruct.new
9
9
  end
10
10
 
11
- def check_error(field, value=nil)
11
+ def check_error(field, value = nil)
12
12
  @invoice.send("#{field}=", value)
13
13
  v = Validator.new(@invoice)
14
14
  v.valid?
15
15
  assert v.errors[field]
16
16
  end
17
17
 
18
- def check_ok(field, value=nil)
18
+ def check_ok(field, value = nil)
19
19
  @invoice.send("#{field}=", value)
20
20
  v = Validator.new(@invoice)
21
21
  v.valid?
@@ -129,47 +129,26 @@ module PolishInvoicer
129
129
  check_ok(:buyer_nip, '123')
130
130
  end
131
131
 
132
- def check_dates_ok(create_date, trade_date, msg=nil)
132
+ def check_dates_ok(create_date, trade_date, msg = nil)
133
133
  @invoice.create_date = Date.parse(create_date)
134
134
  @invoice.trade_date = Date.parse(trade_date)
135
- v = Validator.new(@invoice); v.valid?
135
+ v = Validator.new(@invoice)
136
+ v.valid?
136
137
  assert_nil v.errors[:create_date], msg
137
138
  end
138
139
 
139
- def check_dates_error(create_date, trade_date, msg=nil)
140
- @invoice.create_date = Date.parse(create_date)
141
- @invoice.trade_date = Date.parse(trade_date)
142
- v = Validator.new(@invoice); v.valid?
143
- assert v.errors[:create_date], msg
144
- end
145
-
146
- # data wystawienia max 30 dni przed wykonaniem usługi
147
- def test_create_and_trade_date_correlation_before_trade
148
- check_dates_ok('2014-01-01', '2014-01-01', 'B1')
149
- check_dates_ok('2014-01-01', '2014-01-31', 'B2')
150
- check_dates_error('2014-01-01', '2014-02-01', 'B3')
151
- check_dates_ok('2014-01-02', '2014-02-01', 'B4')
152
- end
153
-
154
- # data wystawienie max 15 dnia następnego miesiąca po wykonaniu usługi
155
- def test_create_and_trade_date_correlation_after_trade
156
- check_dates_ok('2014-02-15', '2014-01-01', 'A1')
157
- check_dates_error('2014-02-16', '2014-01-01', 'A2')
158
- check_dates_error('2014-02-16', '2014-01-02', 'A3')
159
- check_dates_error('2014-02-16', '2014-01-31', 'A4')
160
- check_dates_ok('2014-02-15', '2014-01-31', 'A5')
161
- check_dates_ok('2014-03-15', '2014-02-15', 'A6')
162
- end
163
-
164
140
  def test_no_vat_reason_presence
165
141
  @invoice.vat = 23
166
- v = Validator.new(@invoice); v.valid?
142
+ v = Validator.new(@invoice)
143
+ v.valid?
167
144
  assert_nil v.errors[:no_vat_reason]
168
145
  @invoice.vat = -1
169
- v = Validator.new(@invoice); v.valid?
146
+ v = Validator.new(@invoice)
147
+ v.valid?
170
148
  assert v.errors[:no_vat_reason]
171
149
  @invoice.no_vat_reason = 'reason'
172
- v = Validator.new(@invoice); v.valid?
150
+ v = Validator.new(@invoice)
151
+ v.valid?
173
152
  assert_nil v.errors[:no_vat_reason]
174
153
  end
175
154
  end
data/test/vat_test.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'test_helper'
2
2
 
3
3
  module PolishInvoicer
4
- class VatTest < MiniTest::Unit::TestCase
4
+ class VatTest < Minitest::Test
5
5
  def test_valid
6
6
  assert Vat.valid?(23)
7
7
  assert Vat.valid?(0)
data/test/writer_test.rb CHANGED
@@ -1,14 +1,13 @@
1
- # encoding: utf-8
2
1
  require 'test_helper'
3
2
 
4
3
  module PolishInvoicer
5
- class WriterTest < MiniTest::Unit::TestCase
4
+ class WriterTest < Minitest::Test
6
5
  def test_save_to_html
7
6
  invoice = create_valid_invoice
8
7
  writer = Writer.new(invoice)
9
8
  path = '/tmp/test.html'
10
9
  writer.save_to_html(path)
11
- assert File.exists?(path)
10
+ assert File.exist?(path)
12
11
  File.unlink(path)
13
12
  end
14
13
 
@@ -17,7 +16,7 @@ module PolishInvoicer
17
16
  writer = Writer.new(invoice)
18
17
  path = '/tmp/test.pdf'
19
18
  writer.save_to_pdf(path)
20
- assert File.exists?(path)
19
+ assert File.exist?(path)
21
20
  File.unlink(path)
22
21
  end
23
22
 
data/tpl/invoice.slim CHANGED
@@ -46,7 +46,11 @@ html
46
46
  br
47
47
  - if buyer_nip
48
48
  = "NIP: #{buyer_nip}"
49
-
49
+ - if recipient
50
+ h4 Odbiorca
51
+ - recipient.each do |line|
52
+ = line
53
+ br
50
54
  hr
51
55
 
52
56
  .row
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polish_invoicer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Macuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-13 00:00:00.000000000 Z
11
+ date: 2017-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: simplecov
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -52,20 +66,34 @@ dependencies:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: slim2pdf
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
- - - "~>"
87
+ - - ">="
60
88
  - !ruby/object:Gem::Version
61
- version: 0.0.4
89
+ version: '0'
62
90
  type: :runtime
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
- - - "~>"
94
+ - - ">="
67
95
  - !ruby/object:Gem::Version
68
- version: 0.0.4
96
+ version: '0'
69
97
  description: Creates polish invoices and proforms as HTML or PDF files
70
98
  email:
71
99
  - piotr@macuk.pl
@@ -122,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
150
  version: '0'
123
151
  requirements: []
124
152
  rubyforge_project:
125
- rubygems_version: 2.4.3
153
+ rubygems_version: 2.6.11
126
154
  signing_key:
127
155
  specification_version: 4
128
156
  summary: Creates polish invoices and proforms as HTML or PDF files