diff --git a/includes/admin/meta-boxes/views/html-order-items.php b/includes/admin/meta-boxes/views/html-order-items.php index 801ff6c2bb7..811787ce692 100644 --- a/includes/admin/meta-boxes/views/html-order-items.php +++ b/includes/admin/meta-boxes/views/html-order-items.php @@ -32,14 +32,18 @@ if ( 'yes' == get_option( 'woocommerce_calc_taxes' ) ) { $tax_item ) : $tax_class = wc_get_tax_class_by_tax_id( $tax_item['rate_id'] ); $tax_class_name = isset( $classes_options[ $tax_class ] ) ? $classes_options[ $tax_class ] : __( 'Tax', 'woocommerce' ); ?> - [?] + + + [?] + + 0 && get_post( $option_value ) ) - return -1; + if ( $option_value > 0 && get_post( $option_value ) ) + return -1; - $page_found = null; + $page_found = null; - if ( strlen( $page_content ) > 0 ) { - // Search for an existing page with the specified page content (typically a shortcode) - $page_found = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM " . $wpdb->posts . " WHERE post_type='page' AND post_content LIKE %s LIMIT 1;", "%{$page_content}%" ) ); - } else { - // Search for an existing page with the specified page slug - $page_found = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM " . $wpdb->posts . " WHERE post_type='page' AND post_name = %s LIMIT 1;", $slug ) ); - } + if ( strlen( $page_content ) > 0 ) { + // Search for an existing page with the specified page content (typically a shortcode) + $page_found = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM " . $wpdb->posts . " WHERE post_type='page' AND post_content LIKE %s LIMIT 1;", "%{$page_content}%" ) ); + } else { + // Search for an existing page with the specified page slug + $page_found = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM " . $wpdb->posts . " WHERE post_type='page' AND post_name = %s LIMIT 1;", $slug ) ); + } - if ( $page_found ) { - if ( ! $option_value ) - update_option( $option, $page_found ); + if ( $page_found ) { + if ( ! $option_value ) + update_option( $option, $page_found ); return $page_found; - } + } - $page_data = array( - 'post_status' => 'publish', - 'post_type' => 'page', - 'post_author' => 1, - 'post_name' => $slug, - 'post_title' => $page_title, - 'post_content' => $page_content, - 'post_parent' => $post_parent, - 'comment_status' => 'closed' - ); - $page_id = wp_insert_post( $page_data ); + $page_data = array( + 'post_status' => 'publish', + 'post_type' => 'page', + 'post_author' => 1, + 'post_name' => $slug, + 'post_title' => $page_title, + 'post_content' => $page_content, + 'post_parent' => $post_parent, + 'comment_status' => 'closed' + ); + $page_id = wp_insert_post( $page_data ); - if ( $option ) - update_option( $option, $page_id ); + if ( $option ) + update_option( $option, $page_id ); - return $page_id; + return $page_id; } /** @@ -103,10 +103,10 @@ function wc_create_page( $slug, $option = '', $page_title = '', $page_content = * @param array $options Opens array to output */ function woocommerce_admin_fields( $options ) { - if ( ! class_exists( 'WC_Admin_Settings' ) ) - include 'class-wc-admin-settings.php'; + if ( ! class_exists( 'WC_Admin_Settings' ) ) + include 'class-wc-admin-settings.php'; - WC_Admin_Settings::output_fields( $options ); + WC_Admin_Settings::output_fields( $options ); } /** @@ -117,10 +117,10 @@ function woocommerce_admin_fields( $options ) { * @return void */ function woocommerce_update_options( $options ) { - if ( ! class_exists( 'WC_Admin_Settings' ) ) - include 'class-wc-admin-settings.php'; + if ( ! class_exists( 'WC_Admin_Settings' ) ) + include 'class-wc-admin-settings.php'; - WC_Admin_Settings::save_fields( $options ); + WC_Admin_Settings::save_fields( $options ); } /** @@ -130,10 +130,10 @@ function woocommerce_update_options( $options ) { * @return string */ function woocommerce_settings_get_option( $option_name, $default = '' ) { - if ( ! class_exists( 'WC_Admin_Settings' ) ) - include 'class-wc-admin-settings.php'; + if ( ! class_exists( 'WC_Admin_Settings' ) ) + include 'class-wc-admin-settings.php'; - return WC_Admin_Settings::get_option( $option_name, $default ); + return WC_Admin_Settings::get_option( $option_name, $default ); } /** @@ -143,30 +143,30 @@ function woocommerce_settings_get_option( $option_name, $default = '' ) { * @return void */ function woocommerce_compile_less_styles() { - $colors = array_map( 'esc_attr', (array) get_option( 'woocommerce_frontend_css_colors' ) ); - $base_file = WC()->plugin_path() . '/assets/css/woocommerce-base.less'; - $less_file = WC()->plugin_path() . '/assets/css/woocommerce.less'; - $css_file = WC()->plugin_path() . '/assets/css/woocommerce.css'; + $colors = array_map( 'esc_attr', (array) get_option( 'woocommerce_frontend_css_colors' ) ); + $base_file = WC()->plugin_path() . '/assets/css/woocommerce-base.less'; + $less_file = WC()->plugin_path() . '/assets/css/woocommerce.less'; + $css_file = WC()->plugin_path() . '/assets/css/woocommerce.css'; - // Write less file - if ( is_writable( $base_file ) && is_writable( $css_file ) ) { + // Write less file + if ( is_writable( $base_file ) && is_writable( $css_file ) ) { - // Colours changed - recompile less - if ( ! class_exists( 'lessc' ) ) - include_once( WC()->plugin_path() . '/includes/libraries/class-lessc.php' ); - if ( ! class_exists( 'cssmin' ) ) - include_once( WC()->plugin_path() . '/includes/libraries/class-cssmin.php' ); + // Colours changed - recompile less + if ( ! class_exists( 'lessc' ) ) + include_once( WC()->plugin_path() . '/includes/libraries/class-lessc.php' ); + if ( ! class_exists( 'cssmin' ) ) + include_once( WC()->plugin_path() . '/includes/libraries/class-cssmin.php' ); - try { - // Set default if colours not set - if ( ! $colors['primary'] ) $colors['primary'] = '#ad74a2'; - if ( ! $colors['secondary'] ) $colors['secondary'] = '#f7f6f7'; - if ( ! $colors['highlight'] ) $colors['highlight'] = '#85ad74'; - if ( ! $colors['content_bg'] ) $colors['content_bg'] = '#ffffff'; - if ( ! $colors['subtext'] ) $colors['subtext'] = '#777777'; + try { + // Set default if colours not set + if ( ! $colors['primary'] ) $colors['primary'] = '#ad74a2'; + if ( ! $colors['secondary'] ) $colors['secondary'] = '#f7f6f7'; + if ( ! $colors['highlight'] ) $colors['highlight'] = '#85ad74'; + if ( ! $colors['content_bg'] ) $colors['content_bg'] = '#ffffff'; + if ( ! $colors['subtext'] ) $colors['subtext'] = '#777777'; - // Write new color to base file - $color_rules = " + // Write new color to base file + $color_rules = " @primary: " . $colors['primary'] . "; @primarytext: " . wc_light_or_dark( $colors['primary'], 'desaturate(darken(@primary,50%),18%)', 'desaturate(lighten(@primary,50%),18%)' ) . "; @@ -179,21 +179,21 @@ function woocommerce_compile_less_styles() { @contentbg: " . $colors['content_bg'] . "; @subtext: " . $colors['subtext'] . "; - "; + "; - file_put_contents( $base_file, $color_rules ); + file_put_contents( $base_file, $color_rules ); - $less = new lessc; - $compiled_css = $less->compileFile( $less_file ); - $compiled_css = CssMin::minify( $compiled_css ); + $less = new lessc; + $compiled_css = $less->compileFile( $less_file ); + $compiled_css = CssMin::minify( $compiled_css ); - if ( $compiled_css ) - file_put_contents( $css_file, $compiled_css ); + if ( $compiled_css ) + file_put_contents( $css_file, $compiled_css ); - } catch ( exception $ex ) { - wp_die( __( 'Could not compile woocommerce.less:', 'woocommerce' ) . ' ' . $ex->getMessage() ); - } - } + } catch ( exception $ex ) { + wp_die( __( 'Could not compile woocommerce.less:', 'woocommerce' ) . ' ' . $ex->getMessage() ); + } + } } /** @@ -210,6 +210,7 @@ function wc_save_order_items( $order_id, $items ) { // Order items + fees $subtotal = 0; $total = 0; + $taxes = array( 'items' => array(), 'shipping' => array() ); if ( isset( $items['order_item_id'] ) ) { @@ -257,6 +258,7 @@ function wc_save_order_items( $order_id, $items ) { $tax_data_total = array_map( 'wc_format_decimal', $line_tax[ $item_id ] ); $tax_data_subtotal = array_map( 'wc_format_decimal', $line_subtotal_tax[ $item_id ] ); wc_update_order_item_meta( $item_id, '_line_tax_data', array( 'total' => $tax_data_total, 'subtotal' => $tax_data_subtotal ) ); + $taxes['items'][] = $tax_data_total; // Total up $subtotal += wc_format_decimal( $line_subtotal[ $item_id ] ); @@ -315,10 +317,58 @@ function wc_save_order_items( $order_id, $items ) { wc_update_order_item_meta( $item_id, 'cost', $cost ); wc_update_order_item_meta( $item_id, 'taxes', $ship_taxes ); + $taxes['shipping'][] = $ship_taxes; + $order_shipping += $cost; } } + // Taxes + $order_taxes = isset( $items['order_taxes'] ) ? $items['order_taxes'] : array(); + $taxes_items = array(); + $taxes_shipping = array(); + $total_tax = 0; + $total_shipping_tax = 0; + + // Sum items taxes + foreach ( $taxes['items'] as $rates ) { + foreach ( $rates as $id => $value ) { + if ( isset( $taxes_items[ $id ] ) ) { + $taxes_items[ $id ] += $value; + } else { + $taxes_items[ $id ] = $value; + } + } + } + + // Sum shipping taxes + foreach ( $taxes['shipping'] as $rates ) { + foreach ( $rates as $id => $value ) { + if ( isset( $taxes_shipping[ $id ] ) ) { + $taxes_shipping[ $id ] += $value; + } else { + $taxes_shipping[ $id ] = $value; + } + } + } + + // Update order taxes + foreach ( $order_taxes as $item_id => $rate_id ) { + if ( isset( $taxes_items[ $rate_id ] ) ) { + $_total = wc_format_decimal( $taxes_items[ $rate_id ] ); + wc_update_order_item_meta( $item_id, 'tax_amount', $_total ); + + $total_tax += $_total; + } + + if ( isset( $taxes_shipping[ $rate_id ] ) ) { + $_total = wc_format_decimal( $taxes_shipping[ $rate_id ] ); + wc_update_order_item_meta( $item_id, 'shipping_tax_amount', $_total ); + + $total_shipping_tax += $_total; + } + } + // Update order shipping total update_post_meta( $order_id, '_order_shipping', $order_shipping ); @@ -329,6 +379,10 @@ function wc_save_order_items( $order_id, $items ) { update_post_meta( $order_id, '_order_discount', wc_format_decimal( $items['_order_discount'] ) ); update_post_meta( $order_id, '_order_total', wc_format_decimal( $items['_order_total'] ) ); + // Update tax + update_post_meta( $order_id, '_order_tax', wc_format_decimal( $total_tax ) ); + update_post_meta( $order_id, '_order_shipping_tax', wc_format_decimal( $total_shipping_tax ) ); + // Remove old values delete_post_meta( $order_id, '_shipping_method' ); delete_post_meta( $order_id, '_shipping_method_title' );