You are here

public function Order::prepareRow in Commerce Migrate 3.1.x

Same name in this branch
  1. 3.1.x modules/ubercart/src/Plugin/migrate/source/Order.php \Drupal\commerce_migrate_ubercart\Plugin\migrate\source\Order::prepareRow()
  2. 3.1.x modules/commerce/src/Plugin/migrate/source/commerce1/Order.php \Drupal\commerce_migrate_commerce\Plugin\migrate\source\commerce1\Order::prepareRow()
Same name and namespace in other branches
  1. 8.2 modules/commerce/src/Plugin/migrate/source/commerce1/Order.php \Drupal\commerce_migrate_commerce\Plugin\migrate\source\commerce1\Order::prepareRow()
  2. 3.0.x modules/commerce/src/Plugin/migrate/source/commerce1/Order.php \Drupal\commerce_migrate_commerce\Plugin\migrate\source\commerce1\Order::prepareRow()

Adds additional data to the row.

Parameters

\Drupal\migrate\Row $row: The row object.

Return value

bool FALSE if this row needs to be skipped.

Overrides SourcePluginBase::prepareRow

File

modules/commerce/src/Plugin/migrate/source/commerce1/Order.php, line 96

Class

Order
Gets Commerce 1 commerce_order data from database.

Namespace

Drupal\commerce_migrate_commerce\Plugin\migrate\source\commerce1

Code

public function prepareRow(Row $row) {

  // Fail early if a store does not exist on the destination.
  // Add refresh skip value to the row.
  $row
    ->setSourceProperty('refresh_state', OrderInterface::REFRESH_SKIP);
  $default_store = $this->defaultStoreResolver
    ->resolve();
  if ($default_store) {
    $row
      ->setSourceProperty('default_store_id', $default_store
      ->id());
  }
  else {
    throw new MigrateException('You must have a store saved in order to import orders.');
  }

  // Get Field API field values.
  $order_id = $row
    ->getSourceProperty('order_id');
  $revision_id = $row
    ->getSourceProperty('revision_id');
  foreach (array_keys($this
    ->getFields('commerce_order', $row
    ->getSourceProperty('type'))) as $field) {
    $row
      ->setSourceProperty($field, $this
      ->getFieldValues('commerce_order', $field, $order_id, $revision_id));
  }

  // Include the number of currency fraction digits in commerce_order_total.
  $currencyRepository = new CurrencyRepository();
  $value = $row
    ->getSourceProperty('commerce_order_total');
  $currency_code = $value[0]['currency_code'];
  $value[0]['fraction_digits'] = $currencyRepository
    ->get($currency_code)
    ->getFractionDigits();
  $row
    ->setSourceProperty('commerce_order_total', $value);
  $row
    ->setSourceProperty('data', unserialize($row
    ->getSourceProperty('data')));

  // Get shipping line items for this order.
  $query = $this
    ->select('commerce_line_item', 'cli')
    ->fields('cli')
    ->condition('cli.order_id', $order_id)
    ->condition('cli.type', 'shipping');
  $shipping_line_items = $query
    ->execute()
    ->fetchAll();
  foreach ($shipping_line_items as $key => $shipping_line_item) {

    // Get Field API field values.
    $line_item_id = $shipping_line_item['line_item_id'];
    foreach (array_keys($this
      ->getFields('commerce_line_item', 'shipping')) as $field) {
      $shipping_line_items[$key][$field] = $this
        ->getFieldValues('commerce_line_item', $field, $line_item_id, $line_item_id);
    }
    $shipping_line_items[$key]['data'] = unserialize($shipping_line_item['data']);
    $currency_code = $shipping_line_items[$key]['commerce_total'][0]['currency_code'];
    $shipping_line_items[$key]['commerce_total'][0]['fraction_digits'] = $currencyRepository
      ->get($currency_code)
      ->getFractionDigits();
  }
  $row
    ->setSourceProperty('shipping_line_items', $shipping_line_items);
  return parent::prepareRow($row);
}