commerce_shipping-8.x-2.0-rc2/src/ShippingRate.php

src/ShippingRate.php
<?php

namespace Drupal\commerce_shipping;

use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\commerce_price\Price;

/**
 * Represents a shipping rate.
 */
final class ShippingRate {

  /**
   * The ID.
   *
   * @var string
   */
  protected $id;

  /**
   * The shipping method ID.
   *
   * @var string
   */
  protected $shippingMethodId;

  /**
   * The shipping service.
   *
   * @var \Drupal\commerce_shipping\ShippingService
   */
  protected $service;

  /**
   * The original amount.
   *
   * @var \Drupal\commerce_price\Price
   */
  protected $originalAmount;

  /**
   * The amount.
   *
   * @var \Drupal\commerce_price\Price
   */
  protected $amount;

  /**
   * The pre promotion amount (amount just before the promotions are applied).
   *
   * @var \Drupal\commerce_price\Price|null
   */
  protected $prePromotionAmount;

  /**
   * The description.
   *
   * @var string
   */
  protected $description;

  /**
   * The delivery date.
   *
   * @var \Drupal\Core\Datetime\DrupalDateTime
   */
  protected $deliveryDate;

  /**
   * The data.
   *
   * @var array
   */
  protected $data = [];

  /**
   * Constructs a new ShippingRate object.
   *
   * @param array $definition
   *   The definition.
   */
  public function __construct(array $definition) {
    foreach (['shipping_method_id', 'service', 'amount'] as $required_property) {
      if (empty($definition[$required_property])) {
        throw new \InvalidArgumentException(sprintf('Missing required property %s.', $required_property));
      }
    }
    if (!$definition['service'] instanceof ShippingService) {
      throw new \InvalidArgumentException(sprintf('Property "service" should be an instance of %s.', ShippingService::class));
    }
    if (!$definition['amount'] instanceof Price) {
      throw new \InvalidArgumentException(sprintf('Property "amount" should be an instance of %s.', Price::class));
    }
    // The ID is not required because most shipping methods generate one
    // rate per service, and use the service ID when purchasing labels.
    if (empty($definition['id'])) {
      $shipping_method_id = $definition['shipping_method_id'];
      $service_id = $definition['service']->getId();
      $definition['id'] = $shipping_method_id . '--' . $service_id;
    }

    $this->id = $definition['id'];
    $this->shippingMethodId = $definition['shipping_method_id'];
    $this->service = $definition['service'];
    $this->originalAmount = $definition['original_amount'] ?? $definition['amount'];
    $this->prePromotionAmount = $definition['pre_promotion_amount'] ?? NULL;
    $this->amount = $definition['amount'];
    $this->description = $definition['description'] ?? '';
    $this->deliveryDate = $definition['delivery_date'] ?? NULL;
    $this->data = $definition['data'] ?? [];
  }

  /**
   * Gets the ID.
   *
   * @return string
   *   The ID.
   */
  public function getId() : string {
    return $this->id;
  }

  /**
   * Gets the shipping method ID.
   *
   * @return string
   *   The shipping method ID.
   */
  public function getShippingMethodId() : string {
    return $this->shippingMethodId;
  }

  /**
   * Gets the shipping service.
   *
   * The shipping service label is meant to be displayed when presenting rates
   * for selection.
   *
   * @return \Drupal\commerce_shipping\ShippingService
   *   The shipping service.
   */
  public function getService() : ShippingService {
    return $this->service;
  }

  /**
   * Gets the original amount.
   *
   * This is the amount before promotions and fees are applied.
   *
   * @return \Drupal\commerce_price\Price
   *   The original amount.
   */
  public function getOriginalAmount() : Price {
    return $this->originalAmount;
  }

  /**
   * Sets the original amount.
   *
   * @param \Drupal\commerce_price\Price $original_amount
   *   The original amount.
   *
   * @return $this
   */
  public function setOriginalAmount(Price $original_amount) {
    $this->originalAmount = $original_amount;
    return $this;
  }

  /**
   * Gets the amount.
   *
   * @return \Drupal\commerce_price\Price
   *   The amount.
   */
  public function getAmount() : Price {
    return $this->amount;
  }

  /**
   * Sets the amount.
   *
   * @param \Drupal\commerce_price\Price $amount
   *   The amount.
   *
   * @return $this
   */
  public function setAmount(Price $amount) {
    $this->amount = $amount;
    return $this;
  }

  /**
   * Gets the pre promotion amount.
   *
   * @return \Drupal\commerce_price\Price|null
   *   The amount.
   */
  public function getPrePromotionAmount(): ?Price {
    return $this->prePromotionAmount;
  }

  /**
   * Sets the pre promotion amount.
   *
   * @param \Drupal\commerce_price\Price $pre_promotion_amount
   *   The pre promotion amount.
   *
   * @return $this
   */
  public function setPrePromotionAmount(Price $pre_promotion_amount) {
    $this->prePromotionAmount = $pre_promotion_amount;
    return $this;
  }

  /**
   * Gets the description.
   *
   * Displayed to the end-user when available.
   *
   * @return string
   *   The description
   */
  public function getDescription() : string {
    return $this->description;
  }

  /**
   * Sets the description.
   *
   * @param string $description
   *   The description.
   *
   * @return $this
   */
  public function setDescription(string $description) {
    $this->description = $description;
    return $this;
  }

  /**
   * Gets the delivery date, if known.
   *
   * @return \Drupal\Core\Datetime\DrupalDateTime|null
   *   The delivery date, or NULL.
   */
  public function getDeliveryDate() {
    return $this->deliveryDate;
  }

  /**
   * Sets the delivery date.
   *
   * @param \Drupal\Core\Datetime\DrupalDateTime $delivery_date
   *   The delivery date.
   *
   * @return $this
   */
  public function setDeliveryDate(DrupalDateTime $delivery_date) {
    $this->deliveryDate = $delivery_date;
    return $this;
  }

  /**
   * Gets the data.
   *
   * @return array
   *   The data.
   */
  public function getData() {
    return $this->data;
  }

  /**
   * Sets the data.
   *
   * @param array $data
   *   The data.
   *
   * @return $this
   */
  public function setData(array $data) {
    $this->data = $data;
    return $this;
  }

  /**
   * Gets the array representation of the shipping rate.
   *
   * @return array
   *   The array representation of the shipping rate.
   */
  public function toArray() : array {
    return [
      'id' => $this->id,
      'shipping_method_id' => $this->shippingMethodId,
      'service' => $this->service,
      'original_amount' => $this->originalAmount,
      'pre_promotion_amount' => $this->prePromotionAmount,
      'amount' => $this->amount,
      'description' => $this->description,
      'delivery_date' => $this->deliveryDate,
      'data' => $this->data,
    ];
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc