Class: Datanorm::Lines::V4::Price

Inherits:
Object
  • Object
show all
Defined in:
lib/datanorm/lines/v4/price.rb

Overview

A ‘Priceset` record has one or multiple `Price` records. A price represents one price for one product.

Examples:

Q4058352208304;1;39000;1;0
RG601315U1;1;2550;1;5500
100033162;1;28500;;
0

Artikelnummer

1

Preiskennzeichen (analogous to ‘Datanorm::Lines::V5::Product`) 1=wholesale (higher end-customer price) 2=retail (lower bulk price) 9=ask-for-price (only V5) Some documentation says this means 1=gross and 2=net but I cannot confirm that, the prices are always net prices and the retail/wholesale fits the bill.

2

Preis (6 Vorkomma, 2 Nachkommastellen) Price as Integer (6 digits before the comma, the last two digits represent the fraction)

3

Rabattkennzeichen (0=Rabattgruppe,1=Rabattsatz,2=Multi,3=Teuerungszuschlag) Discount type “0”=group [no change] “1”=rate [price - price * (factor/10000)] “2”=multiplier [price * (factor/1000)] “3”=surcharge [price + price * (factor/100)]

4

Rabatt

Instance Method Summary collapse

Constructor Details

#initialize(columns:) ⇒ Price



35
36
37
# File 'lib/datanorm/lines/v4/price.rb', line 35

def initialize(columns:)
  @columns = columns
end

Instance Method Details

#as_jsonObject

We don’t need the Product ID here. Our “parent” Priceset has the ID and all ‘Price` instances refer to the same product.



99
100
101
102
103
104
105
106
107
108
# File 'lib/datanorm/lines/v4/price.rb', line 99

def as_json
  {
    is_retail: retail?,
    is_wholesale: wholesale?,
    is_no_discount: no_discount?,
    is_percentage_discount: percentage_discount?,
    discount_percentage: discount_percentage_integer,
    cents:
  }
end

#centsObject



59
60
61
# File 'lib/datanorm/lines/v4/price.rb', line 59

def cents
  columns[2].to_i
end

#discount_percentage_integerObject

How much of a discount do we get?



85
86
87
# File 'lib/datanorm/lines/v4/price.rb', line 85

def discount_percentage_integer
  columns[4]&.to_i
end

#idObject


Basics




43
44
45
# File 'lib/datanorm/lines/v4/price.rb', line 43

def id
  ::Datanorm::Helpers::Utf8.call columns[0]
end

#no_discount?Boolean

If this is true, then ‘cents` represents the final price.



72
73
74
75
76
77
# File 'lib/datanorm/lines/v4/price.rb', line 72

def no_discount?
  return true if columns[3] == '2'

  # Fallback: If not defined, assume no discount.
  columns[3].nil? || columns[3].empty?
end

#percentage_discount?Boolean

If this is true, a discount should be applied to ‘cents`.



80
81
82
# File 'lib/datanorm/lines/v4/price.rb', line 80

def percentage_discount?
  columns[3] == '1'
end

#priceObject



63
64
65
# File 'lib/datanorm/lines/v4/price.rb', line 63

def price
  BigDecimal(cents) / 100
end

#retail?Boolean


Price




51
52
53
# File 'lib/datanorm/lines/v4/price.rb', line 51

def retail?
  columns[1] == '2'
end

#to_jsonObject



110
111
112
# File 'lib/datanorm/lines/v4/price.rb', line 110

def to_json(...)
  as_json.to_json(...)
end

#to_sObject


Helpers




93
94
95
# File 'lib/datanorm/lines/v4/price.rb', line 93

def to_s
  "<Price #{as_json}>"
end

#wholesale?Boolean



55
56
57
# File 'lib/datanorm/lines/v4/price.rb', line 55

def wholesale?
  columns[1] == '1'
end