174 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| 
 | |
| namespace Drupal\commerce_shipping;
 | |
| 
 | |
| use Drupal\profile\Entity\ProfileInterface;
 | |
| 
 | |
| /**
 | |
|  * Represents a proposed shipment.
 | |
|  *
 | |
|  * Proposed shipments are returned from the packing process, and then mapped
 | |
|  * to new or existing shipment entities. This allows the packers to be run
 | |
|  * whenever the order changes, while only modifying the shipments if they
 | |
|  * have changed.
 | |
|  */
 | |
| class ProposedShipment {
 | |
| 
 | |
|   /**
 | |
|    * The shipment type.
 | |
|    *
 | |
|    * @var string
 | |
|    */
 | |
|   protected $type;
 | |
| 
 | |
|   /**
 | |
|    * The order ID.
 | |
|    *
 | |
|    * @var int
 | |
|    */
 | |
|   protected $orderId;
 | |
| 
 | |
|   /**
 | |
|    * The shipment title.
 | |
|    *
 | |
|    * @var string
 | |
|    */
 | |
|   protected $title;
 | |
| 
 | |
|   /**
 | |
|    * The shipment items.
 | |
|    *
 | |
|    * @var \Drupal\commerce_shipping\ShipmentItem[]
 | |
|    */
 | |
|   protected $items = [];
 | |
| 
 | |
|   /**
 | |
|    * The shipping profile.
 | |
|    *
 | |
|    * We can't store just the profile ID because
 | |
|    * the profile entity might not be saved yet.
 | |
|    *
 | |
|    * @var \Drupal\profile\Entity\ProfileInterface
 | |
|    */
 | |
|   protected $shippingProfile;
 | |
| 
 | |
|   /**
 | |
|    * The package type plugin ID.
 | |
|    *
 | |
|    * @var string
 | |
|    */
 | |
|   protected $packageTypeId;
 | |
| 
 | |
|   /**
 | |
|    * The custom fields.
 | |
|    *
 | |
|    * @var array
 | |
|    */
 | |
|   protected $customFields = [];
 | |
| 
 | |
|   /**
 | |
|    * Constructs a new ProposedShipment object.
 | |
|    *
 | |
|    * @param array $definition
 | |
|    *   The definition.
 | |
|    */
 | |
|   public function __construct(array $definition) {
 | |
|     foreach (['type', 'order_id', 'title', 'items', 'shipping_profile'] as $required_property) {
 | |
|       if (empty($definition[$required_property])) {
 | |
|         throw new \InvalidArgumentException(sprintf('Missing required property "%s".', $required_property));
 | |
|       }
 | |
|     }
 | |
|     foreach ($definition['items'] as $shipment_item) {
 | |
|       if (!($shipment_item instanceof ShipmentItem)) {
 | |
|         throw new \InvalidArgumentException('Each shipment item under the "items" property must be an instance of ShipmentItem.');
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     $this->type = $definition['type'];
 | |
|     $this->orderId = $definition['order_id'];
 | |
|     $this->title = $definition['title'];
 | |
|     $this->items = $definition['items'];
 | |
|     $this->shippingProfile = $definition['shipping_profile'];
 | |
|     if (!empty($definition['package_type_id'])) {
 | |
|       $this->packageTypeId = $definition['package_type_id'];
 | |
|     }
 | |
|     if (!empty($definition['custom_fields'])) {
 | |
|       $this->customFields = $definition['custom_fields'];
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Gets the shipment type.
 | |
|    *
 | |
|    * @return string
 | |
|    *   The shipment type.
 | |
|    */
 | |
|   public function getType() : string {
 | |
|     return $this->type;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Gets the parent order ID.
 | |
|    *
 | |
|    * @return int
 | |
|    *   The order ID.
 | |
|    */
 | |
|   public function getOrderId() : int {
 | |
|     return $this->orderId;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Gets the shipment title.
 | |
|    *
 | |
|    * @return string
 | |
|    *   The shipment title.
 | |
|    */
 | |
|   public function getTitle() : string {
 | |
|     return $this->title;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Gets the shipment items.
 | |
|    *
 | |
|    * @return \Drupal\commerce_shipping\ShipmentItem[]
 | |
|    *   The shipment items.
 | |
|    */
 | |
|   public function getItems() : array {
 | |
|     return $this->items;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Gets the shipping profile.
 | |
|    *
 | |
|    * @return \Drupal\profile\Entity\ProfileInterface
 | |
|    *   The shipping profile.
 | |
|    */
 | |
|   public function getShippingProfile() : ProfileInterface {
 | |
|     return $this->shippingProfile;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Gets the package type plugin ID.
 | |
|    *
 | |
|    * If the proposed shipment returns no package type ID, shipping methods
 | |
|    * are expected to use their default package type.
 | |
|    *
 | |
|    * @return string|null
 | |
|    *   The package type plugin ID, or NULL if unknown.
 | |
|    */
 | |
|   public function getPackageTypeId() {
 | |
|     return $this->packageTypeId;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Gets the custom fields.
 | |
|    *
 | |
|    * @return array
 | |
|    *   The custom fields, in the $field_name => $value format.
 | |
|    */
 | |
|   public function getCustomFields() : array {
 | |
|     return $this->customFields;
 | |
|   }
 | |
| 
 | |
| }
 |