mirror of
https://github.com/System-End/theseus.git
synced 2026-04-19 21:05:10 +00:00
93 lines
2.6 KiB
Ruby
93 lines
2.6 KiB
Ruby
# == Schema Information
|
|
#
|
|
# Table name: usps_indicia
|
|
#
|
|
# id :bigint not null, primary key
|
|
# fees :decimal(, )
|
|
# flirted :boolean
|
|
# mailing_date :date
|
|
# nonmachinable :boolean
|
|
# postage :decimal(, )
|
|
# postage_weight :float
|
|
# processing_category :integer
|
|
# raw_json_response :jsonb
|
|
# usps_sku :string
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
# letter_id :bigint
|
|
# usps_payment_account_id :bigint not null
|
|
#
|
|
# Indexes
|
|
#
|
|
# index_usps_indicia_on_letter_id (letter_id)
|
|
# index_usps_indicia_on_usps_payment_account_id (usps_payment_account_id)
|
|
#
|
|
# Foreign Keys
|
|
#
|
|
# fk_rails_... (letter_id => letters.id)
|
|
# fk_rails_... (usps_payment_account_id => usps_payment_accounts.id)
|
|
#
|
|
class USPS::Indicium < ApplicationRecord
|
|
include PublicIdentifiable
|
|
set_public_id_prefix "ind"
|
|
|
|
enum :processing_category, {
|
|
letter: 0,
|
|
flat: 1,
|
|
}
|
|
|
|
belongs_to :payment_account, foreign_key: :usps_payment_account_id
|
|
belongs_to :letter, optional: true
|
|
|
|
def buy!(payment_token = nil)
|
|
raise ArgumentError, "for what?" unless letter
|
|
payment_token ||= payment_account.create_payment_token
|
|
indicium_opts = if letter.address.us?
|
|
{
|
|
processing_category: usps_proc_cat(letter.processing_category),
|
|
weight: letter.weight.to_f,
|
|
mailing_date: letter.mailing_date,
|
|
length: letter.width.to_f,
|
|
height: letter.height.to_f,
|
|
thickness: 0.1,
|
|
non_machinable_indicators: letter.non_machinable? ? { isRigid: true } : nil,
|
|
}
|
|
else
|
|
flirted = true
|
|
attrs = letter.flirt
|
|
|
|
{
|
|
processing_category: usps_proc_cat(attrs[:processing_category]),
|
|
weight: attrs[:weight],
|
|
non_machinable_indicators: attrs[:non_machinable] ? { isRigid: true } : nil,
|
|
length: 7,
|
|
height: 5,
|
|
thickness: 0.1,
|
|
}
|
|
end.compact
|
|
|
|
response = USPS::APIService.create_fcm_indicia(
|
|
payment_token:,
|
|
mailing_date: letter.mailing_date,
|
|
image_type: "SVG",
|
|
**indicium_opts,
|
|
)
|
|
|
|
self.raw_json_response = response
|
|
|
|
meta = response[:indiciaMetadata]
|
|
self.postage = meta[:postage]
|
|
self.fees = meta[:fees]&.sum { |fee| fee[:price] }
|
|
self.usps_sku = meta[:SKU]
|
|
|
|
save
|
|
end
|
|
|
|
def cost = (postage || 0) + (fees || 0)
|
|
|
|
def svg = Base64.decode64(raw_json_response["indiciaImage"])
|
|
|
|
private
|
|
|
|
def usps_proc_cat(sym) = sym.to_s.pluralize.upcase
|
|
end
|