Booster for WooCommerce - Version 5.3.8

Version Description

  • 24/02/2021 =

  • PHP 8.0.2 tested

  • WooCommerce 5.0 tested

  • Dev - PRODUCTS - Stock - For a Variable product, the custom stock message should be shown before option selection, if stock management is set at the product level.

  • Dev - PRODUCTS - Stock - Show product availability message on shop/loop/search etc.

  • Fix - PRICES & CURRENCIES - Global Discount - Discount conflict when we enable global and wholesale both discounts.

  • Dev - SHIPPING & ORDERS - Order Minimum Amount - Compatibility issue has been resolved with Woocommerce Blocks plugin

  • Fix - SHIPPING & ORDERS - Order Numbers - Custom order number search is not working when the date parameter is set

  • Dev - PDF INVOICING & PACKING SLIPS - Add addition, subtraction, division attributes to shortcodes like multiply_by

  • Dev - PRODUCTS - Shortcodes - Exclude Item_total from order total and order subtotal if the product has been excluded by tag, category or attribute name in invoice pdf.

Download this release

Release Info

Developer ronyp
Plugin Icon 128x128 Booster for WooCommerce
Version 5.3.8
Comparing to
See all releases

Code changes from version 5.3.7 to 5.3.8

includes/class-wcj-global-discount.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Global Discount
4
  *
5
- * @version 5.2.0
6
  * @since 2.5.7
7
  * @author Pluggabl LLC.
8
  */
