class Correios::Sigep::SearchCustomer

Public Class Methods

new(data = {}) click to toggle source
Calls superclass method
# File lib/sigep/requests/search_customer.rb, line 4
def initialize(data = {})
  @credentials = Correios.credentials
  @show_request = data[:show_request]
  super()
end

Public Instance Methods

request() click to toggle source
# File lib/sigep/requests/search_customer.rb, line 10
def request
  puts xml if @show_request == true
  begin
    format_response(Sigep.client.call(
      :busca_cliente,
      soap_action: '',
      xml: xml
    ).to_hash)
  rescue Savon::SOAPFault => error
    generate_soap_fault_exception(error)
  rescue Savon::HTTPError => error
    generate_http_exception(error.http.code)
  end
end

Private Instance Methods

format_card(card) click to toggle source
# File lib/sigep/requests/search_customer.rb, line 73
def format_card(card)
  services = card[:servicos]
  services = [services] if services.is_a?(Hash)

  {
    validity_begin: card[:data_vigencia_inicio],
    validity_end: card[:data_vigencia_fim],
    services: services.map {|s| format_service(s)}
  }
end
format_contract(contract) click to toggle source
# File lib/sigep/requests/search_customer.rb, line 60
def format_contract(contract)
  cards = contract[:cartoes_postagem]
  cards = [cards] if cards.is_a?(Hash)

  {
    board_id: contract[:codigo_diretoria].strip,
    board_description: contract[:descricao_diretoria_regional].strip,
    validity_begin: contract[:data_vigencia_inicio],
    validity_end: contract[:data_vigencia_fim],
    cards: cards.map {|c| format_card(c)}
  }
end
format_response(response) click to toggle source
# File lib/sigep/requests/search_customer.rb, line 47
def format_response(response)
  response = response[:busca_cliente_response][:return]

  contracts = response[:contratos]
  contracts = [contracts] if contracts.is_a?(Hash)

  {
    status_code: response[:status_codigo].strip,
    status_description: response[:descricao_status_cliente].strip,
    contracts: contracts.map {|c| format_contract(c)}
  }
end
format_service(service) click to toggle source
# File lib/sigep/requests/search_customer.rb, line 84
def format_service(service)
  sigep_service = service[:servico_sigep]

  {
    category: sigep_service[:categoria_servico],
    code: service[:codigo].strip,
    description: service[:descricao].strip,
    id: service[:id].strip,
    seal: sigep_service[:chancela][:chancela],
    conditions: {
      dimensions_required: sigep_service[:exige_dimensoes],
      addtional_price_required: sigep_service[:exige_valor_cobrar],
      payment_on_delivery: string_to_bool(
        sigep_service[:pagamento_entrega]
      ),
      grouped_shipment: string_to_bool(
        sigep_service[:remessa_agrupada]
      )
    }
  }
end
xml() click to toggle source
# File lib/sigep/requests/search_customer.rb, line 27
def xml
  Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
    xml['soap'].Envelope(Sigep.namespaces) do
      xml['soap'].Body do
        xml['ns1'].buscaCliente do
          parent_namespace = xml.parent.namespace
          xml.parent.namespace = nil

          xml.idContrato @credentials.contract
          xml.idCartaoPostagem @credentials.card
          xml.usuario @credentials.sigep_user
          xml.senha @credentials.sigep_password

          xml.parent.namespace = parent_namespace
        end
      end
    end
  end.doc.root.to_xml
end