/** * Add a fee to the order. * Order must be saved prior to adding items. * @param object $fee * @return int updated order item ID */ public function add_fee($fee) { _deprecated_function('WC_Order::add_fee', '2.7', 'Create new WC_Order_Item_Fee object and add to order with WC_Order::add_item()'); $item = new WC_Order_Item_Fee(array('name' => $fee->name, 'tax_class' => $fee->taxable ? $fee->tax_class : 0, 'total' => $fee->amount, 'total_tax' => $fee->tax, 'taxes' => array('total' => $fee->tax_data), 'order_id' => $this->get_id())); $item->save(); $this->add_item($item); wc_do_deprecated_action('woocommerce_order_add_fee', array($this->get_id(), $item->get_id(), $fee), '2.7', 'Use woocommerce_new_order_item action instead.'); return $item->get_id(); }
/** * Create or update an order fee * * @since 2.2 * @param \WC_Order $order * @param array $fee item data * @param string $action 'create' to add fee or 'update' to update it * @throws WC_API_Exception invalid data, server error */ protected function set_fee($order, $fee, $action) { if ('create' === $action) { // fee title is required if (!isset($fee['title'])) { throw new WC_API_Exception('woocommerce_invalid_fee_item', __('Fee title is required', 'woocommerce'), 400); } $item = new WC_Order_Item_Fee(); $item->set_name(sanitize_title($fee['title'])); $item->set_total(isset($fee['total']) ? floatval($fee['total']) : 0); // if taxable, tax class and total are required if (!empty($fee['taxable'])) { if (!isset($fee['tax_class'])) { throw new WC_API_Exception('woocommerce_invalid_fee_item', __('Fee tax class is required when fee is taxable', 'woocommerce'), 400); } $item->set_tax_status('taxable'); $item->set_tax_class($fee['tax_class']); if (isset($fee['total_tax'])) { $item->set_total_tax(isset($fee['total_tax']) ? wc_format_refund_total($fee['total_tax']) : 0); } if (isset($fee['tax_data'])) { $item->set_total_tax(wc_format_refund_total(array_sum($fee['tax_data']))); $item->set_taxes(array_map('wc_format_refund_total', $fee['tax_data'])); } } $fee_id = $item->save(); if (!$fee_id) { throw new WC_API_Exception('woocommerce_cannot_create_fee', __('Cannot create fee, try again', 'woocommerce'), 500); } } else { $item = new WC_Order_Item_Fee($fee['id']); if (isset($fee['title'])) { $item->set_name(sanitize_title($fee['title'])); } if (isset($fee['tax_class'])) { $item->set_tax_class($fee['tax_class']); } if (isset($fee['total'])) { $item->set_total(floatval($fee['total'])); } if (isset($fee['total_tax'])) { $item->set_total_tax(floatval($fee['total_tax'])); } $fee_id = $item->save(); if (!$fee_id) { throw new WC_API_Exception('woocommerce_cannot_update_fee', __('Cannot update fee, try again', 'woocommerce'), 500); } } }
/** * Add fees to the order. * * @param WC_Order $order */ protected function create_order_fee_lines(&$order) { foreach (WC()->cart->get_fees() as $fee_key => $fee) { $item = new WC_Order_Item_Fee(); $item->set_props(array('name' => $fee->name, 'tax_class' => $fee->taxable ? $fee->tax_class : 0, 'total' => $fee->amount, 'total_tax' => $fee->tax, 'taxes' => array('total' => $fee->tax_data))); // Set this to pass to legacy actions. $item->legacy_fee = $fee; $item->legacy_fee_key = $fee_key; $order->add_item($item); } }
/** * Test: get_fees */ function test_get_fees() { $object = new WC_Order(); $item = new WC_Order_Item_Fee(); $item->set_props(array('name' => 'Some Fee', 'tax_status' => 'taxable', 'total' => '100', 'tax_class' => '')); $object->add_item($item); $this->assertCount(1, $object->get_fees()); }
/** * Add order fee via ajax. */ public static function add_order_fee() { check_ajax_referer('order-item', 'security'); if (!current_user_can('edit_shop_orders')) { die(-1); } try { $order_id = absint($_POST['order_id']); $order = wc_get_order($order_id); $order_taxes = $order->get_taxes(); $item = new WC_Order_Item_Fee(); $item->set_order_id($order_id); $item_id = $item->save(); ob_start(); include 'admin/meta-boxes/views/html-order-fee.php'; wp_send_json_success(array('html' => ob_get_clean())); } catch (Exception $e) { wp_send_json_error(array('error' => $e->getMessage())); } die; }
/** * Add order fee via ajax. */ public static function add_order_fee() { check_ajax_referer('order-item', 'security'); if (!current_user_can('edit_shop_orders')) { die(-1); } $order_id = absint($_POST['order_id']); $order = wc_get_order($order_id); $order_taxes = $order->get_taxes(); $item = new WC_Order_Item_Fee(); $item->set_order_id($order_id); $item_id = $item->save(); include 'admin/meta-boxes/views/html-order-fee.php'; // Quit out die; }