lib/pwinty/order.rb in pwinty-3.0.5 vs lib/pwinty/order.rb in pwinty-3.0.6
- old
+ new
@@ -1,126 +1,134 @@
require 'dry/struct/with_setters'
require "pwinty/shipping_info"
module Pwinty
- class Order < Pwinty::Base
- include Dry::Struct::Setters
- include Dry::Struct::Setters::MassAssignment
+ class Order < Pwinty::Base
+ include Dry::Struct::Setters
+ include Dry::Struct::Setters::MassAssignment
- attribute :id, Types::Integer
- attribute :address1, Types::String.optional
- attribute :address2, Types::String.optional
- attribute :postalOrZipCode, Types::String.optional
- attribute :countryCode, Types::String
- attribute :addressTownOrCity, Types::String.optional
- attribute :recipientName, Types::String.optional
- attribute :stateOrCounty, Types::String.optional
- attribute :status, Types::String
- attribute :payment, Types::String
- attribute? :packingSlipUrl, Types::String.optional
- attribute :paymentUrl, Types::String.optional
- attribute :price, Types::Integer
- attribute :shippingInfo, Pwinty::ShippingInfo
- attribute :images, Types::Array.of(Pwinty::Image)
- attribute :merchantOrderId, Types::String.optional
- attribute :preferredShippingMethod, Types::String
- attribute :mobileTelephone, Types::String.optional
- attribute :created, Types::JSON::DateTime
- attribute :lastUpdated, Types::JSON::DateTime
- attribute :canCancel, Types::Bool
- attribute :canHold, Types::Bool
- attribute :canUpdateShipping, Types::Bool
- attribute :canUpdateImages, Types::Bool
- attribute :errorMessage, Types::String.optional
- attribute :invoiceAmountNet, Types::Integer
- attribute :invoiceTax, Types::Integer
- attribute :invoiceCurrency, Types::String.optional
- attribute :tag, Types::String.optional
+ attribute :id, Types::Integer
+ attribute :address1, Types::String.optional
+ attribute :address2, Types::String.optional
+ attribute :postalOrZipCode, Types::String.optional
+ attribute :countryCode, Types::String
+ attribute :addressTownOrCity, Types::String.optional
+ attribute :recipientName, Types::String.optional
+ attribute :stateOrCounty, Types::String.optional
+ attribute :status, Types::String
+ attribute :payment, Types::String
+ attribute? :packingSlipUrl, Types::String.optional
+ attribute :paymentUrl, Types::String.optional
+ attribute :price, Types::Integer
+ attribute :shippingInfo, Pwinty::ShippingInfo
+ attribute :images, Types::Array.of(Pwinty::Image)
+ attribute :merchantOrderId, Types::String.optional
+ attribute :preferredShippingMethod, Types::String
+ attribute :mobileTelephone, Types::String.optional
+ attribute :created, Types::JSON::DateTime
+ attribute :lastUpdated, Types::JSON::DateTime
+ attribute :canCancel, Types::Bool
+ attribute :canHold, Types::Bool
+ attribute :canUpdateShipping, Types::Bool
+ attribute :canUpdateImages, Types::Bool
+ attribute :errorMessage, Types::String.optional
+ attribute :invoiceAmountNet, Types::Integer
+ attribute :invoiceTax, Types::Integer
+ attribute :invoiceCurrency, Types::String.optional
+ attribute :tag, Types::String.optional
- def self.list(page_size=50)
- all_orders = list_each_page(page_size)
- Pwinty.collate_results(all_orders, self)
- end
+ def self.list(page_size=50)
+ all_orders = list_each_page(page_size)
+ Pwinty.collate_results(all_orders, self)
+ end
- def self.list_each_page(page_size, page_start=0, total_orders_count=nil)
- all_orders = []
- while total_orders_count.nil? or all_orders.count < total_orders_count
- response = Pwinty.conn.get("orders?limit=#{page_size}&start=#{page_start}")
- total_orders_count ||= response.body['data']['count']
- all_orders = all_orders + response.body['data']['content']
- page_start = page_start + page_size
- end
- all_orders
- end
+ def self.list_each_page(page_size, page_start=0, total_orders_count=nil)
+ all_orders = []
+ while total_orders_count.nil? or all_orders.count < total_orders_count
+ response = Pwinty.conn.get("orders?limit=#{page_size}&start=#{page_start}")
+ total_orders_count ||= response.body['data']['count']
+ all_orders = all_orders + response.body['data']['content']
+ page_start = page_start + page_size
+ end
+ all_orders
+ end
- def self.count
- response = Pwinty.conn.get("orders?count=1&offset=0")
- response.body['data']['count']
- end
+ def self.count
+ response = Pwinty.conn.get("orders?count=1&offset=0")
+ response.body['data']['count']
+ end
- def self.create(**args)
- response = Pwinty.conn.post("orders", args)
- new(response.body['data'])
- end
+ def self.create(**args)
+ response = Pwinty.conn.post("orders", args)
+ new(response.body['data'])
+ end
- def self.find(id)
- response = Pwinty.conn.get("orders/#{id}")
- new(response.body['data'])
- end
+ def self.find(id)
+ response = Pwinty.conn.get("orders/#{id}")
+ new(response.body['data'])
+ end
- def update(**args)
- update_body = self.to_hash.merge(args)
- response = Pwinty.conn.put("orders/#{self.id}/", update_body)
- self.assign_attributes(response.body['data'])
- end
+ def update(**args)
+ update_body = self.to_hash.merge(args)
+ response = Pwinty.conn.put("orders/#{self.id}/", update_body)
+ update_instance_attributes(response.body['data'])
+ end
- def submission_status
- response = Pwinty.conn.get("orders/#{id}/SubmissionStatus")
- Pwinty::OrderStatus.new(response.body['data'])
- end
+ def submission_status
+ response = Pwinty.conn.get("orders/#{id}/SubmissionStatus")
+ Pwinty::OrderStatus.new(response.body['data'])
+ end
- def submit
- self.update_status 'Submitted'
- end
+ def submit
+ self.update_status 'Submitted'
+ end
- def cancel
- self.update_status 'Cancelled'
- end
+ def cancel
+ self.update_status 'Cancelled'
+ end
- def hold
- self.update_status 'AwaitingPayment'
- end
+ def hold
+ self.update_status 'AwaitingPayment'
+ end
- def add_image image
- images = add_images([image])
- self.images
- end
+ def add_image image
+ images = add_images([image])
+ self.images
+ end
- def add_images images
- response = Pwinty.conn.post("orders/#{self.id}/images/batch", images)
- success = response.status == 200
- unless success
- Pwinty.logger.warn response.body['statusTxt']
- end
- if response.body['data'] && response.body['data']['items']
- images = Pwinty.collate_results(response.body['data']['items'], Pwinty::Image)
- self.images = self.images + images
- end
- self.images
- end
+ def add_images images
+ response = Pwinty.conn.post("orders/#{self.id}/images/batch", images)
+ success = response.status == 200
+ unless success
+ Pwinty.logger.warn response.body['statusTxt']
+ end
+ if response.body['data'] && response.body['data']['items']
+ images = Pwinty.collate_results(response.body['data']['items'], Pwinty::Image)
+ self.images = self.images + images
+ end
+ self.images
+ end
- protected
+ def update_instance_attributes(attrs)
+ self.assign_attributes(attrs)
+ end
- def update_status status
- response = Pwinty.conn.post("orders/#{self.id}/status", {status: status})
- success = response.status == 200
- unless success
- Pwinty.logger.warn response.body['statusTxt']
- end
- success
- end
+ def packingSlipUrl=(new_url)
+ @attributes[:packingSlipUrl] = new_url
+ end
+ protected
+
+ def update_status status
+ response = Pwinty.conn.post("orders/#{self.id}/status", {status: status})
+ success = response.status == 200
+ unless success
+ Pwinty.logger.warn response.body['statusTxt']
+ end
+ success
end
+
+ end
end