$old_prop` */ protected static $compat_props = array( 'date_completed' => 'completed_date', 'date_paid' => 'paid_date', 'date_modified' => 'modified_date', 'date_created' => 'order_date', 'customer_id' => 'customer_user', 'discount' => 'cart_discount', 'discount_tax' => 'cart_discount_tax', 'shipping_total' => 'total_shipping', 'type' => 'order_type', 'currency' => 'order_currency', 'version' => 'order_version', ); /** * Gets an order date. * * This should only be used to retrieve WC core date properties. * * @since 3.0.0 * * @param \WC_Order $order order object * @param string $type type of date to get * @param string $context if 'view' then the value will be filtered * * @return \WC_DateTime|null */ public static function get_date_prop( \WC_Order $order, $type, $context = 'edit' ) { $date = null; $prop = "date_{$type}"; $date = is_callable( array( $order, "get_{$prop}" ) ) ? $order->{"get_{$prop}"}( $context ) : null; return $date; } /** * Gets an order property. * * @since 3.0.0 * @param \WC_Order $object the order object * @param string $prop the property name * @param string $context if 'view' then the value will be filtered * @return mixed */ public static function get_prop( $object, $prop, $context = 'edit', $compat_props = array() ) { return parent::get_prop( $object, $prop, $context, self::$compat_props ); } /** * Sets an order's properties. * * Note that this does not save any data to the database. * * @since 3.0.0 * @param \WC_Order $object the order object * @param array $props the new properties as $key => $value * @return \WC_Data|\WC_Order|WC_Order_Square */ public static function set_props( $object, $props, $compat_props = array() ) { return parent::set_props( $object, $props, self::$compat_props ); } /** * Order item CRUD compatibility method to add a coupon to an order. * * @since 3.0.0 * @param \WC_Order $order the order object * @param array $code the coupon code * @param int $discount the discount amount. * @param int $discount_tax the discount tax amount. * @return int the order item ID */ public static function add_coupon( \WC_Order $order, $code = array(), $discount = 0, $discount_tax = 0 ) { $item = new \WC_Order_Item_Coupon(); $item->set_props( array( 'code' => $code, 'discount' => $discount, 'discount_tax' => $discount_tax, 'order_id' => $order->get_id(), ) ); $item->save(); $order->add_item( $item ); return $item->get_id(); } /** * Order item CRUD compatibility method to add a fee to an order. * * @since 3.0.0 * @param \WC_Order $order the order object * @param object $fee the fee to add * @return int the order item ID */ public static function add_fee( \WC_Order $order, $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, ), 'order_id' => $order->get_id(), ) ); $item->save(); $order->add_item( $item ); return $item->get_id(); } /** * Order item CRUD compatibility method to add a shipping line to an order. * * @since 3.0.0 * * @param \WC_Order $order order object * @param \WC_Shipping_Rate $shipping_rate shipping rate to add * @return int the order item ID */ public static function add_shipping( \WC_Order $order, $shipping_rate ) { $item = new \WC_Order_Item_Shipping(); $item->set_props( array( 'method_title' => $shipping_rate->label, 'method_id' => $shipping_rate->id, 'total' => wc_format_decimal( $shipping_rate->cost ), 'taxes' => $shipping_rate->taxes, 'order_id' => $order->get_id(), ) ); foreach ( $shipping_rate->get_meta_data() as $key => $value ) { $item->add_meta_data( $key, $value, true ); } $item->save(); $order->add_item( $item ); return $item->get_id(); } /** * Order item CRUD compatibility method to add a tax line to an order. * * @since 3.0.0 * * @param \WC_Order $order order object * @param int $tax_rate_id tax rate ID * @param float $tax_amount cart tax amount * @param float $shipping_tax_amount shipping tax amount * @return int order item ID */ public static function add_tax( \WC_Order $order, $tax_rate_id, $tax_amount = 0, $shipping_tax_amount = 0 ) { $item = new \WC_Order_Item_Tax(); $item->set_props( array( 'rate_id' => $tax_rate_id, 'tax_total' => $tax_amount, 'shipping_tax_total' => $shipping_tax_amount, ) ); $item->set_rate( $tax_rate_id ); $item->set_order_id( $order->get_id() ); $item->save(); $order->add_item( $item ); return $item->get_id(); } /** * Determines if an order has an available shipping address. * * WooCommerce 3.0+ no longer fills the shipping address with the billing if * a shipping address was never set by the customer at checkout, as is the * case with virtual orders. This method is helpful for gateways that may * reject such transactions with blank shipping information. * * TODO: Remove when WC 3.0.4 can be required {CW 2017-04-17} * * @since 3.0.0 * * @param \WC_Order $order order object * * @return bool */ public static function has_shipping_address( \WC_Order $order ) { return self::get_prop( $order, 'shipping_address_1' ) || self::get_prop( $order, 'shipping_address_2' ); } }