class Gemgento::API::SOAP::Customer::Customer

Public Class Methods

authnet_cim_cards(customer_id) click to toggle source
# File lib/gemgento/api/soap/customer/customer.rb, line 7
def self.authnet_cim_cards(customer_id)
  response = MagentoApi.create_call(:customer_customer_authnet_cim_cards, { customer_id: customer_id })

  if response.success?
    return response.body
  else
    return response.body[:faultstring]
  end
end
create(customer, store) click to toggle source

Create customer in Magento.

@param [User] customer @param [Store] store @return [MagentoResponse]

# File lib/gemgento/api/soap/customer/customer.rb, line 89
def self.create(customer, store)
  message = {
      customer_data: compose_customer_data(customer, store)
  }
  MagentoApi.create_call(:customer_customer_create, message)
end
delete(customer) click to toggle source

Delete customer in Magento.

@param [User] customer @return [MagentoResponse]

# File lib/gemgento/api/soap/customer/customer.rb, line 113
def self.delete(customer)
  message = {
      customer_id: customer.magento_id
  }
  MagentoApi.create_call(:customer_customer_delete, message)
end
fetch(customer_id) click to toggle source

Grab customer from Magento and sync to Gemgento.

@param [Integer] customer_id @return [User, String] The fetched user or an error message if there was a problem.

# File lib/gemgento/api/soap/customer/customer.rb, line 41
def self.fetch(customer_id)
  response = info(customer_id)
  if response.success?
    sync_magento_to_local(response.body[:customer_info])
  else
    response.body[:faultstring]
  end
end
fetch_all(filters = {}) click to toggle source
# File lib/gemgento/api/soap/customer/customer.rb, line 17
def self.fetch_all(filters = {})
  response = list(filters)

  if response.success?
    response.body_overflow[:store_view].each do |store_view|

      unless store_view[:item].nil?
        # enforce array
        unless store_view[:item].is_a? Array
          store_view[:item] = [store_view[:item]]
        end

        store_view[:item].each do |customer|
          sync_magento_to_local(customer)
        end
      end
    end
  end
end
fetch_all_customer_groups() click to toggle source
# File lib/gemgento/api/soap/customer/customer.rb, line 50
def self.fetch_all_customer_groups
  group.each do |customer_group|
    sync_magento_customer_group_to_local(customer_group)
  end
end
group() click to toggle source
# File lib/gemgento/api/soap/customer/customer.rb, line 120
def self.group
  response = MagentoApi.create_call(:customer_group_list)

  if response.success?
    unless response.body[:result][:item].is_a? Array
      response.body[:result][:item] = [response.body[:result][:item]]
    end

    response.body[:result][:item]
  end
end
info(customer_id) click to toggle source

Get customer info from Magento

@param [Integer] customer_id @return [MagentoResponse]

# File lib/gemgento/api/soap/customer/customer.rb, line 80
def self.info(customer_id)
  MagentoApi.create_call(:customer_customer_info, { customer_id: customer_id })
end
list(filters = {}) click to toggle source

Get a list of customers from Magento.

@param filters [Hash] @return [Gemgento::MagentoResponse]

# File lib/gemgento/api/soap/customer/customer.rb, line 60
def self.list(filters = {})
  if filters.empty?
    message = {}
  else
    message = { filters: filters }
  end

  response = MagentoApi.create_call(:customer_customer_list, message)

  if response.success? && !response.body_overflow[:store_view].is_a?(Array)
    response.body_overflow[:store_view] = [response.body_overflow[:store_view]]
  end

  return response
end
update(customer, store) click to toggle source

Update customer in Magento.

@param [User] customer @param [Store] store @return [MagentoResponse]

# File lib/gemgento/api/soap/customer/customer.rb, line 101
def self.update(customer, store)
  message = {
      customer_id: customer.magento_id,
      customer_data: compose_customer_data(customer, store)
  }
  MagentoApi.create_call(:customer_customer_update, message)
end

Private Class Methods

compose_customer_data(customer, store) click to toggle source
# File lib/gemgento/api/soap/customer/customer.rb, line 166
def self.compose_customer_data(customer, store)
  customer_data = {
      email: customer.email,
      firstname: customer.first_name,
      middlename: customer.middle_name,
      lastname: customer.last_name,
      'store_id' => store.magento_id,
      'group_id' => customer.user_group.magento_id,
      'website_id' => store.website_id,
      prefix: customer.prefix,
      suffix: customer.suffix,
      dob: customer.dob.nil? ? nil : "#{customer.dob.strftime('%Y-%m-%d')} 00:00:00",
      taxvat: customer.taxvat,
      gender: customer.gender.nil? ? nil : customer.gender
  }

  if !customer.password_confirmation.blank?
    customer_data[:password] = customer.password_confirmation
  end

  customer_data
end
sync_magento_customer_group_to_local(source) click to toggle source
# File lib/gemgento/api/soap/customer/customer.rb, line 189
def self.sync_magento_customer_group_to_local(source)
  customer_group = UserGroup.where(magento_id: source[:customer_group_id]).first_or_initialize
  customer_group.magento_id = source[:customer_group_id]
  customer_group.code = source[:customer_group_code]
  customer_group.save
end
sync_magento_to_local(source) click to toggle source

Save a Magento customer as local users

# File lib/gemgento/api/soap/customer/customer.rb, line 135
def self.sync_magento_to_local(source)
  user = User.find_by(magento_id: source[:customer_id])

  if user.nil?
    user = User.where(email: source[:email]).first_or_initialize
  end

  user.magento_id = source[:customer_id]
  user.increment_id = source[:increment_id]
  user.stores << Store.find_by(magento_id: source[:store_id]) unless source[:store_id] == '0' || user.stores.include?(Store.find_by(magento_id: source[:store_id]))
  user.created_in = source[:created_in]
  user.email = source[:email]
  user.first_name = source[:firstname]
  user.middle_name = source[:middlename]
  user.last_name = source[:lastname]
  user.user_group = UserGroup.where(magento_id: source[:group_id]).first
  user.prefix = source[:prefix]
  user.suffix = source[:suffix]
  user.dob = source[:dob]
  user.taxvat = source[:taxvat]
  user.confirmation = source[:confirmation]
  user.magento_password = source[:password_hash]
  user.gender = source[:gender]
  user.sync_needed = false
  user.save(validate: false)

  API::SOAP::Customer::Address.fetch(user)

  return user
end