hmrc-moss-return 1.0.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.
- checksums.yaml +7 -0
- data/lib/hmrc_moss.rb +1 -0
- data/lib/hmrc_moss/non_uk_supply.rb +27 -0
- data/lib/hmrc_moss/ods_file.rb +58 -0
- data/lib/hmrc_moss/return.rb +41 -0
- data/lib/hmrc_moss/supply.rb +35 -0
- data/lib/hmrc_moss/uk_supply.rb +22 -0
- data/lib/hmrc_moss/version.rb +3 -0
- data/template.ods +0 -0
- metadata +72 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: eff0991cebfdb5e330d0cc55114f0305d2cd5909
|
4
|
+
data.tar.gz: 8adcaaa419baf2acf5e005974211dd144abe3be4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1d1734cb2217184dcf1183f91acb917d8bb33695749fadf71148818145d7e2fd58fd2961411aede6f20c6a10cf54eac27152d189384d91bec1b838f85faead67
|
7
|
+
data.tar.gz: 0918be37fc925b527d2e8809e2718187895466c25556ebedbf895e48f16b91e48b27404bea07acbcd07c2fd8a75a0533bfd250be552d63aac83180065b1ff00c
|
data/lib/hmrc_moss.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'hmrc_moss/return'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'hmrc_moss/supply'
|
2
|
+
|
3
|
+
module HMRCMOSS
|
4
|
+
class NonUKSupply < Supply
|
5
|
+
|
6
|
+
def initialize(vat_number, country, attributes = {})
|
7
|
+
attributes[:vat_number] = vat_number
|
8
|
+
attributes[:country] = country
|
9
|
+
super(attributes)
|
10
|
+
end
|
11
|
+
|
12
|
+
def vat_number
|
13
|
+
@attributes[:vat_number].to_s
|
14
|
+
end
|
15
|
+
|
16
|
+
class DSL
|
17
|
+
def initialize(moss_return)
|
18
|
+
@moss_return = moss_return
|
19
|
+
end
|
20
|
+
|
21
|
+
def line(*args)
|
22
|
+
@moss_return.supplies_from_outside_uk << NonUKSupply.new(*args)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'zip'
|
2
|
+
|
3
|
+
module HMRCMOSS
|
4
|
+
class ODSFile
|
5
|
+
|
6
|
+
def initialize(moss_return)
|
7
|
+
@moss_return = moss_return
|
8
|
+
end
|
9
|
+
|
10
|
+
def content
|
11
|
+
@template_content ||= Zip::File.open(self.class.path_to_template) { |z| z.read('content.xml') }
|
12
|
+
end
|
13
|
+
|
14
|
+
def add_return_data
|
15
|
+
content.gsub!("{{uk:period}}", @moss_return.period)
|
16
|
+
content.gsub!("{{f:period}}", @moss_return.period)
|
17
|
+
(1..150).each do |i|
|
18
|
+
return_line = @moss_return.supplies_from_uk[i - 1]
|
19
|
+
content.gsub! "{{uk:taxsupp}}", "Yes" if return_line
|
20
|
+
content.gsub! "{{uk:state:#{i}}}", return_line ? return_line.country.to_s : ''
|
21
|
+
content.gsub! "{{uk:ratetype:#{i}}}", return_line ? return_line.rate_type.to_s : ''
|
22
|
+
content.gsub! "{{uk:rate:#{i}}}", return_line ? return_line.rate.to_s : ''
|
23
|
+
content.gsub! "{{uk:value:#{i}}}", return_line ? return_line.total_sales.to_s : ''
|
24
|
+
content.gsub! "{{uk:amount:#{i}}}", return_line ? return_line.vat_due.to_s : ''
|
25
|
+
content.gsub! "{{uk:taxsupp}}", "No"
|
26
|
+
|
27
|
+
return_line = @moss_return.supplies_from_outside_uk[i - 1]
|
28
|
+
content.gsub! "{{f:taxsupp}}", "Yes" if return_line
|
29
|
+
content.gsub! "{{f:number:#{i}}}", return_line ? return_line.vat_number.to_s : ''
|
30
|
+
content.gsub! "{{f:state:#{i}}}", return_line ? return_line.country.to_s : ''
|
31
|
+
content.gsub! "{{f:ratetype:#{i}}}", return_line ? return_line.rate_type.to_s : ''
|
32
|
+
content.gsub! "{{f:rate:#{i}}}", return_line ? return_line.rate.to_s : ''
|
33
|
+
content.gsub! "{{f:value:#{i}}}", return_line ? return_line.total_sales.to_s : ''
|
34
|
+
content.gsub! "{{f:amount:#{i}}}", return_line ? return_line.vat_due.to_s : ''
|
35
|
+
content.gsub! "{{f:taxsupp}}", "No"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def create_ods_file(path)
|
40
|
+
FileUtils.cp(self.class.path_to_template, path)
|
41
|
+
Zip::File.open(path) do |zip|
|
42
|
+
zip.get_output_stream('content.xml') do |io|
|
43
|
+
io.write(content)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def save(path)
|
49
|
+
add_return_data
|
50
|
+
create_ods_file(path)
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.path_to_template
|
54
|
+
File.expand_path(File.join('..', '..', '..', 'template.ods'), __FILE__)
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'hmrc_moss/uk_supply'
|
2
|
+
require 'hmrc_moss/non_uk_supply'
|
3
|
+
|
4
|
+
module HMRCMOSS
|
5
|
+
class Return
|
6
|
+
|
7
|
+
def initialize(period)
|
8
|
+
@period = period
|
9
|
+
end
|
10
|
+
|
11
|
+
def period
|
12
|
+
@period
|
13
|
+
end
|
14
|
+
|
15
|
+
def supplies_from_uk(&block)
|
16
|
+
if block_given?
|
17
|
+
dsl = HMRCMOSS::UKSupply::DSL.new(self)
|
18
|
+
dsl.instance_eval(&block)
|
19
|
+
supplies_from_uk
|
20
|
+
else
|
21
|
+
@supplies_from_uk ||= []
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def supplies_from_outside_uk(&block)
|
26
|
+
if block_given?
|
27
|
+
dsl = HMRCMOSS::NonUKSupply::DSL.new(self)
|
28
|
+
dsl.instance_eval(&block)
|
29
|
+
supplies_from_outside_uk
|
30
|
+
else
|
31
|
+
@supplies_from_outside_uk ||= []
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def ods_file
|
36
|
+
require 'hmrc_moss/ods_file'
|
37
|
+
ODSFile.new(self)
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module HMRCMOSS
|
2
|
+
class Supply
|
3
|
+
|
4
|
+
def initialize(attributes = {})
|
5
|
+
@attributes = attributes
|
6
|
+
end
|
7
|
+
|
8
|
+
def country
|
9
|
+
@attributes[:country].to_s
|
10
|
+
end
|
11
|
+
|
12
|
+
def rate_type
|
13
|
+
@attributes[:rate_type].to_s
|
14
|
+
end
|
15
|
+
|
16
|
+
def rate
|
17
|
+
numeric_value(@attributes[:rate].to_f)
|
18
|
+
end
|
19
|
+
|
20
|
+
def total_sales
|
21
|
+
numeric_value(@attributes[:total_sales])
|
22
|
+
end
|
23
|
+
|
24
|
+
def vat_due
|
25
|
+
numeric_value(@attributes[:vat_due])
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def numeric_value(value)
|
31
|
+
"%.2f" % value.to_f
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'hmrc_moss/supply'
|
2
|
+
|
3
|
+
module HMRCMOSS
|
4
|
+
class UKSupply < Supply
|
5
|
+
|
6
|
+
def initialize(country, attributes = {})
|
7
|
+
attributes[:country] = country
|
8
|
+
super(attributes)
|
9
|
+
end
|
10
|
+
|
11
|
+
class DSL
|
12
|
+
def initialize(moss_return)
|
13
|
+
@moss_return = moss_return
|
14
|
+
end
|
15
|
+
|
16
|
+
def line(*args)
|
17
|
+
@moss_return.supplies_from_uk << UKSupply.new(*args)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
data/template.ods
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hmrc-moss-return
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Adam Cooke
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-03-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rubyzip
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '2.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.0'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '2.0'
|
33
|
+
description: A Ruby library for generating a HMRC VAT MOSS return document
|
34
|
+
email:
|
35
|
+
- me@adamcooke.io
|
36
|
+
executables: []
|
37
|
+
extensions: []
|
38
|
+
extra_rdoc_files: []
|
39
|
+
files:
|
40
|
+
- lib/hmrc_moss.rb
|
41
|
+
- lib/hmrc_moss/non_uk_supply.rb
|
42
|
+
- lib/hmrc_moss/ods_file.rb
|
43
|
+
- lib/hmrc_moss/return.rb
|
44
|
+
- lib/hmrc_moss/supply.rb
|
45
|
+
- lib/hmrc_moss/uk_supply.rb
|
46
|
+
- lib/hmrc_moss/version.rb
|
47
|
+
- template.ods
|
48
|
+
homepage: https://github.com/adamcooke/hmrc-moss-return
|
49
|
+
licenses:
|
50
|
+
- MIT
|
51
|
+
metadata: {}
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
requirements: []
|
67
|
+
rubyforge_project:
|
68
|
+
rubygems_version: 2.4.5
|
69
|
+
signing_key:
|
70
|
+
specification_version: 4
|
71
|
+
summary: A Ruby library for generating a HMRC VAT MOSS return document
|
72
|
+
test_files: []
|