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

Returns a new instance of 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.

Returns:

  • (Boolean)


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.

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


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

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