BatchSyncOrders.php in Mailchimp E-Commerce 8
File
modules/mailchimp_ecommerce_ubercart/src/BatchSyncOrders.php
View source
<?php
namespace Drupal\mailchimp_ecommerce_ubercart;
class BatchSyncOrders {
public static function syncOrders($order_ids, &$context) {
if (!isset($context['sandbox']['progress'])) {
$context['sandbox']['progress'] = 0;
$context['sandbox']['total'] = count($order_ids);
$context['results']['order_ids'] = $order_ids;
}
$config = \Drupal::config('mailchimp.settings');
$batch_limit = $config
->get('batch_limit');
$batch = array_slice($context['results']['product_ids'], $context['sandbox']['progress'], $batch_limit);
$customer_handler = \Drupal::service('mailchimp_ecommerce.customer_handler');
$cart_handler = \Drupal::service('mailchimp_ecommerce.cart_handler');
$order_handler = \Drupal::service('mailchimp_ecommerce.order_handler');
foreach ($batch as $order_id) {
$order = null;
$customer = [];
$order_data = [];
$order_state = $order
->get('state')->value;
if (empty($order
->getCustomer()
->id()) && $order
->get('checkout_step')->value == 'review') {
$customer['email_address'] = $order
->getEmail();
if (!empty($customer['email_address'])) {
$billing_profile = $order
->getBillingProfile();
$customer = $customer_handler
->buildCustomer($customer, $billing_profile);
$customer_handler
->addOrUpdateCustomer($customer);
}
$order_data = $order_handler
->buildOrder($order, $customer);
if (!isset($order_data['currency_code'])) {
$price = $order
->getTotalPrice();
$order_data['currency_code'] = $price
->getCurrencyCode();
$order_data['order_total'] = $price
->getNumber();
}
$cart_handler
->addOrUpdateCart($order
->id(), $customer, $order_data);
}
if ($order_state == 'completed') {
$cart_handler
->deleteCart($order
->id());
$customer_handler
->incrementCustomerOrderTotal($customer['email_address'], $order_data['order_total']);
$customer['email_address'] = $order
->getEmail();
$billing_profile = $order
->getBillingProfile();
$customer = $customer_handler
->buildCustomer($customer, $billing_profile);
$order_data = $order_handler
->buildOrder($order, $customer);
$order_handler
->addOrder($order
->id(), $customer, $order_data);
}
$context['sandbox']['progress']++;
$context['message'] = t('Sent @count of @total products to Mailchimp', [
'@count' => $context['sandbox']['progress'],
'@total' => $context['sandbox']['total'],
]);
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['total'];
}
}
}