Sha256: d71be6db8cd05a8f274f9e46616d4af14d27d3597d5f1cc7d2631ce00ab0642c

Contents?: true

Size: 1.2 KB

Versions: 12

Compression:

Stored size: 1.2 KB

Contents

# frozen_string_literal: true

module FFaker
  module CompanyIT
    extend ModuleUtils
    extend self

    PREFIXES = ['Studio Legale', 'Studio Tecnico', 'Laboratorio'].freeze
    SUFFIXES = %w[S.p.a. s.r.l. s.n.c. Avvocati Architetti Ingegneri].freeze

    def name
      case rand(0..2)
      when 0 then "#{NameIT.last_name} #{suffix}"
      when 1 then "#{NameIT.last_name} e #{NameIT.last_name} #{suffix}"
      when 2 then "#{prefix} #{NameIT.last_name}"
      end
    end

    def suffix
      fetch_sample(SUFFIXES)
    end

    def prefix
      fetch_sample(PREFIXES)
    end

    # Calculated using the algorithm at https://it.wikipedia.org/wiki/Partita_IVA
    # to return a valid Partita IVA (Italian VAT number)
    # @return a valid Italian VAT number (Partita IVA)
    def partita_iva
      matricola = Array.new(7) { rand(0..9) }
      office_code = fetch_sample(PIVA_OFFICE_CODES)
      base = matricola + office_code.chars.map(&:to_i)

      # Thanks https://stackoverflow.com/a/9189731/1627766
      sum = base.reverse.each_slice(2).flat_map do |x, y = 0|
        [(x * 2).divmod(10), y]
      end.flatten.sum

      control_digit = (10 - (sum % 10)) % 10

      (base << control_digit).join
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
ffaker-2.23.0 lib/ffaker/company_it.rb
ffaker-2.22.0 lib/ffaker/company_it.rb
ffaker-2.21.0 lib/ffaker/company_it.rb
ffaker-2.20.0 lib/ffaker/company_it.rb
ffaker-2.19.0 lib/ffaker/company_it.rb
ffaker-2.18.0 lib/ffaker/company_it.rb
ffaker-2.17.0 lib/ffaker/company_it.rb
ffaker-2.16.0 lib/ffaker/company_it.rb
ffaker-2.15.0 lib/ffaker/company_it.rb
ffaker-2.14.0 lib/ffaker/company_it.rb
ffaker-2.13.0 lib/ffaker/company_it.rb
ffaker-2.12.0 lib/ffaker/company_it.rb