Hantera Drupal Commerce ordrar

  • Posted on: 30 January 2018
  • By: Pontus

Sparar lite om hur man kommer åt data i en order från Drupal Commerce med hjälp Entity Metadata Wrapper.

Den här texten uppdateras löpande ...

Om man bara har order nummer så måste den läsas in till ett object först.

$order = commerce_order_load($order_nummer);

Skapa wrappern 

$wrapper = entity_metadata_wrapper('commerce_order', $order);

Lista all information som går att hämta och information om vad den innehåller.

print_r(var_dump( $wrapper->getPropertyInfo() ));

För att sedan hämta ett värde, till exempel order id, skriver vi i princip bara vad den heter följt av value()

$wrapper->order_id->value()

 

Här har vi lite exempel koder som är hämtade på lite olika platser.

order total object

$order_total_obj = $order_wrapper->commerce_order_total->value();

Order total (beloppet)

$order_total = $order_total_obj['amount'];

orderns valuta 

$currency_code = $order_wrapper->commerce_order_total->currency_code->value();

// subtotal without vat
$total_ex_vat = commerce_price_component_total($order_total , 'base_price');
// total tax (in this case vat 20%)
$total_vat = commerce_price_component_total($order_total , 'tax|vat_20');
// subtotal with vat
$sub_total = $total_ex_vat['amount'] + $total_vat['amount'];
// formatted price string with currency sign
$sub_total = commerce_currency_format($sub_total, $currency_code);
// Order state
$order_status = commerce_order_status_load($order->status);
$order_state = $order_status['state'];
if ($order_state != 'cart') {
....
}

// Get the customer billing profile (this is not the wrapper object for the wrapper object don't use the ->value())
$customer_billing = $order_wrapper->commerce_customer_billing->value();
// Make sure it exists
if (isset($customer_billing)) {
// Get the customer billing profile wrapper
$customer_billing_wrapper = $order_wrapper->commerce_customer_billing;
// Get the address
$address = $customer_billing_wrapper->commerce_customer_address->value();
// Get organisation name if available.
if (isset($address['organisation_name'])) {
$organisation_name = $address['organisation_name'];
}
}

// Line item
$line_item_wrapper = entity_metadata_wrapper('commerce_line_item', $line_item);
// get all line item wrappers from order wrapper
foreach ($order_wrapper->commerce_line_items as $line_item_wrapper) {
// line item type
$line_item_type = $line_item_wrapper->type->value();
// line item type using the bundle.
$line_item_type = $line_item_wrapper->getBundle();
// check if a product.
if (in_array($line_item_type, commerce_product_line_item_types())) {
// line item title
$line_item_title = $line_item_wrapper->commerce_product->title->value();
// line item unit price
$line_item_unit_price = $line_item_wrapper->commerce_unit_price->amount->value();
// line item formatted unit price
$line_item_unit_price = commerce_currency_format($line_item_unit_price, $currency_code);
// line item quantity
$line_item_quantity = (float)$line_item_wrapper->quantity->value();
// line item total price
$line_item_total_price = $line_item_wrapper->commerce_total->amount->value();
// line item formatted total price
$line_iten_total_price = commerce_currency_format($line_item_total_price, $currency_code);
// Product
// Product ID.
$product_id = $line_item_wrapper->commerce_product->product_id->value();
// Product SKU.
$sku = $line_item_wrapper->commerce_product->sku->value();
// Product image
$line_item_wrapper->commerce_product->field_product_image->value();
// Load the product.
$product = commerce_product_load($product_id);
} else {
// for shipping & discount line items
// shipping/discount price
$line_item_price = $line_item_wrapper->commerce_unit_price->amount->value();
// shipping/discount formatted price
$line_item_price = commerce_currency_format($line_item_price, $currency_code);
// line item TYPE display title
$line_ite_type_title = commerce_line_item_type_get_name($line_item_wrapper->type->value());
// for shipping line items
if ($line_item_wrapper->type->value() == "shipping") {
// shipping data
$shipping_data = $line_item_wrapper->value()->data;
// shipping method display title
$line_item_title = $shipping_data['shipping_service']['title'];
}
if ($line_item_wrapper->type->value() == 'commerce_discount') {
// for discount line items
// get discount display title (I suspect there might be a better way than this)
$discount_data = $line_item_wrapper->commerce_unit_price->data->value();
foreach ($discount_data['components'] as $key => $component) {
if (!empty($component['price']['data']['discount_component_title'])) {
$line_item_title = $component['price']['data']['discount_component_title'];
}
}
}
}
}
// Product.
$product_wrapper = entity_metadata_wrapper('commerce_product', $product);
// Product Price.
$price_amount = $product_wrapper>commerce_price->amount->value();
$product_wrapper>commerce_price->amount->set($new_price);
// Stock
$product_wrapper->commerce_stock_override->value()
$product_wrapper->commerce_stock->value()

 

