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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 97af66296e92817aef2f4f2fbea2e0ebb7170fb3856732a552ac32210a8e085f
4
- data.tar.gz: cc23dea33a361b6fcfc93a52c0928a70bea18757cb2e022dbf123b142480383a
3
+ metadata.gz: 05fc84848e61ccfc901d5a22ab7d35ff8032531d543dcd85883073a7d0bd2c43
4
+ data.tar.gz: cd37bf998f94dd2be0f9adac19761976145b49f7aace4d22d5af2812df173e1a
5
5
  SHA512:
6
- metadata.gz: 79479ce622f08767f6ac5d3d63b5826ca3a3eef621d768005c417600f16b308856280e270a7188f49a03b3ff25f03ec0b169861570cde588fc72005d64a96b92
7
- data.tar.gz: 31d343e25f7d8c5e9d2eb459f941b5a0f67d38169e8f264f66100382e8d11ace7e5f2bfb79497d5d0dbbf6f2097965078f7b9fd2ffb0903ae1a56c3c622bdc53
6
+ metadata.gz: 245cb66ea6b7b151145130747873780113acd36790a66420e23b210ddd1920082e22bd50661cadde218bf15bc1713687ddbc0b5a802bfd0245aa6b72b569fe7c
7
+ data.tar.gz: 72af5d37db91aaa59deee1cc9b9ec7aa70347d1dce1f87decc6f5347f5714a077d869533f4bcb23d9bb42b4b52b6db73157904c987c98144c5a888616d7f5f24
@@ -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"
@@ -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]),
@@ -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
@@ -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"
@@ -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]),
@@ -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["cbc"].StreetName addr.street_name if addr.street_name
141
- xml["cbc"].CityName addr.city_name if addr.city_name
142
- xml["cbc"].PostalZone addr.postal_zone if addr.postal_zone
143
- xml["cac"].Country do
144
- xml["cbc"].IdentificationCode addr.country_code
145
- end
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
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zugpferd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Zeitler