money_s3 2.0.0 → 2.1.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: a7cbd29efedb54d59820bacc602225dd41d1b2f091ecc7f70514b1834bece682
4
- data.tar.gz: 96dd8b3ded7dda408155c974eef6ee1849fc4327f2863c076fc179aaf86168e7
3
+ metadata.gz: 8e219b2f5b8a348583051fceb6947614d4f18cb35581bb98b846b247c587e168
4
+ data.tar.gz: b773d23e3528107c845406e287ec9df8be91d50f6a374fe871a7feb17222b34b
5
5
  SHA512:
6
- metadata.gz: 0ba07b1e9c3552b390ed94af9c902783b8971130b94e28ac4d06410166156fbd101bec64afe4cc90c7b13433609aa96330f7108cc58350fc3c3e2039290e9560
7
- data.tar.gz: c4d5f792690c68cb20d0065742feec3abfc5922ffcd4afa703408ed223352e5057fae224a83eb146a48e815df30d68ff79afc6c6fca0cb29944e0eab1d984ee0
6
+ metadata.gz: 370e4c82225e9255754daf03b9bdd5f5d49ad067368959821313e40a3154a099b048675f30d60ebcc277db27736229844ab79c5563ff9bfdf325ec2f67653526
7
+ data.tar.gz: d2caa678acf50542b67fdc7d3c94fac54071fcc65797dfc14ffcd33e7300569e2169584a71e7a068bec6fa6e597a36d15ff772183d4a17fb1921e2307b9c9642
data/README.md CHANGED
@@ -1,13 +1,88 @@
1
1
  # MoneyS3
2
2
 
3
- This gem allows to parse and build any Money S3 entity defined in theirs XML schemas. However i didn't yet have a time to document it.
3
+ This gem allows to parse and build any Money S3 entity defined in theirs XML schemas. All the names and structure are preserved as in the original definitions which can be found [here](https://github.com/Masa331/money_xsd). This gem also includes few utilities for fast and easy XML generation.
4
4
 
5
- But it works pretty much the same as [pohoda](https://github.com/Masa331/pohoda) so if you are desperate, look there, the principle is the same.
5
+ ## Usage
6
+
7
+ ### Parsing a XML
8
+
9
+ I didn't have time to write docs yet. However parsing works exactly the same as in [Pohoda gem](https://github.com/Masa331/pohoda)
10
+
11
+ ### Building a XML
12
+
13
+ To build a Money S3 XML you need a hash with same structure you get from calling `#to_h` on parsed xml:
14
+
15
+ ```ruby
16
+ hash = { seznam_fakt_vyd: [{ doklad: '123' }] }
17
+ MoneyS3.build(hash)
18
+ ```
19
+
20
+ it returns a string like this:
21
+ ```xml
22
+ <?xml version=\"1.0\"?>
23
+ <MoneyData>
24
+ <SeznamFaktVyd>
25
+ <FaktVyd>
26
+ <Doklad>123</Doklad>
27
+ </FaktVyd>
28
+ </SeznamFaktVyd>
29
+ </MoneyData>
30
+ ```
31
+
32
+ Building works also exactly the same as in [Pohoda gem](https://github.com/Masa331/pohoda)
33
+
34
+ ### Utilities
35
+
36
+ #### `MoneyS3::Utils::BankStatements` class
37
+
38
+ Generates XML with bank movements for importing into Money S3.
39
+
40
+ Instantiate `MoneyS3::Utils::BankStatements` with hash containing statements config:
41
+ ```
42
+ config = {
43
+ my_bank_account_id: 'BAN', # Czech: zkratka bankovniho uctu
44
+ credit_transactions_rule: 'BP001', # Czech: predkontace pro prijmy
45
+ debit_transactions_rule: 'BV001', # Czech: predkontace pro vydaje
46
+ credit_transactions_vat_rule: '19Ř00U', # Czech: cleneni dph pro prijmy
47
+ debit_transactions_vat_rule: '19Ř00P', # Czech: cleneni dph pro vydaje
48
+ credit_transactions_series: 'BPrr', # Czech: ciselna rada prijmovych bankovnich dokladu
49
+ debit_transactions_series: 'BVrr' # Czech: ciselna rada vydajovych bankovnich dokladu
50
+ }
51
+ generator = MoneyS3::Utils::BankStatements.new(config)
52
+ ```
53
+
54
+ Then call `#to_xml` on the generator and pass it an array containing hashes with movement data:
55
+ ```
56
+ transactions = [
57
+ { :date => #<Date: 2019-12-05 ((2458823j,0s,0n),+0s,2299161j)>,
58
+ :transaction_id => "121205SI201442",
59
+ :amount => 8500.0,
60
+ :statement_id => "012/00001",
61
+ :variable_symbol => "0000112019",
62
+ :specific_symbol => "",
63
+ :constant_symbol => "0000000138",
64
+ :counterparty_account => "1023706843",
65
+ :counterparty_bank_code => "0100",
66
+ :type => :debit, # or :credit for credit transactions
67
+ :description => "Some description..",
68
+ :note => "Some note.." },
69
+ ...,
70
+ ...
71
+ ]
72
+ statements_string = generator.to_xml(transactions)
73
+ File.open("statements.xml", 'wb') { |f| f.write statements_string }
74
+ ```
6
75
 
7
76
  ## Changelog
8
77
 
78
+ ### 23.02.2020 - v2.1.0
79
+
80
+ Add utility class for bank statements generation.
81
+
9
82
  ### 20.10.2019
10
83
 
11
84
  Updated gem with new schemas from Money S3 19.603
12
85
 
13
- Premysl Donat
86
+ ## License
87
+
88
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,80 @@
1
+ module MoneyS3
2
+ module Utils
3
+ class BankStatements
4
+ TRANSACTION_TYPES = [:credit, :debit]
5
+
6
+ def initialize(configuration)
7
+ @my_bank_account_id = configuration.fetch :my_bank_account_id
8
+
9
+ @credit_transactions_rule = configuration.fetch :credit_transactions_rule
10
+ @debit_transactions_rule = configuration.fetch :debit_transactions_rule
11
+
12
+ @credit_transactions_vat_rule = configuration.fetch :credit_transactions_vat_rule
13
+ @debit_transactions_vat_rule = configuration.fetch :debit_transactions_vat_rule
14
+
15
+ @credit_transactions_series = configuration.fetch :credit_transactions_series
16
+ @debit_transactions_series = configuration.fetch :debit_transactions_series
17
+ end
18
+
19
+ def to_xml(raw)
20
+ statements = raw.map do |item|
21
+ amount = item.fetch :amount
22
+
23
+ data = {
24
+ id_polozky: item[:transaction_id],
25
+ dat_uc_pr: item[:date],
26
+ dat_vyst: item[:date],
27
+ dat_plat: item[:date],
28
+ dat_pln: item[:date],
29
+ vypis: item[:statement_id],
30
+ celkem: amount,
31
+ ucet: { zkrat: @my_bank_account_id },
32
+ popis: item[:description],
33
+ pozn: item[:note],
34
+ var_sym: item[:variable_symbol],
35
+ spec_sym: item[:specific_symbol],
36
+ kon_sym: item[:constant_symbol],
37
+ ad_ucet: item[:counterparty_account],
38
+ ad_kod: item[:counterparty_bank_code],
39
+ souhrn_dph: {
40
+ zaklad0: amount
41
+ }
42
+ }
43
+
44
+ transaction_type = item.fetch :type
45
+ fail "Unknown transaction type: #{transaction_type}" unless TRANSACTION_TYPES.include? transaction_type
46
+
47
+ if transaction_type == :credit
48
+ data.merge!({
49
+ vydej: '0',
50
+ pr_kont: @credit_transactions_rule,
51
+ cleneni: @credit_transactions_vat_rule,
52
+ d_rada: @credit_transactions_series
53
+ })
54
+ else
55
+ data.merge!({
56
+ vydej: '1',
57
+ pr_kont: @debit_transactions_rule,
58
+ cleneni: @debit_transactions_vat_rule,
59
+ d_rada: @debit_transactions_series
60
+ })
61
+ end
62
+
63
+ data.delete_if { |_, v| v.nil? || v == '' }
64
+ data.transform_values! do |value|
65
+ if value.is_a? Hash
66
+ value.transform_values! { |value| value.to_s }
67
+ else
68
+ value.to_s
69
+ end
70
+ end
71
+
72
+ data
73
+ end
74
+
75
+ money_data = { seznam_bank_dokl: statements }
76
+ MoneyS3.build(money_data)
77
+ end
78
+ end
79
+ end
80
+ end
data/lib/money_s3.rb CHANGED
@@ -5,6 +5,8 @@ require 'money_s3/requires'
5
5
  require 'money_s3/parsers/money_data'
6
6
  require 'money_s3/builders/money_data'
7
7
 
8
+ require 'money_s3/utils/bank_statements'
9
+
8
10
  module MoneyS3
9
11
  def self.parse(raw)
10
12
  parsed = Ox.load(raw, skip: :skip_none)
data/money_s3.gemspec CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = 'money_s3'
6
- spec.version = '2.0.0'
6
+ spec.version = '2.1.0'
7
7
  spec.authors = ['Premysl Donat']
8
8
  spec.email = ['pdonat@seznam.cz']
9
9
 
@@ -15,14 +15,12 @@ Gem::Specification.new do |spec|
15
15
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
16
  f.match(%r{^(test|spec|features)/})
17
17
  end
18
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
18
  spec.require_paths = ['lib']
20
19
 
21
20
  spec.add_dependency 'ox'
22
21
  spec.add_dependency 'damedata_parser_core'
23
22
 
24
23
  spec.add_development_dependency 'bundler'
25
- spec.add_development_dependency 'rake'
26
24
  spec.add_development_dependency 'rspec'
27
25
  spec.add_development_dependency 'rspec-its'
28
26
  spec.add_development_dependency 'pry'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: money_s3
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Premysl Donat
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-20 00:00:00.000000000 Z
11
+ date: 2020-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ox
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -149,9 +135,6 @@ files:
149
135
  - Gemfile
150
136
  - LICENSE.txt
151
137
  - README.md
152
- - Rakefile
153
- - bin/console
154
- - bin/setup
155
138
  - lib/money_s3.rb
156
139
  - lib/money_s3/builders/adresa_type.rb
157
140
  - lib/money_s3/builders/alternativa_prislusenstvi_type.rb
@@ -574,6 +557,7 @@ files:
574
557
  - lib/money_s3/parsers/zauctovani_dph_type.rb
575
558
  - lib/money_s3/parsers/zavazek_type.rb
576
559
  - lib/money_s3/requires.rb
560
+ - lib/money_s3/utils/bank_statements.rb
577
561
  - money_s3.gemspec
578
562
  - xsd/Dochazka/Dochazka.xsd
579
563
  - xsd/Dochazka/Zamestnanci.xsd
@@ -617,7 +601,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
617
601
  - !ruby/object:Gem::Version
618
602
  version: '0'
619
603
  requirements: []
620
- rubygems_version: 3.0.3
604
+ rubygems_version: 3.1.2
621
605
  signing_key:
622
606
  specification_version: 4
623
607
  summary: MoneyS3 XML parser and builder
data/Rakefile DELETED
@@ -1,6 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task :default => :spec
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "money_s3"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here