You are here

USPS.php in Commerce USPS 8

File

src/Plugin/Commerce/ShippingMethod/USPS.php
View source
<?php

namespace Drupal\commerce_usps\Plugin\Commerce\ShippingMethod;

use Drupal\commerce_shipping\Entity\ShipmentInterface;

/**
 * Provides the USPS shipping method.
 *
 * The "_9xxx" ids represent various First-Class Mail services that
 * share the same service id of 0 from USPS api (sad!).
 * @see \Drupal\commerce_usps\USPSRateRequest::resolveRates().
 *
 * @CommerceShippingMethod(
 *  id = "usps",
 *  label = @Translation("USPS"),
 *  services = {
 *    "_9999" = @translation("First-Class Mail Large Envelope"),
 *    "_9998" = @translation("First-Class Mail Stamped Letter"),
 *    "_9997" = @translation("First-Class Mail Postcards"),
 *    "_9996" = @translation("First-Class Mail Package Service - Retail"),
 *    "_1" = @translation("Priority Mail"),
 *    "_2" = @translation("Priority Mail Express Hold For Pickup"),
 *    "_3" = @translation("Priority Mail Express"),
 *    "_4" = @translation("USPS Retail Ground"),
 *    "_6" = @translation("Media Mail Parcel"),
 *    "_7" = @translation("Library Mail Parcel"),
 *    "_13" = @translation("Priority Mail Express Flat Rate Envelope"),
 *    "_15" = @translation("First-Class Mail Large Postcards"),
 *    "_16" = @translation("Priority Mail Flat Rate Envelope"),
 *    "_17" = @translation("Priority Mail Medium Flat Rate Box"),
 *    "_22" = @translation("Priority Mail Large Flat Rate Box"),
 *    "_23" = @translation("Priority Mail Express Sunday/Holiday Delivery"),
 *    "_25" = @translation("Priority Mail Express Sunday/Holiday Delivery Flat Rate Envelope"),
 *    "_27" = @translation("Priority Mail Express Flat Rate Envelope Hold For Pickup"),
 *    "_28" = @translation("Priority Mail Small Flat Rate Box"),
 *    "_29" = @translation("Priority Mail Padded Flat Rate Envelope"),
 *    "_30" = @translation("Priority Mail Express Legal Flat Rate Envelope"),
 *    "_31" = @translation("Priority Mail Express Legal Flat Rate Envelope Hold For Pickup"),
 *    "_32" = @translation("Priority Mail Express Sunday/Holiday Delivery Legal Flat Rate Envelope"),
 *    "_33" = @translation("Priority Mail Hold For Pickup"),
 *    "_34" = @translation("Priority Mail Large Flat Rate Box Hold For Pickup"),
 *    "_35" = @translation("Priority Mail Medium Flat Rate Box Hold For Pickup"),
 *    "_36" = @translation("Priority Mail Small Flat Rate Box Hold For Pickup"),
 *    "_37" = @translation("Priority Mail Flat Rate Envelope Hold For Pickup"),
 *    "_38" = @translation("Priority Mail Gift Card Flat Rate Envelope"),
 *    "_39" = @translation("Priority Mail Gift Card Flat Rate Envelope Hold For Pickup"),
 *    "_40" = @translation("Priority Mail Window Flat Rate Envelope"),
 *    "_41" = @translation("Priority Mail Window Flat Rate Envelope Hold For Pickup"),
 *    "_42" = @translation("Priority Mail Small Flat Rate Envelope"),
 *    "_43" = @translation("Priority Mail Small Flat Rate Envelope Hold For Pickup"),
 *    "_44" = @translation("Priority Mail Legal Flat Rate Envelope"),
 *    "_45" = @translation("Priority Mail Legal Flat Rate Envelope Hold For Pickup"),
 *    "_46" = @translation("Priority Mail Padded Flat Rate Envelope Hold For Pickup"),
 *    "_47" = @translation("Priority Mail Regional Rate Box A"),
 *    "_48" = @translation("Priority Mail Regional Rate Box A Hold For Pickup"),
 *    "_49" = @translation("Priority Mail Regional Rate Box B"),
 *    "_50" = @translation("Priority Mail Regional Rate Box B Hold For Pickup"),
 *    "_53" = @translation("First-Class/Package Service Hold For Pickup"),
 *    "_55" = @translation("Priority Mail Express Flat Rate Boxes"),
 *    "_56" = @translation("Priority Mail Express Flat Rate Boxes Hold For Pickup"),
 *    "_57" = @translation("Priority Mail Express Sunday/Holiday Delivery Flat Rate Boxes"),
 *    "_58" = @translation("Priority Mail Regional Rate Box C"),
 *    "_59" = @translation("Priority Mail Regional Rate Box C Hold For Pickup"),
 *    "_61" = @translation("First-Class/Package Service"),
 *    "_62" = @translation("Priority Mail Express Padded Flat Rate Envelope"),
 *    "_63" = @translation("Priority Mail Express Padded Flat Rate Envelope Hold For Pickup"),
 *    "_64" = @translation("Priority Mail Express Sunday/Holiday Delivery Padded Flat Rate Envelope"),
 *    "_77" = @translation("Parcel Select Ground"),
 *  }
 * )
 */
class USPS extends USPSBase {

  /**
   * {@inheritdoc}
   */
  public function calculateRates(ShipmentInterface $shipment) {

    // Only attempt to collect rates if an address exists on the shipment.
    if ($shipment
      ->getShippingProfile()
      ->get('address')
      ->isEmpty()) {
      return [];
    }

    // Only attempt to collect rates for US addresses.
    if ($shipment
      ->getShippingProfile()
      ->get('address')->country_code != 'US') {
      return [];
    }

    // Make sure a package type is set on the shipment.
    $this
      ->setPackageType($shipment);
    return $this->uspsRateService
      ->getRates($shipment, $this->parentEntity);
  }

}

Classes

Namesort descending Description
USPS Provides the USPS shipping method.