zugpferd 0.7.0 → 0.8.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 +4 -4
- data/lib/zugpferd/cii/mapping.rb +2 -0
- data/lib/zugpferd/cii/reader.rb +6 -0
- data/lib/zugpferd/cii/writer.rb +5 -0
- data/lib/zugpferd/model/billing_document.rb +2 -1
- data/lib/zugpferd/model/postal_address.rb +6 -6
- data/lib/zugpferd/ubl/mapping.rb +2 -0
- data/lib/zugpferd/ubl/reader.rb +6 -0
- data/lib/zugpferd/ubl/writer.rb +19 -8
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 05fc84848e61ccfc901d5a22ab7d35ff8032531d543dcd85883073a7d0bd2c43
|
|
4
|
+
data.tar.gz: cd37bf998f94dd2be0f9adac19761976145b49f7aace4d22d5af2812df173e1a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 245cb66ea6b7b151145130747873780113acd36790a66420e23b210ddd1920082e22bd50661cadde218bf15bc1713687ddbc0b5a802bfd0245aa6b72b569fe7c
|
|
7
|
+
data.tar.gz: 72af5d37db91aaa59deee1cc9b9ec7aa70347d1dce1f87decc6f5347f5714a077d869533f4bcb23d9bb42b4b52b6db73157904c987c98144c5a888616d7f5f24
|
data/lib/zugpferd/cii/mapping.rb
CHANGED
|
@@ -26,6 +26,8 @@ module Zugpferd
|
|
|
26
26
|
# Delivery (BG-13)
|
|
27
27
|
DELIVERY = "#{TRANSACTION}/ram:ApplicableHeaderTradeDelivery"
|
|
28
28
|
DELIVERY_DATE = "ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString"
|
|
29
|
+
# Deliver to address (BG-15), fields as in ADDRESS
|
|
30
|
+
DELIVER_TO_ADDRESS = "ram:ShipToTradeParty/ram:PostalTradeAddress"
|
|
29
31
|
|
|
30
32
|
# Settlement (contains currency, payment, tax, totals)
|
|
31
33
|
SETTLEMENT = "#{TRANSACTION}/ram:ApplicableHeaderTradeSettlement"
|
data/lib/zugpferd/cii/reader.rb
CHANGED
|
@@ -49,6 +49,7 @@ module Zugpferd
|
|
|
49
49
|
issue_date: parse_cii_date(text(root, INVOICE[:issue_date])),
|
|
50
50
|
due_date: parse_cii_date(settlement ? text(settlement, PAYMENT_TERMS_DUE_DATE) : nil),
|
|
51
51
|
delivery_date: parse_cii_date(delivery ? text(delivery, DELIVERY_DATE) : nil),
|
|
52
|
+
deliver_to_address: build_deliver_to_address(delivery),
|
|
52
53
|
invoicing_period_start_date: parse_cii_date(period ? text(period, BILLING_PERIOD_FIELDS[:start_date]) : nil),
|
|
53
54
|
invoicing_period_end_date: parse_cii_date(period ? text(period, BILLING_PERIOD_FIELDS[:end_date]) : nil),
|
|
54
55
|
type_code: text(root, INVOICE[:type_code]),
|
|
@@ -105,6 +106,11 @@ module Zugpferd
|
|
|
105
106
|
)
|
|
106
107
|
end
|
|
107
108
|
|
|
109
|
+
def build_deliver_to_address(delivery_node)
|
|
110
|
+
addr_node = delivery_node&.at_xpath(DELIVER_TO_ADDRESS, NS)
|
|
111
|
+
build_postal_address(addr_node) if addr_node
|
|
112
|
+
end
|
|
113
|
+
|
|
108
114
|
def build_contact(node)
|
|
109
115
|
Model::Contact.new(
|
|
110
116
|
name: text(node, CONTACT_FIELDS[:name]),
|
data/lib/zugpferd/cii/writer.rb
CHANGED
|
@@ -157,6 +157,11 @@ module Zugpferd
|
|
|
157
157
|
|
|
158
158
|
def build_delivery(xml, doc)
|
|
159
159
|
xml["ram"].ApplicableHeaderTradeDelivery do
|
|
160
|
+
if doc.deliver_to_address
|
|
161
|
+
xml["ram"].ShipToTradeParty do
|
|
162
|
+
build_postal_address(xml, doc.deliver_to_address)
|
|
163
|
+
end
|
|
164
|
+
end
|
|
160
165
|
if doc.delivery_date
|
|
161
166
|
xml["ram"].ActualDeliverySupplyChainEvent do
|
|
162
167
|
xml["ram"].OccurrenceDateTime do
|
|
@@ -19,6 +19,7 @@ module Zugpferd
|
|
|
19
19
|
# @return [String] BT-3 Invoice type code
|
|
20
20
|
# @return [String] BT-5 Document currency code (default: "EUR")
|
|
21
21
|
# @return [Date, nil] BT-72 Actual delivery date
|
|
22
|
+
# @return [PostalAddress, nil] BG-15 Deliver to address
|
|
22
23
|
# @return [Array<PrecedingInvoice>] BG-3 Preceding invoice references
|
|
23
24
|
# @return [Date, nil] BT-73 Invoicing period start date
|
|
24
25
|
# @return [Date, nil] BT-74 Invoicing period end date
|
|
@@ -35,7 +36,7 @@ module Zugpferd
|
|
|
35
36
|
# @return [PaymentInstructions, nil] BG-16 Payment information
|
|
36
37
|
# @return [Array<AllowanceCharge>] BG-20/BG-21 Document-level allowances and charges
|
|
37
38
|
attr_accessor :number, :issue_date, :due_date, :type_code,
|
|
38
|
-
:currency_code, :delivery_date,
|
|
39
|
+
:currency_code, :delivery_date, :deliver_to_address,
|
|
39
40
|
:invoicing_period_start_date, :invoicing_period_end_date,
|
|
40
41
|
:buyer_reference, :purchase_order_reference,
|
|
41
42
|
:customization_id, :profile_id, :note, :seller, :buyer,
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
module Zugpferd
|
|
2
2
|
module Model
|
|
3
|
-
# Postal address (BG-5 / BG-8).
|
|
3
|
+
# Postal address (BG-5 / BG-8 / BG-15).
|
|
4
4
|
class PostalAddress
|
|
5
|
-
# @return [String, nil] BT-35/BT-50 Street name
|
|
6
|
-
# @return [String, nil] BT-37/BT-52 City name
|
|
7
|
-
# @return [String, nil] BT-38/BT-53 Postal zone
|
|
8
|
-
# @return [String] BT-40/BT-55 Country code
|
|
5
|
+
# @return [String, nil] BT-35/BT-50/BT-75 Street name
|
|
6
|
+
# @return [String, nil] BT-37/BT-52/BT-77 City name
|
|
7
|
+
# @return [String, nil] BT-38/BT-53/BT-78 Postal zone
|
|
8
|
+
# @return [String] BT-40/BT-55/BT-80 Country code
|
|
9
9
|
attr_accessor :street_name, :city_name, :postal_zone, :country_code
|
|
10
10
|
|
|
11
|
-
# @param country_code [String] BT-40/BT-55 Country code (ISO 3166-1 alpha-2)
|
|
11
|
+
# @param country_code [String] BT-40/BT-55/BT-80 Country code (ISO 3166-1 alpha-2)
|
|
12
12
|
# @param rest [Hash] additional attributes set via accessors
|
|
13
13
|
def initialize(country_code:, **rest)
|
|
14
14
|
@country_code = country_code
|
data/lib/zugpferd/ubl/mapping.rb
CHANGED
|
@@ -32,6 +32,8 @@ module Zugpferd
|
|
|
32
32
|
# Delivery (BG-13)
|
|
33
33
|
DELIVERY = "cac:Delivery"
|
|
34
34
|
DELIVERY_DATE = "cbc:ActualDeliveryDate"
|
|
35
|
+
# Deliver to address (BG-15), fields as in ADDRESS
|
|
36
|
+
DELIVER_TO_ADDRESS = "cac:DeliveryLocation/cac:Address"
|
|
35
37
|
|
|
36
38
|
# Invoicing period (BG-14)
|
|
37
39
|
INVOICE_PERIOD = "cac:InvoicePeriod"
|
data/lib/zugpferd/ubl/reader.rb
CHANGED
|
@@ -42,6 +42,7 @@ module Zugpferd
|
|
|
42
42
|
issue_date: parse_date(text(root, INVOICE[:issue_date])),
|
|
43
43
|
due_date: parse_date(text(root, due_date_element)),
|
|
44
44
|
delivery_date: delivery_node ? parse_date(text(delivery_node, DELIVERY_DATE)) : nil,
|
|
45
|
+
deliver_to_address: build_deliver_to_address(delivery_node),
|
|
45
46
|
invoicing_period_start_date: period_node ? parse_date(text(period_node, INVOICE_PERIOD_FIELDS[:start_date])) : nil,
|
|
46
47
|
invoicing_period_end_date: period_node ? parse_date(text(period_node, INVOICE_PERIOD_FIELDS[:end_date])) : nil,
|
|
47
48
|
type_code: text(root, type_code_element),
|
|
@@ -98,6 +99,11 @@ module Zugpferd
|
|
|
98
99
|
)
|
|
99
100
|
end
|
|
100
101
|
|
|
102
|
+
def build_deliver_to_address(delivery_node)
|
|
103
|
+
addr_node = delivery_node&.at_xpath(DELIVER_TO_ADDRESS, @ns)
|
|
104
|
+
build_postal_address(addr_node) if addr_node
|
|
105
|
+
end
|
|
106
|
+
|
|
101
107
|
def build_contact(node)
|
|
102
108
|
Model::Contact.new(
|
|
103
109
|
name: text(node, CONTACT_FIELDS[:name]),
|
data/lib/zugpferd/ubl/writer.rb
CHANGED
|
@@ -56,7 +56,7 @@ module Zugpferd
|
|
|
56
56
|
|
|
57
57
|
build_supplier(xml, doc.seller, doc.payment_instructions) if doc.seller
|
|
58
58
|
build_customer(xml, doc.buyer) if doc.buyer
|
|
59
|
-
build_delivery(xml, doc) if doc.delivery_date
|
|
59
|
+
build_delivery(xml, doc) if doc.delivery_date || doc.deliver_to_address
|
|
60
60
|
build_payment_means(xml, doc.payment_instructions, doc.due_date) if doc.payment_instructions
|
|
61
61
|
build_payment_terms(xml, doc.payment_instructions) if doc.payment_instructions&.note
|
|
62
62
|
doc.allowance_charges.each { |ac| build_allowance_charge(xml, ac, doc.currency_code) }
|
|
@@ -137,12 +137,16 @@ module Zugpferd
|
|
|
137
137
|
|
|
138
138
|
def build_postal_address(xml, addr)
|
|
139
139
|
xml["cac"].PostalAddress do
|
|
140
|
-
xml
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
140
|
+
build_address_fields(xml, addr)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def build_address_fields(xml, addr)
|
|
145
|
+
xml["cbc"].StreetName addr.street_name if addr.street_name
|
|
146
|
+
xml["cbc"].CityName addr.city_name if addr.city_name
|
|
147
|
+
xml["cbc"].PostalZone addr.postal_zone if addr.postal_zone
|
|
148
|
+
xml["cac"].Country do
|
|
149
|
+
xml["cbc"].IdentificationCode addr.country_code
|
|
146
150
|
end
|
|
147
151
|
end
|
|
148
152
|
|
|
@@ -178,7 +182,14 @@ module Zugpferd
|
|
|
178
182
|
|
|
179
183
|
def build_delivery(xml, doc)
|
|
180
184
|
xml["cac"].Delivery do
|
|
181
|
-
xml["cbc"].ActualDeliveryDate doc.delivery_date.to_s
|
|
185
|
+
xml["cbc"].ActualDeliveryDate doc.delivery_date.to_s if doc.delivery_date
|
|
186
|
+
if doc.deliver_to_address
|
|
187
|
+
xml["cac"].DeliveryLocation do
|
|
188
|
+
xml["cac"].Address do
|
|
189
|
+
build_address_fields(xml, doc.deliver_to_address)
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
182
193
|
end
|
|
183
194
|
end
|
|
184
195
|
|