You are here

function commerce_avatax_order_admin_calculate_tax_form_submit in Drupal Commerce Connector for AvaTax 7.5

Form submit callback for commerce_avatax_order_admin_calculate_tax_form().

File

includes/commerce_avatax.admin.inc, line 494
Administrative callbacks for the Commerce Avatax module.

Code

function commerce_avatax_order_admin_calculate_tax_form_submit($form, &$form_state) {
  if (!($order = commerce_order_load($form_state['values']['order_id']))) {
    return;
  }
  $order_wrapper = entity_metadata_wrapper('commerce_order', $order);

  // Store a copy of the original order to see if it changes later.
  $original_order = clone $order_wrapper
    ->value();

  // Check if the request didn't fail.
  if (!($request = commerce_avatax_calculate_tax($order_wrapper)) || empty($request['response'])) {
    drupal_set_message(t('The taxes could not be calculated for this order.'), 'error');
    $form_state['redirect'] = 'admin/commerce/orders/' . $order->order_id . '/edit';
    return;
  }
  $response = $request['response'];

  // Save the order if the tax calculation was performed.
  if (!empty($response['success'])) {
    drupal_set_message(t('Taxes have been applied and the order updated.'));
  }
  else {
    $error = t('Unknown error.');

    // Display a detailed error message if available.
    if (!empty($response['error'])) {
      $error = '';
      if (!empty($response['error']['message'])) {
        $error .= filter_xss_admin($response['error']['message']) . ' ';
      }
      if (!empty($response['error']['details'])) {
        foreach ($response['error']['details'] as $detail) {
          if (!empty($detail['message'])) {
            $error .= filter_xss_admin("{$detail['code']} ({$detail['number']}): {$detail['message']}");
          }
        }
      }
    }
    drupal_set_message(t('The taxes could not be calculated for this order (!error)', array(
      '!error' => $error,
    )), 'error');
  }

  // Save the order once here if it has changed.
  if ($order_wrapper
    ->value() != $original_order) {
    commerce_order_save($order_wrapper
      ->value());
  }
  $form_state['redirect'] = 'admin/commerce/orders/' . $order->order_id . '/edit';
}