@@ -231,13 +231,17 @@ class WCJ_Global_Discount extends WCJ_Module {
231
  /**
232
  * change_price.
233
  *
234
- * @version 3.1.0
235
  * @since 3.1.0
236
  * @todo `WCJ_PRODUCT_GET_REGULAR_PRICE_FILTER, 'woocommerce_variation_prices_regular_price', 'woocommerce_product_variation_get_regular_price'`
237
  */
238
  function change_price( $price, $_product ) {
239
  $_current_filter = current_filter();
240
  if ( in_array( $_current_filter, array( WCJ_PRODUCT_GET_PRICE_FILTER, 'woocommerce_variation_prices_price', 'woocommerce_product_variation_get_price' ) ) ) {
 
 
 
 
241
  return $this->add_global_discount( $price, $_product, 'price' );
242
  } elseif ( in_array( $_current_filter, array( WCJ_PRODUCT_GET_SALE_PRICE_FILTER, 'woocommerce_variation_prices_sale_price', 'woocommerce_product_variation_get_sale_price' ) ) ) {
243
  return $this->add_global_discount( $price, $_product, 'sale_price' );
@@ -355,6 +359,7 @@ class WCJ_Global_Discount extends WCJ_Module {
355
  * @since 2.5.7
356
  */
357
  function add_global_discount( $price, $_product, $price_type ) {
 
358
  if ( 'price' === $price_type && '' === $price ) {
359
  return $price; // no changes
360
  }
2
  /**
3
  * Booster for WooCommerce - Module - Global Discount
4
  *
5
+ * @version 5.3.8
6
  * @since 2.5.7
7
  * @author Pluggabl LLC.
8
  */
231
  /**
232
  * change_price.
233
  *
234
+ * @version 5.3.8
235
  * @since 3.1.0
236
  * @todo `WCJ_PRODUCT_GET_REGULAR_PRICE_FILTER, 'woocommerce_variation_prices_regular_price', 'woocommerce_product_variation_get_regular_price'`
237
  */
238
  function change_price( $price, $_product ) {
239
  $_current_filter = current_filter();
240
  if ( in_array( $_current_filter, array( WCJ_PRODUCT_GET_PRICE_FILTER, 'woocommerce_variation_prices_price', 'woocommerce_product_variation_get_price' ) ) ) {
241
+ if(isset($_product->wcj_wholesale_price)){
242
+
243
+ return $_product->wcj_wholesale_price;
244
+ }
245
  return $this->add_global_discount( $price, $_product, 'price' );
246
  } elseif ( in_array( $_current_filter, array( WCJ_PRODUCT_GET_SALE_PRICE_FILTER, 'woocommerce_variation_prices_sale_price', 'woocommerce_product_variation_get_sale_price' ) ) ) {
247
  return $this->add_global_discount( $price, $_product, 'sale_price' );
359
  * @since 2.5.7
360
  */
361
  function add_global_discount( $price, $_product, $price_type ) {
362
+
363
  if ( 'price' === $price_type && '' === $price ) {
364
  return $price; // no changes
365
  }
includes/class-wcj-order-min-amount.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Order Minimum Amount
4
  *
5
- * @version 5.2.0
6
  * @since 2.5.7
7
  * @author Pluggabl LLC.
8
  * @todo order max amount
@@ -39,7 +39,7 @@ class WCJ_Order_Min_Amount extends WCJ_Module {
39
  /**
40
  * add_order_minimum_amount_hooks.
41
  *
42
- * @version 4.9.0
43
  * @since 2.5.3
44
  * @todo (maybe) `template_redirect` instead of `wp`
45
  */
@@ -58,6 +58,10 @@ class WCJ_Order_Min_Amount extends WCJ_Module {
58
  if ( $is_order_minimum_amount_enabled ) {
59
  add_action( 'woocommerce_checkout_process', array( $this, 'order_minimum_amount' ) );
60
  add_action( 'woocommerce_before_cart', array( $this, 'order_minimum_amount' ) );
 
 
 
 
61
  if ( 'yes' === wcj_get_option( 'wcj_order_minimum_amount_stop_from_seeing_checkout', 'no' ) ) {
62
  add_action( 'wp', array( $this, 'stop_from_seeing_checkout' ), 100 );
63
  }
2
  /**
3
  * Booster for WooCommerce - Module - Order Minimum Amount
4
  *
5
+ * @version 5.3.8
6
  * @since 2.5.7
7
  * @author Pluggabl LLC.
8
  * @todo order max amount
39
  /**
40
  * add_order_minimum_amount_hooks.
41
  *
42
+ * @version 5.3.8
43
  * @since 2.5.3
44
  * @todo (maybe) `template_redirect` instead of `wp`
45
  */
58
  if ( $is_order_minimum_amount_enabled ) {
59
  add_action( 'woocommerce_checkout_process', array( $this, 'order_minimum_amount' ) );
60
  add_action( 'woocommerce_before_cart', array( $this, 'order_minimum_amount' ) );
61
+ if( wcj_is_plugin_activated( 'woo-gutenberg-products-block', 'woocommerce-gutenberg-products-block.php' ) ){
62
+ // For the Woocommerce blocks plugin
63
+ add_action( 'wooocommerce_store_api_validate_cart_item', array( $this, 'order_minimum_amount' ) );
64
+ }
65
  if ( 'yes' === wcj_get_option( 'wcj_order_minimum_amount_stop_from_seeing_checkout', 'no' ) ) {
66
  add_action( 'wp', array( $this, 'stop_from_seeing_checkout' ), 100 );
67
  }
includes/class-wcj-order-numbers.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Order Numbers
4
  *
5
- * @version 5.2.0
6
  * @author Pluggabl LLC.
7
  */
8
 
@@ -204,6 +204,15 @@ class WCJ_Order_Numbers extends WCJ_Module {
204
  $search_no_suffix_and_prefix = preg_replace( "/{$suffix}\z/i", '', $search_no_suffix );
205
  $final_search = empty( $search_no_suffix_and_prefix ) ? $search : $search_no_suffix_and_prefix;
206
 
 
 
 
 
 
 
 
 
 
207
  // Post Status
208
  $post_status = isset( $_GET['post_status'] ) ? $_GET['post_status'] : 'any';
209
 
2
  /**
3
  * Booster for WooCommerce - Module - Order Numbers
4
  *
5
+ * @version 5.3.8
6
  * @author Pluggabl LLC.
7
  */
8
 
204
  $search_no_suffix_and_prefix = preg_replace( "/{$suffix}\z/i", '', $search_no_suffix );
205
  $final_search = empty( $search_no_suffix_and_prefix ) ? $search : $search_no_suffix_and_prefix;
206
 
207
+ if($search == $final_search){
208
+
209
+ $final_search = substr($final_search,strlen( $prefix ));
210
+ $final_search = ltrim($final_search,0);
211
+ if(strlen( $suffix ) > 0)
212
+ {
213
+ $final_search = substr($final_search,0,-strlen( $suffix ));
214
+ }
215
+ }
216
  // Post Status
217
  $post_status = isset( $_GET['post_status'] ) ? $_GET['post_status'] : 'any';
218
 
includes/class-wcj-payment-gateways-currency.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Gateways Currency Converter
4
  *
5
- * @version 5.3.6
6
  * @since 2.3.0
7
  * @author Pluggabl LLC.
8
  */
@@ -136,7 +136,7 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
136
  /**
137
  * change_price_by_gateway.
138
  *
139
- * @version 4.3.0
140
  * @since 2.3.0
141
  */
142
  function change_price_by_gateway( $price, $product ) {
@@ -145,7 +145,9 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
145
  if ( '' != $current_gateway ) {
146
  $gateway_currency_exchange_rate = wcj_get_option( 'wcj_gateways_currency_exchange_rate_' . $current_gateway );
147
  $gateway_currency_exchange_rate = str_replace( ',', '.', $gateway_currency_exchange_rate );
148
- $price = $price * $gateway_currency_exchange_rate;
 
 
149
  }
150
  }
151
  return $price;
2
  /**
3
  * Booster for WooCommerce - Module - Gateways Currency Converter
4
  *
5
+ * @version 5.3.8
6
  * @since 2.3.0
7
  * @author Pluggabl LLC.
8
  */
136
  /**
137
  * change_price_by_gateway.
138
  *
139
+ * @version 5.3.8
140
  * @since 2.3.0
141
  */
142
  function change_price_by_gateway( $price, $product ) {
145
  if ( '' != $current_gateway ) {
146
  $gateway_currency_exchange_rate = wcj_get_option( 'wcj_gateways_currency_exchange_rate_' . $current_gateway );
147
  $gateway_currency_exchange_rate = str_replace( ',', '.', $gateway_currency_exchange_rate );
148
+ if(is_numeric($price)){
149
+ $price = $price * $gateway_currency_exchange_rate;
150
+ }
151
  }
152
  }
153
  return $price;
includes/class-wcj-product-by-date.php CHANGED
@@ -52,6 +52,9 @@ class WCJ_Product_By_Date extends WCJ_Module {
52
  add_filter( 'woocommerce_is_purchasable', array( $this, 'check_is_purchasable_by_date' ), PHP_INT_MAX, 2 );
53
  }
54
  add_action( 'woocommerce_single_product_summary', array( $this, 'maybe_add_unavailable_by_date_message' ), 30 );
 
 
 
55
  }
56
  }
57
  }
52
  add_filter( 'woocommerce_is_purchasable', array( $this, 'check_is_purchasable_by_date' ), PHP_INT_MAX, 2 );
53
  }
54
  add_action( 'woocommerce_single_product_summary', array( $this, 'maybe_add_unavailable_by_date_message' ), 30 );
55
+ if('yes' === wcj_get_option( 'wcj_product_by_date_show_message_on_shop_enabled', 'no' )){
56
+ add_action( 'woocommerce_shop_loop_item_title', array( $this, 'maybe_add_unavailable_by_date_message' ), 30 );
57
+ }
58
  }
59
  }
60
  }
includes/class-wcj-stock.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Stock
4
  *
5
- * @version 5.2.0
6
  * @since 2.8.0
7
  * @author Pluggabl LLC.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Stock extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 5.2.0
20
  * @since 2.8.0
21
  * @todo (maybe) change `link_slug` to "woocommerce-products-stock" or "woocommerce-product-stock"
22
  * @todo customize "Available on backorder" message in cart
@@ -44,6 +44,7 @@ class WCJ_Stock extends WCJ_Module {
44
  if ( $this->is_custom_in_stock || $this->is_custom_out_of_stock || $this->is_custom_backorder ) {
45
  if ( $this->is_custom_in_stock_text || $this->is_custom_out_of_stock_text || $this->is_custom_backorder_text ) {
46
  add_filter( 'woocommerce_get_availability_text', array( $this, 'custom_availability_text' ), PHP_INT_MAX, 2 );
 
47
  }
48
  if ( $this->is_custom_in_stock_class || $this->is_custom_out_of_stock_class || $this->is_custom_backorder_class ) {
49
  add_filter( 'woocommerce_get_availability_class', array( $this, 'custom_availability_class' ), PHP_INT_MAX, 2 );
@@ -64,7 +65,60 @@ class WCJ_Stock extends WCJ_Module {
64
  }
65
 
66
  }
67
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  /**
69
  * custom_availability_text.
70
  *
@@ -82,8 +136,10 @@ class WCJ_Stock extends WCJ_Module {
82
  return do_shortcode( wcj_get_option( 'wcj_stock_custom_out_of_stock', '' ) );
83
  }
84
  } elseif ( $_product->managing_stock() && $_product->is_on_backorder( 1 ) ) {
 
85
  if ( $this->is_custom_backorder && $this->is_custom_backorder_text ) {
86
  // Available on backorder
 
87
  return $_product->backorders_require_notification() ? do_shortcode( wcj_get_option( 'wcj_stock_custom_backorder', '' ) ) : '';
88
  }
89
  } elseif ( $_product->managing_stock() ) {
2
  /**
3
  * Booster for WooCommerce - Module - Stock
4
  *
5
+ * @version 5.3.8
6
  * @since 2.8.0
7
  * @author Pluggabl LLC.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 5.3.8
20
  * @since 2.8.0
21
  * @todo (maybe) change `link_slug` to "woocommerce-products-stock" or "woocommerce-product-stock"
22
  * @todo customize "Available on backorder" message in cart
44
  if ( $this->is_custom_in_stock || $this->is_custom_out_of_stock || $this->is_custom_backorder ) {
45
  if ( $this->is_custom_in_stock_text || $this->is_custom_out_of_stock_text || $this->is_custom_backorder_text ) {
46
  add_filter( 'woocommerce_get_availability_text', array( $this, 'custom_availability_text' ), PHP_INT_MAX, 2 );
47
+ add_filter( 'woocommerce_before_variations_form', array( $this, 'custom_availability_for_variable_product' ), PHP_INT_MAX, 2 );
48
  }
49
  if ( $this->is_custom_in_stock_class || $this->is_custom_out_of_stock_class || $this->is_custom_backorder_class ) {
50
  add_filter( 'woocommerce_get_availability_class', array( $this, 'custom_availability_class' ), PHP_INT_MAX, 2 );
65
  }
66
 
67
  }
68
+ /**
69
+ * custom_availability_for_variable_product.
70
+ *
71
+ * @version 5.3.8
72
+ * @since 3.6.0
73
+ * @see `wc_format_stock_for_display()`
74
+ * */
75
+ function custom_availability_for_variable_product(){
76
+ global $product;
77
+ $_product = $product;
78
+ if( $_product->is_type( 'variable' )) {
79
+ $stock = get_post_meta( $_product->get_id(), '_manage_stock', true );
80
+ if($stock ==='yes'){
81
+ if ( !$_product->is_in_stock() ) {
82
+ if($this->is_custom_out_of_stock && $this->is_custom_out_of_stock_text){
83
+ $variable="<div class='stock'>".do_shortcode( wcj_get_option( 'wcj_stock_custom_out_of_stock', '' ) )."</div>";
84
+ echo $variable;
85
+ }
86
+ }
87
+ elseif ( $_product->managing_stock() && $_product->is_on_backorder( 1 ) ) {
88
+ if ( $this->is_custom_backorder && $this->is_custom_backorder_text ) {
89
+ // Available on backorder
90
+ echo $_product->backorders_require_notification() ? do_shortcode( wcj_get_option( 'wcj_stock_custom_backorder', '' ) ) : '';
91
+ }
92
+ }
93
+ elseif ( $_product->managing_stock() ) {
94
+ if ( $this->is_custom_in_stock && $this->is_custom_in_stock_text ) {
95
+ // In stock
96
+ if (
97
+ '' != ( $low_amount_text = wcj_get_option( 'wcj_stock_custom_in_stock_low_amount', '' ) ) &&
98
+ 'low_amount' === wcj_get_option( 'woocommerce_stock_format' ) && $_product->get_stock_quantity() <= wcj_get_option( 'woocommerce_notify_low_stock_amount' )
99
+ ) {
100
+ // Only %s left in stock
101
+ $return = sprintf( do_shortcode( $low_amount_text ),
102
+ wc_format_stock_quantity_for_display( $_product->get_stock_quantity(), $_product ) );
103
+ } else {
104
+ // %s in stock && In stock
105
+ $return = sprintf( do_shortcode( wcj_get_option( 'wcj_stock_custom_in_stock', '' ) ),
106
+ wc_format_stock_quantity_for_display( $_product->get_stock_quantity(), $_product ) );
107
+ }
108
+ if ( '' != ( $can_be_backordered_text = wcj_get_option( 'wcj_stock_custom_in_stock_can_be_backordered', '' ) ) &&
109
+ $_product->backorders_allowed() && $_product->backorders_require_notification()
110
+ ) {
111
+ // (can be backordered)
112
+ $return .= $can_be_backordered_text;
113
+ }
114
+ echo $return;
115
+ }
116
+ }
117
+
118
+ }
119
+ }
120
+
121
+ }
122
  /**
123
  * custom_availability_text.
124
  *
136
  return do_shortcode( wcj_get_option( 'wcj_stock_custom_out_of_stock', '' ) );
137
  }
138
  } elseif ( $_product->managing_stock() && $_product->is_on_backorder( 1 ) ) {
139
+
140
  if ( $this->is_custom_backorder && $this->is_custom_backorder_text ) {
141
  // Available on backorder
142
+
143
  return $_product->backorders_require_notification() ? do_shortcode( wcj_get_option( 'wcj_stock_custom_backorder', '' ) ) : '';
144
  }
145
  } elseif ( $_product->managing_stock() ) {
includes/functions/wcj-functions-products.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Functions - Products
4
  *
5
- * @version 5.3.6
6
  * @since 2.9.0
7
  * @author Pluggabl LLC.
8
  */
@@ -151,7 +151,7 @@ if ( ! function_exists( 'wcj_get_product_display_price' ) ) {
151
  /**
152
  * wcj_get_product_display_price.
153
  *
154
- * @version 3.8.0
155
  * @since 2.7.0
156
  * @todo `$scope` in `WCJ_IS_WC_VERSION_BELOW_3` (i.e. `cart`)
157
  */
@@ -163,9 +163,9 @@ if ( ! function_exists( 'wcj_get_product_display_price' ) ) {
163
  return $_product->get_display_price( $price, $qty );
164
  } else {
165
  $minus_sign = '';
166
- if ( $price < 0 ) {
167
- $minus_sign = '-';
168
- $price *= -1;
169
  }
170
  if ( 'cart' === $scope ) {
171
  $display_price = ( 'incl' === wcj_get_option( 'woocommerce_tax_display_cart' ) ?
2
  /**
3
  * Booster for WooCommerce - Functions - Products
4
  *
5
+ * @version 5.3.8
6
  * @since 2.9.0
7
  * @author Pluggabl LLC.
8
  */
151
  /**
152
  * wcj_get_product_display_price.
153
  *
154
+ * @version 5.3.8
155
  * @since 2.7.0
156
  * @todo `$scope` in `WCJ_IS_WC_VERSION_BELOW_3` (i.e. `cart`)
157
  */
163
  return $_product->get_display_price( $price, $qty );
164
  } else {
165
  $minus_sign = '';
166
+ if ( $price < 0 && is_numeric($price) ) {
167
+ $minus_sign = '-';
168
+ $price *= -1;
169
  }
170
  if ( 'cart' === $scope ) {
171
  $display_price = ( 'incl' === wcj_get_option( 'woocommerce_tax_display_cart' ) ?
includes/settings/wcj-settings-product-by-date.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Product Availability by Date
4
  *
5
- * @version 4.7.0
6
  * @since 2.9.1
7
  * @author Pluggabl LLC.
8
  */
@@ -118,6 +118,14 @@ $settings = array_merge( $settings, array(
118
  'type' => 'title',
119
  'id' => 'wcj_product_by_date_advanced_options',
120
  ),
 
 
 
 
 
 
 
 
121
  array(
122
  'title' => __( 'Action', 'woocommerce-jetpack' ),
123
  'desc' => '<br>' . __( 'Action to be taken, when product is not available by date.', 'woocommerce-jetpack' ),
2
  /**
3
  * Booster for WooCommerce - Settings - Product Availability by Date
4
  *
5
+ * @version 5.3.8
6
  * @since 2.9.1
7
  * @author Pluggabl LLC.
8
  */
118
  'type' => 'title',
119
  'id' => 'wcj_product_by_date_advanced_options',
120
  ),
121
+ array(
122
+ 'title' => __( 'Show Message on Category/shop Page', 'woocommerce-jetpack' ),
123
+ 'desc' => '<strong>' . __( 'Show Message on shop Page', 'woocommerce-jetpack' ) . '</strong>',
124
+ 'desc_tip' => __( 'Enable this if you also want to show message on shop page.', 'woocommerce-jetpack' ),
125
+ 'id' => 'wcj_product_by_date_show_message_on_shop_enabled',
126
+ 'default' => 'no',
127
+ 'type' => 'checkbox',
128
+ ),
129
  array(
130
  'title' => __( 'Action', 'woocommerce-jetpack' ),
131
  'desc' => '<br>' . __( 'Action to be taken, when product is not available by date.', 'woocommerce-jetpack' ),
includes/shortcodes/class-wcj-shortcodes-orders.php CHANGED
@@ -144,6 +144,9 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
144
  'color' => 'black',
145
  'currency' => '',
146
  'doc_type' => 'invoice',
 
 
 
147
  'show_label' => true
148
  ), $atts );
149
 
@@ -1199,9 +1202,50 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
1199
  *
1200
  * @version 3.1.2
1201
  */
 
1202
  function wcj_order_total_tax( $atts ) {
1203
- return $this->wcj_price_shortcode( apply_filters( 'wcj_order_total_tax', $this->the_order->get_total_tax(), $this->the_order ), $atts );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1204
  }
 
1205
 
1206
  /**
1207
  * wcj_order_total_tax_after_refund.
@@ -1232,18 +1276,84 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
1232
  * wcj_order_subtotal.
1233
  */
1234
  function wcj_order_subtotal( $atts ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1235
 
1236
- if ( 'yes' === $atts['round_by_line'] ) {
1237
- $the_subtotal = 0;
1238
- foreach ( $this->the_order->get_items() as $item ) {
1239
- $the_subtotal += $this->the_order->get_line_subtotal( $item, false, true );
1240
- }
1241
- } else {
1242
- $the_subtotal = $this->the_order->get_subtotal();
1243
- }
1244
-
1245
- return $this->wcj_price_shortcode( $the_subtotal, $atts );
1246
- }
1247
 
1248
  /**
1249
  * wcj_order_subtotal_to_display.
@@ -1294,14 +1404,58 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
1294
  * @version 5.3.7
1295
  *
1296
  */
 
 
1297
  function wcj_order_total( $atts ) {
1298
- $order_total = ( true === $atts['excl_tax'] ) ? $this->the_order->get_total() - $this->the_order->get_total_tax() : $this->the_order->get_total();
1299
- $order_total_after_refund = $this->the_order->get_total() - $this->the_order->get_total_refunded();
1300
- if (!empty($order_total_after_refund)) {
1301
- return $this->wcj_price_shortcode($order_total_after_refund, $atts);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1302
  }
 
 
 
 
 
1303
  return $this->wcj_price_shortcode( $order_total, $atts );
1304
  }
 
 
 
 
 
 
 
1305
 
1306
  /**
1307
  * wcj_order_total_after_refund.
@@ -1373,4 +1527,4 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
1373
 
1374
  endif;
1375
 
1376
- return new WCJ_Orders_Shortcodes();
144
  'color' => 'black',
145
  'currency' => '',
146
  'doc_type' => 'invoice',
147
+ 'exclude_by_categories' => '',
148
+ 'exclude_by_tags' => '',
149
+ 'exclude_by_attribute__name' => '',
150
  'show_label' => true
151
  ), $atts );
152
 
1202
  *
1203
  * @version 3.1.2
1204
  */
1205
+
1206
  function wcj_order_total_tax( $atts ) {
1207
+ $the_items = $this->the_order->get_items();
1208
+ $exclude_item_total = 0;
1209
+
1210
+ foreach ( $the_items as $item_id => $item ) {
1211
+ $the_product = $item->get_product( $item );
1212
+
1213
+ // Check if it's not excluded by category
1214
+ if ( '' != $atts['exclude_by_categories'] && $the_product ) {
1215
+ if ( wcj_product_has_terms( $the_product, $atts['exclude_by_categories'], 'product_cat' ) ) {
1216
+ $exclude_item_tax += $item->get_subtotal_tax();
1217
+ }
1218
+ }
1219
+
1220
+ // Check if it's not excluded by tag
1221
+ if ( '' != $atts['exclude_by_tags'] && $the_product ) {
1222
+ if ( wcj_product_has_terms( $the_product, $atts['exclude_by_tags'], 'product_tag' ) ) {
1223
+ $exclude_item_tax += $item->get_subtotal_tax();
1224
+ }
1225
+ }
1226
+
1227
+ // Check if it's not excluded by product attribute
1228
+ if ( $the_product && '' != $atts['exclude_by_attribute__name'] ) {
1229
+ $product_attributes = $the_product->get_attributes();
1230
+ if ( isset( $product_attributes[ $atts['exclude_by_attribute__name'] ] ) ) {
1231
+ $product_attribute = $product_attributes[ $atts['exclude_by_attribute__name'] ];
1232
+ if ( is_object( $product_attribute ) ) {
1233
+ if ( 'WC_Product_Attribute' === get_class( $product_attribute ) && in_array( $atts['exclude_by_attribute__value'], $product_attribute->get_options() ) ) {
1234
+ $exclude_item_tax += $item->get_subtotal_tax();
1235
+ }
1236
+ } elseif ( $atts['exclude_by_attribute__name'] ) {
1237
+ $exclude_item_tax += $item->get_subtotal_tax();
1238
+ }
1239
+ }
1240
+ }
1241
+ }
1242
+ $total_tax = $this->the_order->get_total_tax();
1243
+ $total_tax -= $exclude_item_tax;
1244
+ $total_tax = $this->wcj_price_shortcode( apply_filters( 'wcj_order_total_tax', $total_tax, $this->the_order ), $atts );
1245
+ //$total_tax -= $exclude_item_tax;
1246
+ return $total_tax;
1247
  }
1248
+
1249
 
1250
  /**
1251
  * wcj_order_total_tax_after_refund.
1276
  * wcj_order_subtotal.
1277
  */
1278
  function wcj_order_subtotal( $atts ) {
1279
+
1280
+
1281
+ if ( 'yes' === $atts['round_by_line'] ) {
1282
+ $the_subtotal = 0;
1283
+ foreach ( $this->the_order->get_items() as $item ) {
1284
+ $the_product = $item->get_product( $item ) ;
1285
+ // Check if it's not excluded by category
1286
+ if ( '' != $atts['exclude_by_categories'] && $the_product ) {
1287
+ if ( wcj_product_has_terms( $the_product, $atts['exclude_by_categories'], 'product_cat' ) ) {
1288
+ continue;
1289
+ }
1290
+ }
1291
+ // Check if it's not excluded by tag
1292
+ if ( '' != $atts['exclude_by_tags'] && $the_product ) {
1293
+ if ( wcj_product_has_terms( $the_product, $atts['exclude_by_tags'], 'product_tag' ) ) {
1294
+ continue;
1295
+ }
1296
+ }
1297
+ // Check if it's not excluded by product attribute
1298
+ if ( '' != $atts['exclude_by_attribute__name'] && $the_product ) {
1299
+ $product_attributes = $the_product->get_attributes();
1300
+ if ( isset( $product_attributes[ $atts['exclude_by_attribute__name'] ] ) ) {
1301
+ $product_attribute = $product_attributes[ $atts['exclude_by_attribute__name'] ];
1302
+ if ( is_object( $product_attribute ) ) {
1303
+ if ( 'WC_Product_Attribute' === get_class( $product_attribute ) && in_array( $atts['exclude_by_attribute__value'], $product_attribute->get_options() ) ) {
1304
+ continue;
1305
+ }
1306
+ } elseif ( $atts['exclude_by_attribute__name'] ) {
1307
+ continue;
1308
+ }
1309
+ }
1310
+ }
1311
+
1312
+ $the_subtotal += $this->the_order->get_line_subtotal( $item, false, true );
1313
+ }
1314
+ } else {
1315
+ $the_items = $this->the_order->get_items();
1316
+ $exclude_item_total = 0;
1317
+
1318
+ foreach ( $the_items as $item_id => $item ) {
1319
+ $the_product = $item->get_product( $item );
1320
+
1321
+ // Check if it's not excluded by category
1322
+ if ( '' != $atts['exclude_by_categories'] && $the_product ) {
1323
+ if ( wcj_product_has_terms( $the_product, $atts['exclude_by_categories'], 'product_cat' ) ) {
1324
+ $exclude_item_subtotal += $item['total'];
1325
+ }
1326
+ }
1327
+
1328
+ // Check if it's not excluded by tag
1329
+ if ( '' != $atts['exclude_by_tags'] && $the_product ) {
1330
+ if ( wcj_product_has_terms( $the_product, $atts['exclude_by_tags'], 'product_tag' ) ) {
1331
+ $exclude_item_subtotal += $item['total'];
1332
+ }
1333
+ }
1334
+
1335
+ // Check if it's not excluded by product attribute
1336
+ if ( $the_product && '' != $atts['exclude_by_attribute__name'] ) {
1337
+ $product_attributes = $the_product->get_attributes();
1338
+ if ( isset( $product_attributes[ $atts['exclude_by_attribute__name'] ] ) ) {
1339
+ $product_attribute = $product_attributes[ $atts['exclude_by_attribute__name'] ];
1340
+ if ( is_object( $product_attribute ) ) {
1341
+ if ( 'WC_Product_Attribute' === get_class( $product_attribute ) && in_array( $atts['exclude_by_attribute__value'], $product_attribute->get_options() ) ) {
1342
+ $exclude_item_subtotal += $item['total'];;
1343
+ }
1344
+ } elseif ( $atts['exclude_by_attribute__name'] ) {
1345
+ $exclude_item_subtotal += $item['total'];
1346
+ }
1347
+ }
1348
+ }
1349
+ }
1350
+ $the_subtotal = $this->the_order->get_subtotal();
1351
+ $the_subtotal -= $exclude_item_subtotal;
1352
+ }
1353
+
1354
+ return $this->wcj_price_shortcode( $the_subtotal, $atts );
1355
+ }
1356
 
 
 
 
 
 
 
 
 
 
 
 
1357
 
1358
  /**
1359
  * wcj_order_subtotal_to_display.
1404
  * @version 5.3.7
1405
  *
1406
  */
1407
+
1408
+
1409
  function wcj_order_total( $atts ) {
1410
+ $the_items = $this->the_order->get_items();
1411
+ $exclude_item_total = 0;
1412
+
1413
+ foreach ( $the_items as $item_id => $item ) {
1414
+ $the_product = $item->get_product( $item );
1415
+
1416
+ // Check if it's not excluded by category
1417
+ if ( '' != $atts['exclude_by_categories'] && $the_product ) {
1418
+ if ( wcj_product_has_terms( $the_product, $atts['exclude_by_categories'], 'product_cat' ) ) {
1419
+ $exclude_item_total += $item->get_total();
1420
+ }
1421
+ }
1422
+
1423
+ // Check if it's not excluded by tag
1424
+ if ( '' != $atts['exclude_by_tags'] && $the_product ) {
1425
+ if ( wcj_product_has_terms( $the_product, $atts['exclude_by_tags'], 'product_tag' ) ) {
1426
+ $exclude_item_total += $item->get_total();
1427
+ }
1428
+ }
1429
+
1430
+ // Check if it's not excluded by product attribute
1431
+ if ( $the_product && '' != $atts['exclude_by_attribute__name'] ) {
1432
+ $product_attributes = $the_product->get_attributes();
1433
+ if ( isset( $product_attributes[ $atts['exclude_by_attribute__name'] ] ) ) {
1434
+ $product_attribute = $product_attributes[ $atts['exclude_by_attribute__name'] ];
1435
+ if ( is_object( $product_attribute ) ) {
1436
+ if ( 'WC_Product_Attribute' === get_class( $product_attribute ) && in_array( $atts['exclude_by_attribute__value'], $product_attribute->get_options() ) ) {
1437
+ $exclude_item_total += $item->get_total();
1438
+ }
1439
+ } elseif ( $atts['exclude_by_attribute__name']) {
1440
+ $exclude_item_total += $item->get_total();
1441
+ }
1442
+ }
1443
+ }
1444
  }
1445
+
1446
+ $order_total = ( true === $atts['excl_tax'] ) ? $this->the_order->get_total() - $this->the_order->get_total_tax() : $this->the_order->get_total();
1447
+
1448
+ $order_total -= $exclude_item_total;
1449
+
1450
  return $this->wcj_price_shortcode( $order_total, $atts );
1451
  }
1452
+
1453
+
1454
+
1455
+
1456
+
1457
+
1458
+
1459
 
1460
  /**
1461
  * wcj_order_total_after_refund.
1527
 
1528
  endif;
1529
 
1530
+ return new WCJ_Orders_Shortcodes();
includes/shortcodes/class-wcj-shortcodes-products.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Shortcodes - Products
4
  *
5
- * @version 5.3.7
6
  * @author Pluggabl LLC.
7
  */
8
 
@@ -15,7 +15,7 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
15
  /**
16
  * Constructor.
17
  *
18
- * @version 3.6.0
19
  * @todo (maybe) add `[wcj_product_stock_price]`
20
  */
21
  function __construct() {
@@ -78,6 +78,9 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
78
  'image_nr' => 1,
79
  'multiply_by' => '',
80
  'multiply_by_meta' => '',
 
 
 
81
  'hide_currency' => 'no',
82
  'excerpt_length' => 0, // deprecated
83
  'length' => 0,
@@ -386,7 +389,7 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
386
  /**
387
  * get_product_price_including_or_excluding_tax.
388
  *
389
- * @version 2.7.0
390
  * @since 2.5.7
391
  */
392
  function get_product_price_including_or_excluding_tax( $atts, $including_or_excluding ) {
@@ -410,6 +413,23 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
410
  $min = $min * $atts['multiply_by'];
411
  $max = $max * $atts['multiply_by'];
412
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
413
  if ( 'yes' !== $atts['hide_currency'] ) {
414
  $min = wc_price( $min );
415
  $max = wc_price( $max );
@@ -426,6 +446,15 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
426
  if ( 0 != $atts['multiply_by'] && is_numeric( $atts['multiply_by'] ) ) {
427
  $the_price = $the_price * $atts['multiply_by'];
428
  }
 
 
 
 
 
 
 
 
 
429
  return ( 'yes' === $atts['hide_currency'] ) ? $the_price : wc_price( $the_price );
430
  }
431
  }
@@ -630,13 +659,13 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
630
  /**
631
  * wcj_product_total_sales.
632
  *
633
- * @version 2.7.0
634
  * @since 2.2.6
635
  */
636
  function wcj_product_total_sales( $atts ) {
637
  $product_custom_fields = get_post_custom( wcj_get_product_id_or_variation_parent_id( $this->the_product ) );
638
  $total_sales = ( isset( $product_custom_fields['total_sales'][0] ) ) ? $product_custom_fields['total_sales'][0] : '';
639
- if ( 0 != $atts['offset'] ) {
640
  $total_sales += $atts['offset'];
641
  }
642
  return ( 0 == $total_sales && 'yes' === $atts['hide_if_zero'] ) ? '' : $total_sales;
2
  /**
3
  * Booster for WooCommerce - Shortcodes - Products
4
  *
5
+ * @version 5.3.8
6
  * @author Pluggabl LLC.
7
  */
8
 
15
  /**
16
  * Constructor.
17
  *
18
+ * @version 3.6.1
19
  * @todo (maybe) add `[wcj_product_stock_price]`
20
  */
21
  function __construct() {
78
  'image_nr' => 1,
79
  'multiply_by' => '',
80
  'multiply_by_meta' => '',
81
+ 'addition_by' =>'',
82
+ 'subtraction_by' =>'',
83
+ 'division_by' =>'',
84
  'hide_currency' => 'no',
85
  'excerpt_length' => 0, // deprecated
86
  'length' => 0,
389
  /**
390
  * get_product_price_including_or_excluding_tax.
391
  *
392
+ * @version 2.7.1
393
  * @since 2.5.7
394
  */
395
  function get_product_price_including_or_excluding_tax( $atts, $including_or_excluding ) {
413
  $min = $min * $atts['multiply_by'];
414
  $max = $max * $atts['multiply_by'];
415
  }
416
+ // For Additon
417
+ if ( 0 != $atts['addition_by'] && is_numeric( $atts['addition_by'] ) ) {
418
+ $min = $min + $atts['addition_by'];
419
+ $max = $max + $atts['addition_by'];
420
+ }
421
+
422
+ //For Subsaction
423
+ if ( 0 != $atts['subtraction_by'] && is_numeric( $atts['subtraction_by'] ) ) {
424
+ $min = $min - $atts['subtraction_by'];
425
+ $max = $max - $atts['subtraction_by'];
426
+ }
427
+
428
+ //For Division
429
+ if ( 0 != $atts['division_by'] && is_numeric( $atts['division_by'] ) ) {
430
+ $min = $min / $atts['division_by'];
431
+ $max = $max / $atts['division_by'];
432
+ }
433
  if ( 'yes' !== $atts['hide_currency'] ) {
434
  $min = wc_price( $min );
435
  $max = wc_price( $max );
446
  if ( 0 != $atts['multiply_by'] && is_numeric( $atts['multiply_by'] ) ) {
447
  $the_price = $the_price * $atts['multiply_by'];
448
  }
449
+ if ( 0 != $atts['addition_by'] && is_numeric( $atts['addition_by'] ) ) {
450
+ $the_price = $the_price + $atts['addition_by'];
451
+ }
452
+ if ( 0 != $atts['subtraction_by'] && is_numeric( $atts['subtraction_by'] ) ) {
453
+ $the_price = $the_price - $atts['subtraction_by'];
454
+ }
455
+ if ( 0 != $atts['division_by'] && is_numeric( $atts['division_by'] ) ) {
456
+ $the_price = $the_price / $atts['division_by'];
457
+ }
458
  return ( 'yes' === $atts['hide_currency'] ) ? $the_price : wc_price( $the_price );
459
  }
460
  }
659
  /**
660
  * wcj_product_total_sales.
661
  *
662
+ * @version 5.3.8
663
  * @since 2.2.6
664
  */
665
  function wcj_product_total_sales( $atts ) {
666
  $product_custom_fields = get_post_custom( wcj_get_product_id_or_variation_parent_id( $this->the_product ) );
667
  $total_sales = ( isset( $product_custom_fields['total_sales'][0] ) ) ? $product_custom_fields['total_sales'][0] : '';
668
+ if ( 0 != $atts['offset'] && !is_numeric($total_sales) ) {
669
  $total_sales += $atts['offset'];
670
  }
671
  return ( 0 == $total_sales && 'yes' === $atts['hide_if_zero'] ) ? '' : $total_sales;
langs/woocommerce-jetpack.pot CHANGED
@@ -193,7 +193,7 @@ msgid "Export all Booster's options to a file."
193
  msgstr ""
194
 
195
  #: includes/admin/class-wc-settings-jetpack.php:473
196
- #: includes/class-wcj-purchase-data.php:97
197
  msgid "Import"
198
  msgstr ""
199
 
@@ -699,7 +699,7 @@ msgstr ""
699
  #: includes/class-wcj-admin-bar.php:440
700
  #: includes/settings/wcj-settings-offer-price.php:49
701
  #: includes/settings/wcj-settings-stock.php:101
702
- #: includes/shortcodes/class-wcj-shortcodes-products.php:593
703
  msgid "Out of stock"
704
  msgstr ""
705
 
@@ -1043,17 +1043,17 @@ msgstr ""
1043
  msgid "Add custom info to the cart page."
1044
  msgstr ""
1045
 
1046
- #: includes/class-wcj-checkout-core-fields.php:27
1047
  msgid "Checkout Core Fields"
1048
  msgstr ""
1049
 
1050
- #: includes/class-wcj-checkout-core-fields.php:28
1051
  msgid ""
1052
  "Customize core checkout fields. Disable/enable fields, set required, change "
1053
  "labels and/or placeholders; Setup fields by category (Plus)"
1054
  msgstr ""
1055
 
1056
- #: includes/class-wcj-checkout-core-fields.php:29
1057
  msgid ""
1058
  "Customize core checkout fields. Disable/enable fields, set required, change "
1059
  "labels and/or placeholders etc."
@@ -2400,7 +2400,7 @@ msgstr ""
2400
  #: includes/class-wcj-my-account.php:496
2401
  #: includes/class-wcj-product-bulk-meta-editor.php:280
2402
  #: includes/class-wcj-product-by-user.php:207
2403
- #: includes/class-wcj-purchase-data.php:98
2404
  #: includes/class-wcj-track-users.php:335
2405
  #: includes/classes/class-wcj-module.php:891
2406
  #: includes/functions/wcj-functions-general.php:189
@@ -2741,23 +2741,23 @@ msgstr ""
2741
  msgid "Tool renumerates all orders."
2742
  msgstr ""
2743
 
2744
- #: includes/class-wcj-order-numbers.php:317
2745
  msgid "Orders successfully renumerated!"
2746
  msgstr ""
2747
 
2748
- #: includes/class-wcj-order-numbers.php:320
2749
  #, php-format
2750
  msgid "Sequential number generation is enabled. Next order number will be %s."
2751
  msgstr ""
2752
 
2753
- #: includes/class-wcj-order-numbers.php:329
2754
  #, php-format
2755
  msgid ""
2756
  "Press the button below to renumerate all existing orders starting from order "
2757
  "counter settings in <a href=\"%s\">Order Numbers</a> module."
2758
  msgstr ""
2759
 
2760
- #: includes/class-wcj-order-numbers.php:336
2761
  msgid "Renumerate orders"
2762
  msgstr ""
2763
 
@@ -3726,7 +3726,7 @@ msgid "Save"
3726
  msgstr ""
3727
 
3728
  #: includes/class-wcj-product-bulk-meta-editor.php:390
3729
- #: includes/class-wcj-purchase-data.php:81
3730
  #: includes/export/class-wcj-fields-helper.php:280
3731
  #: includes/functions/wcj-functions-reports.php:24
3732
  #: includes/settings/wcj-settings-product-bulk-meta-editor.php:42
@@ -3805,7 +3805,7 @@ msgid "Products category"
3805
  msgstr ""
3806
 
3807
  #: includes/class-wcj-product-bulk-price-converter.php:262
3808
- #: includes/shortcodes/class-wcj-shortcodes-products.php:369
3809
  msgid "Any"
3810
  msgstr ""
3811
 
@@ -3950,19 +3950,19 @@ msgstr ""
3950
  msgid "Set product availability by date."
3951
  msgstr ""
3952
 
3953
- #: includes/class-wcj-product-by-date.php:111
3954
  #: includes/settings/wcj-settings-product-by-date.php:107
3955
  msgid "%product_title% is not available until %direct_date%."
3956
  msgstr ""
3957
 
3958
- #: includes/class-wcj-product-by-date.php:118
3959
- #: includes/class-wcj-product-by-date.php:120
3960
  #: includes/settings/wcj-settings-product-by-date.php:95
3961
  msgid "<p style=\"color:red;\">%product_title% is not available this month.</p>"
3962
  msgstr ""
3963
 
3964
- #: includes/class-wcj-product-by-date.php:121
3965
- #: includes/class-wcj-product-by-date.php:123
3966
  #: includes/settings/wcj-settings-product-by-date.php:83
3967
  msgid ""
3968
  "<p style=\"color:red;\">%product_title% is available only on %date_this_month"
@@ -4435,7 +4435,6 @@ msgid ""
4435
  msgstr ""
4436
 
4437
  #: includes/class-wcj-product-price-by-formula.php:241
4438
- #: includes/class-wcj-purchase-data.php:256
4439
  msgid "Error in formula"
4440
  msgstr ""
4441
 
@@ -4668,41 +4667,41 @@ msgstr ""
4668
  msgid "Products XML file #%s created successfully."
4669
  msgstr ""
4670
 
4671
- #: includes/class-wcj-purchase-data.php:30
4672
  msgid "Cost of Goods"
4673
  msgstr ""
4674
 
4675
- #: includes/class-wcj-purchase-data.php:31
4676
  msgid ""
4677
  "Save product purchase costs data for admin reports (1 custom field allowed in "
4678
  "free version)."
4679
  msgstr ""
4680
 
4681
- #: includes/class-wcj-purchase-data.php:32
4682
  msgid "Save product purchase costs data for admin reports."
4683
  msgstr ""
4684
 
4685
- #: includes/class-wcj-purchase-data.php:38
4686
  msgid "\"WooCommerce Cost of Goods\" Data Import"
4687
  msgstr ""
4688
 
4689
- #: includes/class-wcj-purchase-data.php:39
4690
  msgid "Import products costs from \"WooCommerce Cost of Goods\"."
4691
  msgstr ""
4692
 
4693
- #: includes/class-wcj-purchase-data.php:82
4694
  msgid "Product Title"
4695
  msgstr ""
4696
 
4697
- #: includes/class-wcj-purchase-data.php:83
4698
  msgid "WooCommerce Cost of Goods (source)"
4699
  msgstr ""
4700
 
4701
- #: includes/class-wcj-purchase-data.php:84
4702
  msgid "Booster: Product cost (destination)"
4703
  msgstr ""
4704
 
4705
- #: includes/class-wcj-purchase-data.php:120
4706
  #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:139
4707
  #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:209
4708
  #: includes/shipping/class-wc-shipping-wcj-custom.php:122
@@ -4710,30 +4709,30 @@ msgstr ""
4710
  msgid "Cost"
4711
  msgstr ""
4712
 
4713
- #: includes/class-wcj-purchase-data.php:123
4714
- #: includes/class-wcj-purchase-data.php:188
4715
- #: includes/class-wcj-purchase-data.php:455
4716
  #: includes/functions/wcj-functions-reports.php:28
4717
  #: includes/settings/wcj-settings-purchase-data.php:144
4718
  #: includes/settings/wcj-settings-purchase-data.php:172
4719
  msgid "Profit"
4720
  msgstr ""
4721
 
4722
- #: includes/class-wcj-purchase-data.php:191
4723
  #: includes/settings/wcj-settings-purchase-data.php:153
4724
  #: includes/settings/wcj-settings-purchase-data.php:179
4725
  msgid "Purchase Cost"
4726
  msgstr ""
4727
 
4728
- #: includes/class-wcj-purchase-data.php:453
4729
  msgid "Selling"
4730
  msgstr ""
4731
 
4732
- #: includes/class-wcj-purchase-data.php:454
4733
  msgid "Buying"
4734
  msgstr ""
4735
 
4736
- #: includes/class-wcj-purchase-data.php:462
4737
  msgid "Report"
4738
  msgstr ""
4739
 
@@ -16850,18 +16849,30 @@ msgid "Message when product is not available by direct date."
16850
  msgstr ""
16851
 
16852
  #: includes/settings/wcj-settings-product-by-date.php:122
16853
- msgid "Action"
16854
  msgstr ""
16855
 
16856
  #: includes/settings/wcj-settings-product-by-date.php:123
 
 
 
 
 
 
 
 
 
 
 
 
16857
  msgid "Action to be taken, when product is not available by date."
16858
  msgstr ""
16859
 
16860
- #: includes/settings/wcj-settings-product-by-date.php:128
16861
  msgid "Make product non-purchasable"
16862
  msgstr ""
16863
 
16864
- #: includes/settings/wcj-settings-product-by-date.php:129
16865
  msgid "Only output message"
16866
  msgstr ""
16867
 
@@ -20066,7 +20077,7 @@ msgstr ""
20066
  msgid "Attribute \"name\" is required!"
20067
  msgstr ""
20068
 
20069
- #: includes/shortcodes/class-wcj-shortcodes-orders.php:348
20070
  #, php-format
20071
  msgid "Refund #%1$s - %2$s"
20072
  msgstr ""
@@ -20109,20 +20120,20 @@ msgstr ""
20109
  msgid "Edit Product"
20110
  msgstr ""
20111
 
20112
- #: includes/shortcodes/class-wcj-shortcodes-products.php:342
20113
  #, php-format
20114
  msgid "%s ago"
20115
  msgstr ""
20116
 
20117
- #: includes/shortcodes/class-wcj-shortcodes-products.php:349
20118
  msgid "No sales yet."
20119
  msgstr ""
20120
 
20121
- #: includes/shortcodes/class-wcj-shortcodes-products.php:590
20122
  msgid "In stock"
20123
  msgstr ""
20124
 
20125
- #: includes/shortcodes/class-wcj-shortcodes-products.php:1020
20126
  msgid "from %level_min_qty% pcs."
20127
  msgstr ""
20128
 
193
  msgstr ""
194
 
195
  #: includes/admin/class-wc-settings-jetpack.php:473
196
+ #: includes/class-wcj-purchase-data.php:94
197
  msgid "Import"
198
  msgstr ""
199
 
699
  #: includes/class-wcj-admin-bar.php:440
700
  #: includes/settings/wcj-settings-offer-price.php:49
701
  #: includes/settings/wcj-settings-stock.php:101
702
+ #: includes/shortcodes/class-wcj-shortcodes-products.php:594
703
  msgid "Out of stock"
704
  msgstr ""
705
 
1043
  msgid "Add custom info to the cart page."
1044
  msgstr ""
1045
 
1046
+ #: includes/class-wcj-checkout-core-fields.php:25
1047
  msgid "Checkout Core Fields"
1048
  msgstr ""
1049
 
1050
+ #: includes/class-wcj-checkout-core-fields.php:26
1051
  msgid ""
1052
  "Customize core checkout fields. Disable/enable fields, set required, change "
1053
  "labels and/or placeholders; Setup fields by category (Plus)"
1054
  msgstr ""
1055
 
1056
+ #: includes/class-wcj-checkout-core-fields.php:27
1057
  msgid ""
1058
  "Customize core checkout fields. Disable/enable fields, set required, change "
1059
  "labels and/or placeholders etc."
2400
  #: includes/class-wcj-my-account.php:496
2401
  #: includes/class-wcj-product-bulk-meta-editor.php:280
2402
  #: includes/class-wcj-product-by-user.php:207
2403
+ #: includes/class-wcj-purchase-data.php:95
2404
  #: includes/class-wcj-track-users.php:335
2405
  #: includes/classes/class-wcj-module.php:891
2406
  #: includes/functions/wcj-functions-general.php:189
2741
  msgid "Tool renumerates all orders."
2742
  msgstr ""
2743
 
2744
+ #: includes/class-wcj-order-numbers.php:326
2745
  msgid "Orders successfully renumerated!"
2746
  msgstr ""
2747
 
2748
+ #: includes/class-wcj-order-numbers.php:329
2749
  #, php-format
2750
  msgid "Sequential number generation is enabled. Next order number will be %s."
2751
  msgstr ""
2752
 
2753
+ #: includes/class-wcj-order-numbers.php:338
2754
  #, php-format
2755
  msgid ""
2756
  "Press the button below to renumerate all existing orders starting from order "
2757
  "counter settings in <a href=\"%s\">Order Numbers</a> module."
2758
  msgstr ""
2759
 
2760
+ #: includes/class-wcj-order-numbers.php:345
2761
  msgid "Renumerate orders"
2762
  msgstr ""
2763
 
3726
  msgstr ""
3727
 
3728
  #: includes/class-wcj-product-bulk-meta-editor.php:390
3729
+ #: includes/class-wcj-purchase-data.php:78
3730
  #: includes/export/class-wcj-fields-helper.php:280
3731
  #: includes/functions/wcj-functions-reports.php:24
3732
  #: includes/settings/wcj-settings-product-bulk-meta-editor.php:42
3805
  msgstr ""
3806
 
3807
  #: includes/class-wcj-product-bulk-price-converter.php:262
3808
+ #: includes/shortcodes/class-wcj-shortcodes-products.php:357
3809
  msgid "Any"
3810
  msgstr ""
3811
 
3950
  msgid "Set product availability by date."
3951
  msgstr ""
3952
 
3953
+ #: includes/class-wcj-product-by-date.php:114
3954
  #: includes/settings/wcj-settings-product-by-date.php:107
3955
  msgid "%product_title% is not available until %direct_date%."
3956
  msgstr ""
3957
 
3958
+ #: includes/class-wcj-product-by-date.php:121
3959
+ #: includes/class-wcj-product-by-date.php:123
3960
  #: includes/settings/wcj-settings-product-by-date.php:95
3961
  msgid "<p style=\"color:red;\">%product_title% is not available this month.</p>"
3962
  msgstr ""
3963
 
3964
+ #: includes/class-wcj-product-by-date.php:124
3965
+ #: includes/class-wcj-product-by-date.php:126
3966
  #: includes/settings/wcj-settings-product-by-date.php:83
3967
  msgid ""
3968
  "<p style=\"color:red;\">%product_title% is available only on %date_this_month"
4435
  msgstr ""
4436
 
4437
  #: includes/class-wcj-product-price-by-formula.php:241
 
4438
  msgid "Error in formula"
4439
  msgstr ""
4440
 
4667
  msgid "Products XML file #%s created successfully."
4668
  msgstr ""
4669
 
4670
+ #: includes/class-wcj-purchase-data.php:28
4671
  msgid "Cost of Goods"
4672
  msgstr ""
4673
 
4674
+ #: includes/class-wcj-purchase-data.php:29
4675
  msgid ""
4676
  "Save product purchase costs data for admin reports (1 custom field allowed in "
4677
  "free version)."
4678
  msgstr ""
4679
 
4680
+ #: includes/class-wcj-purchase-data.php:30
4681
  msgid "Save product purchase costs data for admin reports."
4682
  msgstr ""
4683
 
4684
+ #: includes/class-wcj-purchase-data.php:36
4685
  msgid "\"WooCommerce Cost of Goods\" Data Import"
4686
  msgstr ""
4687
 
4688
+ #: includes/class-wcj-purchase-data.php:37
4689
  msgid "Import products costs from \"WooCommerce Cost of Goods\"."
4690
  msgstr ""
4691
 
4692
+ #: includes/class-wcj-purchase-data.php:79
4693
  msgid "Product Title"
4694
  msgstr ""
4695
 
4696
+ #: includes/class-wcj-purchase-data.php:80
4697
  msgid "WooCommerce Cost of Goods (source)"
4698
  msgstr ""
4699
 
4700
+ #: includes/class-wcj-purchase-data.php:81
4701
  msgid "Booster: Product cost (destination)"
4702
  msgstr ""
4703
 
4704
+ #: includes/class-wcj-purchase-data.php:116
4705
  #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:139
4706
  #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:209
4707
  #: includes/shipping/class-wc-shipping-wcj-custom.php:122
4709
  msgid "Cost"
4710
  msgstr ""
4711
 
4712
+ #: includes/class-wcj-purchase-data.php:119
4713
+ #: includes/class-wcj-purchase-data.php:182
4714
+ #: includes/class-wcj-purchase-data.php:269
4715
  #: includes/functions/wcj-functions-reports.php:28
4716
  #: includes/settings/wcj-settings-purchase-data.php:144
4717
  #: includes/settings/wcj-settings-purchase-data.php:172
4718
  msgid "Profit"
4719
  msgstr ""
4720
 
4721
+ #: includes/class-wcj-purchase-data.php:185
4722
  #: includes/settings/wcj-settings-purchase-data.php:153
4723
  #: includes/settings/wcj-settings-purchase-data.php:179
4724
  msgid "Purchase Cost"
4725
  msgstr ""
4726
 
4727
+ #: includes/class-wcj-purchase-data.php:267
4728
  msgid "Selling"
4729
  msgstr ""
4730
 
4731
+ #: includes/class-wcj-purchase-data.php:268
4732
  msgid "Buying"
4733
  msgstr ""
4734
 
4735
+ #: includes/class-wcj-purchase-data.php:276
4736
  msgid "Report"
4737
  msgstr ""
4738
 
16849
  msgstr ""
16850
 
16851
  #: includes/settings/wcj-settings-product-by-date.php:122
16852
+ msgid "Show Message on Category/shop Page"
16853
  msgstr ""
16854
 
16855
  #: includes/settings/wcj-settings-product-by-date.php:123
16856
+ msgid "Show Message on shop Page"
16857
+ msgstr ""
16858
+
16859
+ #: includes/settings/wcj-settings-product-by-date.php:124
16860
+ msgid "Enable this if you also want to show message on shop page."
16861
+ msgstr ""
16862
+
16863
+ #: includes/settings/wcj-settings-product-by-date.php:130
16864
+ msgid "Action"
16865
+ msgstr ""
16866
+
16867
+ #: includes/settings/wcj-settings-product-by-date.php:131
16868
  msgid "Action to be taken, when product is not available by date."
16869
  msgstr ""
16870
 
16871
+ #: includes/settings/wcj-settings-product-by-date.php:136
16872
  msgid "Make product non-purchasable"
16873
  msgstr ""
16874
 
16875
+ #: includes/settings/wcj-settings-product-by-date.php:137
16876
  msgid "Only output message"
16877
  msgstr ""
16878
 
20077
  msgid "Attribute \"name\" is required!"
20078
  msgstr ""
20079
 
20080
+ #: includes/shortcodes/class-wcj-shortcodes-orders.php:339
20081
  #, php-format
20082
  msgid "Refund #%1$s - %2$s"
20083
  msgstr ""
20120
  msgid "Edit Product"
20121
  msgstr ""
20122
 
20123
+ #: includes/shortcodes/class-wcj-shortcodes-products.php:331
20124
  #, php-format
20125
  msgid "%s ago"
20126
  msgstr ""
20127
 
20128
+ #: includes/shortcodes/class-wcj-shortcodes-products.php:338
20129
  msgid "No sales yet."
20130
  msgstr ""
20131
 
20132
+ #: includes/shortcodes/class-wcj-shortcodes-products.php:591
20133
  msgid "In stock"
20134
  msgstr ""
20135
 
20136
+ #: includes/shortcodes/class-wcj-shortcodes-products.php:1009
20137
  msgid "from %level_min_qty% pcs."
20138
  msgstr ""
20139
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: anbinder, karzin, pluggabl
3
  Tags: woocommerce, booster for woocommerce, woocommerce jetpack
4
  Requires at least: 4.4
5
  Tested up to: 5.6
6
- Stable tag: 5.3.7
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -193,11 +193,24 @@ You can see the differences between versions in this [table](https://booster.io/
193
 
194
  == Changelog ==
195
 
 
 
 
 
 
 
 
 
 
 
 
 
196
  = 5.3.7 - 28/01/2021 =
197
  * Fix - CART & CHECKOUT - Checkout Core Fields - Fix "Checkout Field arragement not working" issue.
198
  * Fix - PRICES & CURRENCIES - Currency Exchange Rates - Fix "Woocommerce store base currency Exchange rate" issue.
199
  * Dev - EMAILS & MISC. - Export - Added feature to export new column for 'allowed_user_roles' and 'not_allowed_user_roles'.
200
  * Fix - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Fix "Order total after refund" shortcode with new attribute.
 
201
  * Fix - CART & CHECKOUT - EU VAT Number - Fix "EU VAT Number" should be required for EU countries only.
202
 
203
  = 5.3.6 - 30/12/2020 =
3
  Tags: woocommerce, booster for woocommerce, woocommerce jetpack
4
  Requires at least: 4.4
5
  Tested up to: 5.6
6
+ Stable tag: 5.3.8
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
193
 
194
  == Changelog ==
195
 
196
+ = 5.3.8 - 24/02/2021 =
197
+
198
+ * PHP 8.0.2 tested
199
+ * WooCommerce 5.0 tested
200
+ * Dev - PRODUCTS - Stock - For a Variable product, the custom stock message should be shown before option selection, if stock management is set at the product level.
201
+ * Dev - PRODUCTS - Stock - Show product availability message on shop/loop/search etc.
202
+ * Fix - PRICES & CURRENCIES - Global Discount - Discount conflict when we enable global and wholesale both discounts.
203
+ * Dev - SHIPPING & ORDERS - Order Minimum Amount - Compatibility issue has been resolved with Woocommerce Blocks plugin
204
+ * Fix - SHIPPING & ORDERS - Order Numbers - Custom order number search is not working when the date parameter is set
205
+ * Dev - PDF INVOICING & PACKING SLIPS - Add addition, subtraction, division attributes to shortcodes like multiply_by
206
+ * Dev - PRODUCTS - Shortcodes - Exclude Item_total from order total and order subtotal if the product has been excluded by tag, category or attribute name in invoice pdf.
207
+
208
  = 5.3.7 - 28/01/2021 =
209
  * Fix - CART & CHECKOUT - Checkout Core Fields - Fix "Checkout Field arragement not working" issue.
210
  * Fix - PRICES & CURRENCIES - Currency Exchange Rates - Fix "Woocommerce store base currency Exchange rate" issue.
211
  * Dev - EMAILS & MISC. - Export - Added feature to export new column for 'allowed_user_roles' and 'not_allowed_user_roles'.
212
  * Fix - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Fix "Order total after refund" shortcode with new attribute.
213
+ * Fix - PRODUCTS - Cost of Goods - Fix "Profit" amount to consider "Wholesale discount","product price by formula" and also made it compatible with multi-currency.
214
  * Fix - CART & CHECKOUT - EU VAT Number - Fix "EU VAT Number" should be required for EU countries only.
215
 
216
  = 5.3.6 - 30/12/2020 =
woocommerce-jetpack.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Booster for WooCommerce
4
  Plugin URI: https://booster.io
5
  Description: Supercharge your WooCommerce site with these awesome powerful features. More than 100 modules. All in one WooCommerce plugin.
6
- Version: 5.3.7
7
  Author: Pluggabl LLC
8
  Author URI: https://booster.io
9
  Text Domain: woocommerce-jetpack
@@ -57,7 +57,7 @@ final class WC_Jetpack {
57
  * @var string
58
  * @since 2.4.7
59
  */
60
- public $version = '5.3.7';
61
 
62
  /**
63
  * @var WC_Jetpack The single instance of the class
3
  Plugin Name: Booster for WooCommerce
4
  Plugin URI: https://booster.io
5
  Description: Supercharge your WooCommerce site with these awesome powerful features. More than 100 modules. All in one WooCommerce plugin.
6
+ Version: 5.3.8
7
  Author: Pluggabl LLC
8
  Author URI: https://booster.io
9
  Text Domain: woocommerce-jetpack
57
  * @var string
58
  * @since 2.4.7
59
  */
60
+ public $version = '5.3.8';
61
 
62
  /**
63
  * @var WC_Jetpack The single instance of the class