class Deliveries::Couriers::Envialia::Pickups::Create
Attributes
parcels[RW]
pickup_date[RW]
receiver[RW]
reference_code[RW]
remarks[RW]
sender[RW]
tracking_code[RW]
Public Class Methods
new(sender:, receiver:, parcels:, reference_code:, pickup_date:, remarks:, tracking_code:)
click to toggle source
# File lib/deliveries/couriers/envialia/pickups/create.rb, line 14 def initialize(sender:, receiver:, parcels:, reference_code:, pickup_date:, remarks:, tracking_code:) self.sender = sender self.receiver = receiver self.parcels = parcels self.reference_code = reference_code self.pickup_date = pickup_date self.remarks = remarks self.tracking_code = tracking_code end
Public Instance Methods
execute()
click to toggle source
# File lib/deliveries/couriers/envialia/pickups/create.rb, line 26 def execute response = self.class.post( api_endpoint, body: body, headers: headers, debug_output: Deliveries.debug ? Deliveries.logger : nil ) raise Deliveries::ClientError unless response.success? pickup_number = response.dig('Envelope', 'Body', 'WebServService___GrabaRecogida3Response', 'strCodOut') if pickup_number Deliveries::Pickup.new( courier_id: 'envialia', sender: sender, receiver: receiver, parcels: parcels, reference_code: reference_code, tracking_code: pickup_number, pickup_date: pickup_date ) else exception = response.dig('Envelope', 'Body', 'Fault') if exception['faultcode'].eql?('Exception') exception_code, exception_str = exception['faultstring'].split(':') else exception_code = 400 exception_str = exception['faultstring'] end raise Deliveries::APIError.new( exception_str.strip, exception_code.to_i ) end end
Private Instance Methods
api_endpoint()
click to toggle source
# File lib/deliveries/couriers/envialia/pickups/create.rb, line 128 def api_endpoint if Envialia.live? Envialia::ENVIALIA_ENDPOINT_LIVE else Envialia::ENVIALIA_ENDPOINT_TEST end end
body()
click to toggle source
# File lib/deliveries/couriers/envialia/pickups/create.rb, line 67 def body <<~XML <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___GrabaRecogida3 xmlns="http://tempuri.org/"> <strCod></strCod> <strAlbaran>#{tracking_code}</strAlbaran> <strCodAgeCargo>#{Deliveries.courier(:envialia).config(:agency_code)}</strCodAgeCargo> <strCodAgeOri></strCodAgeOri> <dtFecRec>#{pickup_date.strftime('%Y/%m/%d')}</dtFecRec> <strNomOri>#{sender.name}</strNomOri> <strPobOri>#{sender.city}</strPobOri> <strDirOri>#{sender.street}</strDirOri> <strCPOri>#{format_postcode(sender.postcode, sender.country)}</strCPOri> <strTlfOri>#{sender.phone}</strTlfOri> <strNomDes>#{receiver.name}</strNomDes> <strPobDes>#{receiver.city}</strPobDes> <strDirDes>#{receiver.street}</strDirDes> <strCPDes>#{format_postcode(receiver.postcode, receiver.country)}</strCPDes> <strTlfDes>#{receiver.phone}</strTlfDes> <strCodPais>#{receiver.country}</strCodPais> <intBul>#{parcels}</intBul> <strCodTipoServ>72</strCodTipoServ> <dPesoOri>0</dPesoOri> <dAltoOri>0</dAltoOri> <dAnchoOri>0</dAnchoOri> <dLargoOri>0</dLargoOri> <dReembolso>0</dReembolso> <dValor>0</dValor> <dAnticipo>0</dAnticipo> <dCobCli>0</dCobCli> <strObs>#{remarks}</strObs> <boSabado>false</boSabado> <boRetorno>false</boRetorno> <boGestOri>false</boGestOri> <boGestDes>false</boGestDes> <boAnulado>false</boAnulado> <boAcuse>false</boAcuse> <strRef>#{reference_code}</strRef> <dBaseImp>0</dBaseImp> <dImpuesto>0</dImpuesto> <boPorteDebCli>false</boPorteDebCli> <strDesDirEmails>#{receiver.email}</strDesDirEmails> <boCampo5>false</boCampo5> <boPagoDUAImp>false</boPagoDUAImp> <boPagoImpDes>false</boPagoImpDes> </WebServService___GrabaRecogida3> </soap:Body> </soap:Envelope> XML end
format_postcode(postcode, country)
click to toggle source
# File lib/deliveries/couriers/envialia/pickups/create.rb, line 136 def format_postcode(postcode, country) if country.to_sym.downcase == :pt postcode&.split('-')&.first else postcode end end
headers()
click to toggle source
# File lib/deliveries/couriers/envialia/pickups/create.rb, line 124 def headers { 'Content-Type' => 'application/json;charset=UTF-8', 'Accept' => 'application/json' } end