PluginProbe ʕ •ᴥ•ʔ
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress / trunk
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress vtrunk
4.16.18 4.16.17 4.16.16 trunk 1.0 1.0.1 1.0.2 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5a 1.1.6 1.1.7 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4 1.4.1 1.4.2 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.1.9 2.2.10 2.2.11 2.2.12 2.2.13 2.2.14 2.2.15 2.2.16 2.2.2 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 3.0 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.13.4 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.15.0 4.15.1 4.15.10 4.15.11 4.15.12 4.15.13 4.15.14 4.15.15 4.15.16 4.15.17 4.15.18 4.15.19 4.15.2 4.15.20 4.15.20.1 4.15.21 4.15.22 4.15.23 4.15.24 4.15.25 4.15.3 4.15.4 4.15.5 4.15.6 4.15.7 4.15.8 4.15.9 4.16.0 4.16.1 4.16.10 4.16.11 4.16.12 4.16.13 4.16.14 4.16.15 4.16.2 4.16.3 4.16.4 4.16.5 4.16.6 4.16.7 4.16.8 4.16.9 4.2.0 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.7.0 4.8.0 4.9.0
wp-user-avatar / src / Membership / Services / TaxService.php
wp-user-avatar / src / Membership / Services Last commit date
EUVATChecker 3 years ago Calculator.php 3 years ago CouponService.php 3 years ago CustomerService.php 3 years ago OrderService.php 4 months ago SubscriptionService.php 4 months ago TaxService.php 3 years ago index.php 3 years ago
TaxService.php
152 lines
1 <?php
2
3 namespace ProfilePress\Core\Membership\Services;
4
5 use ProfilePress\Core\Membership\Models\Order\OrderFactory;
6
7 class TaxService
8 {
9 protected $tax_options = [];
10
11 public function __construct()
12 {
13 $this->tax_options = get_option(PPRESS_TAXES_OPTION_NAME, []);
14 }
15
16 public function is_tax_enabled()
17 {
18 return ppress_var($this->tax_options, 'enable_tax') == 'true';
19 }
20
21 public function get_tax_label($country)
22 {
23 return $this->is_eu_countries($country) ? esc_html__('VAT', 'wp-user-avatar') : esc_html__('Tax', 'wp-user-avatar');
24 }
25
26 public function is_eu_vat_enabled()
27 {
28 return ppress_var($this->tax_options, 'enable_eu_vat') == 'true';
29 }
30
31 public function is_price_inclusive_tax()
32 {
33 return ppress_var($this->tax_options, 'prices_include_tax', 'no') == 'yes';
34 }
35
36 public function is_vat_number_validation_active()
37 {
38 return ppress_var($this->tax_options, 'eu_vat_disable_validation', 'false') == 'false';
39 }
40
41 public function calculate_tax_based_on_setting()
42 {
43 return ppress_var($this->tax_options, 'tax_based_on', 'billing');
44 }
45
46 /**
47 * @return string
48 */
49 public function eu_vat_same_country_rule_setting()
50 {
51 return ppress_var($this->tax_options, 'eu_vat_same_country_rule', 'excl');
52 }
53
54 public function get_tax_rates()
55 {
56 return ppress_var($this->tax_options, 'tax_rates', []);
57 }
58
59 public function get_eu_countries()
60 {
61 return array_keys(TaxService::init()->get_eu_vat_rates());
62 }
63
64 public function is_eu_countries($country)
65 {
66 return in_array($country, $this->get_eu_countries(), true);
67 }
68
69 public function get_eu_vat_rates()
70 {
71 static $cache = null;
72
73 if (is_null($cache)) {
74
75 $rates = file_get_contents(PROFILEPRESS_SRC . 'eu-vat-rates.json');
76
77 if ( ! $rates) return [];
78
79 $rates = json_decode($rates, true);
80
81 unset($rates['GB']);
82
83 $cache = $rates;
84 }
85
86 return $cache;
87 }
88
89 public function get_fallback_tax_rate()
90 {
91 return ppress_var($this->tax_options, 'fallback_tax_rate');
92 }
93
94 public function get_vat_number_field_label($default = '')
95 {
96 return ppress_var($this->tax_options, 'eu_vat_number_label', $default, true);
97 }
98
99 /**
100 * @param $country
101 * @param $state
102 *
103 * @return float|int|string
104 */
105 public function get_country_tax_rate($country, $state = '')
106 {
107 $rate = self::get_fallback_tax_rate();
108
109 // get eu rate if found
110 if (self::is_eu_vat_enabled() && in_array($country, self::get_eu_countries(), true)) {
111 $rate = ppress_var(self::get_eu_vat_rates(), $country);
112 }
113
114 // get global country rate to override eu rate where possible
115 $result = wp_list_filter(self::get_tax_rates(), ['country' => $country, 'global' => '1']);
116
117 // if state is specified, find state specific rate and override global country rate where possible
118 if ( ! empty($state)) {
119 $result2 = wp_list_filter(self::get_tax_rates(), ['country' => $country, 'state' => $state, 'global' => '0']);
120 if ( ! empty($result2)) $result = $result2;
121 }
122
123 if ( ! empty($result)) {
124 $rate = ppress_var(reset($result), 'rate');
125 }
126
127 if ( ! is_numeric($rate)) $rate = 0;
128
129 return $rate;
130 }
131
132 public function is_reverse_charged($order_id)
133 {
134 $order_data = OrderFactory::fromId($order_id);
135
136 return $order_data->get_meta($order_data::EU_VAT_IS_REVERSE_CHARGED) == 'true';
137 }
138
139 /**
140 * @return self
141 */
142 public static function init()
143 {
144 static $instance = null;
145
146 if (is_null($instance)) {
147 $instance = new self();
148 }
149
150 return $instance;
151 }
152 }