Skip to content

Commit

Permalink
add remaining xml request templates
Browse files Browse the repository at this point in the history
  • Loading branch information
mithereal committed Dec 10, 2022
1 parent 06806e8 commit 1649a64
Show file tree
Hide file tree
Showing 20 changed files with 411 additions and 10 deletions.
170 changes: 163 additions & 7 deletions lib/shippex/carrier/usps.ex
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,14 @@ defmodule Shippex.Carrier.USPS do

@default_container :rectangular
@large_containers ~w(rectangular nonrectangular variable)a

for f <- ~w(address cancel city_state_by_zipcode label rate track validate_address zipcode)a do
@contents ~w(HAZMAT CREMATEDREMAINS PERISHABLE PHARMACEUTICALS MEDICAL SUPPLIES LIVES)a
@content_descriptions ~w(BEES DAYOLDPOULTRY ADULTBIRDS OTHER)a
@sort_types ~w(LETTER LARGEENVELOPE PACKAGE FLATRATE)a
@shipdate_options ~w(EMSH HFP)a
@sortation_level ~w(3D 5D BAS CR MIX NDC NONE PST SCF TBE TBF TBH TBT)a
@destination_entry_facility_type ~w(DDU DNDC DCSF NONE)a

for f <- ~w(address cancel carrier_pickup_availability city_state_by_zipcode express_mail_commitments first_class_service_standards hold_for_pickup package_pickup_cancel package_pickup_change package_pickup_inquery package_pickup_schedule package_service_standardb priority_mail_service_standards proof_of_delivery return_label return_receipt label rate scan sdc_get_locations sunday_holiday track track_confirm_by_email track_fields validate_address zipcode)a do
EEx.function_from_file(
:defp,
:"render_#{f}",
Expand Down Expand Up @@ -51,6 +57,10 @@ defmodule Shippex.Carrier.USPS do
{:error, "Fetch All Rates Not implemented for USPS"}
end

def machineable?(_shipment) do
"False"
end

@impl true
def fetch_rate(%Shipment{} = shipment, service) do
service =
Expand Down Expand Up @@ -313,12 +323,10 @@ defmodule Shippex.Carrier.USPS do
@spec create_hash(String.t(), number()) :: String.t()
def create_hash(string, min_len \\ 5) do
case string do
nil -> Nanoid.generate(min_len)
_-> Nanoid.generate(min_len, string)
end

nil -> Nanoid.generate(min_len)
_ -> Nanoid.generate(min_len, string)
end

end

@spec weight_in_ounces(number()) :: number()
defp weight_in_ounces(pounds) do
Expand Down Expand Up @@ -534,3 +542,151 @@ defmodule Shippex.Carrier.USPS do
:usps
end
end

defmodule Shippex.Carrier.USPS.Classid do
defstruct ratev4: [
"0": "First-ClassMail;LargeEnvelope",
"0": "First-ClassMail;StampedLetter",
"0": "First-ClassPackageService-Retail",
"0": "First-ClassMail;Postcards",
"1": "PriorityMail",
"2": "PriorityMailExpress;HoldForPickup",
"3": "PriorityMailExpress",
"4": "StandardPost",
"5": "BoundPrintedMatterParcels",
"6": "MediaMailParcel",
"7": "LibraryMailParcel",
"13": "PriorityMailExpress;FlatRateEnvelope",
"15": "First-ClassMail;LargePostcards",
"16": "PriorityMail;FlatRateEnvelope",
"17": "PriorityMail;MediumFlatRateBox",
"20": "BoundPrintedMatterFlats",
"22": "PriorityMail;LargeFlatRateBox",
"23": "PriorityMailExpress;Sunday/HolidayDelivery",
"25": "PriorityMailExpress;Sunday/HolidayDeliveryFlatRateEnvelope",
"27": "PriorityMailExpress;FlatRateEnvelopeHoldForPickup",
"28": "PriorityMail;SmallFlatRateBox",
"29": "PriorityMail;PaddedFlatRateEnvelope",
"30": "PriorityMailExpress;LegalFlatRateEnvelope",
"31": "PriorityMailExpress;LegalFlatRateEnvelopeHoldForPickup",
"32": "PriorityMailExpress;Sunday/HolidayDeliveryLegalFlatRateEnvelope",
"33": "PriorityMail;HoldForPickup",
"34": "PriorityMail;LargeFlatRateBoxHoldForPickup",
"35": "PriorityMail;MediumFlatRateBoxHoldForPickup",
"36": "PriorityMail;SmallFlatRateBoxHoldForPickup",
"37": "PriorityMail;FlatRateEnvelopeHoldForPickup",
"38": "PriorityMail;GiftCardFlatRateEnvelope",
"39": "PriorityMail;GiftCardFlatRateEnvelopeHoldForPickup",
"40": "PriorityMail;WindowFlatRateEnvelope",
"41": "PriorityMail;WindowFlatRateEnvelopeHoldForPickup",
"42": "PriorityMail;SmallFlatRateEnvelope",
"43": "PriorityMail;SmallFlatRateEnvelopeHoldForPickup",
"44": "PriorityMail;LegalFlatRateEnvelope",
"45": "PriorityMail;LegalFlatRateEnvelopeHoldForPickup",
"46": "PriorityMail;PaddedFlatRateEnvelopeHoldForPickup",
"47": "PriorityMail;RegionalRateBoxA",
"48": "PriorityMail;RegionalRateBoxAHoldForPickup",
"49": "PriorityMail;RegionalRateBoxB",
"50": "PriorityMail;RegionalRateBoxBHoldForPickup",
"53": "First-Class;PackageServiceHoldForPickup",
"55": "PriorityMailExpress;FlatRateBoxes",
"56": "PriorityMailExpress;FlatRateBoxesHoldForPickup",
"57": "PriorityMailExpress;Sunday/HolidayDeliveryFlatRateBoxes",
"58": "PriorityMail;RegionalRateBoxC",
"59": "PriorityMail;RegionalRateBoxCHoldForPickup",
"61": "First-Class;PackageService",
"62": "PriorityMailExpress;PaddedFlatRateEnvelope",
"63": "PriorityMailExpress;PaddedFlatRateEnvelopeHoldForPickup",
"64": "PriorityMailExpress;Sunday/HolidayDeliveryPaddedFlatRateEnvelope",
"77": "ParcelSelectGround",
"78": "First-ClassMail;MeteredLetter",
"82": "ParcelSelectLightweightMachinableParcels5-Digit",
"82": "ParcelSelectLightweightIrregularParcels5-Digit",
"82": "ParcelSelectLightweightMachinableParcelsNDC",
"82": "ParcelSelectLightweightIrregularParcelsNDC",
"82": "ParcelSelectLightweightMachinableParcelsMixedNDC",
"82": "ParcelSelectLightweightIrregularParcelsMixedNDC",
"82": "ParcelSelectLightweightIrregularParcelsSCF",
"84": "PriorityMailCubic",
"88": "USPSConnectLocalDDU",
"89": "USPSConnectLocalFlatRateBag–SmallDDU",
"90": "USPSConnectLocalFlatRateBag–LargeDDU",
"91": "USPSConnectLocalFlatRateBoxDDU",
"92": "ParcelSelectGroundCubic",
"179": "ParcelSelectDestinationEntryMachinableDDU",
"179": "ParcelSelectDestinationEntryNonmachinableDDU",
"179": "ParcelSelectDestinationEntryMachinableDSCF5D",
"179": "ParcelSelectDestinationEntryNonmachinableDSCF5-Digit",
"179": "ParcelSelectDestinationEntryMachinableDSCFSCF",
"179": "ParcelSelectDestinationEntryNonmachinableDSCF3-Digit",
"179": "ParcelSelectDestinationEntryMachinableDNDC",
"179": "ParcelSelectDestinationEntryNonmachinableDNDC",
"922": "PriorityMailReturnServicePaddedFlatRateEnvelope",
"932": "PriorityMailReturnServiceGiftCardFlatRateEnvelope",
"934": "PriorityMailReturnServiceWindowFlatRateEnvelope",
"936": "PriorityMailReturnServiceSmallFlatRateEnvelope",
"938": "PriorityMailReturnServiceLegalFlatRateEnvelope",
"939": "PriorityMailReturnServiceFlatRateEnvelope",
"946": "PriorityMailReturnServiceRegionalRateBoxA",
"947": "PriorityMailReturnServiceRegionalRateBoxB",
"962": "PriorityMailReturnService",
"963": "PriorityMailReturnServiceLargeFlatRateBox",
"964": "PriorityMailReturnServiceMediumFlatRateBox",
"965": "PriorityMailReturnServiceSmallFlatRateBox",
"967": "PriorityMailReturnServiceCubic",
"968": "First-ClassPackageReturnService",
"969": "GroundReturnService",
"2020": "BoundPrintedMatterFlatsHoldForPickup",
"2071": "ParcelSelectGround;HoldForPickup",
"2077": "BoundPrintedMatterParcelsHoldForPickup",
"2082": "ParcelSelectLightweightMachinableParcels5-DigitHoldForPickup",
"2082": "ParcelSelectLightweightIrregularParcels5-DigitHoldForPickup",
"2082": "ParcelSelectLightweightMachinableParcelsNDCHoldForPickup",
"2082": "ParcelSelectLightweightIrregularParcelsNDCHoldForPickup",
"2082": "ParcelSelectLightweightMachinableParcelsMixedNDCHoldForPickup",
"2082": "ParcelSelectLightweightIrregularParcelsMixedNDCHoldForPickup",
"2082": "ParcelSelectLightweightIrregularParcelsSCFHoldForPickup"
],
ratev6: [
"1": "Priority Mail Express International",
"2": "Priority Mail International",
"4": "Global Express Guaranteed; (GXG)**",
"5": "Global Express Guaranteed; Document",
"6": "Global Express Guarantee; Non-Document Rectangular",
"7": "Global Express Guaranteed; Non-Document Non-Rectangular",
"8": "Priority Mail International; Flat Rate Envelope**",
"9": "Priority Mail International; Medium Flat Rate Box",
"10": "Priority Mail Express International; Flat Rate Envelope",
"11": "Priority Mail International; Large Flat Rate Box",
"12": "USPS GXG; Envelopes**",
"13": "First-Class Mail; International Letter**",
"14": "First-Class Mail; International Large Envelope**",
"15": "First-Class Package International Service**",
"16": "Priority Mail International; Small Flat Rate Box**",
"17": "Priority Mail Express International; Legal Flat Rate Envelope",
"18": "Priority Mail International; Gift Card Flat Rate Envelope**",
"19": "Priority Mail International; Window Flat Rate Envelope**",
"20": "Priority Mail International; Small Flat Rate Envelope**",
"1": "Priority Mail Express International",
"2": "Priority Mail International",
"4": "Global Express Guaranteed; (GXG)**",
"5": "Global Express Guaranteed; Document",
"6": "Global Express Guarantee; Non-Document Rectangular",
"7": "Global Express Guaranteed; Non-Document Non-Rectangular",
"8": "Priority Mail International; Flat Rate Envelope**",
"9": "Priority Mail International; Medium Flat Rate Box",
"10": "Priority Mail Express International; Flat Rate Envelope",
"11": "Priority Mail International; Large Flat Rate Box",
"12": "USPS GXG; Envelopes**",
"13": "First-Class Mail; International Letter**",
"14": "First-Class Mail; International Large Envelope**",
"15": "First-Class Package International Service**",
"16": "Priority Mail International; Small Flat Rate Box**",
"17": "Priority Mail Express International; Legal Flat Rate Envelope",
"18": "Priority Mail International; Gift Card Flat Rate Envelope**",
"19": "Priority Mail International; Window Flat Rate Envelope**",
"20": "Priority Mail International; Small Flat Rate Envelope**",
"28": "Airmail M-Bag"
]

end
11 changes: 11 additions & 0 deletions lib/shippex/carrier/usps/templates/carrier_pickup_availability.eex
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<% username = config().username %>
<CarrierPickupAvailabilityRequest USERID='<%= username %>'>
<FirmName><%= @firm_name %></FirmName>
<SuiteOrApt><%= @suite_or_apt %></SuiteOrApt>
<Address2><%= @address2 %></Address2>
<Urbanization><%= @urbanization %></Urbanization>
<City><%= @city %></City>
<State><%= @state %></State>
<ZIP5><%= @zip5 %></ZIP5>
<ZIP4><%= @zip4 %></ZIP4>
</CarrierPickupAvailabilityRequest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<% username = config().username %>
<ExpressMailCommitmentRequest USERID='<%= username %>'>
<OriginZip><%= @origin_zip %></OriginZip>
<DestinationZip><%= @destination_zip %></DestinationZip>
<Date><%= @date %></Date>
<DropOffTime><%= @drop_off_time %></DropOffTime>
<ReturnDates><%= @return_dates %></ReturnDates>
<PMGuarantee><%= @pm_guarantee %></PMGuarantee>
</ExpressMailCommitmentRequest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<% username = config().username %>
<FirstClassMailRequest USERID='<%= username %>'>
<OriginZip><%= @origin_zip %></OriginZip>
<DestinationZip><%= @destination_zip %></DestinationZip>
<MailClass><%= @mail_class %></MailClass>
</FirstClassMailRequest>
8 changes: 8 additions & 0 deletions lib/shippex/carrier/usps/templates/hold_for_pickup.eex
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<% username = config().username %>
<HFPFacilityInfoRequest USERID='<%= username %>'>
<PickupCity />
<PickupState/>
<PickupZIP><%= @pickup_zip %></PickupZIP>
<PickupZIP4 />
<Service />
</HFPFacilityInfoRequest>
12 changes: 12 additions & 0 deletions lib/shippex/carrier/usps/templates/package_pickup_cancel.eex
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<% username = config().username %>
<CarrierPickupCancelRequest USERID='<%= username %>'>
<FirmName><%= @firm_name %></FirmName>
<SuiteOrApt><%= @suite_or_apt %></SuiteOrApt>
<Address2><%= @address2 %></Address2>
<Urbanization><%= @urbanization %></Urbanization>
<City><%= @city %></City>
<State><%= @state %></State>
<ZIP5><%= @zip5 %></ZIP5>
<ZIP4><%= @zip4 %></ZIP4>
<ConfirmationNumber><%= @confirmation_number %><</ConfirmationNumber>
</CarrierPickupCancelRequest>
22 changes: 22 additions & 0 deletions lib/shippex/carrier/usps/templates/package_pickup_change.eex
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<% username = config().username %>
<CarrierPickupChangeRequest USERID='<%= username %>'>
<FirstName><%= @first_name %></FirstName>
<LastName><%= @last_name %></LastName>
<FirmName><%= @firm_name %></FirmName>
<SuiteOrApt><%= @suite_or_apt %></SuiteOrApt>
<Address2><%= @address2 %></Address2>
<Urbanization><%= @urbanization %></Urbanization>
<City><%= @city %></City>
<State><%= @state %></State>
<ZIP5><%= @zip5 %></ZIP5>
<ZIP4><%= @zip4 %></ZIP4>
<Extension><%= @extension %></Extension>
<Package>
<ServiceType><%= @eervice_type %></ServiceType>
<Count><%= @count %></Count>
</Package>
<EstimatedWeight><%= @estimated_weight %></EstimatedWeight>
<PackageLocation><%= @packag_location %></PackageLocation>
<SpecialInstructions><%= @special_instructions %></SpecialInstructions>
<ConfirmationNumber><%= @confirmation_number %><</ConfirmationNumber>
</CarrierPickupChangeRequest>
11 changes: 11 additions & 0 deletions lib/shippex/carrier/usps/templates/package_pickup_inquery.eex
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<% username = config().username %>
<CarrierPickupInquiryRequest USERID='<%= username %>'>
<SuiteOrApt><%= @suite_or_apt %></SuiteOrApt>
<Address2><%= @address2 %></Address2>
<Urbanization><%= @urbanization %></Urbanization>
<City><%= @city %></City>
<State><%= @state %></State>
<ZIP5><%= @zip5 %></ZIP5>
<ZIP4><%= @zip4 %></ZIP4>
<ConfirmationNumber><%= @confirmation_number %><</ConfirmationNumber>
</CarrierPickupInquiryRequest>
21 changes: 21 additions & 0 deletions lib/shippex/carrier/usps/templates/package_pickup_schedule.eex
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<% username = config().username %>
<CarrierPickupScheduleRequest USERID='<%= username %>'>
<FirstName><%= @first_name %></FirstName>
<LastName><%= @last_name %></LastName>
<SuiteOrApt><%= @suite_or_apt %></SuiteOrApt>
<Address2><%= @address2 %></Address2>
<Urbanization><%= @urbanization %></Urbanization>
<City><%= @city %></City>
<State><%= @state %></State>
<ZIP5><%= @zip5 %></ZIP5>
<ZIP4><%= @zip4 %></ZIP4>
<Phone><%= @phone %></Phone>
<Extension><%= @extension %></Extension>
<Package>
<ServiceType><%= @service_type %></ServiceType>
<Count><%= @count %></Count>
</Package>
<EstimatedWeight><%= @estimated_weight %></EstimatedWeight>
<PackageLocation><%= @package_location %></PackageLocation>
<SpecialInstructions><%= @special_instructions %></SpecialInstructions>
</CarrierPickupScheduleRequest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<% username = config().username %>
<StandardBRequest USERID='<%= username %>'>
<OriginZip><%= @origin_zip %></OriginZip>
<DestinationZip><%= @destination_zip %></DestinationZip>
<MailClass><%= @mail_class %></MailClass>
</StandardBRequest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<% username = config().username %>
<PriorityMailRequest USERID='<%= username %>'>
<OriginZip><%= @origin_zip %></OriginZip>
<DestinationZip><%= @destination_zip %></DestinationZip>
<MailClass><%= @mail_class %></MailClass>
</PriorityMailRequest>
16 changes: 16 additions & 0 deletions lib/shippex/carrier/usps/templates/proof_of_delivery.eex
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<% username = config().username %>
<PTSPodRequest USERID='<%= username %>'>
<TrackId><%= @tracking_number %></TrackId >
<ClientIp><%= @client_ip %></ClientIp>
<SourceId><%= @company_name %></SourceId>
<MpSuffix><%= @mp_suffix %></MpSuffix>
<MpDate><%= @mp_date %></MpDate>
<RequestType><%= @request_type %></RequestType>
<FirstName><%= @first_name %></FirstName>
<LastName><%= @last_name %></LastName>
<Email1><%= @email1 %></Email1>
<Email2></Email2>
<Email3></Email3>
<TableCode><%= @table_code %></TableCode>
<CustRegID><%= @cust_reg_id %></CustRegID>
</PTSPodRequest>
6 changes: 3 additions & 3 deletions lib/shippex/carrier/usps/templates/rate.eex
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<% package = @shipment.package %>
<% username = config().username %>
<% machineable = Map.get(config(), :machineable, "False") %>

<%= if international?(@shipment) do %>
<IntlRateV2Request USERID='<%= username %>'>
<Revision>2</Revision>
<Package ID='<%= create_hash(@shipment.to) %>'>
<Pounds>0</Pounds>
<Ounces><%= weight_in_ounces(@shipment.package.weight) %></Ounces>
<Machinable><%= machineable %></Machinable>
<Machinable><%= machineable?(package) %></Machinable>
<MailType><%= international_mail_type(package) %></MailType>
<ValueOfContents><%= Util.price_to_dollars(package.insurance || package.monetary_value) %></ValueOfContents>
<Country><%= country(@shipment.to) %></Country>
Expand Down Expand Up @@ -44,7 +44,7 @@
<%= if package.insurance do %>
<SpecialServices><SpecialService><%= insurance_code(@shipment, @service) %></SpecialService></SpecialServices>
<% end %>
<Machinable><%= machineable %></Machinable>
<Machinable><%= machineable?(package) %></Machinable>
</Package>
</RateV4Request>
<% end %>
Loading

0 comments on commit 1649a64

Please sign in to comment.