vesr 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vesr/prawn/esr_recipe.rb +7 -18
- data/lib/vesr/reference_builder.rb +35 -0
- data/lib/vesr/validation_digit_calculator.rb +20 -0
- data/lib/vesr/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 812a29300c484ae22567b16acaf0e884a809322f
|
4
|
+
data.tar.gz: 34525baa67b7e26c21f3eeb7fd360728411ffcb4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ee3bb90f0c601107ecdfc33ce2fe5e0850264c0d81d9ef6e23f796c25eed7a6d333f1e68eee3cf34558627680a1e6f4dfafa19f6685e2608c9276e969aead79
|
7
|
+
data.tar.gz: 39fc74d1826fde0be3159762104d97ee7537682bfb4f6655dc5058fd583b167e7344262d4bd2c679dcf9dd2f295e1923d1aaf9c08f32a47899c81413500c0262
|
@@ -1,6 +1,9 @@
|
|
1
1
|
require 'action_view/helpers/translation_helper'
|
2
2
|
require 'action_view/helpers'
|
3
3
|
|
4
|
+
require 'vesr/reference_builder'
|
5
|
+
require 'vesr/validation_digit_calculator'
|
6
|
+
|
4
7
|
module Prawn
|
5
8
|
module EsrRecipe
|
6
9
|
|
@@ -110,31 +113,17 @@ module Prawn
|
|
110
113
|
end
|
111
114
|
|
112
115
|
def esr9_reference(invoice, esr_account)
|
113
|
-
|
116
|
+
esr_number = VESR::ReferenceBuilder.call(invoice.customer.id, invoice.id, esr_account.esr_id)
|
117
|
+
esr9_format VESR::ValidationDigitCalculator.call(esr_number)
|
114
118
|
end
|
115
119
|
|
116
120
|
def esr9_build(esr_amount, invoice, biller_id, esr_id)
|
117
121
|
# 01 is type 'Einzahlung in CHF'
|
118
122
|
amount_string = "01#{sprintf('%011.2f', esr_amount).delete('.')}"
|
119
|
-
id_string =
|
123
|
+
id_string = VESR::ReferenceBuilder.call(invoice.customer.id, invoice.id, esr_id)
|
120
124
|
biller_string = esr9_format_account_id(biller_id)
|
121
125
|
|
122
|
-
"#{
|
123
|
-
end
|
124
|
-
|
125
|
-
def esr_number(esr_id, customer_id, invoice_id)
|
126
|
-
customer_id_length = 19 - esr_id.to_s.length
|
127
|
-
esr_id.to_s + sprintf("%0#{customer_id_length}i", customer_id).delete(' ') + sprintf('%07i', invoice_id).delete(' ')
|
128
|
-
end
|
129
|
-
|
130
|
-
def esr9_add_validation_digit(value)
|
131
|
-
# Defined at http://www.pruefziffernberechnung.de/E/Einzahlungsschein-CH.shtml
|
132
|
-
esr9_table = [0, 9, 4, 6, 8, 2, 7, 1, 3, 5]
|
133
|
-
digit = 0
|
134
|
-
value.split('').map{|c| digit = esr9_table[(digit + c.to_i) % 10]}
|
135
|
-
digit = (10 - digit) % 10
|
136
|
-
|
137
|
-
"#{value}#{digit}"
|
126
|
+
"#{VESR::ValidationDigitCalculator.call(amount_string)}>#{VESR::ValidationDigitCalculator.call(id_string)}+ #{biller_string}>"
|
138
127
|
end
|
139
128
|
|
140
129
|
def esr9_format(reference_code)
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'vesr/validation_digit_calculator'
|
2
|
+
|
3
|
+
module VESR
|
4
|
+
class ReferenceBuilder
|
5
|
+
def self.call(customer_id, invoice_id, esr_id)
|
6
|
+
new(customer_id, invoice_id, esr_id).call
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_reader :customer_id, :invoice_id, :esr_id
|
10
|
+
|
11
|
+
def initialize(customer_id, invoice_id, esr_id)
|
12
|
+
@customer_id = customer_id
|
13
|
+
@invoice_id = invoice_id
|
14
|
+
@esr_id = esr_id
|
15
|
+
end
|
16
|
+
|
17
|
+
def call
|
18
|
+
"#{esr_id}#{formatted_customer_id}#{formatted_invoice_id}"
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def formatted_customer_id
|
24
|
+
format "%0#{customer_id_length}i", customer_id
|
25
|
+
end
|
26
|
+
|
27
|
+
def customer_id_length
|
28
|
+
19 - esr_id.to_s.length
|
29
|
+
end
|
30
|
+
|
31
|
+
def formatted_invoice_id
|
32
|
+
format '%07i', invoice_id
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module VESR
|
2
|
+
class ValidationDigitCalculator
|
3
|
+
# Defined at http://www.pruefziffernberechnung.de/E/Einzahlungsschein-CH.shtml
|
4
|
+
|
5
|
+
ESR9_TABLE = [0, 9, 4, 6, 8, 2, 7, 1, 3, 5]
|
6
|
+
|
7
|
+
def self.call(value)
|
8
|
+
value = value.to_s
|
9
|
+
|
10
|
+
digit = 0
|
11
|
+
value.split('').each do |char|
|
12
|
+
current_digit = digit + char.to_i
|
13
|
+
digit = ESR9_TABLE[current_digit % 10]
|
14
|
+
end
|
15
|
+
digit = (10 - digit) % 10
|
16
|
+
|
17
|
+
"#{value}#{digit}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/vesr/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vesr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Simecek
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-02-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aasm
|
@@ -81,6 +81,8 @@ files:
|
|
81
81
|
- lib/vesr/prawn.rb
|
82
82
|
- lib/vesr/prawn/esr_recipe.rb
|
83
83
|
- lib/vesr/railtie.rb
|
84
|
+
- lib/vesr/reference_builder.rb
|
85
|
+
- lib/vesr/validation_digit_calculator.rb
|
84
86
|
- lib/vesr/version.rb
|
85
87
|
homepage: https://github.com/raskhadafi/vesr
|
86
88
|
licenses:
|