Hämta all betalningsinformation till ordern

$payments = commerce_payment_transaction_load_multiple(array(), array('order_id' =>  $order_wrapper->order_id->value()));

 

En sida som samlar många exempel på meta data wrappers varav många hänger ihop med Drupal Commerce (https://gist.github.com/BBGuy/3e1f624eaee2088d8eee ).

<?php
// Basics
// Get a value.
$value = $wrapper->field_x->value();
// If the field is a reference field you will get the field object
// To get the wrapper back use:
$wrapper_b = $wrapper->field_ref;
// To set a value.
$wrapper->field_x = $value;
// Or
$wrapper->field_x->set($value);
// To save the entity
$wrapper->save();
// order.
$order_wrapper = entity_metadata_wrapper('commerce_order', $order);
// Order id.
$order_id = order_wrapper->order_id->value();
// Order Number.
$order_id = order_wrapper->order_number->value();
// User detils.
$uid = $order->uid;
$email = $order->mail;
$user = user_load_by_mail($email);
if ($user) {
$u_wrapper = entity_metadata_wrapper('user', $user);
$u_wrapper->field_xxx = $x;
$u_wrapper->save();
}
// order total object
$order_total_obj = $order_wrapper->commerce_order_total->value();
// Order total (cents).
$order_total = $order_total_obj['amount'];
// order currency code
$currency_code = $order_wrapper->commerce_order_total->currency_code->value();
// subtotal without vat
$total_ex_vat = commerce_price_component_total($order_total , 'base_price');
// total tax (in this case vat 20%)
$total_vat = commerce_price_component_total($order_total , 'tax|vat_20');
// subtotal with vat
$sub_total = $total_ex_vat['amount'] + $total_vat['amount'];
// formatted price string with currency sign
$sub_total = commerce_currency_format($sub_total, $currency_code);
// Order state
$order_status = commerce_order_status_load($order->status);
$order_state = $order_status['state'];
if ($order_state != 'cart') {
....
}
// Get the customer billing profile (this is not the wrapper object for the wrapper object don't use the ->value())
$customer_billing = $order_wrapper->commerce_customer_billing->value();
// Make sure it exists
if (isset($customer_billing)) {
// Get the customer billing profile wrapper
$customer_billing_wrapper = $order_wrapper->commerce_customer_billing;
// Get the address
$address = $customer_billing_wrapper->commerce_customer_address->value();
// Get organisation name if available.
if (isset($address['organisation_name'])) {
$organisation_name = $address['organisation_name'];
}
}
// Line item
$line_item_wrapper = entity_metadata_wrapper('commerce_line_item', $line_item);
// get all line item wrappers from order wrapper
foreach ($order_wrapper->commerce_line_items as $line_item_wrapper) {
// line item type
$line_item_type = $line_item_wrapper->type->value();
// line item type using the bundle.
$line_item_type = $line_item_wrapper->getBundle();
// Line Item ID
$line_id = $line_item_wrapper->getIdentifier();
// check if a product.
if (in_array($line_item_type, commerce_product_line_item_types())) {
// line item title
$line_item_title = $line_item_wrapper->commerce_product->title->value();
// line item unit price
$line_item_unit_price = $line_item_wrapper->commerce_unit_price->amount->value();
// line item formatted unit price
$line_item_unit_price = commerce_currency_format($line_item_unit_price, $currency_code);
// line item quantity
$line_item_quantity = (float)$line_item_wrapper->quantity->value();
// line item total price
$line_item_total_price = $line_item_wrapper->commerce_total->amount->value();
// line item formatted total price
$line_iten_total_price = commerce_currency_format($line_item_total_price, $currency_code);
// Product
// Product ID - You can get the product id from its property.
$product_id = $line_item_wrapper->commerce_product->product_id->value();
// But its better prectice to use getIdentifier()
$product_id = $line_item_wrapper->commerce_product->getIdentifier();
// Product SKU.
$sku = $line_item_wrapper->commerce_product->sku->value();
// Product image
$line_item_wrapper->commerce_product->field_product_image->value();
// Load the product.
$product = commerce_product_load($product_id);
} else {
// for shipping & discount line items
// shipping/discount price
$line_item_price = $line_item_wrapper->commerce_unit_price->amount->value();
// shipping/discount formatted price
$line_item_price = commerce_currency_format($line_item_price, $currency_code);
// line item TYPE display title
$line_ite_type_title = commerce_line_item_type_get_name($line_item_wrapper->type->value());
// for shipping line items
if ($line_item_wrapper->type->value() == "shipping") {
// shipping data
$shipping_data = $line_item_wrapper->value()->data;
// shipping method display title
$line_item_title = $shipping_data['shipping_service']['title'];
}
if ($line_item_wrapper->type->value() == 'commerce_discount') {
// for discount line items
// get discount display title (I suspect there might be a better way than this)
$discount_data = $line_item_wrapper->commerce_unit_price->data->value();
foreach ($discount_data['components'] as $key => $component) {
if (!empty($component['price']['data']['discount_component_title'])) {
$line_item_title = $component['price']['data']['discount_component_title'];
}
}
}
}
}
// Create a line item / Add product to cart programmatically
commerce_cart_product_add_by_id($product_id, $quantity);
// Product.
$product_wrapper = entity_metadata_wrapper('commerce_product', $product);
// Product Price.
$price_amount = $product_wrapper>commerce_price->amount->value();
$product_wrapper>commerce_price->amount->set($new_price);
// Stock
$product_wrapper->commerce_stock_override->value()
$product_wrapper->commerce_stock->value()
// Create a new product
$wrapper = entity_metadata_wrapper('commerce_product', commerce_product_new('product'));
$wrapper->title = $title;
$wrapper->sku = $sku;
// Set the price.
$wrapper->commerce_price->amount = $price;
$wrapper->commerce_price->currency_code = 'GBP';
// or $wrapper->commerce_price->amount->set($price);
// Set the new stock level.
$wrapper->commerce_stock->set($new_stock);
// Vat & tax
$p = 1234 // 12.34
$p = $p * (1 + VAT_RATE); // Add VAT. VAT_RATE a predifined value: define('VAT_RATE', 0.2);
$p = commerce_round(COMMERCE_ROUND_HALF_DOWN, $p); // Use commerce round function
// Taxonomy – term referenced
// Get the term object.
$term = $product_wrapper->field_availability->value();
// Get the taxonomy term name
$term_name = term->name;
// One liner of the above.
$term_name = $product_wrapper->field_availability->value()->name;
// Taxonomy – term referenced using a term wrapper
$term_wrapper = $product_w->field_availability;
$term_name = $term_wrapper->name->value());
// Read multi value term reference fields.
$terms_wrapper = $product_w->field_availability;
foreach ($term_wrapper as $term) {
$ex_list[$term->tid] = $term->name;
}
// Write (add) a single multi value field
$x_wrapper->x_field[] = $new_value;
// Write (update second value) a single multi value field
$x_wrapper->x_field[1] = $new_value;
// Write (overwrite all values) a single multi value field
$new_list = array(
0 => $value1,
1 => $value2,
);
$x_wrapper->x_field = $new_list;
// Clear multi value field
$x_wrapper->x_field->set();
// or:
$x_wrapper->x_field = array();
// Get the user from a line item
$order = commerce_order_load($line_item->order_id);
$order_wrapper = entity_metadata_wrapper('commerce_order', $order);
$uid = $order_wrapper->uid->value();
// Change the order number.
function custmodule_commerce_order_presave($order) {
$order_wrapper = entity_metadata_wrapper('commerce_order', $order);
if (isset($order->order_id)) {
if ($x) {
$order->order_number = sprintf('%d_x', $order->order_id);
}
else {
$order->order_number = $order->order_id);
}
}
}
// Other (not D commerce)
// Create a field collection item and set its fields using the entity_metadata_wrapper
// Working on $node field name: field_my_field.
// Create the field_collection item entity.
$fc_entity = entity_create('field_collection_item', array('field_name' => 'field_my_field'));
// Attach the field_collection item entity to the node.
$fc_entity->setHostEntity('node', $node);
// Use an entity_metadata_wrapper.
$fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_entity);
// Set the fields.
$fc_wrapper->field1 = $field1;
$fc_wrapper->field2 = $field2;
// Save.
$fc_wrapper->save();
// entity reference (not using emw) both the below are the same.
$entity['field_xx'][LANGUAGE_NONE][0]['target_id'] = $x;
$entity['field_xx'][LANGUAGE_NONE][0] = array('target_id' => $x, 'target_type' => 'node');
// Using emw
$e_wrapper->field_user_ldl_account->set($account_id);

 

Kategorier: