class Deliveries::Couriers::Envialia::Labels::Generate

Attributes

tracking_codes[RW]

Public Class Methods

new(tracking_codes:) click to toggle source
# File lib/deliveries/couriers/envialia/labels/generate.rb, line 13
def initialize(tracking_codes:)
  self.tracking_codes = tracking_codes.respond_to?(:each) ? tracking_codes : [tracking_codes]
end

Public Instance Methods

execute() click to toggle source
# File lib/deliveries/couriers/envialia/labels/generate.rb, line 17
def execute
  decoded_labels = []

  tracking_codes.each do |tracking_code|
    response = self.class.post(
      api_endpoint,
      body: body(tracking_code),
      headers: headers,
      debug_output: Deliveries.debug ? Deliveries.logger : nil
    )

    raise Deliveries::ClientError unless response.success?

    labels = response.dig('Envelope', 'Body', 'WebServService___ConsEtiquetaEnvio6Response', 'strEtiquetas')

    if labels.blank?
      raise Deliveries::APIError.new(
        'No hay etiqutas disponibles',
        404
      )
    else
      decoded_labels << Base64.decode64(labels).force_encoding('binary')
    end
  end

  decoded_labels
end

Private Instance Methods

api_endpoint() click to toggle source
# File lib/deliveries/couriers/envialia/labels/generate.rb, line 77
def api_endpoint
  if Envialia.live?
    Envialia::ENVIALIA_ENDPOINT_LIVE
  else
    Envialia::ENVIALIA_ENDPOINT_TEST
  end
end
body(tracking_code) click to toggle source
# File lib/deliveries/couriers/envialia/labels/generate.rb, line 47
          def body(tracking_code)
            <<~XML
              <?xml version="1.0" encoding="utf-8"?>
              <soap:Envelope
                xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                <soap:Header>
                  <ROClientIDHeader xmlns="http://tempuri.org/">
                    <ID>#{session_id}</ID>
                  </ROClientIDHeader>
                </soap:Header>
                <soap:Body>
                  <WebServService___ConsEtiquetaEnvio6>
                    <strCodAgeOri>#{Deliveries.courier(:envialia).config(:agency_code)}</strCodAgeOri>
                    <strAlbaran>#{tracking_code}</strAlbaran>
                    <strBulto></strBulto>
                    <boPaginaA4>false</boPaginaA4>
                    <intNumEtiqImpresasA4>0</intNumEtiqImpresasA4>
                    <strFormato>PDF</strFormato>
                  </WebServService___ConsEtiquetaEnvio6>
                </soap:Body>
              </soap:Envelope>
            XML
          end
headers() click to toggle source
# File lib/deliveries/couriers/envialia/labels/generate.rb, line 73
def headers
  { 'Content-Type' => 'application/json;charset=UTF-8', 'Accept' => 'application/json' }
end