/var/www/html_it/wp-content/plugins/woocommerce/src/Admin/Overrides/OrderTraits.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
/**
 * WC Admin Order Trait
 *
 * WC Admin Order Trait class that houses shared functionality across order and refund classes.
 */

namespace Automattic\WooCommerce\Admin\Overrides;

defined'ABSPATH' ) || exit;

/**
 * OrderTraits class.
 */
trait OrderTraits {
    
/**
     * Calculate shipping amount for line item/product as a total shipping amount ratio based on quantity.
     *
     * @param WC_Order_Item $item              Line item from order.
     * @param int           $order_items_count (optional) The number of order items in an order. This could be the remaining items left to refund.
     * @param float         $shipping_amount   (optional) The shipping fee amount in an order. This could be the remaining shipping amount left to refund.
     *
     * @return float|int
     */
    
public function get_item_shipping_amount$item$order_items_count null$shipping_amount null ) {
        
// Shipping amount loosely based on woocommerce code in includes/admin/meta-boxes/views/html-order-item(s).php
        // distributed simply based on number of line items.
        
$product_qty $item->get_quantity'edit' );

        
// Use the passed order_items_count if provided, otherwise get the total number of items in the order.
        // This is useful when calculating refunds for partial items in an order.
        // For example, if 2 items are refunded from an order with 4 items. The remaining 2 items should have the shipping fee of the refunded items distributed to them.
        
$order_items null !== $order_items_count $order_items_count $this->get_item_count();

        if ( 
=== $order_items ) {
            return 
0;
        }

        
// Use the passed shipping_amount if provided, otherwise get the total shipping amount in the order.
        // This is useful when calculating refunds for partial shipping in an order.
        // For example, if $10 shipping is refunded from an order with $30 shipping, the remaining $20 should be distributed to the remaining items.
        
$total_shipping_amount null !== $shipping_amount $shipping_amount : (float) $this->get_shipping_total();

        return 
$total_shipping_amount $order_items $product_qty;
    }

    
/**
     * Calculate shipping tax amount for line item/product as a total shipping tax amount ratio based on quantity.
     *
     * Loosely based on code in includes/admin/meta-boxes/views/html-order-item(s).php.
     *
     * @todo If WC is currently not tax enabled, but it was before (or vice versa), would this work correctly?
     *
     * @param WC_Order_Item $item Line item from order.
     * @param int           $order_items_count   (optional) The number of order items in an order. This could be the remaining items left to refund.
     * @param float         $shipping_tax_amount (optional) The shipping tax amount in an order. This could be the remaining shipping tax amount left to refund.
     *
     * @return float|int
     */
    
public function get_item_shipping_tax_amount$item$order_items_count null$shipping_tax_amount null ) {
        
// Use the passed order_items_count if provided, otherwise get the total number of items in the order.
        // This is useful when calculating refunds for partial items in an order.
        // For example, if 2 items are refunded from an order with 4 items. The remaining 2 items should have the shipping tax of the refunded items distributed to them.
        
$order_items null !== $order_items_count $order_items_count $this->get_item_count();

        if ( 
=== $order_items ) {
            return 
0;
        }

        
// Use the passed shipping_tax_amount if provided, otherwise initialize it to 0 and calculate the total shipping tax amount in the order.
        // This is useful when calculating refunds for partial shipping tax in an order.
        // For example, if $1 shipping tax is refunded from an order with $3 shipping tax, the remaining $2 should be distributed to the remaining items.
        
$total_shipping_tax_amount $shipping_tax_amount $shipping_tax_amount 0;

        if ( 
null === $shipping_tax_amount ) {
            
$order_taxes         $this->get_taxes();
            
$line_items_shipping $this->get_items'shipping' );
            foreach ( 
$line_items_shipping as $item_id => $shipping_item ) {
                
$tax_data $shipping_item->get_taxes();
                if ( 
$tax_data ) {
                    foreach ( 
$order_taxes as $tax_item ) {
                        
$tax_item_id                $tax_item->get_rate_id();
                        
$tax_item_total             = isset( $tax_data['total'][ $tax_item_id ] ) ? (float) $tax_data['total'][ $tax_item_id ] : 0;
                        
$total_shipping_tax_amount += $tax_item_total;
                    }
                }
            }
        }

        
$product_qty $item->get_quantity'edit' );

        return 
$total_shipping_tax_amount $order_items $product_qty;
    }

    
/**
     * Calculates coupon amount for specified line item/product.
     *
     * Coupon calculation based on woocommerce code in includes/admin/meta-boxes/views/html-order-item.php.
     *
     * @param WC_Order_Item $item Line item from order.
     *
     * @return float
     */
    
public function get_item_coupon_amount$item ) {
        return 
floatval$item->get_subtotal'edit' ) - $item->get_total'edit' ) );
    }

    
/**
     * Calculate cart tax amount for line item/product.
     *
     * @param WC_Order_Item $item Line item from order.
     *
     * @return float
     */
    
public function get_item_cart_tax_amount$item ) {
        
$order_taxes     $this->get_taxes();
        
$tax_data        $item->get_taxes();
        
$cart_tax_amount 0.0;

        foreach ( 
$order_taxes as $tax_item ) {
            
$tax_item_id      $tax_item->get_rate_id();
            
$cart_tax_amount += isset( $tax_data['total'][ $tax_item_id ] ) ? (float) $tax_data['total'][ $tax_item_id ] : 0;
        }

        return 
$cart_tax_amount;
    }
}