class SolidusShipstation::Api::ShipmentSerializer
Attributes
store_id[R]
Public Class Methods
new(store_id:)
click to toggle source
# File lib/solidus_shipstation/api/shipment_serializer.rb, line 8 def initialize(store_id:) @store_id = store_id end
Public Instance Methods
call(shipment)
click to toggle source
# File lib/solidus_shipstation/api/shipment_serializer.rb, line 12 def call(shipment) order = shipment.order state = case shipment.state when 'ready' 'awaiting_shipment' when 'shipped' 'shipped' when 'pending' if ::Spree::Config.require_payment_to_ship && !shipment.order.paid? 'awaiting_payment' else 'on_hold' end when 'canceled' 'cancelled' end { orderNumber: shipment.number, orderKey: shipment.number, orderDate: order.completed_at.iso8601, paymentDate: order.payments.find(&:valid?)&.created_at&.iso8601, orderStatus: state, customerId: order.user&.id, customerUsername: order.email, customerEmail: order.email, billTo: serialize_address(order.bill_address), shipTo: serialize_address(order.ship_address), items: shipment.line_items.map(&method(:serialize_line_item)), shippingAmount: shipment.cost, paymentMethod: 'Credit Card', advancedOptions: { storeId: store_id, }, } end
Private Instance Methods
serialize_address(address)
click to toggle source
# File lib/solidus_shipstation/api/shipment_serializer.rb, line 52 def serialize_address(address) { name: (SolidusSupport.combined_first_and_last_name_in_address? ? address&.name : address&.full_name).to_s, company: address&.company.to_s, street1: address&.address1.to_s, street2: address&.address2.to_s, city: address&.city.to_s, state: address&.state&.abbr.to_s, postalCode: address&.zipcode.to_s, country: address&.country&.iso.to_s, phone: address&.phone.to_s, residential: address&.company.blank? } end
serialize_line_item(line_item)
click to toggle source
# File lib/solidus_shipstation/api/shipment_serializer.rb, line 67 def serialize_line_item(line_item) { lineItemKey: "LineItem/#{line_item.id}", sku: line_item.sku, name: line_item.variant.descriptive_name, imageUrl: line_item.variant.images.first.try(:attachment).try(:url), quantity: line_item.quantity, unitPrice: line_item.price, taxAmount: line_item.additional_tax_total, adjustment: false, weight: { value: line_item.variant.weight.to_f, units: SolidusShipstation.config.weight_units, }, } end