oont-contents/plugins/woocommerce-square/includes/Framework/Compatibility/Order_Compatibility.php
2025-02-08 15:10:23 +01:00

248 lines
6.6 KiB
PHP

<?php
/**
* WooCommerce Plugin Framework
*
* This source file is subject to the GNU General Public License v3.0
* that is bundled with this package in the file license.txt.
* It is also available through the world-wide-web at this URL:
* http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 or later
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@skyverge.com so we can send you a copy immediately.
*
* @since 3.0.0
* @author WooCommerce / SkyVerge
* @copyright Copyright (c) 2013-2019, SkyVerge, Inc.
* @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 or later
*
* Modified by WooCommerce on 01 December 2021.
*/
namespace WooCommerce\Square\Framework\Compatibility;
use WooCommerce\Square\WC_Order_Square;
defined( 'ABSPATH' ) || exit;
/**
* WooCommerce order compatibility class.
*
* @since 3.0.0
*/
class Order_Compatibility extends Data_Compatibility {
/** @var array mapped compatibility properties, as `$new_prop => $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' );
}
}