# In this example, we use Savon gem as SOAP client.

# http://savonrb.com/

# To install: gem install savon

#

# Code sample tested with Ruby 2.1.5

 

require 'savon'

 

class DCLDemoClass

  # initializated during login

  attr_accessor :session_id

 

  def initialize

    @client = Savon.client(wsdl: "https://www.efactory.dclcorp.com/webservices/DCLWebService.asmx?WSDL",

      #wsdl: "https://www.efactory.dclcorp.com/webservices/TestDCLWebService.asmx?WSDL",

      #log_level: :debug,

      #log: true,

      #pretty_print_xml: true,

      convert_request_keys_to: :none

    )

    response = @client.call(:login, :message => { :strUser => "your_username", :strPwd => "your_account" })

    @session_id = response.body[:login_response][:login_result]

  end

 

  def submit_batch_order

    if @session_id.nil?

      puts "Wrong credentials!"

      return

    end

   

    response = @client.call(:submit_batch_order, :message =>

      { :SessionID => @session_id,

        :Batch => {

          :Location => "FR",

          :OrderArray => [

            :OrderType01Object => {

              :AccountNumber => "10501", # Set with your account (10501 for demo account)

              :OrderNumber => "TEST1001",

              :ShipTo => {

                :Company => "",

                :Attention => "Walter",

                :Address1 => "48641 Milmont dr",

                :City => "Fremont",

                :StateProvince => "CA",

                :PostalCode => "94538",

                :Country => "USA"

              },

              :FreightAccount => "00500",

              :ShippingCarrier => "UPS",

              :ShippingService => "GROUND",

              :DetailArray => [

                :DetailType01Object => {

                  :ItemNumber => "1001-001-DEMO",

                  :Description => "DEMO1 Item",

                  :Quantity => 1

                },

                :DetailType01Object => {

                  :ItemNumber => "1002-002-DEMO2",

                  :Description => "DEMO2 Item",

                  :Quantity => 5

                }

              ]

            }

          ]

        }

      }

    )

    result = response.body[:submit_batch_order_response][:submit_batch_order_result]

 

    if result[:result_status][:error].to_i > 0

      puts "Error: " + result[:result_status][:error_str]

    end

  end

end

 

#DCLDemoClass.submit_batch_order

demo = DCLDemoClass.new

demo.submit_batch_order