invoicing 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +3 -0
- data/LICENSE +20 -0
- data/Manifest +60 -0
- data/README +48 -0
- data/Rakefile +75 -0
- data/invoicing.gemspec +41 -0
- data/lib/invoicing.rb +9 -0
- data/lib/invoicing/cached_record.rb +107 -0
- data/lib/invoicing/class_info.rb +187 -0
- data/lib/invoicing/connection_adapter_ext.rb +44 -0
- data/lib/invoicing/countries/uk.rb +24 -0
- data/lib/invoicing/currency_value.rb +212 -0
- data/lib/invoicing/find_subclasses.rb +193 -0
- data/lib/invoicing/ledger_item.rb +718 -0
- data/lib/invoicing/ledger_item/render_html.rb +515 -0
- data/lib/invoicing/ledger_item/render_ubl.rb +268 -0
- data/lib/invoicing/line_item.rb +246 -0
- data/lib/invoicing/price.rb +9 -0
- data/lib/invoicing/tax_rate.rb +9 -0
- data/lib/invoicing/taxable.rb +355 -0
- data/lib/invoicing/time_dependent.rb +388 -0
- data/lib/invoicing/version.rb +21 -0
- data/test/cached_record_test.rb +100 -0
- data/test/class_info_test.rb +253 -0
- data/test/connection_adapter_ext_test.rb +71 -0
- data/test/currency_value_test.rb +184 -0
- data/test/find_subclasses_test.rb +120 -0
- data/test/fixtures/README +7 -0
- data/test/fixtures/cached_record.sql +22 -0
- data/test/fixtures/class_info.sql +28 -0
- data/test/fixtures/currency_value.sql +29 -0
- data/test/fixtures/find_subclasses.sql +43 -0
- data/test/fixtures/ledger_item.sql +39 -0
- data/test/fixtures/line_item.sql +33 -0
- data/test/fixtures/price.sql +4 -0
- data/test/fixtures/tax_rate.sql +4 -0
- data/test/fixtures/taxable.sql +14 -0
- data/test/fixtures/time_dependent.sql +35 -0
- data/test/ledger_item_test.rb +352 -0
- data/test/line_item_test.rb +139 -0
- data/test/models/README +4 -0
- data/test/models/test_subclass_in_another_file.rb +3 -0
- data/test/models/test_subclass_not_in_database.rb +6 -0
- data/test/price_test.rb +9 -0
- data/test/ref-output/creditnote3.html +82 -0
- data/test/ref-output/creditnote3.xml +89 -0
- data/test/ref-output/invoice1.html +93 -0
- data/test/ref-output/invoice1.xml +111 -0
- data/test/ref-output/invoice2.html +86 -0
- data/test/ref-output/invoice2.xml +98 -0
- data/test/ref-output/invoice_null.html +36 -0
- data/test/render_html_test.rb +69 -0
- data/test/render_ubl_test.rb +32 -0
- data/test/setup.rb +37 -0
- data/test/tax_rate_test.rb +9 -0
- data/test/taxable_test.rb +180 -0
- data/test/test_helper.rb +48 -0
- data/test/time_dependent_test.rb +180 -0
- data/website/curvycorners.js +1 -0
- data/website/screen.css +149 -0
- data/website/template.html.erb +43 -0
- metadata +180 -0
@@ -0,0 +1,139 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), 'test_helper.rb')
|
4
|
+
|
5
|
+
####### Helper stuff
|
6
|
+
|
7
|
+
module LineItemMethods
|
8
|
+
RENAMED_METHODS = {
|
9
|
+
:id => :id2, :type => :type2, :ledger_item_id => :ledger_item_id2,
|
10
|
+
:net_amount => :net_amount2, :tax_amount => :tax_amount2,
|
11
|
+
:description => :description2, :uuid => :uuid2, :tax_point => :tax_point2,
|
12
|
+
:tax_rate_id => :tax_rate_id2, :price_id => :price_id2,
|
13
|
+
:quantity => :quantity2, :creator_id => :creator_id2, :ledger_item => :ledger_item2
|
14
|
+
}
|
15
|
+
|
16
|
+
def description2
|
17
|
+
"moo"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
####### Classes for use in the tests (also used by LedgerItemTest)
|
23
|
+
|
24
|
+
class SuperLineItem < ActiveRecord::Base
|
25
|
+
set_primary_key 'id2'
|
26
|
+
set_inheritance_column 'type2'
|
27
|
+
set_table_name 'line_item_records'
|
28
|
+
include LineItemMethods
|
29
|
+
acts_as_line_item RENAMED_METHODS
|
30
|
+
belongs_to :ledger_item2, :class_name => 'MyLedgerItem', :foreign_key => 'ledger_item_id2'
|
31
|
+
end
|
32
|
+
|
33
|
+
class SubLineItem < SuperLineItem
|
34
|
+
def description2
|
35
|
+
"this is the SubLineItem"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class OtherLineItem < SuperLineItem
|
40
|
+
end
|
41
|
+
|
42
|
+
class UntaxedLineItem < SuperLineItem
|
43
|
+
end
|
44
|
+
|
45
|
+
class UUIDNotPresentLineItem < ActiveRecord::Base
|
46
|
+
set_primary_key 'id2'
|
47
|
+
set_inheritance_column 'type2'
|
48
|
+
set_table_name 'line_item_records'
|
49
|
+
include LineItemMethods
|
50
|
+
|
51
|
+
def get_class_info
|
52
|
+
line_item_class_info
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class OverwrittenMethodsNotPresentLineItem < ActiveRecord::Base
|
57
|
+
set_primary_key 'id2'
|
58
|
+
set_inheritance_column 'type2'
|
59
|
+
set_table_name 'line_item_records'
|
60
|
+
acts_as_line_item LineItemMethods::RENAMED_METHODS
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
####### The actual tests
|
65
|
+
|
66
|
+
class LineItemTest < Test::Unit::TestCase
|
67
|
+
|
68
|
+
def test_net_amount_is_currency_value
|
69
|
+
assert_equal '$432.10', UntaxedLineItem.find(4).net_amount2_formatted
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_tax_amount_is_currency_value
|
73
|
+
assert_equal '£15.00', SuperLineItem.find(1).tax_amount2_formatted
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_gross_amount
|
77
|
+
assert_equal BigDecimal('115'), SuperLineItem.find(1).gross_amount
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_gross_amount_formatted
|
81
|
+
assert_equal '£115.00', SuperLineItem.find(1).gross_amount_formatted
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_assign_uuid_to_new_record
|
85
|
+
record = SuperLineItem.new
|
86
|
+
begin
|
87
|
+
UUID
|
88
|
+
uuid_gem_available = true
|
89
|
+
rescue NameError
|
90
|
+
uuid_gem_available = false
|
91
|
+
end
|
92
|
+
if uuid_gem_available
|
93
|
+
assert_match /^[0-9a-f]{8}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{12}$/, record.uuid2
|
94
|
+
else
|
95
|
+
assert record.uuid2.blank?
|
96
|
+
puts "Warning: uuid gem not installed -- not testing UUID generation"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_uuid_gem_not_present
|
101
|
+
begin
|
102
|
+
real_uuid = Object.send(:remove_const, :UUID)
|
103
|
+
UUIDNotPresentLineItem.acts_as_line_item(LineItemMethods::RENAMED_METHODS)
|
104
|
+
assert_nil UUIDNotPresentLineItem.new.get_class_info.uuid_generator
|
105
|
+
ensure
|
106
|
+
Object.send(:const_set, :UUID, real_uuid)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_must_provide_ledger_item_association
|
111
|
+
assert_raise RuntimeError do
|
112
|
+
OverwrittenMethodsNotPresentLineItem.new.ledger_item
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_ledger_item_error
|
117
|
+
assert_raise RuntimeError do
|
118
|
+
SuperLineItem.find(1).ledger_item # not ledger_item2
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_currency
|
123
|
+
assert_equal 'GBP', SubLineItem.find(2).currency
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_in_effect_scope
|
127
|
+
assert_equal [1,2,3,4,5,6,7,8], SuperLineItem.all.map{|i| i.id}.sort
|
128
|
+
assert_equal [1,2,3,4,5,6], SuperLineItem.in_effect.map{|i| i.id}.sort
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_sorted_scope
|
132
|
+
assert_equal [4,2,1,5,3,6,7,8], SuperLineItem.sorted(:tax_point).map{|i| i.id}
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_sorted_scope_with_non_existent_column
|
136
|
+
assert_equal [1,2,3,4,5,6,7,8], SuperLineItem.sorted(:this_column_does_not_exist).map{|i| i.id}
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
data/test/models/README
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
# Please do not require this file or the class name TestSubclassNotInDatabase
|
2
|
+
# anywhere. The whole point of it is that it is a subclass of TestBaseclass
|
3
|
+
# which exists, but is never loaded, because it isn't mentioned anywhere.
|
4
|
+
# FindSubclassesTest#test_known_subclasses tests this.
|
5
|
+
class TestSubclassNotInDatabase < TestBaseclass
|
6
|
+
end
|
data/test/price_test.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
<h1 class="invoice">Credit Note</h1>
|
2
|
+
<table class="invoice addresses">
|
3
|
+
<tr>
|
4
|
+
<th class="recipient">Recipient</th>
|
5
|
+
<th class="sender">Sender</th>
|
6
|
+
</tr>
|
7
|
+
<tr>
|
8
|
+
<td class="recipient vcard">
|
9
|
+
<div class="fn org">Lovely Customer Inc.</div>
|
10
|
+
<div class="contact">Fred</div>
|
11
|
+
<div class="adr">
|
12
|
+
<span class="street-address">The pasture</span><br />
|
13
|
+
<span class="locality">Mootown</span><br />
|
14
|
+
<span class="region">Cow Kingdom</span><br />
|
15
|
+
<span class="postal-code">MOOO</span><br />
|
16
|
+
<span class="country-name">Scotland</span>
|
17
|
+
</div>
|
18
|
+
</td>
|
19
|
+
<td class="sender vcard">
|
20
|
+
<div class="fn org">Unlimited Limited</div>
|
21
|
+
<div class="contact">Mr B. Badger</div>
|
22
|
+
<div class="adr">
|
23
|
+
<span class="street-address">The Sett<br />5 Badger Lane</span><br />
|
24
|
+
<span class="locality">Badgertown</span><br />
|
25
|
+
<span class="postal-code">Badger999</span><br />
|
26
|
+
<span class="country-name">England</span>
|
27
|
+
</div>
|
28
|
+
</td>
|
29
|
+
</tr>
|
30
|
+
<tr>
|
31
|
+
<td class="recipient">
|
32
|
+
VAT number:<br /><span class="tax-number">987654321</span>
|
33
|
+
</td>
|
34
|
+
<td class="sender">
|
35
|
+
VAT number:<br /><span class="tax-number">123456789</span>
|
36
|
+
</td>
|
37
|
+
</tr>
|
38
|
+
</table>
|
39
|
+
<table class="invoice metadata">
|
40
|
+
<tr class="identifier">
|
41
|
+
<th>Invoice no.:</th>
|
42
|
+
<td>putain!</td>
|
43
|
+
</tr>
|
44
|
+
<tr class="issue-date">
|
45
|
+
<th>Issue date:</th>
|
46
|
+
<td>2008-07-13</td>
|
47
|
+
</tr>
|
48
|
+
<tr class="period-start">
|
49
|
+
<th>Period from:</th>
|
50
|
+
<td>2008-06-01</td>
|
51
|
+
</tr>
|
52
|
+
<tr class="period-end">
|
53
|
+
<th>Period until:</th>
|
54
|
+
<td>2008-07-01</td>
|
55
|
+
</tr>
|
56
|
+
</table>
|
57
|
+
<p class="invoice description">MyCreditNote 3</p>
|
58
|
+
<table class="invoice line-items">
|
59
|
+
<tr>
|
60
|
+
<th class="tax-point">Tax point</th>
|
61
|
+
<th class="quantity">Quantity</th>
|
62
|
+
<th class="description">Description</th>
|
63
|
+
<th class="net-amount">Net price</th>
|
64
|
+
<th class="tax-amount">VAT</th>
|
65
|
+
</tr>
|
66
|
+
<tr>
|
67
|
+
<td class="tax-point">2008-07-13</td>
|
68
|
+
<td class="quantity">0.5</td>
|
69
|
+
<td class="description">moo</td>
|
70
|
+
<td class="net-amount">£50.00</td>
|
71
|
+
<td class="tax-amount">£7.50</td>
|
72
|
+
</tr>
|
73
|
+
<tr class="subtotal">
|
74
|
+
<th colspan="3">Subtotal</th>
|
75
|
+
<td class="net-amount">Net: £50.00</td>
|
76
|
+
<td class="tax-amount">VAT: £7.50</td>
|
77
|
+
</tr>
|
78
|
+
<tr class="total">
|
79
|
+
<th colspan="4">Total</th>
|
80
|
+
<td class="total-amount">£57.50</td>
|
81
|
+
</tr>
|
82
|
+
</table>
|
@@ -0,0 +1,89 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<ubl:CreditNote xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
|
3
|
+
<cbc:ID>putain!</cbc:ID>
|
4
|
+
<cbc:UUID>671a05d0-d1ba-012b-48a5-0017f22d32c0</cbc:UUID>
|
5
|
+
<cbc:IssueDate>2008-07-13</cbc:IssueDate>
|
6
|
+
<cbc:IssueTime>00:00:00+00:00</cbc:IssueTime>
|
7
|
+
<cbc:TaxPointDate>2008-07-13</cbc:TaxPointDate>
|
8
|
+
<cbc:Note>MyCreditNote 3</cbc:Note>
|
9
|
+
<cac:InvoicePeriod>
|
10
|
+
<cbc:StartDate>2008-06-01</cbc:StartDate>
|
11
|
+
<cbc:StartTime>00:00:00+00:00</cbc:StartTime>
|
12
|
+
<cbc:EndDate>2008-07-01</cbc:EndDate>
|
13
|
+
<cbc:EndTime>00:00:00+00:00</cbc:EndTime>
|
14
|
+
</cac:InvoicePeriod>
|
15
|
+
<cac:AccountingSupplierParty>
|
16
|
+
<cac:Party>
|
17
|
+
<cac:PartyName>
|
18
|
+
<cbc:Name>Unlimited Limited</cbc:Name>
|
19
|
+
</cac:PartyName>
|
20
|
+
<cac:PostalAddress>
|
21
|
+
<cbc:StreetName>The Sett</cbc:StreetName>
|
22
|
+
<cbc:AdditionalStreetName>5 Badger Lane</cbc:AdditionalStreetName>
|
23
|
+
<cbc:CityName>Badgertown</cbc:CityName>
|
24
|
+
<cbc:PostalZone>Badger999</cbc:PostalZone>
|
25
|
+
<cbc:CountrySubentity></cbc:CountrySubentity>
|
26
|
+
<cac:Country>
|
27
|
+
<cbc:IdentificationCode>GB</cbc:IdentificationCode>
|
28
|
+
<cbc:Name>England</cbc:Name>
|
29
|
+
</cac:Country>
|
30
|
+
</cac:PostalAddress>
|
31
|
+
<cac:PartyTaxScheme>
|
32
|
+
<cbc:CompanyID>123456789</cbc:CompanyID>
|
33
|
+
<cac:TaxScheme>
|
34
|
+
<cbc:ID>VAT</cbc:ID>
|
35
|
+
</cac:TaxScheme>
|
36
|
+
</cac:PartyTaxScheme>
|
37
|
+
<cac:Contact>
|
38
|
+
<cbc:Name>Mr B. Badger</cbc:Name>
|
39
|
+
</cac:Contact>
|
40
|
+
</cac:Party>
|
41
|
+
</cac:AccountingSupplierParty>
|
42
|
+
<cac:AccountingCustomerParty>
|
43
|
+
<cbc:SupplierAssignedAccountID>2</cbc:SupplierAssignedAccountID>
|
44
|
+
<cac:Party>
|
45
|
+
<cac:PartyName>
|
46
|
+
<cbc:Name>Lovely Customer Inc.</cbc:Name>
|
47
|
+
</cac:PartyName>
|
48
|
+
<cac:PostalAddress>
|
49
|
+
<cbc:StreetName>The pasture</cbc:StreetName>
|
50
|
+
<cbc:CityName>Mootown</cbc:CityName>
|
51
|
+
<cbc:PostalZone>MOOO</cbc:PostalZone>
|
52
|
+
<cbc:CountrySubentity>Cow Kingdom</cbc:CountrySubentity>
|
53
|
+
<cac:Country>
|
54
|
+
<cbc:IdentificationCode>GB</cbc:IdentificationCode>
|
55
|
+
<cbc:Name>Scotland</cbc:Name>
|
56
|
+
</cac:Country>
|
57
|
+
</cac:PostalAddress>
|
58
|
+
<cac:PartyTaxScheme>
|
59
|
+
<cbc:CompanyID>987654321</cbc:CompanyID>
|
60
|
+
<cac:TaxScheme>
|
61
|
+
<cbc:ID>VAT</cbc:ID>
|
62
|
+
</cac:TaxScheme>
|
63
|
+
</cac:PartyTaxScheme>
|
64
|
+
<cac:Contact>
|
65
|
+
<cbc:Name>Fred</cbc:Name>
|
66
|
+
</cac:Contact>
|
67
|
+
</cac:Party>
|
68
|
+
</cac:AccountingCustomerParty>
|
69
|
+
<cac:TaxTotal>
|
70
|
+
<cbc:TaxAmount currencyID="GBP">7.5</cbc:TaxAmount>
|
71
|
+
</cac:TaxTotal>
|
72
|
+
<cac:LegalMonetaryTotal>
|
73
|
+
<cbc:TaxExclusiveAmount currencyID="GBP">50.0</cbc:TaxExclusiveAmount>
|
74
|
+
<cbc:PayableAmount currencyID="GBP">57.5</cbc:PayableAmount>
|
75
|
+
</cac:LegalMonetaryTotal>
|
76
|
+
<cac:CreditNoteLine>
|
77
|
+
<cbc:ID>5</cbc:ID>
|
78
|
+
<cbc:UUID>eab28cf0-d1b4-012b-48a5-0017f22d32c0</cbc:UUID>
|
79
|
+
<cbc:CreditedQuantity>0.5</cbc:CreditedQuantity>
|
80
|
+
<cbc:LineExtensionAmount currencyID="GBP">50.0</cbc:LineExtensionAmount>
|
81
|
+
<cbc:TaxPointDate>2008-07-13</cbc:TaxPointDate>
|
82
|
+
<cac:TaxTotal>
|
83
|
+
<cbc:TaxAmount currencyID="GBP">7.5</cbc:TaxAmount>
|
84
|
+
</cac:TaxTotal>
|
85
|
+
<cac:Item>
|
86
|
+
<cbc:Description>moo</cbc:Description>
|
87
|
+
</cac:Item>
|
88
|
+
</cac:CreditNoteLine>
|
89
|
+
</ubl:CreditNote>
|
@@ -0,0 +1,93 @@
|
|
1
|
+
<h1 class="invoice">Invoice</h1>
|
2
|
+
<table class="invoice addresses">
|
3
|
+
<tr>
|
4
|
+
<th class="recipient">Recipient</th>
|
5
|
+
<th class="sender">Sender</th>
|
6
|
+
</tr>
|
7
|
+
<tr>
|
8
|
+
<td class="recipient vcard">
|
9
|
+
<div class="fn org">Lovely Customer Inc.</div>
|
10
|
+
<div class="contact">Fred</div>
|
11
|
+
<div class="adr">
|
12
|
+
<span class="street-address">The pasture</span><br />
|
13
|
+
<span class="locality">Mootown</span><br />
|
14
|
+
<span class="region">Cow Kingdom</span><br />
|
15
|
+
<span class="postal-code">MOOO</span><br />
|
16
|
+
<span class="country-name">Scotland</span>
|
17
|
+
</div>
|
18
|
+
</td>
|
19
|
+
<td class="sender vcard">
|
20
|
+
<div class="fn org">Unlimited Limited</div>
|
21
|
+
<div class="contact">Mr B. Badger</div>
|
22
|
+
<div class="adr">
|
23
|
+
<span class="street-address">The Sett<br />5 Badger Lane</span><br />
|
24
|
+
<span class="locality">Badgertown</span><br />
|
25
|
+
<span class="postal-code">Badger999</span><br />
|
26
|
+
<span class="country-name">England</span>
|
27
|
+
</div>
|
28
|
+
</td>
|
29
|
+
</tr>
|
30
|
+
<tr>
|
31
|
+
<td class="recipient">
|
32
|
+
VAT number:<br /><span class="tax-number">987654321</span>
|
33
|
+
</td>
|
34
|
+
<td class="sender">
|
35
|
+
VAT number:<br /><span class="tax-number">123456789</span>
|
36
|
+
</td>
|
37
|
+
</tr>
|
38
|
+
</table>
|
39
|
+
<table class="invoice metadata">
|
40
|
+
<tr class="identifier">
|
41
|
+
<th>Invoice no.:</th>
|
42
|
+
<td>1</td>
|
43
|
+
</tr>
|
44
|
+
<tr class="issue-date">
|
45
|
+
<th>Issue date:</th>
|
46
|
+
<td>2008-06-30</td>
|
47
|
+
</tr>
|
48
|
+
<tr class="period-start">
|
49
|
+
<th>Period from:</th>
|
50
|
+
<td>2008-06-01</td>
|
51
|
+
</tr>
|
52
|
+
<tr class="period-end">
|
53
|
+
<th>Period until:</th>
|
54
|
+
<td>2008-07-01</td>
|
55
|
+
</tr>
|
56
|
+
<tr class="due-date">
|
57
|
+
<th>Payment due:</th>
|
58
|
+
<td>2008-07-30</td>
|
59
|
+
</tr>
|
60
|
+
</table>
|
61
|
+
<p class="invoice description">MyInvoice 1</p>
|
62
|
+
<table class="invoice line-items">
|
63
|
+
<tr>
|
64
|
+
<th class="tax-point">Tax point</th>
|
65
|
+
<th class="quantity">Quantity</th>
|
66
|
+
<th class="description">Description</th>
|
67
|
+
<th class="net-amount">Net price</th>
|
68
|
+
<th class="tax-amount">VAT</th>
|
69
|
+
</tr>
|
70
|
+
<tr>
|
71
|
+
<td class="tax-point">2008-06-25</td>
|
72
|
+
<td class="quantity">4.0</td>
|
73
|
+
<td class="description">this is the SubLineItem</td>
|
74
|
+
<td class="net-amount">£200.00</td>
|
75
|
+
<td class="tax-amount">£0.00</td>
|
76
|
+
</tr>
|
77
|
+
<tr>
|
78
|
+
<td class="tax-point">2008-06-30</td>
|
79
|
+
<td class="quantity">1.0</td>
|
80
|
+
<td class="description">moo</td>
|
81
|
+
<td class="net-amount">£100.00</td>
|
82
|
+
<td class="tax-amount">£15.00</td>
|
83
|
+
</tr>
|
84
|
+
<tr class="subtotal">
|
85
|
+
<th colspan="3">Subtotal</th>
|
86
|
+
<td class="net-amount">Net: £300.00</td>
|
87
|
+
<td class="tax-amount">VAT: £15.00</td>
|
88
|
+
</tr>
|
89
|
+
<tr class="total">
|
90
|
+
<th colspan="4">Total</th>
|
91
|
+
<td class="total-amount">£315.00</td>
|
92
|
+
</tr>
|
93
|
+
</table>
|
@@ -0,0 +1,111 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<ubl:Invoice xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
|
3
|
+
<cbc:ID>1</cbc:ID>
|
4
|
+
<cbc:UUID>30f4f680-d1b9-012b-48a5-0017f22d32c0</cbc:UUID>
|
5
|
+
<cbc:IssueDate>2008-06-30</cbc:IssueDate>
|
6
|
+
<cbc:IssueTime>00:00:00+00:00</cbc:IssueTime>
|
7
|
+
<cbc:InvoiceTypeCode>MyInvoice</cbc:InvoiceTypeCode>
|
8
|
+
<cbc:Note>MyInvoice 1</cbc:Note>
|
9
|
+
<cbc:TaxPointDate>2008-06-30</cbc:TaxPointDate>
|
10
|
+
<cac:InvoicePeriod>
|
11
|
+
<cbc:StartDate>2008-06-01</cbc:StartDate>
|
12
|
+
<cbc:StartTime>00:00:00+00:00</cbc:StartTime>
|
13
|
+
<cbc:EndDate>2008-07-01</cbc:EndDate>
|
14
|
+
<cbc:EndTime>00:00:00+00:00</cbc:EndTime>
|
15
|
+
</cac:InvoicePeriod>
|
16
|
+
<cac:AccountingSupplierParty>
|
17
|
+
<cac:Party>
|
18
|
+
<cac:PartyName>
|
19
|
+
<cbc:Name>Unlimited Limited</cbc:Name>
|
20
|
+
</cac:PartyName>
|
21
|
+
<cac:PostalAddress>
|
22
|
+
<cbc:StreetName>The Sett</cbc:StreetName>
|
23
|
+
<cbc:AdditionalStreetName>5 Badger Lane</cbc:AdditionalStreetName>
|
24
|
+
<cbc:CityName>Badgertown</cbc:CityName>
|
25
|
+
<cbc:PostalZone>Badger999</cbc:PostalZone>
|
26
|
+
<cbc:CountrySubentity></cbc:CountrySubentity>
|
27
|
+
<cac:Country>
|
28
|
+
<cbc:IdentificationCode>GB</cbc:IdentificationCode>
|
29
|
+
<cbc:Name>England</cbc:Name>
|
30
|
+
</cac:Country>
|
31
|
+
</cac:PostalAddress>
|
32
|
+
<cac:PartyTaxScheme>
|
33
|
+
<cbc:CompanyID>123456789</cbc:CompanyID>
|
34
|
+
<cac:TaxScheme>
|
35
|
+
<cbc:ID>VAT</cbc:ID>
|
36
|
+
</cac:TaxScheme>
|
37
|
+
</cac:PartyTaxScheme>
|
38
|
+
<cac:Contact>
|
39
|
+
<cbc:Name>Mr B. Badger</cbc:Name>
|
40
|
+
</cac:Contact>
|
41
|
+
</cac:Party>
|
42
|
+
</cac:AccountingSupplierParty>
|
43
|
+
<cac:AccountingCustomerParty>
|
44
|
+
<cbc:SupplierAssignedAccountID>2</cbc:SupplierAssignedAccountID>
|
45
|
+
<cac:Party>
|
46
|
+
<cac:PartyName>
|
47
|
+
<cbc:Name>Lovely Customer Inc.</cbc:Name>
|
48
|
+
</cac:PartyName>
|
49
|
+
<cac:PostalAddress>
|
50
|
+
<cbc:StreetName>The pasture</cbc:StreetName>
|
51
|
+
<cbc:CityName>Mootown</cbc:CityName>
|
52
|
+
<cbc:PostalZone>MOOO</cbc:PostalZone>
|
53
|
+
<cbc:CountrySubentity>Cow Kingdom</cbc:CountrySubentity>
|
54
|
+
<cac:Country>
|
55
|
+
<cbc:IdentificationCode>GB</cbc:IdentificationCode>
|
56
|
+
<cbc:Name>Scotland</cbc:Name>
|
57
|
+
</cac:Country>
|
58
|
+
</cac:PostalAddress>
|
59
|
+
<cac:PartyTaxScheme>
|
60
|
+
<cbc:CompanyID>987654321</cbc:CompanyID>
|
61
|
+
<cac:TaxScheme>
|
62
|
+
<cbc:ID>VAT</cbc:ID>
|
63
|
+
</cac:TaxScheme>
|
64
|
+
</cac:PartyTaxScheme>
|
65
|
+
<cac:Contact>
|
66
|
+
<cbc:Name>Fred</cbc:Name>
|
67
|
+
</cac:Contact>
|
68
|
+
</cac:Party>
|
69
|
+
</cac:AccountingCustomerParty>
|
70
|
+
<cac:PaymentTerms>
|
71
|
+
<cac:SettlementPeriod>
|
72
|
+
<cbc:StartDate>2008-06-30</cbc:StartDate>
|
73
|
+
<cbc:StartTime>00:00:00+00:00</cbc:StartTime>
|
74
|
+
<cbc:EndDate>2008-07-30</cbc:EndDate>
|
75
|
+
<cbc:EndTime>00:00:00+00:00</cbc:EndTime>
|
76
|
+
</cac:SettlementPeriod>
|
77
|
+
</cac:PaymentTerms>
|
78
|
+
<cac:TaxTotal>
|
79
|
+
<cbc:TaxAmount currencyID="GBP">15.0</cbc:TaxAmount>
|
80
|
+
</cac:TaxTotal>
|
81
|
+
<cac:LegalMonetaryTotal>
|
82
|
+
<cbc:TaxExclusiveAmount currencyID="GBP">300.0</cbc:TaxExclusiveAmount>
|
83
|
+
<cbc:PayableAmount currencyID="GBP">315.0</cbc:PayableAmount>
|
84
|
+
</cac:LegalMonetaryTotal>
|
85
|
+
<cac:InvoiceLine>
|
86
|
+
<cbc:ID>2</cbc:ID>
|
87
|
+
<cbc:UUID>0cc65e20-cfac-012b-481d-0017f22d32c0</cbc:UUID>
|
88
|
+
<cbc:InvoicedQuantity>4.0</cbc:InvoicedQuantity>
|
89
|
+
<cbc:LineExtensionAmount currencyID="GBP">200.0</cbc:LineExtensionAmount>
|
90
|
+
<cbc:TaxPointDate>2008-06-25</cbc:TaxPointDate>
|
91
|
+
<cac:TaxTotal>
|
92
|
+
<cbc:TaxAmount currencyID="GBP">0.0</cbc:TaxAmount>
|
93
|
+
</cac:TaxTotal>
|
94
|
+
<cac:Item>
|
95
|
+
<cbc:Description>this is the SubLineItem</cbc:Description>
|
96
|
+
</cac:Item>
|
97
|
+
</cac:InvoiceLine>
|
98
|
+
<cac:InvoiceLine>
|
99
|
+
<cbc:ID>1</cbc:ID>
|
100
|
+
<cbc:UUID>0cc659f0-cfac-012b-481d-0017f22d32c0</cbc:UUID>
|
101
|
+
<cbc:InvoicedQuantity>1.0</cbc:InvoicedQuantity>
|
102
|
+
<cbc:LineExtensionAmount currencyID="GBP">100.0</cbc:LineExtensionAmount>
|
103
|
+
<cbc:TaxPointDate>2008-06-30</cbc:TaxPointDate>
|
104
|
+
<cac:TaxTotal>
|
105
|
+
<cbc:TaxAmount currencyID="GBP">15.0</cbc:TaxAmount>
|
106
|
+
</cac:TaxTotal>
|
107
|
+
<cac:Item>
|
108
|
+
<cbc:Description>moo</cbc:Description>
|
109
|
+
</cac:Item>
|
110
|
+
</cac:InvoiceLine>
|
111
|
+
</ubl:Invoice>
|