lib/peddler/reports.rb in peddler-0.3.1 vs lib/peddler/reports.rb in peddler-0.4.1

- old
+ new

@@ -1,97 +1,7 @@ -module Peddler +require 'peddler/service' - # This module generates and downloads unshipped order reports. - # I decided to keep this out of Peddler::LegacyReports because the API is - # quite different. - module Reports - - # This is an unshipped orders report. It is very similar to the feed - # objects, so I'm just porting over the class. - class UnshippedOrdersReport < Peddler::Feeds::Feed - alias :unshipped_orders :batch - attr_accessor :starts_at, :ends_at, :scheduled - - MAPPED_PARAMS = { - 'ReportID' => 'id', - 'StartDate' => 'starts_at', - 'EndDate' => 'ends_at', - 'DownloadType' => 'type', - 'Scheduled' => 'scheduled', - 'ReportStatus' => 'status', - 'SubmittedDate' => 'submitted_at', - 'StartedProcessingDate' => 'started_processing_at', - 'CompletedProcessingDate' => 'completed_processing_at', - 'CompletedProcesssingDate' => 'completed_processing_at'} - - # Creates new unshipped order report. It will send a request to - # Amazon to generate the report if the report ID is not already set. - def initialize(transport, params={}) - super(transport) - params.each_pair{ |key, value| self.send "#{key}=", value } - @starts_at ||= (Date.today - 7).strftime("%Y-%m-%dT00:00:00-00:00") - @ends_at ||= (Date.today + 1).strftime("%Y-%m-%dT00:00:00-00:00") - #@type ||= "_GET_CONVERGED_FLAT_FILE_ACTIONABLE_ORDER_DATA_" - @type ||= "_GET_FLAT_FILE_ACTIONABLE_ORDER_DATA_" - if @id.nil? - generate_report - end - self - end - - private - - def refresh_status - @transport.modernize_request - @transport.query_params.merge!({ - "Action" => "reportStatus", - "reportId" => @id}) - res = @transport.execute_request - process_response(res) - end - - def generate_report - @transport.modernize_request - @transport.query_params.merge!({ - 'Action' => 'generateReport', - 'startDate' => @starts_at, - 'endDate' => @ends_at, - 'downloadType' => @type}) - res = @transport.execute_request - process_response(res) - end - - def process_response(res) - hash = Hash.from_xml(res) - report = Hash.from_xml(res)['Response']['Report'] || Hash.from_xml(res)['Response']['ReportsList']['Report'] - report.each_pair do |key, value| - if key == "ListOfDownloads" - @download = Peddler::Feeds::Download.new(@transport, value['Download']) - @batch = Peddler::Handlers::TabDelimitedHandler.decode_response(@download.to_s) - else - self.send "#{MAPPED_PARAMS[key]}=", value - end - end - end - end - - # This is an unshipped order. - class Item - attr_accessor :order_id, :order_item_id, :quantity, :ship_date, :carrier_name, :tracking_number, :ship_method - attr_reader :carrier_code - - def initialize(params={}) - params.each_pair{ |key, value| send("#{key}=", value) } - end - - # Validates when setting carrier code. - def carrier_code=(carrier_code) - @carrier_code = carrier_code if %w{USPS UPS FedEx other}.include?(carrier_code) - end - - # Outputs a formatted line for the tab-delimited upload file. - def to_s - "#{@order_id}\t#{@order_item_id}\t#{@quantity}\t#{@ship_date}\t#{@carrier_code}\t#{@carrier_name}\t#{@tracking_number}\t#{@ship_method}\r\n" - end - end +module Peddler + # The Reports API lets you request reports about your inventory and orders. + class Reports < Service end end