You are here

class ShippingByWeight in Commerce Shipping Weight Tariff 8

Same name and namespace in other branches
  1. 8.2 src/Plugin/Commerce/ShippingMethod/ShippingByWeight.php \Drupal\commerce_shipping_weight_tariff\Plugin\Commerce\ShippingMethod\ShippingByWeight

Provides the FlatRatePerItem shipping method.

Plugin annotation


@CommerceShippingMethod(
  id = "commerce_shipping_weight_tariff",
  label = @Translation("Shipping by weight tariff"),
)

Hierarchy

Expanded class hierarchy of ShippingByWeight

File

src/Plugin/Commerce/ShippingMethod/ShippingByWeight.php, line 24

Namespace

Drupal\commerce_shipping_weight_tariff\Plugin\Commerce\ShippingMethod
View source
class ShippingByWeight extends ShippingMethodBase {
  protected $stateService;

  /**
   * Constructs a new ShippingByWeight object.
   *
   * @param array $configuration
   *   A configuration array containing information about the plugin instance.
   * @param string $plugin_id
   *   The plugin_id for the plugin instance.
   * @param mixed $plugin_definition
   *   The plugin implementation definition.
   * @param \Drupal\commerce_shipping\PackageTypeManagerInterface $package_type_manager
   *   The package type manager.
   * @param \Drupal\Core\State\StateInterface $stateService
   *   The Drupal State Service.
   * @param \Drupal\state_machine\WorkflowManagerInterface $workflow_manager
   *   The workflow manager.
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, PackageTypeManagerInterface $package_type_manager, WorkflowManagerInterface $workflow_manager, StateInterface $stateService) {
    parent::__construct($configuration, $plugin_id, $plugin_definition, $package_type_manager, $workflow_manager);
    $this->services['default'] = new ShippingService('default', $this->configuration['rate_label']);
    $this->stateService = $stateService;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static($configuration, $plugin_id, $plugin_definition, $container
      ->get('plugin.manager.commerce_package_type'), $container
      ->get('plugin.manager.workflow'), $container
      ->get('state'));
  }

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return [
      'rate_label' => '',
      'base_rate_amount' => '',
      'services' => [
        'default',
      ],
    ] + parent::defaultConfiguration();
  }

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $form = parent::buildConfigurationForm($form, $form_state);
    $amount = $this->configuration['base_rate_amount'];

    // A bug in the plugin_select form element causes $amount to be incomplete.
    if (isset($amount) && !isset($amount['number'], $amount['currency_code'])) {
      $amount = NULL;
    }
    $form['rate_label'] = [
      '#type' => 'textfield',
      '#title' => t('Shipment type label'),
      '#description' => t('Shown to customers during checkout.'),
      '#default_value' => $this->configuration['rate_label'],
      '#required' => TRUE,
    ];
    $form['base_rate_amount'] = [
      '#type' => 'commerce_price',
      '#title' => t('Base shipping rate amount'),
      '#default_value' => $amount,
      '#required' => TRUE,
    ];
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
    parent::submitConfigurationForm($form, $form_state);
    if (!$form_state
      ->getErrors()) {
      $values = $form_state
        ->getValue($form['#parents']);
      $this->configuration['rate_label'] = $values['rate_label'];
      $this->configuration['base_rate_amount'] = $values['base_rate_amount'];
    }
  }

  /**
   * Calculates shipment rate depending on weight conditions.
   *
   * @param \Drupal\commerce_shipping\Entity\ShipmentInterface $shipment
   *   Shipment interface entity.
   *
   * @return array
   *   Returns calculated rates.
   */
  public function calculateRates(ShipmentInterface $shipment) {

    // Rate IDs aren't used in a flat rate scenario because there's always a
    // single rate per plugin, and there's no support for purchasing rates.
    $amount = $this->configuration['base_rate_amount'];
    $shipment_tax_by_weight = $this->stateService
      ->get('order_' . $shipment
      ->getOrderId() . '_weight_condition');
    $this->stateService
      ->delete('order_' . $shipment
      ->getOrderId() . '_weight_condition');

    // Calculate shipping amount.
    $shipping_tax_value = $shipment_tax_by_weight['condition_price'] + $amount['number'];

    // Set shipping amount.
    $amount = new Price((string) $shipping_tax_value, $amount['currency_code']);
    $rates = [];

    // Set shipping rate.
    $rates[] = new ShippingRate([
      'shipping_method_id' => $this->parentEntity
        ->id(),
      'service' => $this->services['default'],
      'amount' => $amount,
    ]);
    return $rates;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
ShippingByWeight::$stateService protected property
ShippingByWeight::buildConfigurationForm public function Form constructor. Overrides ShippingMethodBase::buildConfigurationForm
ShippingByWeight::calculateRates public function Calculates shipment rate depending on weight conditions. Overrides ShippingMethodInterface::calculateRates
ShippingByWeight::create public static function Creates an instance of the plugin. Overrides ShippingMethodBase::create
ShippingByWeight::defaultConfiguration public function Gets default configuration for this plugin. Overrides ShippingMethodBase::defaultConfiguration
ShippingByWeight::submitConfigurationForm public function Form submission handler. Overrides ShippingMethodBase::submitConfigurationForm
ShippingByWeight::__construct public function Constructs a new ShippingByWeight object. Overrides ShippingMethodBase::__construct
ShippingMethodBase::$packageTypeManager protected property The package type manager.
ShippingMethodBase::$parentEntity protected property The parent config entity.
ShippingMethodBase::$services protected property The shipping services.
ShippingMethodBase::$workflowManager protected property The workflow manager.
ShippingMethodBase::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides DependentPluginInterface::calculateDependencies
ShippingMethodBase::getConfiguration public function Gets this plugin's configuration. Overrides ConfigurableInterface::getConfiguration
ShippingMethodBase::getDefaultPackageType public function Gets the default package type. Overrides ShippingMethodInterface::getDefaultPackageType
ShippingMethodBase::getLabel public function Gets the shipping method label. Overrides ShippingMethodInterface::getLabel
ShippingMethodBase::getServices public function Gets the shipping services. Overrides ShippingMethodInterface::getServices
ShippingMethodBase::getWorkflowId public function Gets the shipment workflow ID. Overrides ShippingMethodInterface::getWorkflowId
ShippingMethodBase::selectRate public function Selects the given shipping rate for the given shipment. Overrides ShippingMethodInterface::selectRate
ShippingMethodBase::setConfiguration public function Sets the configuration for this plugin instance. Overrides ConfigurableInterface::setConfiguration
ShippingMethodBase::setParentEntity public function Sets the parent entity. Overrides ParentEntityAwareInterface::setParentEntity
ShippingMethodBase::validateConfigurationForm public function Form validation handler. Overrides PluginFormInterface::validateConfigurationForm
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.