Sha256: 701424d1a7ce379d806962acc9ae5c2a0b96aaa535b149884e45b7de052e3e42

Contents?: true

Size: 1.54 KB

Versions: 28

Compression:

Stored size: 1.54 KB

Contents

module Workarea
  module DataFile
    class TaxRates < Format
      def import!
        index = 1

        CSV.foreach(file.path, csv_options) do |row|
          instance = find_updated_model_for(rate_attributes(row.to_hash))
          instance.save

          log(index, instance)
          index += 1
        end
      end

      private

      def csv_options
        {
          headers: true,
          return_headers: false,
          header_converters: -> (h) { h.underscore.optionize.to_sym }
        }
      end

      def rate_attributes(row)
        tier_range(row)
          .merge(
            category_id: tax_category_id,
            region: row[:state],
            country: row[:country] || 'US',
            postal_code: row[:zip_code],
            percentage: row[:estimated_combined_rate],
            country_percentage: row[:federal_rate],
            region_percentage: row[:state_rate],
            postal_code_percentage: row[:county_rate],
            charge_on_shipping: row[:charge_on_shipping] !~ /false/i
          )
      end

      def tier_range(row)
        tier = {}
        tier[:tier_min] = row[:tier_min] if row[:tier_min].present?
        tier[:tier_max] = row[:tier_max] if row[:tier_max].present?
        tier
      end

      def find_updated_model_for(attrs)
        id = attrs['_id'].presence || attrs['id']

        if id.present?
          result = Tax::Rate.find_or_initialize_by(id: id)
          result.attributes = attrs
          result
        else
          Tax::Rate.new(attrs)
        end
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
workarea-core-3.5.27 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.26 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.25 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.23 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.22 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.21 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.20 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.19 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.18 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.17 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.16 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.15 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.14 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.13 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.12 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.11 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.10 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.9 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.8 app/models/workarea/data_file/tax_rates.rb
workarea-core-3.5.7 app/models/workarea/data_file/tax_rates.rb