Module: SuperGood::SolidusTaxjar::ApiParams

Defined in:
lib/super_good/solidus_taxjar/api_params.rb

Constant Summary collapse

UNTAXABLE_INVENTORY_UNIT_STATES =
["returned", "canceled"]

Class Method Summary collapse

Class Method Details

.address_params(address) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/super_good/solidus_taxjar/api_params.rb', line 16

def address_params(address)
  [
    address.zipcode,
    {
      street: address.address1,
      city: address.city,
      state: address&.state&.abbr || address.state_name,
      country: address.country.iso
    }
  ]
end

.order_params(order) ⇒ Object



7
8
9
10
11
12
13
14
# File 'lib/super_good/solidus_taxjar/api_params.rb', line 7

def order_params(order)
  {}
    .merge(customer_params(order))
    .merge(order_address_params(order.tax_address))
    .merge(line_items_params(order.line_items))
    .merge(shipping: shipping(order))
    .merge(SuperGood::SolidusTaxjar.custom_order_params.call(order))
end

.refund_params(reimbursement) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/super_good/solidus_taxjar/api_params.rb', line 73

def refund_params(reimbursement)
  additional_taxes = reimbursement.return_items.sum(&:additional_tax_total)

  {}
    .merge(order_address_params(reimbursement.order.tax_address))
    .merge(
      transaction_id: reimbursement.number,
      transaction_reference_id: reimbursement.order.number,
      transaction_date: reimbursement.order.completed_at.to_formatted_s(:iso8601),
      amount: reimbursement.total - additional_taxes,
      shipping: 0,
      sales_tax: additional_taxes
    )
end

.refund_transaction_params(spree_order, taxjar_order) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/super_good/solidus_taxjar/api_params.rb', line 51

def refund_transaction_params(spree_order, taxjar_order)
  {}
    .merge(order_address_params(spree_order.tax_address))
    .merge(
      {
        transaction_id: TransactionIdGenerator.refund_transaction_id(taxjar_order.transaction_id),
        transaction_reference_id: taxjar_order.transaction_id,
        transaction_date: spree_order.completed_at.to_formatted_s(:iso8601),
        amount: -1 * taxjar_order.amount,
        sales_tax: -1 * taxjar_order.sales_tax,
        shipping: -1 * taxjar_order.shipping,
        line_items: taxjar_order.line_items.map { |line_item|
          line_item.to_h.merge({
            unit_price: line_item.unit_price * -1,
            discount:  line_item.discount * -1,
            sales_tax: line_item.sales_tax * -1
          })
        }
      }
    )
end

.tax_rate_address_params(address) ⇒ Object



28
29
30
31
32
33
# File 'lib/super_good/solidus_taxjar/api_params.rb', line 28

def tax_rate_address_params(address)
  {
    amount: 100,
    shipping: 0
  }.merge(order_address_params(address))
end

.transaction_params(order, transaction_id = order.number) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/super_good/solidus_taxjar/api_params.rb', line 35

def transaction_params(order, transaction_id = order.number)
  {}
    .merge(customer_params(order))
    .merge(order_address_params(order.tax_address))
    .merge(transaction_line_items_params(order.line_items))
    .merge(
      transaction_id: transaction_id,
      transaction_date: order.completed_at.to_formatted_s(:iso8601),
      # We use `payment_total` to reflect the total liablity
      # transferred.
      amount: [order.payments.completed.sum(&:amount) - refund_total_without_tax(order) - order.additional_tax_total, 0].max,
      shipping: shipping(order),
      sales_tax: sales_tax(order)
    )
end

.validate_address_params(spree_address) ⇒ Object



88
89
90
91
92
93
94
95
96
# File 'lib/super_good/solidus_taxjar/api_params.rb', line 88

def validate_address_params(spree_address)
  {
    country: spree_address.country&.iso,
    state: spree_address.state&.abbr || spree_address.state_name,
    zip: spree_address.zipcode,
    city: spree_address.city,
    street: [spree_address.address1, spree_address.address2].compact.join(' ')
  }
end