Module: HrLite::AmountInWords
- Defined in:
- lib/hr_lite/amount_in_words.rb
Overview
Indian-system amount in words (crore/lakh/thousand). A PORO — not a view helper — because the slip PDF template is rendered by HOST code (config.render_pdf), where engine helper modules are not in scope.
Constant Summary collapse
- ONES =
%w[zero one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen].freeze
- TENS =
%w[zero ten twenty thirty forty fifty sixty seventy eighty ninety].freeze
- SCALES =
[ [ 10_000_000, "crore" ], [ 100_000, "lakh" ], [ 1000, "thousand" ], [ 100, "hundred" ] ].freeze
Class Method Summary collapse
Class Method Details
.two_digit(number) ⇒ Object
28 29 30 31 32 |
# File 'lib/hr_lite/amount_in_words.rb', line 28 def two_digit(number) return ONES[number] if number < 20 [ TENS[number / 10], number % 10 == 0 ? nil : ONES[number % 10] ].compact.join("-") end |
.words(amount) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/hr_lite/amount_in_words.rb', line 13 def words(amount) rupees = Money.round_rupee(amount).to_i return "Zero rupees" if rupees.zero? parts = [] SCALES.each do |divisor, label| next unless rupees >= divisor parts << "#{two_digit(rupees / divisor)} #{label}" rupees %= divisor end parts << two_digit(rupees) if rupees.positive? "#{parts.join(' ').capitalize} rupees" end |